本系列博文对理论性的东西叙述的不多,主要是以代码为主,本例是模仿比特币实现的一个电子货币记账系统。
虽然不打算介绍理论性的东西,但交易流程还是要说一下的,毕竟所有的代码都是为这个交易流程服务的。
交易流程
当发起一个交易的时候,交易发起方先准备一条“地址a要向地址b转账n个币”的消息,然后用地址a的私钥进行数字签名,用以表明发起方对地址a的所有权,最后再把该消息和签名信息在P2P网络上对其他节点进行广播。
其他节点收到广播后,先对消息的数字签名进行验证,验证通过后再检查余额是否够用。全部验证通过后将该交易记在自己的交易列表上。至此,交易流程结束。
虽然交易流程结束了,但还没有记到区块链上,那怎么记到区块链上呢?挖矿啊。当一个节点找到了一个工作量证明,就将自己记录的交易列表打包记到一个区块上,然后再向所有的节点进行广播,告诉其他人。
其他节点收到区块后,对工作量证明进行验证,验证后将区块挂在区块链上,再将该区块上的交易列表和自己的交易列表进行比对,将自己交易列表中已经在区块上记录的消息删除。
当然,比特币中的交易流程要比这复杂的多,我们只为学习,把流程进行简化了。
程序设计
综上所述,可以看出应该有三个主要模块:数字签名,P2P网络和区块链逻辑。以下是对三个模块的定义:
Cryptography
该类主要用于处理数字签名,编码解码等数学和密码相关功能。