继续记录读比特币白皮书的知识点。
[2. 交易]
We define an electronic coin as a chain of digital signatures.
[译] 我们定义一个电子货币为一串数字签名。
[注] 传统的交易是第三方中心化的平台进行记账,其实就是一个清算。如A用网银从工商银行转账200元给B的农业银行,其实并不会存在工商银行把现金提取出来再存储到农业银行的B的户头上。而是通过一个清算中心进行定期的清算,即记账A减少200元,B增加200元,最后定期(如一个月月底)进行汇总清算,如工商银行最终少了X元,农业银行最终多了Y元,进行划拨。以上是个人理解,可能中间还有描述错误的地方。中间的清算是中国人民银行清算总中心,国际的汇款的清算是国际清算银行。而比特币中的交易并不是这种清算,而确实是有A转移到B,A转移到B是一种记账也是比特币的存储方式。并不会像Q币一样会中心化记录你有多少个币,而是从所有的记录中回溯你有多少没有消费的币,术语为:utso(unspend transaction output)未消费的交易输出。
[问题1] 比特币链上(网络上)只会记录交易,可以视为一个公开的账本,那么UTSO是如何记录的呢?是由每个节点进行对每个地址遍历查找计算来维护的吗?
如果是这样的,那么对于一些轻量级的钱包,其只要维护该地址的UTSO就可以了,因为自己转账给别人的时候,检查自己是否有足够的UTSO。如果别人转账给自己,则通过区块链的抓取,并且确认后就可以认为自己已经收到了比特币。一些钱包还有有查看确认次数的功能来进行查看。
因此,比特币网络上并不需要同步所有人(所有地址的)UTSO,只需要记录所有的交易,这样更像现金,所以,比特币在白皮书中也称为新型的现金系统。这样就可以简化网络结构。并且所有的比特币都是有比特币的链上创造(挖矿),所有也不需要记录初始值(创世区块前各个地址的币,或有其他的地方或链上来的币)。
交易链[注] 关于公钥和私钥:公钥和私钥是成对出现的。并且所有用“公钥”加密的内容只能用“私钥”打开,所有用“私钥”加密的内容只能用“公钥”打开。
比特币的交易(转账)的格式非常简单,要转账到的地址(由Public Key形成)、交易金额。因此,上图中的Owner 0转账给Owner 1,需要Owner 1的Public Key。把转账记录进行哈希最终得到一串数字,这串数字可以进行校验。如Owner 1又想转账给Owner 2,则它需要使用自己的私钥进行签名,这个签名其实是用私钥加密一串内容,这串内容使用公钥解密。解密的内容与前一个与Owner 0交易哈希之后获得的内容是一致的,从而说明Owner 1是拥有这笔比特币的。这样他再把自己的签名放到比特币交易的后面进行连接下去。
[思考] 所以上述的链并不是顺序的,如Owner 2与Owner 3之间还存在着其他的交易。这里只是描述的交易顺序的链条。与真正的区块的链条不一致。如当前时间(比特币的区块高度已经到达了530582),我开始没有比特币,我从A那里获取了比特币这次交易可能在530582中,我可能明天有转账给了B,这笔交易可能在530600区块了。中间的区块是其他人的交易。但从A到我,我到A符合上图的交易的链条。
[数字签名] 证明你认可这笔交易。证明你拥有对应公钥的私钥。如Owner 1转账给Owner 2,交易为交易的信息加上Owner 1的数字签名。如何证明Owner 1有Owner 1对应的公钥(地址)里面的钱的私钥呢?即如何证明我用的是我的钱,而不是随便拿的别人的钱去花呢?或者映射到显示生活中,如何证明我用的是我的信用卡,而不是别人的行用卡?当然需要签名。比特币利也是需要这种数字签名的。Owner 1的签名是:将交易信息进行Hash,把Hash的值使用私钥进行加密,就形成了数字签名。别人如何验证说你的签名是正确的呢?别人用交易信息(交易信息要上链,是公开的)进行Hash,对Owner 1的数字签名用Owner 1的公钥进行解密,就获得了你加密之前的内容,如果这个内容与获得的Hash值是一致的,说明你拥有私钥,你用的是自己的钱。
所以,谁有私钥,谁就拥有了该地址(公钥)对应的比特币。所以,必须要保管好自己的私钥,最好是用笔记录到本子中。不要截图、不要放到邮箱、不要放到微信\QQ中,接触到网络的地方就有被盗的风险。如果金额大,也可以考虑冷钱包。
接下来白皮书又提到了双重支付的问题。双重支付的问题的解决方法是时间戳服务器,接下来继续学习。
网友评论