比特币中文维基 >>所属分类 >> 协议(Proposals)   

分布式合同

标签: 暂无标签

顶[1] 发表评论(0) 编辑词条

分布式合同是一种人们通过比特币区块链达成协议的方式。分布式合同并不能实现以前的合同所不能达成的功能,它只是让人们可以在最小信任度的前提下达成协议。这意味着以前只能以纸、笔、签字的方式达成的协议,现在可以在密码学的信任基础上完成同样的服务。这种新服务可以开发出包括托管服务、抵押存款、纠纷调解、买卖担保、智能资产等诸多新功能,这些功能将消除许多行业中需要用到纸质合同的情形。除了银行,现有行业可能会受到影响的包括企业冠名、贷款服务、结算服务、数字产品的拥有权转移(汽车、手机、电脑)、住房贷款、汽车贷款、资金服务等,以比特币的方式创建这些合同的成本几乎为零。

假设有A、B、C三人,新的交易形式可能包括以下几种:(A 和B)、(A或B)、(A和B)或C,比特币将远不只是一种全球货币那样简单。目前,它可以取代纸质的现金。而将来,它也许可以取代许多金融行业内的纸质合同。比特币可能是世界上第一个全球加密合同协议,任何人都可以在世界的任何地方,以加密的方式与任何人做生意。

  Smart property(智能财产),通过区块链可实现原子交易和贷款的资产。

  Transferable virtual property(可转让虚拟资产),可以交易但不可复制的数字名目。

  Agents(代理),维护自己钱包的独立程序,用来购买服务器时间。Agents通过出售服务器获得钱。如果供不应求,Agents可以孳生子域,子域的存亡取决于是否能够得到足够的业务。

  Distributed markets(分散的市场),一种实现点对点证券交易的方式,可使比特币演化成对国际金融体系全方位的竞争者。

  Ripple,一种基于社交网络实现分布式货币兑换的方式。

  本页还列出了一些相似的例子。

  很多关于比特币合同的主意,最先由Nick Szabó在他的开创性论文中描述,格式化和安全关系在公共网络上。这些页面由Mike Hearn撰写,如果有新型合同的想法请联系他。您可观看2012伦敦比特币会议关于合同主题谈话的视频。

一、理论

  Bitcoin的每一笔交易都有一个或多个输入和输出。每个输入/输出带有一个小的单纯函数,称作Script。Script能够包含交易本身以外信息的签名。

  每一笔交易能够拥有有一个与其本身关联的锁定时间。这允许交易在一个商定的未来时间点生效或变更,这个时间点即可以是一个区块索引也可以是一个时间戳(或同时是两者,但区块索引值须定义为小于5亿)。如果交易的锁定时间已经达到,我们称其为终点。

  每笔交易的输入有一个序列号。在一个正常的交易中,它只是在一定范围内变动的值,序列号都是UINT_MAX,锁定时间是零。如果锁定时间仍未到达,但是所有序列号都是UINT_MAX,这笔交易也被判定终结。序列号可以用来发布一笔交易的新版本,没有无效的其他输入签名(不理解)。例如,一笔交易中的每个输入来自不同方,每个输入可以从序列号零开始,而且那些数字能独立地递增。

  签名检查是灵活的,因为被签名的交易的形式能够通过使用SIGHASH标志从而被控制。SIGHASH标志添加在签名的尾部。通过这种方式,可以对每个签名方构建合同,不经过他即允许(该方以外的)其他部分改变。SIGHASH标志有两部分,三个状态之一和ANYONECANPAY调节器:

  1、SIGHASH_ALL:这是默认的。它表示有关该交易的一切已被签名,除了输入Script。对输入Script的签名将明显使其不可能构建一笔交易,所以他们总是留空。不过请注意,那些其他输入的特性,像连接输出和序列号,是被签名的;只有Scrip除外。直观地说,它的意思是“我同意投入我的钱,如果每个人都投入他们的钱,而且输出是这个。”

  2、SIGHASH_NONE:输出不被签名,而且可以是任何值。这表示:“我同意投入我的钱,只要每个人都投入他们的钱,但是我不在乎输出是什么。”此模式允许别人更新交易,通过改变他们的输入序列号。

  3、SIGHASH_SINGLE:类似SIGHASH_NONE,输入被签名,但是序列号留空,这样别人可以创建交易的新版本。然而,唯一的输出是签名的,它是和输入在同一点的。这表示:“我同意,只要我的输出是我想要的,不管其他人。”

  ANYONECANPAY调节器能够与上述三个状态结合。当设置后,只有对应的输入能被签名,其他输入可以是任何值。

  Script能够包含CHECKMULTISIG操作码。此操作码提供N-M校验:你提供多个密钥,并且必须指定有效签名数,签名数可以比公钥数少。输出能够请求花费两个签名,需要先设置成如下:

