文章介绍了基于断言机的比特币条件支付(ObC)的概念,对比了传统托管方式的不足,阐述了ObC通过分离事件见证和合约执行的角色来解决这些问题。ObC依赖断言机签名事件结果,并利用可验证的加密技术,使得Alice和Bob能够单方面根据断言机的见证消息领取奖金,从而实现无需信任的条件支付。
作者:Théo Pantamis
来源: https://blog.lnmarkets.com/oracle-based-conditionnal-payment-on-bitcoin-2/
最近的 Taproot 软分叉是比特币的一个重大里程碑,它带来了让人兴奋的创新和应用开发的可能性。这些创新的其中一种是 “谨慎日志合约(Discreet Log Contract,DLC)”,这个概念最早是由 Taddeus Dryja 提出的。利用 libscep256k1 曲线上的 Schnorr 签名实现,DLC 成了比特币生态系统的关键基础设施。不过,就跟所有的新科技一样,DLC 也必须有详细的规范以及审慎的运用。幸运的是,我们已经看到了第一种基于 DLC 规范的产品放出,而 LN Markets 的团队也在积极探索利用这种新技术。那么,让我们一起钻进 DLC 的兔子洞,看看我们会走到哪里去吧!
(译者注:严格来说,DLC 基于 “适配器签名(adaptor signatures)”。ECDSA 算法(比特币在 Taproot 升级之前可用的唯一签名算法)也可以实现适配器签名从而支持 DLC。但 Schnorr 签名的适配器签名可能效率更高。)
在这篇文章中,我们会为 DLC 所解决的问题提供一个概要的解释,并比较现有的其它解决方案,以及为实现 DLC 所需部署的密码学技术。在下一篇文章中,我们会深入到相关的密码学元件的提议中去。最后,在最后一篇文章中,我们会解释 DLC 将带来的实际影响,尤其是对衍生品交易的影响。
在金融世界里,由所有者的资金触发、由对方的账户接收的简单支付,是簿记系统的基础。但是,对于更复杂的金融合约,比如打赌、对冲、智能合约和衍生品来说,需要更复杂的支付方式。这些支付以现实中发生的具体事件为条件,并由账本上的见证消息(attestation)触发,而不是由所有者的授权触发。这类支付叫做 “条件式支付”。
这里的困难在于,账本只是对我们所作出的承诺的记录,除了这些在账本上写东西的人,账本跟真实世界并无关联。这就是为什么我们需要来自某一些人来证明某一件事情已经发生,不论是直接的还是间接的。这些见证消息,就成了无需支付者的授权就触发一笔支付的扳机。这就是为什么我们管它们叫 “条件式支付”。谨慎日志合约解锁了实现条件式支付的新的可能性。
在条件式支付的世界中,支付者可能并不完全保管着所有的资金,因为这些资金在某一个事件发生时,无需支付者的签名就能触发支付。这个过程一般涉及两个独立的步骤:
这两个步骤就组成了一个合约,第一步是合约的建立,第二步是合约的执行。值得指出的是,两步之间可能有额外的步骤。
在合约持续期间(已经注资,但还未结算),任何一方都必须锁住自己承诺愿意损失的最大数额的资金,等到合约结算之后才能拿回资金。合约结算的标志是,缔结合约的参与者无法从合约中获得更多的资金。
我们用两个人物 Alice 和 Bob 来举个例子(每个密码学家都这样干,对吧)。他们俩想对 Azure 团队和 Blake 团队的比赛打个赌,并且用比特币结算。在一个理想世界中,人们总是正直又诚实,Alice 愿赌服输,Bob 也是如此。这种合作式结算合约的情形,如果能够做到,当然皆大欢喜。不需要第三方,他们俩的隐私也得到了保证,因为合约的结算靠一笔普通的交易就完成了。
- 在双方合作的情形中,条件式支付只是一笔普通的支付 -
但是,在现实世界中,每个人都有输掉之后赖账的动机。大部分情况下,Alice 和 Bob 同意跟彼此打赌,但他们不愿意相信对方会愿赌服输,他们希望确保赢了赌注就不必看对方的人品。他们希望有一种条件式支付:只有当 Bob 失去了他可能要发送给 Alice 的资金的完全控制权之后,Alice 才会认为 Bob 已经接受了合约;反过来 Bob 也一样。因此,使用一个第三方作为合约资金的托管商,似乎是明显的解决方案。
在账本的世界中,触发一笔支付是非常直接的 —— 只需要使用电子签名就性了。但是,在条件式支付中,各方必须失去对自己所承诺要加入合约的资金的完整控制权,所以必须加入一个第三方。这里假设有一个 Alice 和 Bob 都信任的托管商 Edouard,他提供了一个解决方案。
假设 Alice 和 Bob 不信任彼此,他们同意提前发送资金给 Edouard,后者将完全控制这些资金。使用 Edouard 的签名,Edouard 可以见证哪一支团队获胜了,并触发合约的结算:签名一笔交易,将资金发送给赢得赌注的一方。
这种方案叫做 “基于单一托管商的支付”,常用于托管式交易所。其主要优势在于,合约可以容纳任意多个参与者。
在单一托管商支付模式中:
- 通过托管服务商形成的条件式支付 -
但是,它也有自己的缺点,主要是托管商有可能盗走资金。此外,因为托管商是中心化的,它出了任何问题都有可能导致资金损失,即使托管商自身诚实,即使 Alice 和 Bob 愿意合作,也无济于事。
多签名的托管
一种更好的办法是,使用一个 2-of-3 的多签名地址,让 Alice、Bob 和 Edouard 一起参与。这使得 Alice 和 Bob 只需使用 Edouard 的公钥就可以缔结合约。如果他们都同意比赛的结果,两人合作就可以结算合约。但是,如果他们不同意,他们可以通知 Edouaard,由 Edouard 提供一个签名来给赢家支付(赢家自己可以提供另一个签名)。
在这种基于多签名托管的条件式支付中:
- 在一个基于多签名托管商的条件式支付方案中,赢家由两种办法获得支付 -
这种方案对 P2P 交易所(比如 BISQ 和 Robosats)来说是合适的,因为它在双方合作的情形中提供了更好的隐私性,但它仅对两个参与者的合约有效(只需一个赢家和托管商一起签名,就可以结算合约)。
这种办法的另一个好处在于,Edouard 不能再直接盗取资金,也无法阻止缔约的参与者合作结算,甚至可能根本不知道有这么一个合约。但是,输家可能会尝试阻止赢家联系 Edouard,或者先一步联系 Edouard 并谎报合约的内容,从而欺骗 Edouard。
任何基于托管商的条件式支付都会引入一个第三方托管商(在这里是 Edouard),TA 必须完成下列任务:
除非他们真的做好了不向托管商公开合约的准备,否则,Alice 和 Bob 应该尝试在争议发生前通知 Edouard 这份合约的存在。否则,Edouard 可能会被欺骗、误解合约条款并偏向某一方。比如说,如果 Bob 声称自己误将资金发送到了这个 2-of-3 多签名地址中。Edouard 可能签名交易将所有资金都发给 Bob,从而无意中欺诈了 Alice。
为了避免这种误会,Alice 和 Bob 必须明确表示他们跟 Edouard 缔结合约的意图,并确保 Edouard 完全理解了合约的条款。甚至 Edouard 可能会用一个签名来见证自己的理解。如此一来,如果 Edouard 在未来犯了错误,Alice 和 Bob 就可以证明他并没有正确执行合约,其他人将可以看出 Edouard 是不堪信任的。
虽然基于托管商的条件式支付是一种实用的方案,它也有重大缺陷,因为托管商既负责见证结果,又负责执行合约。这就是 DLC 所解决的问题:通过分离第三方的角色,移除了托管商执行合约的责任。
一开始,人们认为托管商在条件式支付中是必需的,因为需要第三方来见证触发支付结算的事件,从而无需支付者的操作就结算合约。但是,让第三方签名来分发资金并不是必需的。更好的方案应该分拆条件式支付的不同部分
在见证事件时,第三方是必需的。在基于多签名的托管方案中,缔结合约的参与者可以共同保管资金,同时约束彼此,就像闪电网络中的支付通道一样。因此,第三方只需要见证事件,缔结合约的参与者就可以根据第三方的见证消息、单方面拿走合约中的资金。
这个 准-受信任 的第三方叫做 “断言机(oracle)”。缔结合约的参与者相信断言机会在事件发生时见证真正的结果,通常是发布数字签名。他们不必信任断言机会正确地分发资金,也不需要信任断言机会在合约持续期间将资金挪作他用。也不需要信任断言机会裁决争议;断言机仅仅见证事件,参与合约的各自己领取奖金。这就是 “基于断言机的条件式支付(ObC)”。
为了让第三方断言机 Olivia 可以见证事件结果,以及 Alice 和 Bob 可以单方面根据断言机的见证消息领取奖金,他们必须走一个特定的流程。
Olivia 必须使用自己的私钥签名一条跟她所见证的事件相关的信息,将每一种可能的结果与一个公钥关联起来。Alice 和 Bob 必须在为合约注入资金之前,交换根据每一种结果产生支付的碎片签名。这些预先签名的、放在链下的交易叫做 “合约执行交易(CET)”。每一种可能的资金分配情形都必须有一条 CET 并得到双方的签名。
但是,必须保证,每一方都不能不搭配 Olivia 对相应见证消息的签名就直接使用对方的签名(单向性)。因此,这些 CET 的碎片签名必须使用跟 Olivia 对对应事件结果的签名相关联的公钥来加密。不过,如果 Bob 要给 Alice 发送这样的加密签名(反过来也一样),问题就来了。她需要验证自己收到的数据正是 Bob 对某一个 CET 的加密签名、并且她可以用 Olivia 对特定消息的签名来解锁。否则,Bob 可以随便发送一堆数据给 Alice,Alice 也没法区分。为此,我们需要 可验证的加密见证数据(verifiable witness encryption)。在这种加密技术中,一种证据可用来验证被加密的数据在解密后具有特定的数据,并且无需用到加密数据所用的私钥。
验证某段加密的数据具备特定属性的能力,就是那块缺失的拼图。有了它,Alice 和 Bob 就可以建立一种合约,让 Olivia 的角色仅限于见证一个事件:使用自己的私钥对表示结果的消息签名。
使用这样的密码学元件的基于断言机的条件式支付的一般流程如下:
- 使用可验证的加密见证数据的断言机条件式支付的合约建立流程 -
在比赛结束后,Olivia 见证结果,Alice 和 Bob 就可以结算支付了:
- 结算流程。如果 Olivia 无法见证,带有时间锁的退款交易可以让 Alice 和 Bob 拿回自己的资金 -
建立合约涉及制作条件式支付的程序,而在比特币中,支付一般以电子签名的揭晓为条件。但是,它们无法用现实生活中的事件来触发这些支付。
因此,我们需要第三方来见证事件,并触发条件式支付。比特币现有的解决方案依赖于受信任的托管商,由托管商来解读合约,并基于需要见证的事件的结果来执行合约。
基于断言机的条件式支付,通过移除托管商解释和执行合约的责任,来解决这个问题。相应地,托管商就变成了一个断言机,仅仅签名表示事实的消息。
为了在比特币上实现这样的支付,需要一种对比特币签名的高效可验证加密见证数据。在我们的下一篇文章中,我们会讨论不同提议的优点和缺点。众所周知的 DLC ,是一个可验证加密见证数据提议的一个突出例子。在第三篇文章中,我们会解释如何处理更加复杂的结果,比如根据价格来结算合约的情形。
- 本文转载自: btcstudy.org/2023/06/06/... , 如有侵权请联系管理员删除。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!