『学概念找员外』执行一个脚本

作者: 刘员外__ | 来源:发表于2019-04-07 11:51 被阅读0次

说到脚本有一个关键词是一定要提到的,那就是堆栈。不过至于什么是堆栈,因篇幅过长,员外就不在这儿赘述了,感兴趣的朋友可以自行谷歌。

在堆栈语言里执行一个脚本,只需要一个堆栈来垒积数据,不需要分配任何内存与变量,因此,堆栈语言中的计算和理解这门语言会相当容易。总共有两类指令:数据指令和工作码指令。数据指令的作用是把数据推到堆栈的最上面;工作码指令则通常是用堆栈顶部的数据作为输入值,用来计算一个函数,也就是用代码做了一件事情。

在上一篇中提到了一小段代码,如下:

<sig>
<pubKey>
------------------
OP_DUP
OP_HASH160
<pubKeyHash?>
OP_EQUALVERIFY
OP_CHECKSIG

然后员外就这段代码来说一下是如何执行的,我们来看图说话,在图中展示了每一条指令执行后的堆栈状态。脚本中的前两条指令属于数据指令,分别是输入脚本中的签名和用来验证签名的公钥。上面员外说过,一看到数据指令,系统就把它堆到堆栈最上面。后面几个指令是输出脚本里的指令。

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

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

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

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

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

相关文章

  • 『学概念找员外』执行一个脚本

    说到脚本有一个关键词是一定要提到的,那就是堆栈。不过至于什么是堆栈,因篇幅过长,员外就不在这儿赘述了,感兴趣的朋友...

  • 『学概念找员外』比特币脚本

    作为一个程序员,经常遇到的一个问题就是已经上线的系统总是会出现各种各样的莫名其妙的问题,有些问题能提前规避,但是总...

  • 『学概念找员外』菩提预测市场的应用场景

    往期回顾: 『学概念找员外』预测市场-菩提(一)『学概念找员外』预测市场-菩提(二) 金融工具 说到可以预测未来,...

  • 『学概念找员外』员外竞选县代表

    员外的县里上又开始了新一轮的人大选举,县长为了防止部分人大滥用职权、中饱私囊、不为广大的人民群众办实事,所以最后决...

  • 『学概念找员外』员外钱包被偷

    今天员外正房生日,员外心想正房为他前前后后操劳多年,想风风光光的为正房过一个生日,于是招呼全家老小,一起去县里最大...

  • 『学概念找员外』原子互换

    接着写跨链技术中的遗漏部分,以下是往期文章:侧链的存在逻辑侧链的利弊跨链技术解决了什么问题?哈希时间锁定协议(一)...

  • 『学概念找员外』钱包分类

    上一篇介绍了钱包有冷热之分之外,这一篇接着介绍钱包的轻重之分。如果您对钱包到底实现了什么功能、解决了什么问题还有疑...

  • 『学概念找员外』哈希指针

    在了解了哈希函数的三个特性极其用途之后,我们就该开始学习实际中的使用了。提到区块链就不得不说这个防篡改技术,也就是...

  • 『学概念找员外』高飞币

    高飞币(GoofyCoin),因此币的创造者叫高飞,所以称之为高飞币。这个币大部分人应该都没有听过,就像是个实验室...

  • 『学概念找员外』隐性共识

    比特币系统的核心理念 之前我们说过比特币中的每个节点并没有一个稳定的、长期的身份,这一点也是与传统分布式共识算法的...

网友评论

    本文标题:『学概念找员外』执行一个脚本

    本文链接:https://www.haomeiwen.com/subject/xnszdqtx.html