2 <pubkey1> <pubkey2> 2 CHECKMULTISIGVERIFY

  有两种一般模式安全地创建合同:

  1、交易以部分完整或无效形式在p2p网络以外传递。

  2、使用了两项交易:一个是(合同)被创建和签名,但是没有立刻广播。另一个是相反的,交易(付款)在合同被同意锁定钱款前就被广播,之后合同才被广播。

  这是为了确保人们总是清楚他们同意的内容。

  这些特性放在一起,让我们产生兴趣在区块链顶上建立新的金融工具。

二、例1:提供押金

  想象一下,您在网站上开立一个帐户(例如一个论坛或wiki),并希望建立自己与运营商之间的诚信,但没有任何预先存在的声誉可供利用。一种办法是向网站付钱购买信任。但如果某时你关闭了你的帐户,你一定希望这些钱能回来。你可能不信任该网站,给他们足够的存款随意使用。另一个风险是,该网站可能在某天就消失了。

  目的是证明你做出某种付出,这样网站知道你不是一个垃圾邮件机器人,但你不希望他们能够花这些钱。如果运营商消失,你最终会希望没有任何麻烦就从他们那儿拿回钱。

  我们能够通过一个合同解决这个问题:

  1、用户和网站互相发送一个新生成的公钥。

  2、用户创建交易Tx1(支付),但不广播,(交易中)投入10BTC作为输出,输出需要用户和网站双方签名。它们(指广播)使用网站在上一步创建的公钥。

  3、用户发送Tx1的哈希值给网站。

  4、网站创建一个交易Tx2(即合同)。Tx2花掉Tx1,并通过用户在第一步提供的地址返还给他。请注意,Tx1需要两个签名,因此本次交易不能完成。 nLockTime设置在未来的某个日期(如6个月后)。输入的序列号设置为零。

  5、最后,不完整的(半签名)交易被发送回给用户。用户对照预期检查该合同,如一致钱最终会回到他手里,如不情况有变,仅半年后(钱还是会回来)。因为序列号是零,若双方同意,合同可以在未来修订。输入中的Script仍未完成,用户的签名只可能是零。要修复此问题,用户通过对合同签名和在合适的点放上新签名。

  6、用户广播Tx1,然后广播Tx2。

  在这个阶段,10BTC处于一个无论是用户还是网站都不能单独花掉它的状态。六个月后,合同将完成,即使该网站消失,用户也将拿回钱。

  如果用户希望提前关闭他的账户(该如何)?网站创建一个新版的Tx2, nLockTime设为零,输入的序列号设为UINT_MAX,然后他(用户)重新签名。网站把Tx还给用户签名。然后用户广播此交易,提前终止合同并释放钱款。

  如果6个月临近,用户希望维持他的账户(该如何)?同样的事情也适用于:合同能被新的nLockTime重新签名,序列号加1并重新广播2^32次。无论何种情况,双方都必须同意合同变更。

  显然,如果用户变成滥用账户(例如垃圾邮件制造者),网站将不会允许合同提早结束。如果发生太多的滥用,能升高押金额度或延长合同期限。

附件列表


→如果您认为本词条还有待完善,请 编辑词条

上一篇合并挖矿 下一篇智能资产

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
1

收藏到:  

词条信息

无主之地
无主之地
举人
词条创建者 发短消息   
漆园小吏
漆园小吏
书童
最近编辑者 发短消息   

相关词条