为了账号安全,请及时绑定邮箱和手机立即绑定

一分钟读书俱乐部(四十二):《区块链技术驱动金融》执行一个脚本

标签:
区块链

原文精选:在堆栈语言里执行一个脚本,我们只需要一个堆栈来垒积数据,不需要分配任何内存与变量。因此,堆栈语言中计算相当容易。总共有两类指令:数据指令和工作码指令。数据指令的作用是把数据推到堆栈的最上面;工作码指令则通常是用堆栈顶部的数据作为输入值,用来计算一个函数。


我们现在来一起看一下,图3.5这段脚本是怎么执行的。图3.6给我们展示了每一条指令执行后的堆栈状态。脚本中的前两条指令属于数据指令,分别是输入脚本(包含在交易的输入项)中的签名和用来验证签名的公钥。我们前面提到过,一看到数据指令,系统就把它堆到堆栈最上面。后面几个指令是输出脚本(包含在上一交易的输出项中)里的指令。


读书笔记:

1,堆栈语言总共有两类指令:数据指令和工作码指令。

2,数据指令的作用是把数据推到堆栈的最上面;工作码指令则通常是用堆栈顶部的数据作为输入值,用来计算一个函数。


原文精选:首先,我们复制指令OP_DUP,这一步仅仅是将堆栈最上层的公钥复制,并置于堆栈最上层;下一个指令是OP_HASH160,该指令取得堆栈最上层的数据,并计算其哈希值,然后将结果再堆到堆栈最上层。当指令执行完成后,我们将堆栈最上层的公钥替换成了公钥的哈希值。


webp


接下来,我们还要在堆栈顶层再推送一些数据:此笔交易发送者指定的公钥的哈希值,以及对应的私钥,这样才可完成签名,取得资金。此时,堆栈顶部有两个数值,一个是发送者指定的公钥的哈希值,另一个是接收者想要取得资金时提交的公钥的哈希值。


这个时候,我们就要执行EQUALVERIFY命令了,这个命令是用来检查堆栈顶部两个数值是否相等的。如果不相等,就会抛出一个失败信号,并且停止执行脚本。不过现在我们假设其相等,也就代表着接收者使用的是正确的公钥。这条指令会移除堆栈顶部的两条数据,这时,堆栈还剩下两个数据:公钥以及签名。


读书笔记:

1,复制指令OP_DUP,下一个指令是OP_HASH160,该指令取得堆栈最上层的数据,并计算其哈希值,然后将结果再堆到堆栈最上层。

2,在堆栈顶层再推送此笔交易发送者指定的公钥的哈希值,以及对应的私钥,这样就可完成签名,取得资金。

3,执行EQUALVERIFY命令,用来检查堆栈顶部两个数值是否相等的。

4,EQUALVERIFY命令会移除堆栈顶部的两条数据,这时,堆栈还剩下两个数据:公钥以及签名。


原文精选:我们已经证实接收者使用的公钥确实就是交易里指定的公钥,但现在我们必须证实这个签名是真的。这时,使用OP_CHECKSIG指令即可。这里我们可以看出比特币的脚本语言虽然简单,但很强大。它只用“OP_CHECKSIG”就能实现一个很复杂的事情:移除堆栈里两个数值,然后用公钥来证实整个交易的签名是真的。


但这里的签名究竟是对什么的签名? 签名函数的输入是什么? 实际上,在比特币中,我们只可以对一个事情进行签名——就是整个交易。所以,CHECKSIG指令从堆栈中取出两个数据(公钥以及签名),并验证签名对于整个交易(使用对应公钥发起的交易)来说是有效的。现在我们完成了所有的指令,堆栈里面什么也不剩。假设没有碰到任何差错的话,这个脚本的输出就是一个“真”表示这个交易是正当有效的。


读书笔记:

1,使用“OP_CHECKSIG”来移除堆栈里两个数值,然后用公钥来证实整个交易的签名是真的。

2,在比特币中,只可以对一个事情进行签名—就是整个交易。

3,CHECKSIG指令从堆栈中取出两个数据(公钥以及签名),并验证签名对于整个交易(使用对应公钥发起的交易)来说是有效的。


一叶之秋带你一分钟速读经典书籍,每天一分钟(只需阅读读书笔记部分),天天获新知。




作者:全职高手一叶之秋
链接:https://www.jianshu.com/p/ce9082253536


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消