跳到主要内容

为什么我们的智能合约刻意不图灵完备,而且本身是一枚链上 NFT

Robert Mao
ArcBlock ChainBlockchainSmart ContractNFTDIDSecurityArchitectureVerifiable Credential

过去十年里,区块链行业几乎形成了一种思维定势:只要提起智能合约,大家脑子里默认浮现的就是 Solidity、字节码虚拟机,以及一句听起来很厉害的宣传语:“图灵完备”。但在 ArcBlock Chain 新一代 Agentic Layer 1 的设计里,我们却做出了一个截然相反的决定。

我们的智能合约不仅刻意放弃了图灵完备、改用一套像商业法律合同一样的声明式领域特定语言(DSL),而且每一份部署上链的智能合约,本身就是一枚拥有独立 DID、带密码学签名与版本治理规则的链上 NFT。

听起来是不是有点离经叛道?但如果把过去十年公链上几十亿美元的合约黑客事件、普通用户面对钱包十六进制乱码时的“盲签”恐惧,以及今天 AI Coding Agent 自动写代码时的幻觉风险放在一起看,你会发现:在关乎真金白银的账本状态机上追求“无限制的图灵完备”,从一开始就是个工程反模式。

为什么图灵完备的嵌套调用栈,在账本上是个糟糕的主意?

我们先回到第一性原理,问一个最朴素的问题:当你在现实商业社会里签一份房屋租约、一份版税分账协议,或者去银行办一张带单日限额的副卡时,你签的那份合同里会有 while 死循环吗?会有调到一半突然跳去执行陌生人代码的回调函数吗?

当然不会 🤣。现实世界里的商业合同本质上是声明式(Declarative)的:它清晰列明参与方、触发条件、分账比例、权利边界和违约兜底条款,绝不会允许其中一方在结算中途劫持控制流。

反观以 EVM 为代表的传统智能合约虚拟机,它把“通用计算”和“价值清算”硬塞进了同一个同步嵌套调用栈(Contract A -> Contract B -> Contract C)里。站在分布式系统与安全工程的角度,这种设计带来了三个几乎无解的顽疾:

  1. 80% 以上的高危漏洞都长在“图灵完备的自由度”上:从早年的 The DAO 事件到层出不穷的 DeFi 闪电贷与重入攻击(Reentrancy),根源都是合约在状态还没有完全落盘、账目还没平账的中间态,就把执行权交给了外部未知合约。再加上无界循环导致的 Gas 耗尽拒绝服务(DoS)、整数精度陷阱和复杂的代理升级存储槽冲突,开发者哪怕请了三家审计公司,依然睡不着觉。
  2. 人类根本没法“所见即所签(Clear Signing)”:一段编译后的图灵完备字节码是个彻底的黑盒。当用户在钱包里点击“确认签名”时,钱包根本无法从数学上静态反推出这段任意代码最终会转走你多少资产,用户被迫在看不懂的哈希串上“盲签”。
  3. AI Agent 写命令式合约极易产生致命幻觉:进入 Agentic 时代后,越来越多的应用由 AI Coding Agent 实时拼装生成。让大模型直接写几百行命令式的 Solidity 合约,哪怕出现一个微妙的状态更新顺序错误,都会直接造成资金归零;但如果让 Agent 生成一份受严格 Schema 与数学不变量约束的声明式配置,AI 就能做到零幻觉、秒级静态自检。

甚至在我们自己早期的探索中,也曾尝试过允许开发者在资产工厂里写轻量级的脚本表达式;但实践很快告诉我们,哪怕只是开放一点点任意表达式,钱包端依然很难把它安全还原成一张老少皆宜的人类可读签字卡片。于是我们下定决心:彻底扔掉命令式代码,用三层确定性架构重写链上可编程性。

第一层减法:用内置原语与原子事务块取代手写胶水合约

在动手写任何自定义规则之前,我们先替开发者砍掉了 95% 原本需要写智能合约的场景。

在传统公链上,你想发一种新 Token、开一个 AMM 兑换池、做一场英式或荷兰式拍卖、或者发一张带额度的礼品卡,都得自己从头部署一套智能合约。而在 ArcBlock Chain 上,这些高频金融与商业动作全部是经过协议层千锤百炼的内置原语。

那如果一个复杂业务需要把好几个原语组合起来(比如“先领取质押收益、再去兑换池把一部分代币换成应用积分、最后铸造一枚游戏道具 NFT 并自动分账给推荐人”),在没有通用字节码合约的情况下怎么完成?

