首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

比特币交易中的锁是什么?

在比特币交易揭秘 - 交易规则及校验机制文章中,我们了解到交易的校验机制,即,交易完成后,为收币的地址加上一把锁,下一次用此收币地址发币时,需要解锁才能发币。

那么,锁究竟是什么?本篇文章一探究竟。

在了解锁之前,我们需要了解“栈”的概念。

栈,在计算机中,表示一种存储和读取方式,我们可以把栈比作为一个开口的盒子,盒子大小和普通书的大小一致。当我们想把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,那么此笔交易验证失败。

经过上述这样的验证,最终可以验证出这笔交易到底是不是合法的了。

如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。

关注【通俗易懂区块链】,学懂区块链

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180204G0WN9Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券