智能合约

通道合约

我们在闪电通道RSMC合约的基础上,将闪电网络RSMC合约框架,进一步升级成为一个协调多方动作的框架,我们称之为通道合约。

通道合约是一种多方认可并共同执行和维护的合约,可以认为就是多方签署了一份由源代码构成的合同,按照这些源代码规定的动作执行。合约目前以模版的方式提供,通过在聪网节点内置这些合约,确保合约的部署,运行和验证是分布式进行的。

通道合约实现了智能合约的部分功能,但是目前并不具备EVM的完整功能。 目前已经提供的这几类

  • Transcend,资产穿越合约,替代闪电网络通道,任何人都可以跟该合约交互,自由在主网和聪网之间穿越资产(通过一个多签钱包和聪网交互)

  • Launchpool,发射池合约。可以在主网部署资产ticker,铸造并自动穿越到聪网,在聪网做二次分发,发射成功后留下一个底池,支持AMM交易

  • AMM,AMM交易合约,一个可以添加流动性的AMM交易池子,交易速度快,费用低,添加流动性还可以分享池子收益

  • LimitOrder,限价单交易合约,不喜欢AMM交易模式的,也可以挂限价的买单或卖单,按照自己期望的价格进行交易

通道合约是聪网的关键创新之一,其潜力无限,支持WASM,这是聪网后续发展的重要支柱,其功能性和灵活性远远大于其他在比特币网络实现智能合约的方案。

脚本合约

将现有的btc脚本语言升级,使其成为一个图灵完备的脚本语言,这是一条在主网上已经探索并且推动多年的路径。不可否认这是一条可行的路径。但比特币网络的设计理念,其实跟链上实现图灵完备的脚本语言是冲突的。

比特币脚本(Bitcoin Script)从设计之初就是一种受限的、非图灵完备(non-Turing-complete)栈语言,它主要用于表达“这笔币可以在满足哪些条件时被花费”,而不是用于执行一般意义的计算。

一个开发语言是图灵完备的,当且仅当它能:

  • 表达任意计算逻辑(条件、循环、递归等)

  • 具备无限状态的能力(例如通过循环可无限运行)

而比特币脚本语言,缺少:

  • while、for、goto 等循环结构

  • 任意内存读写能力

  • 动态跳转与函数调用

  • 动态长度执行栈扩展(栈深有限)

因此,比特币脚本在设计上被严格限制为“有限计算”模型。这种设计原则,目标是为了:

  • 防止拒绝服务攻击(DoS) 区块链上的每个节点都必须验证脚本。 如果脚本允许循环或递归,就可能造成无限执行或高复杂度执行。 这会导致一个恶意交易就能让节点CPU暴涨、验证阻塞。 而非图灵完备保证所有脚本在有限步内执行完毕。

  • 可预测的验证成本 比特币每个交易的验证成本必须是确定的: 交易验证时间 = 区块传播时间 区块传播时间决定网络共识的稳定性 非图灵完备 → 验证复杂度固定上界,网络共识更安全。

  • 简化安全审计 图灵完备语言极难完全验证安全性(Halting Problem)。 比特币脚本的非图灵完备性让每个分支都能静态分析,确定执行路径。

  • 共识一致性与去中心化实现的现实约束 每个节点必须运行相同的脚本解释器。 复杂脚本语言更容易导致: 不同平台执行结果不一致(Endianness, Integer overflow) 实现差异(共识分叉)

因此,比特币故意不图灵完备,以确保主网的安全性、稳定性和可扩展性。这也是比特币分层设计哲学的体现。比特币主网(L1)只负责:

  • 最终结算(Final settlement)

  • 状态安全性与抗审查性

而复杂计算逻辑交给L2或侧链实现,闪电网络的设计本意,就是成为BTC网络的扩展网络。

从上面的讨论已经可以看出,比特币脚本的非图灵完备是设计的结果,不可能改变这个共识。即使社区现在很热的激活OP-CAT指令的呼声,也不可能改变这个共识。激活OP-CAT的BIP347方案大致内容如下:

  • 限制拼接结果最大长度(例如 ≤ 520 bytes)

  • 禁止递归拼接

  • 不引入跳转指令

  • 不改变栈深规则

这样可以在不引入循环、递归的前提下安全恢复 OP_CAT。

所以结论如下:

  • 在不违背“主网保持非图灵完备”的设计哲学的前提下,OP_CAT 属于 “安全边界内的功能增强”。

  • 中长期(2025–2027)激活的可能性较高,但比特币主网仍不会走向图灵完备化。

所以主网链上图灵完备的智能合约的可能性,基本等于零。 聪网虽然可以做的更多,但一个技术如果在主网上没有被应用的可能性,值不值得做,就看该技术本身是否是最佳方案了。从目前的探索结果来看,直接在指令集上做更多的增强,才有可能实现图灵完备的脚本语言,但复杂度比较高,而且开发成本非常高。而目前已经实现的通道合约的方案,开发成本低,方案更灵活,是聪网上最佳的实现智能合约的方案。

Last updated

Was this helpful?