暖调桌面编辑插画:阳光下的制表师石材工作台,左侧透明水晶穹顶内投射出三枚黄铜与青绿模块啮合运转的沙盒预演光影,右侧连接着一座厚重的石材黄铜原子锁闸,上方的黄铜天平保持绝对水平

我们的答案是借鉴现代关系型数据库最成熟的智慧:类 SQL 的链上原子事务块(TransactionBlock)。

开发者或 AI Agent 无需为了一个组合动作专门部署一份“胶水合约”,而是直接在单笔交易里声明一个由多步标准原语组成的事务块(上限 16 步内聚操作),底层状态引擎会像执行数据库 BEGIN ... SAVEPOINT ... COMMIT / ROLLBACK 一样,在写时复制(Copy-on-Write)隔离沙盒上执行:

  • 零副作用沙盒预演(Dry-Run)与静态足迹提取:交易上链前,任何钱包和 Agent 都可以在完全不触碰真实账本的前提下做确定性沙盒预演,提前算出这笔组合交易精确的读写状态集(Read/Write Footprint),这不仅让钱包能直接生成直观的收支预览,还让节点调度器能对互不冲突的交易做无锁并行加速。
  • 客户端后置条件保护(Post-Conditions)与零和守恒铁律:用户在签名时可以直接附加硬性底线,比如“整套事务跑完后,我最多只允许支出 100 枚代币,且必须至少收到 1 枚目标 NFT”。只要中间任何一步滑点超标、或者最终账目没通过协议层的零和价值守恒校验(Zero-Sum Conservation Gate),整笔事务块立刻原子回滚,资产分毫未损。

刻意不图灵完备:像签商业合同一样读懂每一条链上规则

当内置原语和原子事务块解决了 95% 的组合交易后,剩下那 5% 真正需要长期驻留在链上、跨交易持续生效的自定义业务逻辑(比如账户防火墙、复杂商业分润、合规资产准入),就交给了我们刻意不图灵完备的声明式智能合约 DSL。

这套 DSL 的设计哲学非常明确:封闭世界假设(Closed-World Assumption)。它没有循环、没有递归(严格限制单层执行与最高 3 层有向无环图依赖深度)、没有任意外部回调;每一份合约都是由高度结构化的条款(Clauses)拼装而成的确定性状态转换与分流规则。目前它原生覆盖三大核心商业领域:

  1. 账户安全卫士条款(Account Guard Clauses):你可以用几行声明式规则,把自己的账户或 NFT 独立账户变成一座带门卫的金库。最受用户欢迎的是它的四态收件箱(accept | reject | timeout | burn),陌生人转入的资产不会直接污染你的钱包,你可以设置白名单自动接收、拒收退回、超时撤回,甚至对恶意塞进来的垃圾钓鱼空投直接执行 burn(当场销毁),让发垃圾广告的人既赔了链上手续费又折了空投本金!同时它还支持出账额度控制、给 AI Agent 签发限定预算与限定动作的会话授权、大额转账 24 小时时间锁,以及极其符合直觉的元治理安全棘轮(Meta-Guard):收紧安全规则立即生效,放宽安全规则则必须经过主人的硬件 Passkey 签名加时间锁冷却。
  2. 商业瀑布分账条款(Revenue Split Clauses):面向多方共创、组件复用与渠道带货,以精确到万分比(10,000 bps)的声明式瀑布流,定义每一笔收入如何优先扣除前端导流返佣、如何沿着上游最多 3 层依赖的组件供应链自动穿透分润、以及如何以 O(1) 复杂度注入社区贡献者分红池。
  3. 受监管资产合规条款(Issuer Compliance Clauses):面向法币稳定币、企业票据与 RWA 资产发行方,声明式配置黑名单冻结、单笔限额与托管销毁规则,开箱即用满足主流合规跨链标准。

暖调等轴测编辑插画:阳光下的暖白石材、拉丝黄铜与半透明青绿玻璃分拣结算装置,左侧四向机械分拣门将合规晶石包裹送入金库、同时将带刺的暗色垃圾代币直接滑入下方发光熔炉焚毁,右侧阶梯式水晶渡槽将金色水流精准按比例切分为四条固定水道

