CoinGeek科技从比特币系统的智能合约中获取区块链数据:第3部分

这篇文章首次被发布在Medium上。

区块头包含了该区块在被创建时的时间戳。但是,我们经常想要获取区块高度,这并不包括在区块头中。我们设计了一种新技术来获取区块高度,它包含在Coinbase交易中。

来自Coinbase交易的区块高度

Coinbase交易是一个区块中的第一笔交易。

[caption id="attachment_473984" align="alignnone" width="572"]screenshot of block header 一个区块中的Coinbase交易[/caption]

BIP34规定区块高度必须是Coinbase交易的解锁脚本中的第一项,如下图所示。

[caption id="attachment_473988" align="alignnone" width="432"]screenshot of a table with binary code 一笔Coinbase交易[/caption]

blockHeight()函数返回一个具有给定区块头的区块的高度,如下图所示。使用我们之前的技术,我们可以在第13行和第16行使用Merkle证明来访问一个给定区块中的交易。我们可以进一步验证它是一笔满足第5至8行的三个约束条件的Coinbase交易。

  • 它正好有一个txin。
  • 这个txin的prevout hash是0x0000…0000。
  • 这个txin的prevout index是0xFFFFFFFF。

一旦我们有了Coinbase交易,我们就从第21行中提取区块高度。

[caption id="attachment_473990" align="alignnone" width="994"]screenshot of blockheight code 区块链合约[/caption]

验证Coinbase的一种替代方案

还有一种使用其Merkle路径来验证一笔交易的方法,那就是Coinbase。由于Coinbase是一个区块中的第一笔交易,其Merkle路径上的所有节点必须位于右侧,如下图所示。

[caption id="attachment_473992" align="alignnone" width="700"]a flowchart 一笔Coinbase交易及其Merkle路径[/caption]

我们可以简单地检查Merkle路径上的所有同层级是否都在右侧。这个代码如下所示:

[caption id="attachment_473997" align="alignnone" width="791"]a screenshot of coinbase code MerklePath合约[/caption]

总结

一旦我们有了区块高度,我们就可以在各种智能合约中使用它。

Coinbase可能包含除区块高度之外的其他信息,如MinerID。它也可以在智能合约中被使用。

我们在下面列出了几个例子:

  • 一个合约只能在一定的区块高度后被解锁,这类似于CheckLockTimeVerify
  • 一份合约,只有在高度为720,000至720,010的区块中至少有一个区块被其挖出的情方的私密低费用交易。

我们期待着您能够在这些技术的基础上制定出各种富有创造性的合约。

请您阅读最新的电子书,BSV区块链作为一种企业网络安全框架

 

您是比特币新手吗?请查看CoinGeek的比特币新手入门栏目,这是了解更多关于(中本聪最初设想的)比特币与区块链的终极资源指南。

更多科技新闻

科技十月 04, 2022
为什么将聊天置于链上?

为什么将聊天置于链上?

随着Bitchat的重新推出,人们自然会问为什么要将聊天信息储存在区块链上。特别是如果聊天信息是纯文本的,并且在账本上是公开的,这种方法对“常人”来说就显得毫无意义。

科技九月 21, 2022
Bitchat继续存在

Bitchat继续存在

Bitchat是对于2019年初_unwriter推出的一款应用程序的复兴。这一次,Bitchat依赖于更加强劲的基础设施与协议,例如即将推出的JungleBus API和比特币Schema协议。