# 智能合约的其他可能
— — DLC的启示

By [Untitled](https://paragraph.com/@0xeccad75bb404803a15a94058400c6aed8311c8d3) · 2022-04-02

---

最近了解了BTC原生的谨慎日志合约DLC( Discreet Log Contracts)，打破了我对于智能合约存在形式的一些固有的、僵化的观念。我想，许多和我一样从以太坊开始了解区块链的人应该都容易产生类似的有局限性的观念。所以特意写下此文，与各位探讨一二。

1.  去中心化=逻辑上链？ 从了解智能合约开始，我就被反复告知：智能合约的所有逻辑都是公开的，所有人都可以看到。我的第一感觉是：这真不错，这意味着开源是智能合约的原生属性。紧接着我顺理成章地认为，既然开源了，那自然是去中心化了，因为公开了逻辑之后，项目方就不能随意篡改了，用户也可以通过看代码来核验项目方没有在作恶。到目前为止，一切似乎都make sense。 但是，DLC让我看到了另一种可能。 之前，持有BTC的用户想要赚取被动收益，大致有两条道路： 一是将BTC存到中心化的BTC银行(e.g. Blockfi, Celsius)； 二是将BTC变成WBTC，放到其他区块链的借贷协议。 方案一，用户丧失了控制权，面临着银行的破产风险；方案二，WBTC依赖中心化托管，且借贷协议带来了智能合约风险。这两条道路都依赖第三方信用，与BTC的“信任最小化”精神背道而驰。 可是，由于BTC只有转账功能，我们似乎没有办法在BTC上创建一个原生的借贷协议。 这时候，就需要打破常规思维的限制，除了借贷，还有什么赚取被动收益的方式吗？ 有的，比如说：创建一个covered call。 Covered call，即在持有现货的同时，卖一个call。放到我们的使用场景，这将会发生两种情况：
    
2.  在到期时call是OTM的，即BTC价格比行权价低，此时call持有者不会行权。用户持有的BTC不变，并获得被动收益call price。
    
3.  在到期是call是ITM的，即BTC价格比行权价高，此时call持有者会行权。用户持有的BTC为原有BTC的一定比例（行权价/现价），并获得被动收益call price。 Atomic.Finance就是通过DLC构建撮合期权买卖双方的逻辑，使得BTC持有者可以不依赖任何第三方就获得被动收益。具体来说，它是这么做的：
    
    _在链上创建一个多签地址，用户A打入抵押品BTC，做市商B打入买call的钱。_
    
    _在链下，A和B将运用DLC，共同创建2个需要预言机状态的交易签名。即对应上文提到的call OTM和ITM两种情况，分别创建： 交易签名1：Oracle (call OTM) + A signature + B signature => transfer all the BTC in the multisig contract to A 交易签名2：Oracle (call ITM) + A signature + B signature => transfer part of the BTC in the multisig contract to A and the rest to B_
    
    _当交割日到了后，2个交易中只有一个交易是有效签名。预言机将启动那笔有效的交易。_ 运用这种方法，用户将全程掌控自己的私钥和交易信息。不像以太坊将智能合约的全部逻辑公开到网络上，DLC使得大部分智能合约的逻辑都发生在链下。或者更准确地来说，是逻辑的构建过程发生在链下。对于不参与这笔交易的旁观者来说，在交割之前，没有人知道这个多签地址上进行的是一笔期权交易。而在交割之后，任何人都可以验证这笔交易是一笔期权交易。 这就回到了我开头的问题：去中心化一定要逻辑上链吗？ 答案似乎是否定的。
    
4.  我们在去中心化什么？ 近期看了加密领域的祖师爷Nick Szabo在2001年写的文章Trusted Third Parties are Security Holes，有一种醍醐灌顶的感觉，让我得以重新思考“去中心化”这个命题。 其中有一句话令我印象深刻：引入第三方机构来解决协议的信任和安全问题，本质上是通过传统的安全和控制方法来解决一个未解决的安全问题。即，引入第三方机构并没有从根本上解决安全问题，只是将一个安全问题变成了另一个安全问题。 而区块链技术做的，就是不引入第三方，用协议的设计来解决安全问题。 在进一步探讨之前，让我先厘清一下，“传统的安全和控制方法“究竟是什么方法，以及，为什么去中心化信仰者坚持要去除第三方机构？ 在我看来，“传统的安全和控制方法”，是一个集合了法律、监管、政策等等近现代治理观念和手段的集合。简单来说，传统的安全和控制方法就是在一切活动中都开一个允许法律、监管介入的口子，当遇到纠纷时，法律和监管便充当“正义的使者”的身份，给一个公道的裁决。而进一步抽象化，传统的安全和控制方法本质上就是把“交互双方谁对谁错“的问题，转化成了“第三方机构认为谁对谁错”的问题。在传统世界，第三方机构，本质上就是权力拥有者。在民主国家，权力拥有者是代表民意的政府；而在专制独裁国家，权力拥有者就是集合在独裁政权周围的特权团体了。 说到这里，大家是否有意识到传统世界的一些诡异之处？是非问题就这么不着痕迹地转化为了观点问题，而观点的倾向将直接来自于权力的大小。所以，人类表面上构建了现代文明社会，但归根结底还是丛林法则在起作用，比谁的拳头更硬？ 以上的说法有点偏激和极端了。从文明的进程角度看，法律、监管、政府等概念的出现无疑是有进步性的，依赖代表一定程度共识的、不可随意篡改的法律条文，总好过依赖执法者的一时兴起。但是，传统方案并没有从根本上解决安全问题。“第三方机构”的裁决，只能说是“正义的裁决”的一个近似。而很多时候，这个可以随意踏足任何活动的“第三方”角色，往往是作恶的源头。 那么，该怎样解决安全问题呢？ 区块链技术从另一种角度给出了答案。 不再寄希望于外界进行“公正的裁决”，区块链技术让交互双方自己承担起安全的责任。你需要理解你的签名意味着什么，能够对此负责的，仅有你自己而已。 这是一种返璞归真的智慧。当增添条件使问题变得更糟糕时，不妨尝试去掉它。
    
5.  P versus NP 从第2部分我们得知，去中心化本质上是让用户为自己的安全负责，堵住了第三方插手的通道。而用户之所以能与他人进行“去信任化”的交互，是因为区块链技术提供了验证交互逻辑的手段。 是的，区块链技术的本意，是“验证逻辑”，而不是“构建逻辑”。 从某种意义上说，用区块链技术来“构建逻辑”，是一种莫大的资源浪费。 其实，验证逻辑和构建逻辑的联系，是计算机科学的一个经典问题了，即著名的“P versus NP problem”: It asks whether every problem whose solution can be quickly verified can also be solved quickly. (from Wikipedia) 不过今天，我的重点不是探讨这个困扰大家多年的悬而未决的问题的答案的。只是从P与NP问题的角度，来分析以太坊和比特币所蕴含的两种处理逻辑的方式。 以太坊将智能合约逻辑全部公开上链，即是用解决问题的过程，来验证逻辑的正确性。这本质上，是“P versus NP”的一个逆向逻辑：problems that can be solved can be quickly verified. 这在科学界是一个没有争议的真命题。 比特币只将智能合约逻辑的验证部分上链，即是用验证逻辑的方式，来证明问题已经被解决了。这就是“P versus NP”问题本身了。尽管科学界暂时对此还没有定论，但现在主流的观点普遍认为，NP问题的集合是大于P问题的，即可解决问题的集合是可验证问题集合的一个子集。从这个角度上来说，比特币涉及到了比以太坊更广阔的问题范畴。或者可以这么说：比特币的格局比以太坊大。 这是一个和主流观点相反的结论。以太坊引以为傲的可以构建逻辑的智能合约，反而成了它局限性的来源？ 我认为是的。
    
6.  硬件or软件 谈起以太坊的现有问题，gas fee贵和网络拥堵且缓慢应该是没有什么争议的前两位。所以，近年来许多技术革新：layer2、侧链、分片都致力于解决这两个问题。 这些解决方案虽然各有各的特点，但是核心的思想是一样的：通过为以太坊增加逻辑，使以太坊有更强大的功能。 这是顺理成章的想法，也是最容易想到的解决方案，只要以太坊有更大的承载能力，那么gas自然就降下来了，网络自然就没那么拥堵了。如果把以太坊看作一台世界计算机，这些方案就是升级“硬件”的方案。 然而，或许我们应该从另一个角度思考，以太坊之所以承载能力不够强，真的只是因为“硬件”不够用吗？在软件上，它有没有问题呢？ 我认为是有的。而且软件上的问题，才是以太坊的根本问题。扩容只是治标不治本，承载能力强了，用户也更多了，gas fee还是一样贵，网络还是一样拥堵。以太坊的根本问题，在于把“验证逻辑”的功能扩充为了“构建逻辑”，使得链上资源被滥用。这种滥用，不仅带来了资源浪费、成本增加这些表面上的问题，更要命的是，还引入了始料未及的安全漏洞。
    
7.  逻辑封装的单位 在以太坊上开发，无疑是不容易的工作。因为你无法知道其他人会用你的代码做什么。你会留下一些接口，其他人可以不经你允许就进行调用。一方面，这大大促进了合作和创新，但另一方面，这也打开了不可预知的风险敞口。 曾经，我认为以太坊上的黑客攻击是这个系统正常的自我纠偏，是以太坊保持生机和活力的重要保障。但现在，我有了些许动摇。 以太坊将构建逻辑当作了主要功能，这也使得开发者在封装接口的时候，把“可构建”当作了封装的单位。然而，“可构建”不等于“可验证”，当一系列与预想不一致的“可构建”逻辑组合起来，很有可能超出“可验证”的预想，发生灾难。 然而，灾难是难以避免的。因为潜在的“可构建”的逻辑组合是无穷的，黑客有动力去发掘这些漏洞，但是用户往往没有。 一种更科学合理的智能合约构建方法，是用“可验证”的逻辑组合，代替“可构建”的逻辑组合。比特币的DLC就是一种启发。
    
8.  一种中间道路 我认为，区块链技术应该只用于验证逻辑，构建逻辑应该发生在链下。这样做，不仅可以让宝贵的链上资源效用最大化，还能最小化用户的链上足迹，减少不必要的安全风险。 而实现路径，我暂时的设想是一种介于比特币和以太坊的中间道路。区块链需要有智能合约功能，但是这个功能是只以验证逻辑为目的。不同的智能合约之间仍然可以进行交互，但是交互的逻辑块单位必须是“可验证的”。 这也是为什么我认为新公链赛道还有无限可能。以太坊与比特币，就好像坐标系上的两个端点，中间还有太多可能的状态值得我们探索、思考和发掘。

---

*Originally published on [Untitled](https://paragraph.com/@0xeccad75bb404803a15a94058400c6aed8311c8d3/dlc)*
