# 谨慎日志合约（DLC）：比特币的可扩展智能合约

By [BitSafe中文](https://paragraph.com/@bitsafe) · 2024-01-23

---

_作者：Interdax_

_来源：_[_https://medium.com/interdax/discreet-log-contracts-smart-contracts-for-bitcoin-d75f22d25dac_](https://medium.com/interdax/discreet-log-contracts-smart-contracts-for-bitcoin-d75f22d25dac)

“谨慎日志合约（Discreet Log Contracts，DLC）” 最大的创新是让智能合约变得可扩展和隐私，同时人们不必告知断言机（oracle）、信任第三方和信任彼此，就可以确定一个合约的结果（译者注：“断言机” 指的就是为合约提供外部数据的参与者，可以理解为信息提供者。）。

当前，在区块链上存在的大部分智能合约，都需要链上交互。且不说这样需要占用更多区块空间，与这些智能合约交互意味着要付出更高的手续费，或者更长的等待时间，甚或两者都是。DLC 使用了类似闪电网络的技术，所以合约和大部分活动都不会发布到区块链上。

链上型智能合约会让区块链的体积膨胀，除了需要付出更高的手续费和更长的等待时间以外，还会提高全节点的运行要求。同时，这样的智能合约也是公开的，任何人都能看到交互的全部过程。

有了 DLC，无论是第三方观察者，还是断言机，都不知道合同的条款，也不知道交易额。在双方配合的情况下，只有两笔交易会公开在区块链上，而且看起来就像普通的多签名花费一样，因此其他人无法从公共账本中得知合约的存在及其细节。这也是它何以被称作 “谨慎日志合约”。

在本文中，我们会简要介绍谨慎日志合约，了解其中包含的博弈原理，以及可能的用途。

介绍谨慎日志合约 谨慎日志合约是由麻省理工学院的 Tadge Dryja 在 2018 年提出的一套简洁的断言机合约方案。DLC 可以在几乎所有区块链上执行，也包括比特币，为这些链打开了一对一金融衍生品、预测市场和体育博彩在内的应用场景。

最近，DLC 经过了重新设计，引入了适配器签名（Schnorr 签名的一种特殊用法），

[https://medium.com/interdax/how-will-schnorr-signatures-benefit-bitcoin-b4482cf85d40](https://medium.com/interdax/how-will-schnorr-signatures-benefit-bitcoin-b4482cf85d40)

变得更易于扩展、更加隐私。虽然 Schnorr 签名尚未在比特币上实现（译者注：Schnorr 签名已经与 2021 年 12 月在比特币上激活），但它让 DLC 可以在链下发生，同时它可以对合约所用的断言机隐藏合约的细节。

根据断言机预期会发布的签名来构造适配器签名的适配器点，意味着双方给予对方的都是无效的交易签名，只有加上断言机的签名后才会变成有效签名。

DLC 使用了类似于闪电网络的模式，即，用到了支付通道。但它不是为了一般意义上的支付，而是用来实现基于外部数据的条件式支付。

一条断言机的签名可以承诺任何东西，比如说美国总统大选的结果和某一场足球比赛的结果。预测市场和体育博彩并非唯一个应用；DLC 甚至可以用来创建一对一的金融衍生品，比如未来具体某一天的 BTC-USD 汇率衍生品（也即远期合约）。

因此，其他资产（比如黄金、小麦、原油）的远期合约也不是什么难题。只要有一个断言机愿意发布价格，一对一的衍生品合约都可以用 DLC 开发出来。

[https://medium.com/interdax/what-are-derivatives-and-who-should-be-trading-them-1887576d46c](https://medium.com/interdax/what-are-derivatives-and-who-should-be-trading-them-1887576d46c)

DLC 可以用在任何区块链上，它需要的不过是多签名功能超时机制，因此它也可以用于在以太坊这样的智能合约平台上取代断言机次级合约（oracle subcontracts）。

（……）

DLC 的工作原理 要解释 DLC 的工作原理，我们先要了解一下如果没有 DLC，在比特币是如何执行一场赌约。

使用 2-if-3 多签名方案来打赌 如果没有 DLC 的话，两方可以使用多签名技术（具体来说是 2-of-3 多签名方案）来形成一个合约。在这种情况下，两个参与者将资金锁到一个比特币多签名输出中，第三方则作为托管代理商。要从这个输出中获得资金，必须提供只少两个签名。

在这种情形下，我们可以把这个第三方（托管代理）看成一个断言机。无论哪个参与者猜对了结果，都可以签名花费交易，加上托管代理的签名，就可以从多签名输出中花费资金了。这个断言机是可以看到合约的全貌的：TA 既知道合约的地址，也知道其中有多少资金。

要是双方都同意结果，他们可以一起签名交易、结算赌约，这就不需要断言机的参与。但是，一旦有了分歧，第三方就将决定结果。这里我们就遇到了断言机问题：托管代理可以被收买，或者说可以跟其中一个参与者勾结，在结果上作伪。这意味着，另一方即使明明赌对了，也会损失所有的资金。

现在，我们来看看 DLC 如何克服 2-of-3 多签名法案中的断言机问题。

“断言机问题” 简而言之，DLC 让两个参与者通过在链下发送交易来打赌，而且发送的是无效的交易。

以美国总统大选为例，若是两个参与者预先约定使用的断言机发布了结果并带上了签名，则打赌胜出的一方可以将断言机的签名加入交易中，使之成为有效的交易，然后取走锁定在多签名输出中的赌资（译者注：此时双方使用的是 2-of-2 多签名输出）。

断言机只是按时发布结果，并不知道自己的签名被用在了哪些合约中。他们知道自己的签名会被用在 DLC 合约中，但并不知道被用在哪个合约中。断言机自己也说不准哪一笔交易用到了自己的签名。

而且，在 DLC 中，参与者可以使用脚本的一部分来表示自己已经得到了断言机的签名，然后使用签名获得奖金。但如果 TA 实际上并没有拿到签名，那么另一方可以在一段时间后拿走输出内所有的资金，使 TA 血本无归。

断言机也被激励得尽可能保持诚实。下面是我们对断言机在不同机制（2-of-3 多签名 vs. DLC）中不同行为模式可以得到的收益比较。在 DLC 中，断言机在保持诚实的收益更大。这个收益是结构化的，所以即使一个断言机更不重视声誉（r 更小），可收取的报酬也更低（t 更小），保持诚实依然有好处。

![](https://storage.googleapis.com/papyrus_images/87dbe7138dc23a3ea4f8e8631569e3ba782f61b7611cd236ecd2376caae41c11.png)

*   图右文字的译文：在 2-of-3 多签名合约中，如果断言机觉得声誉没什么意义（r 很接近于 0），且可以得到的报酬（t）虽然是正的但也很低，那么 TA 就有动力跟某一方勾结，争取获得合约中的资金（X）的一半。但在 DLC 中，断言机有很强的激励保持诚实。即使 TA 不看重声誉，报酬也很低，保持诚实所得的收益依然大于发布错误信息的，因为 TA 可能损失所有保证金（S）。即使断言机没有锁定任何保证金，串通的收益也是 0，因为他们无法获得报酬，也不能提高声誉。 -
    

断言机可能为大部分签名使用一个公钥，而我们可以预期某一些公钥是持有资金的。举个例子，某个预言机可能把 50 BTC 放在某个公钥名下，作为自己诚实可信的信号。那么合约参与者可能就会信任该断言机，并为自己的 DLC 存入最高 50 BTC 的资金。要是这个断言机说谎，TA 的签名将可跟公钥以及虚假消息关联起来，任何人都可以证明 TA 在说谎（并拿走 TA 的 50 BTC ）。

这是有可能的：假设这个断言机创建了对一个事件的两个不同结果的两个不同签名，会暴露自己的私钥。（译者注：此处设想的是断言机公开发布了一个签名，同时又交给了某个 DLC 的某个参与者另一个签名，使之能取走资金。假设这两个签名使用了同一个 nonce（R值）（这是断言机会预先发布的），则会导致私钥泄露。）这就产生了一种保证金机制，可以惩罚行为不轨的断言机。

以美国大选为例，假设某个断言机为两个结果创建了两个不同的签名，任何获得了这两个签名的人都可以合并这两个签名然后获得断言机的私钥。而且，上面的提到的 DLC 的隐私性优势，也让断言机跟参与者的勾结变得更加困难。不过，锁定资金并不是一个要求，只是我们预期会出现的行业标准。

为了解决勾结问题，用户可以也应该加入多个 DLC 断言机，从而放大贿赂断言机的成本。通过 Schnorr 密钥聚合，

[https://medium.com/interdax/how-will-schnorr-signatures-benefit-bitcoin-b4482cf85d40](https://medium.com/interdax/how-will-schnorr-signatures-benefit-bitcoin-b4482cf85d40)

合约参与者可以将两个断言机签发同一结果的公钥相加，从而获得该结果的聚合公钥；该聚合公钥背后的私钥是这两个断言机签名的和。

谨慎日志合约流程详解 我们来走一遍一个谨慎日志合约的流程，看看它是怎么工作的。假设我们有一个两方的 DLC，Alice 和 Bob 是参与者，还有一个断言机（断言机不需要知道 Alice 和 Bob 的存在以及他们缔结合约的计划）。

Alice 和 Bob 唯一需要跟该断言机有交互的地方，就是接收该断言机所广播的事件结果。该断言机所广播的签名将给予 Alice 和 Bob 单方面执行合约的权力，从而无需信任对方。

下面的图 1 给出了比特币上的一个谨慎日志合约的简化表示：

![](https://storage.googleapis.com/papyrus_images/2fae635b0b770593386af96be97c90ff75f601c82a088dd3af2b83e9baf81cd8.png)

*   图 1. 一个谨慎日志合约的简化图示。Alice 和 Bob 跟对方缔结合约，他们都把资金锁入一个 2-of-2 的多签名输出中。一旦结果确定，断言机就会发布一条表示该结果的消息。消息中的签名可以跟任一方的公钥结合起来、构造有效的交易，允许 Alice 和 Bob 获得跟该结果相应的支付。 -
    

在 Alice 和 Bob 相互配合的情形中，链上只有很少的足迹，也就是一笔注资交易和一笔花费交易而已 —— 都不会揭示合约的内容。几乎所有的执行都是在链下完成的，所以 DLC 可以扩容，而区块链是作为私下解决争端的最后手段。在不合作的情形中，隐私性会稍微差一些，因为需要额外部署一个具有相同属性的合约在链上。

所以，使用 DLC 在比特币上建立一个打赌合约，主要就分为三步：

注资交易 合约执行交易（CET） 结算

1.  注资交易 如图 1 所示，Alice 和 Bob 需要创建一笔注资交易。他们预先约定，在每一种可能的结果中，各自应该获得多少支付，而合约的实际条件无需发布到区块链上（因为合约是在链下执行的）。
    

注资交易的意义就是 Alice 和 Bob 将他们的资金锁入一个 2-of-2 的多签名输出中（一个公钥属于 Alice，一个属于 Bob）。假设他们每人都放了 2 BTC 到合约内。

Alice 想赌 Trump 会赢，而 Bob 认为 Biden 会赢。结果分配如下：如果 Trump 赢了，Alice 可以获得 3 BTC，Bob 可以获得 1 BTC；如果反之，则 Bob 可以获得 3 BTC，Alice 获得 1 BTC。

1.  合约执行交易 Alice 和 Bob 创建和签名额外的两笔交易（每一笔都对应一种可能的结果），这两笔交易会花费注资交易。我们管这两笔交易叫 “合约执行交易”。虽然注资交易要发到链上，但 CET 可以在链下构造，这是支付通道的应用。
    

在闪电网络的支付通道中，交易在链下发生并更新双方的余额（双方的余额我们称为 “状态”）。通过公开前一笔交易的私钥，前一个状态可以作废、让双方共同建立新一个状态。双方都公开一个私钥，因此，如果任何一方广播旧的状态，其锁在支付通道中的资金会全部被对方拿走。

DLC 的工作模式也类似，但所有状态都是提前创建好的，而且这些状态的有效性取决于非交互式的断言机签名。DLC 的参与者先计算出两个公钥：P\_OracleSig(Trump) 和 P\_OracleSig(Biden)；这两个公钥的私钥是断言机可能广播的 Schnorr 签名。这些公钥用来为断言机可能创建的每一种消息创建一个多签名地址。

两个 CET 都设置了一个条件，在一段时间之后，如果双方都没有操作，则交易会被认为推迟了。这时候，先反应过来的一方可以拿走合约中的所有资金，这就保证了双方都会在合约成熟后发送一个签名。所以，如果 Trump 胜出了，但 Alice 没有提供签名，Bob 就可以把 4 BTC 全部拿走，所以双方都会在结果揭晓的时候发出一个签名。

在我们这个例子中，两人想打赌美国大选的结果，而结果有两种。两人要为每一种结果创建一笔 CET，而每一笔 CET 都有两个输出，一个是给 Alice 的，一个是给 Bob 的。

下面的图 2 展示了 Trump 胜出所对应的 CET：

![](https://storage.googleapis.com/papyrus_images/f2f30d3c91182ffbadbb10b5ab33d66bdf3d6a72f478a63a23d246904b253481.png)

*   图 2 -
    

合约中锁定了 4 BTC，一旦断言机用自己的公钥签名了消息 “Trump”，Alice 和 Bob 就可以创建有效的交易，使得 3 BTC 支付给 Alice、1 BTC 支付给 Bob。如果 Bob 愿意合作的话，双方就可以直接花费注资交易，不必像上图这样形成两个输出，这样可以节约手续费并提升隐私性。

要是 Bob 不愿意合作，比如发布错误的 CET（表示 Biden 胜出的交易），这样他会在一段时间之后失去所有的资金，Alice 还可以原样获得自己的 1 BTC，即她可以拿走合约中所有的资金。使用时间锁的退款 CET 还可以用来处理断言机无响应的行为。

但如果断言机签名消息说 Biden 赢了呢，那又会如何？Biden 胜出的 CET 如下图 3 所示：

![](https://storage.googleapis.com/papyrus_images/83e5985f4ad603a19d451091d450348a89affd77988b049046684d1e50eceba9.png)

*   图 3 -
    

Bob 将使用断言机的签名，签名 Biden 胜出的 CET 交易并广播该 CET。这样 Bob 获得 3 BTC，Alice 获得 1 BTC。

（译者注：这里的叙述其实不太对。简单来说，上述的两笔 CET 都是 Alice 和 Bob 预先签好名的、直接花费注资交易的交易，是有效的交易，这两笔交易并不需要用到断言机的签名。但这两笔交易所形成的输出，并不是 Alice 和 Bob 分别可以直接花费的，而是需要用到断言机的签名才能花费的，要么就会在超时之后被对方拿走。这样的设置实现了多重目标：（1）任何一方都不敢发布错误的 CET，因为那会形成自己无法花费的输出，导致全部资金被对方拿走；（2）如果双方合作，可以另外签署一笔直接花费注资交易并完成资金分配的交易，就不必将有意义的 CET 发布到链上；（3）如果某一方不愿意合作，胜出的一方可以广播正确的 CET，这样对方也必须立即提交签名、拿走自己的资金，否则资金在超时后会被对方拿走。）

1.  结算 在断言机发布结果并提供签名后，双方就可以广播正确的 CET。比如 Trump 胜出，Alice 可以广播对应的 CET。如果双方都同意这个结果，也可以不必广播 CET，而是直接花费注资交易。
    

但是，如果双方都没有申领资金，两个输出都有一个时间锁，在超时之后，先反应过来的一方可以拿走所有的资金。

因此，合约的激励是这样分配的，每一方的最佳策略都是跟对方合作，举个例子，考虑 Trump 胜出情况下的收益矩阵：

![](https://storage.googleapis.com/papyrus_images/fff3f3bc8a36e72de38cf7406ec4cc26459329ef9bdbf6abfc34ae9842a06111.png)

*   图 4. Trump 胜出时候的合约收益矩阵。其中 μ 代表手续费的节约以及隐私性上的好处。如果双方合作，就都能获得这种好处，而不合作则都会失去这种好处。 -
    

无论事件的结果如何、对方怎么行动，与对方合作都是最好的选择。

锁在合约中的资金是根据可预期的结果来分配的，而且整个流程 —— 从注资交易到结算 —— 都是密码学安全的。没有一方可以收到自己不该得的 BTC，因此它可以帮许多应用减少对手方风险。

结论 DLC 有望开启包括一对一衍生品合约、体育博彩、预测市场和保险等应用，在比特币网络

[https://hackmd.io/@lpQxZaCeTG6OJZI3awxQPQ/LN-DLC](https://hackmd.io/@lpQxZaCeTG6OJZI3awxQPQ/LN-DLC)

延伸去中心化金融得边界。在闪电网络上也有可能实现 DLC，不需要把交易发到区块链上，可以进一步提高隐私性和扩容。

DLC 的一个局限性是订单匹配。在上面的例子中，Alice 和 Bob 已经认识彼此，而且同意某些条款后就签订了合约。但在现实中，如果人们要使用 DLC，他们需要一个碰面的场所。

一个自然的撮合区域是中心化的市场，比如密码货币交易所，他们可以为想要使用这种合约的用户匹配彼此，这样人们就不必自己去找对手方。交易所不必托管用户的资金，或者交易所自己也可以成为合约的一方。

等到 Taproot

[https://medium.com/interdax/what-is-taproot-and-how-will-it-benefit-bitcoin-5c8944eed8da](https://medium.com/interdax/what-is-taproot-and-how-will-it-benefit-bitcoin-5c8944eed8da)

在比特币网络上激活后，多签名交易看起来脚跟标准的单签名交易别无二致。对 DLC 来说，这意味着更少的链上足迹，因为它们看起来将跟其它标准的单签名交易没有区别 —— 而且手续费更低、隐私性更好。

_想要了解更多关于谨慎日志合约的内容，请看这个视频:_

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=P6AX8KdXAts)

。

---

*Originally published on [BitSafe中文](https://paragraph.com/@bitsafe/dlc-3)*
