铸币交易/币基交易(3)

 

币基数据

铸币交易没有解锁脚本(scriptSig)字段。相反,这个字段被替换为币基数据,长度限定在2到100字节之间。除了前面几个字节,币基数据的剩余部分可被矿工用于其自主的任何用途,填充任意数据。

举例来说,在创世区块中,中本聪在币基数据中加了这段话:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”(《泰晤士报》,2009年1月3日,财政大臣正处于实施第二轮银行紧急援助的边缘)用以证明比特币的发明日期并传达一条信息。当前,矿工们通常使用币基数据包含额外的随机数,并附上标识其矿池信息的字符串,我们将在接下来的几个章节继续讨论。

币基的前几个字节曾经也是可以任意安排的,但是现在不再这样了。依据比特币改进提案34号(BIP0034),版本2区块(版本字段设置为2的区块)必须在币基字段的最前面附加区块高度索引,作为脚本的“压栈”操作。

在区块277316中,我们看到币基(参看例8-4),也就是交易输入的“解锁脚本”或scriptSig字段,包含一段十六进制数据03443b0403858402062f503253482f。我们将其解码,看看其内容。

第1个字节,03,指示脚本执行引擎将后续3个字节压入脚本堆栈中(参见附录A表A.1)。接下来的3个字节,0x443b04,以小字节序(little endian)格式编码的区块高度。将其字节序翻转,结果就是0x043b44,对应的十进制就是277316。

紧接着的几个十六进制数字(03858402062)用于编码额外随机数(参看本章中“扩展随机数方案”),以用于找到合适的工作量证明的解。

最后部分(2f503253482f)是ASCII编码的字符串(“/P2SH/”),提示本区块的挖矿节点支持BIP0016定义的“支付到脚本哈希(P2SH)”。P2SH能力引入的时候曾要求矿工“投票”,从BIP0016和BIP0017中间选择一个。那些选择了BIP0016实现的矿工会将“/P2SH/”加进币基数据,而那些选择了BIP0017的P2SH实现的矿工则在币基数据中加入字符串“p2sh/CHV”。最终BIP0016成了赢家,但是很多矿工依然将字符串/P2SH/加入币基中,表明其支持这个特性的态度。

例8-6使用libbitcoin库(参见第3章“替代客户端、库、工具集”)从创世区块中提取币基数据,并显示中本聪在区块中留下的信息。需要注意的是,libbitcoin内嵌了创世区块的静态复制,所以示例代码可以直接从库中提取创世区块。

例8-6 从创世区块提取币基数据

blob.png

使用GNU C++编译这段代码,运行所生成的可执行程序,结果如例8-7所示。

例8-7 编译运行satoshi-words示例代码

blob.png

相关知识阅读:

比特币经济学和货币铸造

比特币共识机制第一步:独立交易验证

868区块链学习网为您整理《铸币交易/币基交易(3)》仅供参考。