1703865410
1703865411
当然,实际中也会使用一些其他指令,比如MULTISIG,还有一种支付给脚本的哈希值(Pay-to-script-hash,简称P2SH,我们很快会谈到)等,但除此之外,平时常用的指令真不多,因为每个节点都有一份标准脚本的白名单,它们会拒绝接受不在名单上的脚本。这倒不是说无法运行其他脚本,只是使用起来比较麻烦。事实上这样的安排也很巧妙,我们会在谈论比特币点对点网络的时候再进行描述。
1703865412
1703865413
销毁证明
1703865414
1703865415
销毁证明(proof of burn)脚本,用于销毁比特币(即防止资金被赎回)。如果交易代码的运行结果是将比特币转到“销毁证明”脚本,那么这笔比特币将被销毁。实际应用中主要是用来引导客户使用其他数字货币系统,即将比特币销毁,以便获得另一个数字货币系统发行的新币。我们会在第10章展开叙述。销毁证明脚本使用起来非常简便:使用OP_RETURN脚本来抛出错误;不论之前指令的运行结果是什么,OP_RETURN指令总会被执行,并相应抛出一个错误,脚本返回一个“错误”(false)值。
1703865416
1703865417
由于OP_RETURN以抛出错误的形式结束脚本,其后的所有指令都不会执行。利用这个特性,我们可以往脚本中植入任意信息,这些信息也将被存储在区块链中。假如你想通过署名或者盖时间戳的方式来证明你在某个时候知道某件事情,就可以发起一笔极小额的比特币交易,在脚本中加入上述信息,并使用销毁证明脚本将币销毁,这样就可以将信息永久地存储在区块链上。
1703865418
1703865419
支付给脚本的哈希值
1703865420
1703865421
如前文所述,比特币的工作机制要求币的发送者必须在交易时明确指定脚本。这种机制有时候不太适用:假如你在网店看中了一件商品并打算下单,你会问卖家“请把付款地址告诉我,我可以付款了”,但如果卖家使用了多重签名地址(MULTISIG),那他会说“嘿,我们用了多重签名地址,你需要支付给一个脚本地址,而不是一个简单的地址”,但你会说“我不知道怎么弄,这太复杂了,我只会支付给简单的地址”。
1703865422
1703865423
比特币用了一种很聪明的办法来解决这个问题,不仅可以实现多重签名地址支付,而且还可以实现复杂的资金监管规则。比特币使用的办法是:收款方告诉付款方“请把比特币支付给某个脚本地址,脚本的哈希值是××,在取款的时候,我会提供上述哈希值对应的脚本,同时,提供数据通过脚本的验证”,而不是“请把比特币支付给某个公钥,公钥的哈希值是××”。付款方通过P2SH即可实现上述交易。
1703865424
1703865425
需要说明的是,P2SH脚本只是对堆栈最顶层的数据进行哈希运算,核验运算结果是否与给定的哈希值一致,核验通过后,再执行一步特殊的核验:将堆栈最顶层的数据重新解读为一系列指令,然后将其作为脚本运行一次,此时,堆栈中的其他数据作为脚本的输入值。
1703865426
1703865427
要做到P2SH还是有点复杂的,因为P2SH不是比特币的原始设计,是后来加上去的。它解决了两个重要的问题:让付款方的支付工作简单化,收款方只需告诉付款方一个哈希值即可。在我们上面的例子中,你不再需要去关心商家到底用哪种地址,是否用了多重签名,因为这只是商家在支取这笔款项时需要考虑的事情。
1703865428
1703865429
P2SH还实现了效率上的提升:矿工的工作是追踪那些还没有被消费掉的输出脚本。采用P2SH的输出脚本会变得很小——它们只不过是个哈希值而已。所有的复杂性都被放在输入脚本中了。
1703865430
1703865431
[1]图灵是第二次世界大战时英国数学家,密码学家。他破译了纳粹的密码机“谜”,为盟军取得第二次世界大战胜利做出重大贡献,美国好莱坞以此题材拍了一部电影《模仿游戏》。图灵完备的意思是语言有能力随意地执行强大的函数。——译者注
1703865432
1703865433
1703865434
1703865435
1703865437
区块链技术驱动金融:数字货币与智能合约技术 3.3 比特币脚本的应用
1703865438
1703865439
现在我们已经明白了比特币脚本的工作机制,接下来我们看一下比特币脚本语言的一些强大应用。你立刻就能明白,比特币将指定公钥变成复杂地指定脚本,是有实际意义的。
1703865440
1703865441
第三方支付交易
1703865442
1703865443
比如,爱丽丝用比特币向鲍勃买东西,爱丽丝想货到付款,而鲍勃想见款发货。该如何处理?一个好的办法是使用第三方支付交易(escrow transaction)。
1703865444
1703865445
第三方支付交易可以用“MULTISIG”(多重签名)来轻易实现。爱丽丝并不直接付款给鲍勃,而是发起一个多重签名的交易,并规定:三个人中有两人签名之后,资金才能被支取。这三个人是爱丽丝、鲍勃与第三方仲裁员朱迪(Judy)。朱迪负责调解可能发生的纠纷。因此,爱丽丝发起了一个2/3的多重签名交易来付款,这个交易规定三个人中有两人签名之后,资金才能被支取。这个交易被纳入区块链后,资金被第三方监管,这三个人中的任意两个人可以决定资金的去向。现在,鲍勃觉得可以给爱丽丝发货了,通常情况下,如果爱丽丝和鲍勃都是有诚信的,鲍勃会按照爱丽丝要求发货,爱丽丝收货之后和鲍勃共同签名,把资金转给鲍勃。由于三个人中有两人签名即可完成支付,此时,由于没有任何争议,朱迪根本不需要参与。和爱丽丝直接付款给鲍勃相比,第三方支付交易并不会更复杂,只需在区块链里增加一笔交易即可。
1703865446
1703865447
但如果鲍勃其实并未发货,或者货物在路上被弄丢了,又或者鲍勃发的货物并不是爱丽丝想要的,这时会出现什么情况?爱丽丝觉得被骗了,所以不打算付款给鲍勃,而是想把比特币从监管账户要回来。这种情况下,爱丽丝不会签名真正完成付款,而鲍勃肯定也不会承认问题而主动放弃收款,这时,就需要朱迪判定资金到底该转给谁。如果朱迪认为鲍勃欺骗爱丽丝,她就会跟爱丽丝一起签名,把比特币退还给爱丽丝,当然,如果她认为爱丽丝应该付款,那她就会和鲍勃一起签名,完成资金的实际支付;所以,到底该完成支付或是撤销支付,由朱迪决定。当然,这种情况也只有在发生纠纷时才出现。
1703865448
1703865449
绿色地址
1703865450
1703865451
另外一个很酷的应用叫作绿色地址(green addresses)。假如爱丽丝要转账给鲍勃,而鲍勃不在线(或者鲍勃在线但没有时间),所以他无法通过查看区块链的更新来确认转账是否完成。一般来说,一个交易需要获得6次确认,我们才能确信它已经确实被加到区块链中,但这需要大约一个小时。但是,想象一下,如果爱丽丝只是在鲍勃的店里买一个热狗,这么长时间才确认交易,显然是不可接受的;或者,如果鲍勃由于某些原因无法接入互联网,那他就一直无法确认交易。
1703865452
1703865453
为了解决这个问题,比特币采用了第三方银行的做法,实际上,“银行”可能是一个交易所,或者是其他的金融媒介。如果爱丽丝要转账给鲍勃,爱丽丝会和她的银行联系,“我要付给鲍勃这些币,你能办理吗?”银行会回答:“好的。我会从你的账号扣钱,然后从我的绿色地址转账给鲍勃。”这样,收款人就不需要实时查看区块链来确认交易。
1703865454
1703865455
需要注意的是,款项并不是由银行直接支付给鲍勃,实际上,部分款项,可能会通过其他地址回到银行手中。但是,由于比特币从银行控制的某个账户——我们在此所称的“绿色账户”直接转给鲍勃,而且,银行保证它不会双重支持这个比特币,如果鲍勃也相信这一点,当他看到银行签名的交易时,就可以确认自己迟早会收到这些比特币——只要区块链确认这笔交易。
1703865456
1703865457
请注意,这不是比特币技术系统的保证,而是现实世界中银行的保证,银行为了保护它的声誉,不会双重支持比特币。银行可以向客户证明,“我一直使用这个账户来支付,从始至终也没有发生过双重支付,我以前没有这么做,以后也不会这么做。”如果鲍勃信任银行不会进行双重支付的承诺,他就无须信任爱丽丝——他对爱丽丝本来就了解不多。
1703865458
1703865459
当然,如果银行出现了双重支付事件,它就会自毁长城,人们不会再信任它。实际上,有两个提供绿色地址的机构[Instawallet和门头沟公司(Mt.Gox的昵称,位于日本东京,是全球最大的比特币交易商)]就是由于失信而倒闭的。目前,绿色地址使用得越来越少:最初,人们认为绿色地址可以实现快速支付,而且不需要通过查看区块链来确认交易结果;但是现在,人们认为,对“银行”过分信任是有风险的。
[
上一页 ]
[ :1.70386541e+09 ]
[
下一页 ]