钱包模型设计
前面几篇内容讨论了常用的Java加密解密的算法,大部分在简单比特币的系统实现中会用到。下面讲一下比特币的钱包模型设计。
注意:钱包的模型只包含用户名密码(公钥和私钥),余额等内容都在交易账本中记录,后面会详细讲交易模型!!!
前面用支付宝类比过比特币,支付宝账号有用户名密码,比特币账号也有用户名密码。可以简单理解为,比特币的账号密码就是公钥私钥。关于钱包有以下几种业务:
1、对于正常创建钱包时,需要包含公钥私钥
2、对于老用户需要向其转账时,其它用户只需要获取其只包含公钥的钱包对象
3、钱包的地址不能使用公钥原文,长度不合适,可以使用前面介绍过的哈希算法哈希成固定的长度
代码实现
首先建立一个钱包实体类:
实体类里面只有两个属性,公钥和私钥:
获取钱包,正常定义包含公钥私钥的钱包的情况:
获取钱包的另一种情况,只包含公钥的钱包:
再来看获取钱包地址的方法:
通过上面的方法,所有的钱包都能获取一个比较短的长度一致的钱包地址,而且从地址看不出用户的任何信息,这一点与支付宝有本质的区别。
测试
这样一个简单的钱包模型就设计完成了,写一个测试方法,检查生成的钱包和地址:
测试结果如下:
可以看到,成功生成了一个钱包,成功获取了钱包的地址。钱包地址本身经过编码,没有任何个人明显的信息,也很难记忆,所以很安全。在实际的比特币软件中,钱包地址的生成比上面的逻辑复杂得多,但是道理上类似,此处为了简单,只用了sha256对地址进行编码。