# BitVM桥与OP-DLC:新一代比特币Layer2跨链桥的设计思路 **Published by:** [BitSafe中文](https://paragraph.com/@bitsafe/) **Published on:** 2024-06-03 **URL:** https://paragraph.com/@bitsafe/bitvm-op-dlc-layer2 ## Content 原文链接: https://mp.weixin.qq.com/s/LDUgh7EG1lHrw7ZA2gBE2w(DLC原理图) DLC:谨慎日志合约 DLC(Discreet Log Contracts)名为谨慎日志合约,由MIT的Digital Currency Initiative提出,该技术最早用于在比特币上实现一种轻量级的智能合约,不需要把合约的内容上链,就可以通过链下交互式通讯和预签名等方法,在比特币链上实现出保护隐私的智能合约功能。下面我们通过一个赌球案例来说明DLC的工作原理。 假设Alice与Bob要对3天后举行的皇马和巴萨的比赛结果打赌,两人各出1个btc。如果皇马胜出,则Alice可以获得1.5 BTC,Bob只能收回0.5 BTC,这就相当于Alice赚0.5个BTC,Bob亏损0.5 BTC;如果巴萨胜出,Alice只能收回0.5 BTC,Bob则可以拿走1.5 BTC。如果平局,两人各自从拿回1个BTC。 如果我们要让上述对赌过程变得去信任化,就要想办法防止任何一方耍赖,如果单纯用2/2多签或是2/3多签,显然还不够去信任。DLC针对这一要点给出了自己的解决方案(要依赖于第三方预言机)。其整个工作流程大体可以分为四部分。 以前面的Alice和Bob为例,首先,双方在链下创建一笔fund交易,这可以把彼此的1枚BTC锁在2/2多签地址上,如果这笔fund交易生效,则该多签地址里的2枚BTC需要双方都授权,才能被花费。 当然,这笔Fund交易先不上链,只留存在链下的Alice和Bob客户端本地,他们都知道这笔交易生效后会有什么后果。目前双方只是在进行理论推演,然后根据推演的结果达成一系列协议。 在DLC创建的第一阶段,我们可以确定的是,双方将在未来把各自的1枚BTC锁入一个多签地址中。第二步,双方继续推演未来可能发生的事件和结果:**比如,当球赛结果公布后,可能是Alice赢Bob输、Alice输Bob赢、平局等多种可能,这会导致前述2/2多签地址中的比特币出现不同的分配结果。 不同的结果需要由不同的交易指令来触发,这些**“可能在未来上链的交易指令”被称为CET**,即合约执行交易(Contract Execution Transaction)。Alice和Bob要事先推演出所有的CET,生成包含全部CET的交易数据集。 例如,根据前述Alice和Bob对赌的几种可能结果,Alice创建出以下几种CET: CET1:**Alice可从多签地址获得1.5枚BTC,Bob可获得0.5枚BTC; CET2:**Alice可从多签地址获得0.5枚BTC,Bob可获得1.5枚BTC; CET3:**双方各自可获得1枚BTC。 我们以CET1为例(Alice拿 1.5 BTC,Bob拿 0.5 BTC): 这笔交易的意思是,把多签地址中的1.5枚BTC,转移到一个由Alice和预言机输出结果共同触发的Taproot地址,另外0.5枚BTC转移给Bob的地址。此时对应的事件是:皇马胜出,Alice赢0.5BTC,Bob输0.5BTC。 当然,要花费这1.5枚BTC,Alice必须拿到预言机发送的“皇马胜出”结果签名。换句话说,只有当预言机输出“皇马胜利”的消息后,Alice才能够把这1.5枚BTC转走。至于CET2和CET3的内容,我们可以以此类推,在此不赘述。需要注意的是,CET本质是一笔待上链待生效的交易,如果Alice提前把CET1广播出去,或是在“巴萨胜出”的情况下,仍然把“皇马胜出”后才能顺利触发的CET1上链,会发生什么? 前面的示意图中,我们提到,CET1上链后,会把原始多签地址中锁定的2枚BTC转走,0.5枚BTC转给Bob,1.5枚BTC转到一个Taproot地址中,预言机输出“皇马胜出”后,Alice方能解锁Taproot地址锁定的BTC。效果如下图所示。 同时,这个Taproot地址受到时间锁限制,如果在时间锁规定的窗口期内,Alice无法成功提走1.5枚BTC,则Bob有权把这些钱直接拿走。 所以,只要预言机是诚实的,Alice就无法拿走这1.5枚BTC,等时间锁期限耗尽,Bob可以把这1.5枚BTC拿走。再算上CET1上链时直接转给Bob的那0.5枚BTC,最后所有的钱都会归Bob所有。对于Alice而言,无论自己最终是赢还是输,最有利的做法都是把正确的CET上链,把无效的CET上链会让自己输更多钱。 其实上述CET在构建时,对Taproot的schnorr签名做了改进,可以理解为利用预言机的公钥+事件结果,针对不同结果构造出彼此独立的地址。之后,等预言机公布某个结果对应的签名,才能花费该结果对应的地址上锁定的BTC。 当然,这里面存在一种额外的可能。假如Alice知道自己输了,干脆不把自己构建的CET1上链,这个时候怎么办?这个很好解决,因为Bob可以针对“alice输,Bob赢”一事构建出自定义的CET,这个CET达成的效果和Alice构建的CET基本一致,只是具体细节不一样,但结果是一样的。 上面讲述的就是最关键的CET构建流程。而DLC的第三步,是Alice和Bob双方进行通讯,检查对方构建的CET交易,带上自己对该CET的签名,检查无误后,可以信任彼此,便各自出资1枚BTC,锁入最开始提到的那个Alice和Bob的2/2多签地址,然后等待某个CET被上链,触发后续的流程。 最后,等预言机公布结果,拿到预言机对结果的签名后,任意一方可以把正确的CET上链,让多签地址中锁定的2枚BTC被再分配,如果输家抢先把错误的CET上链,会让自己损失所有的钱,如果把正确的CET上链,输家还可以收回0.5BTC。可能有人会问,**DLC与普通的2/3多签有何不同?**首先,2/3多签下,任意两方串谋即可盗走全部资产,而DLC通过提前构建CET集合的方式,让对手方之间把全部的场景都限制住了,就算预言机参与串谋,造成的损失往往也有限。 其次,多签需要各方针对具体的待上链交易进行签名,而在DLC的设定下,预言机只需要对特定事件的结果进行签名,不需要知道CET/待上链交易的内容,甚至完全不需要知道有Alice和Bob这两个人,只需要像普通的预言机那样和用户进行正常的交互即可。 我们可以认为,**DLC本质是把对多签参与方的信任转变成了对预言机的信任,**只要预言机不参与作恶,就可以保证DLC的协议设计足够去信任。理论上来说,DLC可以采用比较成熟完善的第三方预言机,来避免作恶。而DLC.link利用了DLC的这种特性,把桥的信任问题转嫁给了第三方预言机。 ## Publication Information - [BitSafe中文](https://paragraph.com/@bitsafe/): Publication homepage - [All Posts](https://paragraph.com/@bitsafe/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@bitsafe): Subscribe to updates - [Twitter](https://twitter.com/NonFungible_Amy): Follow on Twitter