network

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

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

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

来自Coinbase交易的区块高度

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

screenshot of block header
一个区块中的Coinbase交易

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

screenshot of a table with binary code
一笔Coinbase交易

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

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

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

screenshot of blockheight code
区块链合约

验证Coinbase的一种替代方案

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

a flowchart
一笔Coinbase交易及其Merkle路径

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

a screenshot of coinbase code
MerklePath合约

总结

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

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

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

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

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

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

 

202024日的“创世”协议升级是比特币历史上的一大里程碑,将见证BSV最大程度地回归到中本聪原先设想的协议。请访问“创世”硬分叉页面以了解更多信息。

要直接在您的收件箱接获CoinGeek.com最新消息,CoinGeek会议特别优惠以及其他内部信息,请加入我们的邮件列表

[id^="_form"]
[id^="_form"]
[id$="_submit"]
[id$="_submit"]
[^;]
[^;]
[?&]
[?&]
[^&#]
[^&#]
[(d+)]
[(d+)]
[elem.name]
[elem.name]
[+_a-z0-9-'&=]
[+_a-z0-9-'&=]
[+_a-z0-9-']
[+_a-z0-9-']
[a-z0-9-]
[a-z0-9-]
[a-z]
[a-z]
[el.name]
[el.name]
[id^="_form"]
[id^="_form"]
[id$="_submit"]
[id$="_submit"]
[^;]
[^;]
[?&]
[?&]
[^&#]
[^&#]
[(d+)]
[(d+)]
[elem.name]
[elem.name]
[+_a-z0-9-'&=]
[+_a-z0-9-'&=]
[+_a-z0-9-']
[+_a-z0-9-']
[a-z0-9-]
[a-z0-9-]
[a-z]
[a-z]
[el.name]
[el.name]