在比特币交易揭秘 - 交易规则及校验机制文章中,我们了解到交易的校验机制,即,交易完成后,为收币的地址加上一把锁,下一次用此收币地址发币时,需要解锁才能发币。
那么,锁究竟是什么?本篇文章一探究竟。
在了解锁之前,我们需要了解“栈”的概念。
栈,在计算机中,表示一种存储和读取方式,我们可以把栈比作为一个开口的盒子,盒子大小和普通书的大小一致。当我们想把4本书放入盒子时,我们需要一本本放:先放书1,再放书2、书3、书4。此时书1在最下面,书4在最上面,如果此时想把书1拿出来,我们不可能直接拿到,因为书1被其他书压着,我们需要先将书4拿出来,再把书3、书2取出来,最后才能把书1取出来。
大致的流程如下图所示:
1)书一本本放入盒子:
2)想取第一本书出来,需要一本本拿出,最后才能把书1取出来:
总结来说,栈就是一种存储规则,先放进去的内容,最后才能出来,所以栈的特点是“先进后出”。
好了,我们开始聊“锁”。
锁是一种规则,是基于栈的规则之上,告诉程序应该如何如何操作,最终才能把锁解开的一种规则。一个普通的锁的结构是这样的:
OP_DUPOP_HASH160HASHDATAOP_EQUALVERIFYOP_CHECKSIG
上面的乱码比较难以理解,简单解释如下:
OP_DUP:复制最上面的内容
OP_HASH160:复制完之后对它哈希加密
HASHDATA:将哈希数据放到盒子里
OP_EQUALVERIFY:取出盒子里两个内容并作比较
OP_CHECKSIG:取出盒子里最上面两个内容并带入规定的公式里做匹配
锁,其实就是对于栈的一些操作。这部分需要场景化理解,为了便于理解,待了解解锁的内容后,一并叙述。
上文了解过,上一笔交易中会给收币地址加锁,下次用此收币地址发起交易时,交易发起者需要在将要发起的交易中添加解锁工具,使得系统能校验出即将发币的地址确实是币持有者发起的。解锁格式如下:
私钥签名公钥
当矿工开始用程序验证交易时,他先将下一笔交易中的解锁内容存入“栈”中:
接着,矿工将发币地址在上一笔交易中作为收币地址时所加上的锁找到,并将锁的内容代入到这个“栈”中:
首先是OP_DUP,即复制最上面的内容:
然后是OP_HASH160,即取出最上面的内容,对它哈希加密,然后放入盒子:
接着是HASHDATA,即将锁中之前存储的哈希数据放到盒子里:
接着是OP_EQUALVERIFY,即取出盒子里两个内容并作比较:
比较后发现如果不相等,则停止比较,并得出结论:这笔交易发起者提供的公钥有问题,不能被验证通过。
比较后如果相等,则继续执行OP_CHECKSIG,即取出盒子里最上面两个内容并带入规定的公式里做匹配:
负责验证的公式,是一种椭圆曲线算法公式,内容比较复杂,简单理解为,将公钥和私钥签名代入到这个算法中,计算结果如果是true,那么此笔交易验证通过;计算结果如果是false,那么此笔交易验证失败。
经过上述这样的验证,最终可以验证出这笔交易到底是不是合法的了。
如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。
关注【通俗易懂区块链】,学懂区块链
领取专属 10元无门槛券
私享最新 技术干货