本节书摘来自华章计算机《区块链开发指南》一书中的第2章,第2.1节,作者:申屠青春 主编 宋 波 张 鹏 汪晓明 季宙栋 左川民 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第2章 区块链进阶 2.1 外带数据
区块链的外带数据是指那些保存在区块链上但不进行货币交易的信息,比如需要永久保存的信息,前面提到过存在于区块链上的每一笔交易都有一个输入和输出,区块链的外带数据也是采用类似的方式来存储的。
如果有在比特币上永久存储数据的需求,那么你目前有两种选择,即:“OP_RETURN”和“Multi-Signatures”。OP_RETURN是指在每个交易的公钥脚本中嵌入OP_RETURN操作码,之后放置外带数据;Multi-Signatures则是指在建立多签地址时,使用空白签名区域来放置数据。此类外带数据的方法旨在让编程者更简单地将数据编码到交易中,同时又不会影响到比特币区块链的功能,目前非常流行,在Omni、Open Assets、Blockstack和Factom等的区块链上都有应用。
2.1.1 OP_RETURN外带数据
2013年,比特币协议中引进了一项新功能,即:创建一种名为OP_RETURN的交易,可以嵌入40字节小段数据(目前已经是80字节长)。最初,这个功能旨在把情境信息加入比特币交易里,比如配送信息等。后来,发展出了更具创造性的用法,即创造最小量的交易(0.00000001 BTC加上交易费),并且可嵌入任何你想放进去的信息。
比如交易号:
495926f46e3aae80088919f363b3b6ff52116e28637b63eb2a681b1fb990d2e4
所对应的交易输出为OP_RETURN类型,那么它的输出脚本则为:
OP_RETURN 4343020549a5710049a57190
利用这个功能的第一个有趣的应用就是存在性证明(Proof Of Existence),它可以为任何文件创建一个Hash,并且可以放入区块链中,这点不同于其他所有文件的身份认证ID。之后,通过比较区块链里的Hash和你手头文件的Hash,就可以用那个交易的时间戳和存储在其中的Hash,来证明那个时点上某个文件是确实存在的。只要二者匹配,就有了证明。
值得注意的是,只能在该交易中输出很小金额的比特币,如0.00005,因为输出到OP_RETURN中的比特币是无法被再次使用的。
2.1.2 Multi-Signatures外带数据
多签名地址是另外一种外带数据的方法。例如,对于1-of-2型的多签名地址,我们在建立该地址时,提供的第一个公钥是发送者的,因而输出金额可以赎回;而第二个公钥是空白的,因而该空间可以用来存储外带数据。对数据的要求则是:前缀是数据的长度,后面是用0来充值的无数据区域。
该交易的输出脚本为:
1 <0> 2 OP_CHECKMULTISIGN
这里的<0>区域可用于存储外带数据,该输出金额一样可以被花费。如果要存储更多数据,则可采用1-of-3或1-of-5型的多签地址。