Author

Topic: 翻译:wiki比特币合同和智能财产 (Read 1541 times)

member
Activity: 64
Merit: 10
btc.com
June 30, 2013, 09:56:24 AM
#5
哈哈,生涩,楼主应该还没理解透
full member
Activity: 186
Merit: 100
直译了原文,更看不懂了。有没有比较形象一点的相关文档?
full member
Activity: 229
Merit: 100
很复杂,希望早日设计出个应用。
member
Activity: 81
Merit: 10
智能财产
  智能财产,使用合同 通过比特币区块链控制其所有权。例子可包括实物财产,如汽车、电话或房屋;亦可包括非实物财产,如公司的股份或对远程计算机的访问权限。令资产智能,可使其从根本上凭更低的信用(本文所提到的低信用,应指信用记录不足,而非负面信用记录)实现交易。这可减少欺诈、中介费,并可促成原本不可能发生的交易。例如,它允许陌生人在互联网上向您贷款,以你的智能财产作为抵押,这可令贷款更具竞争力,并且信贷更便宜。
  智能财产最早由Nick Szabo于1997年在他的论文《The idea of smart contracts(关于智能合同的想法)》中提出。目前这个想法没有实现。本页由Mike Hearn撰写,如有任何问题或疑问请在论坛上与他联系。
一、背景
  智能财产的原始形式已经非常普遍:你有一辆车,它来的时候配有防盗系统。防盗系统强化了物理钥匙,通过协议交换确保只有正确的加密令牌持有人可以启动发动机。这已经大大减少了汽车盗窃,例如,在澳大利亚有大约45%的汽车配有防盗系统,但这些汽车只有7%被盗。
  许多其他形式的现代产权,使用加密技术防盗。例如,一些智能手机如果没有输入正确的PIN码,将拒绝解锁某些键。加密技术不仅令被盗设备丧失功能,而且令偷盗电话号码变得不可能。
  虽然这些都是加密技术的胜利,但是加密激活财产的潜力未被完全开发。私钥通常保存在一个物理容器(如一个钥匙或SIM卡)中,并且不易转移或操纵。智能财产改变了这种状况,允许所有权通过比特币矿工中介。
二、理论
  本节假设您熟悉Bitcoin的协议,并能很好地理解合同
  让我们从一个汽车的例子开始。汽车电脑需要通过所有权密钥来认证。所有权密钥是一个合法的比特币ECDSA-256密钥。汽车在出厂时通过新创建的所有权密钥的公共部分(即后文中车主的公钥),开始它的生命周期。一个象征性的微量比特币(例如0.0001BTC)被存入这个公钥,这被称作令牌T。另外,汽车有一个制造商提供的数字证书,还有一个识别密钥——包含证书中的公钥。这允许汽车向第三方证明一些事物,如它的存在、车龄和里程数。
  当汽车被出售时,使用以下协议:
  1、买方生成一个随机数,并要求卖方提供汽车(签名返回的——后文会提到)数据。
  2、卖方将(买方提供的)随机数输入汽车,汽车返回一个经其识别密钥签名的数据结构。此数据结构包括:买方提供的随机数、汽车的公共证书、汽车相关数据、当前车主的公钥和最后一次所有权转让的交易记录分支(存储成树状结构的数据的分支)。这可以确保买方知道他们买到的是什么,以及它的真正来源(不是重播(我理解就是防止双花))。
  3、卖方选择一个公钥k1接受付款,并且定价为P。
  4、买方生成一个新的所有权密钥,k2。
  5、买方创建了一个交易包含两个输入和两个输出。第一个输入是P,第二个输入链接到拥有T的所有权地址。第一个输出发送P到k1,第二个输出发送T到k2。这个交易(暂时)是无效的,因为只有第一个输入能被签名。买方把这个部分完整(第一个有签名,第二个无签名)的交易传递给卖方,卖方用汽车当前车主的公钥签名第二个输入,并广播这笔交易(交易生效)。
  6、双方等待确认。
  7、买方通过比特币交易获得汽车,一个数据分支将此交易指向区块头——随后将有足够的区块头——以填补汽车当前(原)所有权交易以来的间隙。汽车认为有新交易重新分配了所有权,而且(新交易的)区块链相比当前(原)产权的(分叉)在进一步延长,再加上有足够的工作堆积到区块链的顶部,确保交易不会逆转。然后,汽车更新了它的所有权信息。汽车不需要保留完整的区块链记录,也不需要所有的区块头,只需要(保留)足够的数据以链接到前面提到的未来的区块头(即数据分支指向的那个)。
  在实践中,这个过程很可能会被处理成使用有NFC功能的智能手机。存有所有权密钥的手机接触汽车仪表盘,将启动(比特币)钱包应用进入一种特殊模式,此模式知道如何处理智能财产交易,在输入价格后,买卖双方接触手机完成交易。虽然加密技术是复杂的,但是他们不必知道任何相关内容,手机能够作为一种完成交易的渠道,并且启动汽车。