正因为这套 DSL 刻意放弃了图灵完备,我们在底层内置了8 条静态数学不变量校验器。任何合约在铸造上链前的 0.05 毫秒内,就会完成万分比总和边界、有向无环图无死锁、余数兜底守恒、时间锁下限与不可变条款锁定的完备数学证明。

更重要的是,它实现了人类与 AI 的双向可读(Bidirectional Readability):AI Agent 可以用 JSON/YAML 语法零错误地拼装合约;而当人类用户在 DID Wallet 里打开这份合约时,钱包不需要去猜字节码,直接就能把声明式条款渲染成“你将支付什么、执行什么规则、至少收到什么”的自然语言法律摘要卡片(humanLegalSummary)。

智能合约本身就是一枚链上 NFT:可验证、可组合、可治理

既然智能合约不再是一坨神秘的虚拟机字节码,而是一份结构严谨的数字商业契约,那么它在链上应该以什么形态存在?

在 ArcBlock Chain 上,每一份智能合约在发布上链的那一刻,就被铸造成了一枚标准的链上 NFT(同时也是符合 W3C 标准的可验证凭证 VC)。

暖调编辑插画:阳光石材基座上按时间序列陈列并由发光青绿丝线相连的三块直立晶石黄铜契约铭牌,每块铭牌都像珍贵藏品一样封装,底部嵌有永久锁定的发光青绿核心晶石,顶部装有多把钥匙孔的黄铜治理旋钮

把智能合约做成一枚 NFT,绝不是为了搞概念噱头,而是彻底解决了传统智能合约最头疼的“信任溯源”与“升级治理”难题:

  • 自带密码学身份与版本族谱:每一枚合约 NFT 都拥有自己独立的 did:abt: 地址、确定性规范化哈希(contractHash)、发行方数字签名(proof)以及指向上一版本哈希的溯源链(prevVersionHash)。任何应用或个人在调用这份合约前,一眼就能核验它的签发者是谁、历史上改过哪几版。
  • 用不可变条款锁死上游创作者的安全感:在传统可升级代理合约(Proxy Pattern)里,项目方管理员一旦拥有升级权限,随时可以把合约逻辑偷偷换掉,把原本承诺分给上游组件作者或早期合作方的分成比例改成零。而在我们的合约 NFT 中,支持将指定条款标记为不可变锁定(immutableClauses),并可配置 immutable(永久不可改)、passkey_root、multisig_quorum(多签共识)或 contributor_token_quorum(共同持有者投票)加强制生效时间锁(upgradeTimelockSec)。一旦某位上游 Blocklet 开发者与你的应用签好了 10% 的底层分成并锁入 immutableClauses,哪怕后续合约版本迭代升级,静态校验器也会从协议底层拒绝任何试图篡改或稀释该条款的升级提案!
  • 合约即资产,天然融入可组合生态:因为合约本身就是一枚 NFT,它可以被装进我们在上一篇介绍的 NFT 容器账户里,可以由多人共同持有治理,也可以作为模块化组件在 ARC(Agentic Realm Computer) 的应用市场里被其他开发者和 Agent 直接引用组合。

把复杂留给协议底座,把确定性还给人类与 Agent

软件工程史上每一次真正的大普及,往往都伴随着一次勇敢的“做减法”:当年关系型数据库用声明式的 SQL 取代了程序员手写指针遍历磁盘文件,Web 用声明式的 HTML/CSS 取代了复杂的桌面绘图指令。

区块链智能合约也到了该做这次减法的时候了。

当我们拒绝了图灵完备字节码的虚荣,用内置原语 + 类 SQL 原子事务块 + 刻意不图灵完备的声明式 DSL + 智能合约即链上 NFT 重构可编程账本之后,重入漏洞、盲签黑盒和升级背刺从根源上失去了生存土壤。人类用户终于能像签一份明白账一样看懂每一次链上交互,而千千万万的 AI Coding Agent 也终于拥有了一片零幻觉、可静态证明、可以放心大胆拼装商业应用的坚实大陆。

参考与延伸阅读

本页涉及

产品

  • ARC active

    Blocklet 的运行时。它给开发者一个地方来运行以 Blocklet 描述的应用,连同那个 Blocklet 声明自己需要的资源。

  • ArcBlock Chain active

    为应用的身份、资产与约定而设计的 Layer 1。ArcBlock Chain 将这些常用操作纳入协议,ABT 是公共网络的原生代币。

  • DID Wallet renamed

    在一个应用里创建和管理数字身份(DID),并管理相关凭证。