首页
下载应用
提交文章
关于我们
🔥 热搜 🔥
1
上海
2
习近平
3
新疆
4
鄂州父女瓜
5
乌鲁木齐
6
疫情
7
H工口小学生赛高
8
习明泽
9
芊川一笑图包
10
印尼排华
分类
社会
娱乐
国际
人权
科技
经济
其它
首页
下载应用
提交文章
关于我们
🔥
热搜
🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
”FAN某”的离婚财产分割判决书(全文)
”FAN某”的离婚财产分割判决书(全文)
公益慈善|“翼行天下 一生守护”慈善项目捐赠仪式圆满举行!
何炅突然高调官宣喜讯,网友恭喜:30年了,终于等到这一天!
哈里斯女粉搞4B运动、毒杀丈夫,回旋镖能否让美国“血流成河”
生成图片,分享到微信朋友圈
2023年1月30日
2023年2月21日
2023年2月22日
2023年2月22日
2023年2月23日
2023年2月23日
2023年2月24日
2023年2月24日
2023年2月25日
2023年2月25日
2023年2月26日
2023年2月26日
2023年2月27日
2023年2月27日
2023年2月28日
查看原文
其他
比特币史话·72 | 智能合约(7): 多重签名
Original
刘教链
刘教链
2023-01-30
收录于合集 #史话
102个
(图片来源于网络)
前情回顾:
比特币史话·67 | 智能合约(2): 合约并不智能
比特币史话·68 | 智能合约(3): 同性恋之死
比特币史话·69 | 智能合约(4): 图灵完全吗?
比特币史话·70 | 智能合约(5): 停机问题
比特币史话·71 | 智能合约(6): 逆波兰式
正文:
有了比特币脚本的设计,我们就可以很容易实现中本聪在2008年比特币白皮书中所说的“常规的担保支付(escrow)机制很容易实现来保护买家(支付比特币的一方)”[1]。中本聪本人也亲自在2010年8月7日名为“担保支付(Escrow)”的论坛帖子里[2]对此进行了阐述:
“这是在软件中实现担保支付交易的概述。这还没有实现,我可能没时间很快实现它,只是让大家知道什么是可行的。”
“
简易
担保支付
:买家支付到担保方(escrow)。卖家收到一笔交易,但钱在担保方手里,他不能花费这笔钱,除非买家同意解锁它。买家可以在随后的任意时间解锁这笔支付,但也可以永远不解锁。这不会让买家拿回这笔钱,但除了永不解锁之外,也不会给他一个烧掉这笔钱的选项。卖家可以有一个选项退还这笔钱给买家。”
听起来这个基本逻辑和支付宝的担保支付非常相似。只是,与支付宝需要把待支付的钱交给支付宝这个“受信任的第三方”不同,比特币实现担保支付不需要把资金托管给任何受信任第三方,只需要用比特币脚本就可以完成。方法也很简单,就是使用“
多重签名脚本
”,类似下面这样:
锁定脚本
:
2 买家的公钥 卖家的公钥 2 检查多重签名(OP_CHECKMULTISIG)
解锁脚本
:
买家的签名 卖家的签名
(注:解锁脚本实际上还需要在开头加一个零操作符 OP_0,这是由于检查多重签名指令的一个小bug导致的,但是由于区块链的特点,既有实现不易改变,故而保留至今。)
锁定脚本中的第二个“2”表示一共有两个公钥,而第一个“2”表示至少需要提供2个与公钥匹配的签名才能动用这个硬币(UTXO)。
这样,一旦买家把这笔比特币用上述的锁定脚本支付出来,就需要双方共同签名才能决定是把这笔钱再转账给卖家(正常交易)还是退还给买家(交易失败)。无论是买家还是卖家,谁也不能单方面支配这笔钱。
中本聪继续写道,“尽管这样的系统不能避免双方的损失,但是至少可以拿掉作弊的获利。”“如果卖家不发货,他就不会拿到钱。买家可能仍然拿不回来钱,但是至少卖家没有金钱方面的动机不退钱给买家。”“买家不能从支付失败中获利。他不能拿回担保中的钱。他也不能以资金不足为理由而不支付。卖家能够看到担保中的资金,承诺给了他的公钥,而且不能被擅自发送给其他人。”
中本聪在8月11日又补充道,“这让它听起来似乎有些让人摸不着头脑,好像是各方即使希望合作,也无法两清。”“当你提前付款时,你也不能把它拿回来。消费者似乎对此感到心安理得。现在的这个方案不会比它差。”“任何一方都可以选择把钱放行给另外一方。”
“
提前付款
:客户损失,小偷得钱。
简易担保
:客户损失,但是小偷也拿不到钱。”
他甚至反问了一句,“难道大家是说提前付款更好些,因为至少小偷得到钱了,至少某些人得到比特币了?”
“想象有人偷了你的东西。你无法将其拿回来,但是如果它具有可以远程触发的毁灭开关,如果你可以这么做,你会这么做吗?让小偷知道你所有的一切都有毁灭开关,如果他们偷了你的东西,这对他们也是无用的,尽管您仍然会丢失它吗?如果他们把币还回来,你可以重新激活它。”“想象一下,如果金在被盗时会变成铅。如果小偷还了回来,它会再次变成黄金。”
同时,中本聪还从博弈论的角度回应了一些质疑的声音。他写道,“现在,一个经济学家会讲说,一个欺诈的卖家可以开始谈判,比如像「放款,我将一半币退还给你」,但是到那一刻,信任就太少了,以至于那样的谈判不太可能发生。如果欺诈者已经食言而肥在先,那么究竟凭什么相信他会信守承诺把一半币退还给你呢?我认为对于不大不小的金额,几乎每个人都会仅仅出于原则而予以拒绝。”
“在我看来,问题可能出在表达方式上。首先,出于探讨
博弈论
的目的,不应该对于「烧钱」的说法如此口无遮拦。这笔钱从未真正烧掉。你永远可以在任何时间选择将其放行。”
从中本聪的行文中我们可以知道,他显然是对于博弈论(game theory)有所了解的。
在2010年9月26日的论坛帖子中,中本聪又对此方案总结道,“这绝对比没有担保的直接付款要更安全,但是没有人工仲裁的担保支付那么好,假如你足够信任人类的话。”“在这种担保中,一个作弊者无法获利,但你仍然有可能损失。它至少消除了欺骗你的获利动机。卖家可以获得钱已经预备就位的保证,而买家则通过未完成交易则不付款来保留对卖家的影响力。”[3]
事实上,我们可以对中本聪给出的方案稍作改进,允许交易双方在出现争议时引入第三人仲裁,避免僵局,那么可以很方便地扩展脚本:
锁定脚本
:
2 买家的公钥 卖家的公钥 仲裁者的公钥 3 检查多重签名(OP_CHECKMULTISIG)
解锁脚本
:
签名1 签名2
(买家、卖家、仲裁者任意两方的签名均可)
这样一来,当买卖双方正常交易时,仲裁者无需做任何事情。只有当双方出现争议时,请仲裁者进行仲裁,然后决定支持买家退款,还是支持卖家收款。
由于锁定脚本是公开在区块链上的,不利于保护各方的公钥,同时,当参与方很多时,锁定脚本的长度也会比较大,因此在2012年左右,
BIP0013
(比特币改进提案13号)提案引入了一种新的比特币交易类型叫做
P2SH
(支付到脚本哈希),或者叫做“
支付到多重签名地址
”。
把上面的锁定脚本作为所谓的“
赎回脚本
”(redeem script),然后定义
新的锁定脚本
如下:
HASH160 <赎回脚本的20字节哈希值> 相等判断(OP_EQUAL)
而
新的解锁脚本
则为:
签名1 签名2 <赎回脚本>
新的锁定脚本中的赎回脚本的20字节HASH160哈希值,就是所谓的“
多重签名地址
”,又称“
多签地址
”或“
P2SH地址
”,是该提案新引入的一种新的比特币地址。这个地址使用与比特币地址相同的Base58Check编码后
以“3”开头
,比如:3DPNFXGoe8QGiEXEApQ3QtHb8wM15VCQU3。(阅读警告:不要向该地址中转入比特币。无法找回!)
这样一来,我们又可以像想象普通比特币地址那样,把上述多重签名地址想象成一个由3把锁锁住的保险箱,只有其中2把锁同时开启才能取走其中保管的比特币。
【未完待续】(公众号:刘教链)
您可能也对以下帖子感兴趣
{{{title}}}
文章有问题?点此查看未经处理的缓存