三、贷款与抵押
  能够没有欺诈风险地买卖实物财产,是非常有用的,而我们可以添加一个额外的层以允许低信用抵押贷款。研究一笔用于起步小生意的贷款。你不用与银行签约,而选择允许世界各地的人对你的债务报价,这样可以得到最好的价格(指贷款利率)。对这笔生意,陌生(放贷)人需一些保证,如果贷款没有被偿付,他们可以得到抵押品——但你仍然需要能够使用汽车设立业务(指抵押汽车获得贷款)。
  我们可以通过向所有权密钥增加访问密钥来实现此功能。通过用所有权密钥对消息签名,访问密钥能被加入或移除,访问密钥自然就是临时性的。这意味着在贷款期限内,你能够重置汽车的所有权为债权人,同时自己又掌握访问密钥。
  最好这样,如果债务人保证偿还债务,汽车所有权将恢复由他控制。我们可以这样实现:
  1、债权人创建k1,用来接受贷款偿付,贷款规模为L。
  2、债权人对Tx1(比特币交易信息在网络上的传送)签名,Tx1有一个输入/输出重置汽车所有权为债务人,签名是SIGHASH_ALL | SIGHASH_ANYONECANPAY,输出是L支付到k1。这笔交易(暂时)是无效的,因为贷款还未被偿付,所以输出值的和大于输入值。债权人发送这笔交易给债务人。
  3、当债务人挣回他花掉的钱,他向Tx1加入输入值,提高了值(指Tx1的输入值和)。这不会打破所有权密钥输入/输出的签名,因为签名是SIGHASH_ANYONECANPAY,对其他输入独立。他不能调整输出或其他任何交易相关内容,因为那会使所有权密钥的输入/输出(SIGHASH_ALL)失效。
  4、一旦交易有足够的输入和达到L,债务人就广播交易,这样就偿付了债务并且同时取回汽车所有权(交易生效)。
  因为访问密钥可以给定时间限制,如果债务人没有在期限内偿付贷款,他的访问密钥将过期,他就不能再发动汽车。车的新主人则可以取得汽车,或者他不想如此(比如他身在国外),可以使用低信用销售协议卖掉车并拿到钱。
  大部分贷款是分期还贷的。与上面相同的协议能在这种情况下工作,通过在额外的输入/输出中嵌入一些控制数据,所有权密钥可不被改变,但是签名可覆盖一条命令,该命令用来延长一个月的访问密钥有效期。汽车会知道如何从交易中解析出数据。
四、实施细节
  对于到期的访问密钥,该设备的有效期必须有一个可信的来源。一些设备如汽车和手机,它们自己保持有效期。在其他有某些不常见的原因的情况下,可以使用安全时间戳。这是一项服务,对一条消息签名,包含当前时间和一个随机数。设备生成一个随机数,作为激活/开启协议的一部分,设备(如手机)接入网络,发送随机数到时间戳服务器,然后返回签名的消息。区块链本身不能用来作为时间来源,因为没有问答/响应机制,设备无法知道得到的区块否是最新的。用随机数给时间签名可以解决这个问题。
  智能手机在智能财产中发挥关键作用,因为它们有能力把没有网络连接的设备桥接进网络,通过蓝牙或NFC。例如,一栋房屋门的智能锁需要连接因特网,这很昂贵并且不符实际。然而,一把锁带有NFC触点就可以使检验区块头进度变成可行。唯一需要操作来实现连接比特币智能财产的,是hash,ECDSA和一个小量的存储,智能卡芯片能实现这一切,而且普通和便宜。
member
Activity: 81
Merit: 10
  起因是我建议李笑来开展比特币信贷业务https://bitcointalksearch.org/topic/--236985 ,他给我看这个https://en.bitcoin.it/wiki/Contracts ,因为我无法直接有效的阅读英文原文,为了能清楚地理解,我不得不翻译过来再细读。既然翻译了就贴上来,有兴趣的一起看看。
  Contracts条目有时会打不开,所以没全翻完,等翻完再补上;Smart property全翻完了。

合同
  一种分布式合同,使用比特币通过区块链来构成与人的协议的一种方法。合同不能使任何以前不可行的事情变成可行,而是实现你以最小化的信任解决普通问题的方式。通过允许人判断是否退出循环,从而实现完全自动化,最小化信任一般可使事情变得更加方便。
  通过建立与Bitcoin互相作用的低信任协议,可以创建全新的产品:
  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 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次。无论何种情况,双方都必须同意合同变更。
  显然,如果用户变成滥用账户(例如垃圾邮件制造者),网站将不会允许合同提早结束。如果发生太多的滥用,能升高押金额度或延长合同期限。
三、例2:托管及纠纷调处
四、例3:保险合同
五、使用外部状态
  (一)、最小化预报中的信任
六、链间的交易
七、在预付中快速(微)调整支付
八、参考
Jump to: