文章介绍了比特币区块链上的隐蔽日志合同(Discreet Log Contracts, DLCs),解释了其工作原理、使用案例及潜在应用,并讨论了当前的技术限制和改进方向。
2018年5月19日,麻省理工学院数字货币计划(MIT’s Digital Currency Initiative)和Fidelity Labs在波士顿组织了一场Layer 2峰会。在这次活动中,DCI的两名成员Tadge Dryja(研究科学家)和Gert-Jaap Glasbergen(软件开发人员)做了一个关于Discreet Log Contracts的演示。这篇关于Discreet Log Contracts的论文由Tadge Dryja撰写,并于2017年发表。
在这篇博客文章中,我们将尝试进一步解释什么是Discreet Log Contracts,它们如何工作,以及如果你有兴趣利用这项技术,下一步是什么。
通过创建Discreet Log Contract,Alice和Bob可以基于预设条件形成一个资金重新分配的货币合同,而无需向区块链透露这些条件的任何细节。Alice和Bob都将资金存入合同,但它在区块链上的外观与普通的多重签名输出没有任何区别。因此,合同是隐秘的,因为外部观察者无法从公共账本中了解其存在或细节。
这个合同依赖于一个或多个外部实体,称为oracle,它将在未来的某个时间点(在合同到期之前)发布一条签名消息。这条签名消息的内容决定合同中锁定资金的分配方式。
oracle并不知道合同或使用其数据的人,它们按照预设的时间表独立发布签名消息。Alice和Bob将这些签名纳入合同中,而oracle并不知道他们在使用它。
由于oracle不知道使用数据的特定合同,它无法决定特定合同的结果。这是与oracle作为2-of-3多重签名设置中的第三方的情况的重要区别。
oracle提供了区块链与外部世界之间的连接——因此它们是可信的,能够提供准确的数据。有一些方法可以最大限度地减少对这种信任的依赖,我们稍后会讨论。
使用Discreet Log Contracts,oracle发布的签名使得合同的每个参与者都有可能从合同中索取应得的资金,而无需另一方的合作。
最明显的Discreet Log Contracts用例是比特币结算的期货合同,这在论文中也有描述。期货合同是双方之间定制的合同,规定在未来的某个日期以特定价格购买或出售资产。期货是对冲波动的非常常见的工具。因此,使用美元期货,某人可以对冲美元与比特币汇率的波动。显然,这也可以用于对冲其他货币,如日元、欧元或卢布。
你也可以参与其他资产的期货,如黄金、小麦、咖啡。只要有一个发布价格的oracle,你就可以使用Discreet Log Contracts构建期货合同。
这为比特币经济打开了巨大的机会。由于企业不将比特币作为基础货币的主要原因是它们的采购都是以法币进行的,它们无法承担比特币相对于法币的波动风险。本质上,期货合同可以为这个问题提供解决方案。通过参与期货合同,你可以保留你持有的比特币的(部分)法币价值。
例如:Alice可以与Bob签订一份美元期货合同。Alice同意以每美元12500聪(=0.000125 BTC,即每比特币8000美元)的价格从Bob那里购买5000美元,合同到期时间为当月的最后一个星期五下午5:00。在这个例子中,美元是“资产”,价格以比特币计价。
Alice参与这份合同是因为她有未来交付美元的义务(例如:支付账单),并希望减少波动风险。这份合同将赋予她在合同到期时获得5000美元的权利,无论当时的美元与比特币的汇率如何。
另一方面,Bob预计比特币的价值会上涨,因此他预计市场汇率下5000美元的比特币价格将低于Alice同意支付的价格。Bob参与这份合同是为了在合同到期时获利。
由于合同是以比特币结算的,这意味着与正常资产期货的现金结算一样,Bob不会实际向Alice交付美元,双方将以比特币支付约定价格与市场价格之间的差额。
因此,如果美元升值,Bob将不得不支付差额给Alice。同样,如果美元贬值,Alice将不得不支付差额给Bob。
Alice和Bob提前准备好了用于支付的资金。这笔支付被锁定在一个由Alice和Bob的私钥控制的2-of-2多重签名输出中。在锁定资金之前,他们根据oracle将宣布的值交换了必要的交易。这样,在锁定资金之前,他们知道自己有权索要的资金可以被取回。这也意味着支付金额仅限于双方同意锁定的合同金额。
在前面的例子中:
Alice同意以每美元12500聪(即0.000125 BTC,等于每比特币8000美元)的价格从Bob那里购买5000美元,合同到期时间为当月的最后一个星期五下午5:00。
步骤1:找到一个oracle。我们首先需要一个oracle,它将在当月的最后一个星期五下午5:00发布以聪计价的美元价格。这个oracle提供它将用来签署这条消息的公钥。
步骤2:创建资金交易。双方将从他们钱包中的币构造一笔交易来为合同提供资金。双方都向合同中贡献相同数量的币。合同将是一个2-of-2多重签名输出,意味着Alice和Bob都必须签署任何从该输出中花费的交易。合同资金为[资产数量 * 资产价格],因此在这种情况下,每个贡献的金额是5,000 * 0.00125 = 0.625 BTC。
使用交换的输出点信息,双方可以从各自的钱包中创建一笔单独的交易来为合同提供资金。最终他们必须签署各自的输入到该交易中,但他们暂时不会这么做。现在,虽然交易已经创建,但可以确定交易ID。由于签名不是ID的一部分,签署它不会改变该ID。
由于我们现在知道了资金交易的ID,我们已经可以构造从合同中花费资金的交易,尽管它实际上还没有上链,这正是下一步要做的。
步骤3:创建所有可能的执行交易。对于oracle可能发布的每个值,创建一个合同执行交易。合同执行交易是将合同中锁定的资金(在2-of-2多重签名输出中)花费到可以由Alice或Bob索取的输出的交易。它按照参与者同意的方式分配合同资金。
这些交易将合同资金花费到两个输出:一个可以由Alice索取,另一个可以由Bob索取。每个输出中有多少资金取决于美元的价格。如果任何一方将得到零,则该输出将被省略。
其中的一个重要部分是,Alice签署并Bob保留的交易,不会将Bob应得的金额直接花费到Bob的钱包中(否则他可以在合同资金到位后立即签署并广播该交易,无需等待任何oracle签名就能获得资金)。该交易花费到一个由Bob的公钥和oracle签名的公钥组成的组合中。这样,Bob只能使用oracle签名的正确值来索取他应得的资金,这是他无法伪造的。
第二个补充是,Bob应得的金额在超时后也可以由Alice花费。这是为了减轻以下风险:如果Bob发布了任何不正确的合同执行交易,任何人都无法索取资金。如果oracle发布的值是12500,而Bob发布了属于12600的交易(这没有人有oracle的签名)——Alice可以在超时后索取Bob的资金。因此,通过发布错误的交易,Bob实质上将合同中的所有资金交给了Alice。
由于发布错误的交易会将所有资金交给对方,任何一方都应确保在发布合同执行交易之前拥有正确的oracle签名。由于这些签名很容易验证,所以没有人会被“欺骗”发布错误的交易。
因此,当oracle发布的值是12500时,双方将收回他们投入的资金,因为该值正好是约定的价格:双方都无需向对方支付差额,因为没有差额。Alice签署并交给Bob的合同执行交易如下所示:
然而,如果价格变为14000聪(每比特币7,142.85美元),Bob需要支付Alice差额为5000 * 1500聪,即0.075 BTC。因此,Alice签署的合同执行交易如下所示:
Alice和Bob可以为所有可能的聪值创建所有合同执行交易。
步骤4:交换合同执行的交易签名。一旦所有这些合同执行交易都已创建,双方将交换这些交易的签名,但他们暂时不会发布任何交易。他们验证其正确性,此时他们可以安全地交换资金的交易签名,因为他们知道自己有一种方式可以索取合同资金。
步骤5:交换资金交易的签名。现在,每一方都可以从合同中索取资金,他们可以安全地将资金交易的签名交换到他们钱包中的合同资金。
步骤6:将资金交易发布到区块链。现在,资金交易已签署,任何一方都可以将已签署的资金交易发布到区块链。
步骤7:结算合同。当oracle发布值时,任何参与者都可以发布正确的合同执行交易,从合同中花费资金。发布交易的一方应使用oracle签名结合他们的私钥将花费到组合密钥的输出索回到他们的钱包——以防止对方在时间延迟后花费它。
期货合同是一个非常适合这项技术的简单直接用例。但基本上,oracle可以生成的任何值都可以用于形成这类合同。例如,你可以创建一个基于oracle提供的值(天气数据、航班延误数据)自动支付索赔的保险合同。如果oracle宣布了某类体育赛事的世界冠军国家,你可以基于此促成一份简单的投注合同。
基本上,任何需要根据外部未来值分配资金的情况,都可以使用Discreet Log Contract技术强制执行。
我们目前发现了一些可以在我们构建的原型中改进的问题:
- 原文链接: medium.com/@gertjaap/dis...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!