CLVM:钱上贴的程序,跑完只答『可以花吗』 图 1
CLVM:钱上贴的程序,跑完只答『可以花吗』 · 图 1

提到合约虚拟机,多数人会条件反射想到以太坊:账户、存储、函数调用。Chia 及其生态选择的 CLVM 是另一种世界观:没有账户、没有持久存储、程序跑完不留任何东西——它回答的问题只有一个:这笔钱现在可以被花吗?答案的形式也不是『状态更新完成』,而是一份条件清单,逐项列给全网的验证节点:新的钱归谁、需要哪些签名、时间锁过没过。CLVM 的存在感不强,但它是理解『图灵完备脚本可以不靠状态也成立』这条路线最好的样本。

一个 LISP,小到不能再小

CLVM 全称 Contract Language Virtual Machine,属于 LISP 家族——代码就是括号套括号的列表,前缀写法,程序和数据是同一种东西。方言被刻意削到极小:核心指令只有求值、应用、算术、比较、列表操作、哈希等少量原语,字节码就是序列化后的程序本身,没有寄存器也没有栈帧操作指令。钱在 Chia 里以『币(coin)』为单位,每个币三样属性:父币标识、金额、谜题哈希——锁定脚本的哈希。花一笔钱的动作叫『花费(spend)』,需要提供两样东西:完整的谜题程序原文(哈希对得上锁定时的承诺)和一个求解参数(solution)。节点执行的是一次纯求值:把谜题和求解丢进 CLVM,得到一个列表作为输出。程序语言层面没有分支跳转表、没有函数对象、没有循环指令——靠求值指令与条件指令递归,图灵完备,但没有任何全局副作用可写。

程序不许碰世界,只能列愿望清单

CLVM 与 EVM 最大的性格差异是:它跑的时候根本不知道外部世界——看不见区块高度、看不见当前时间、看不见别的币的存在。这不是功能缺失,是设计上的洁癖:程序与区块链之间隔一层合同。求值的输出必须是一份条件(conditions)列表,每条形如 (操作码 参数...) 的小清单:CREATE_COIN 声明新币的归属与金额,AGG_SIG_ME 声明需要某个公钥对某段信息签过名,ASSERT_HEIGHT_RELATIVE 声明距创建至少过了多少区块。验证节点拿着这份清单逐项对照链上事实:新币承诺对不对、签名验得过验不过、时间锁到没到期——任何一条不满足,整笔花费作废。这就是『程序不能读世界,只能对世界许愿,世界负责逐条勾卷』:合约逻辑与共识检查被一分为二,脚本负责计算要什么,节点负责核现实给不给得起。Chialisp 在这之上提供宏与模块,编译成 CLVM 的括号树,日常写的其实是这一层。

与 EVM 的三组对照

和 EVM 对照着看,差异立刻清晰。状态观:EVM 的世界有一本永远在改的大账,合约是账上的账户,调用会改存储;CLVM 的世界里没有账,只有一个个自包含的币,花费是销毁旧币、按条件清单创建新币,没有『合约地址』这回事。可组合观:EVM 的原子性来自同一次交易里的嵌套调用,一个交易调用十个合约像做流水线手术;CLVM 的跨币协调靠『宣告(announcement)』机制——一个币花费时宣告『我发了这条消息』,另一个币花费时断言『必须有人宣告过这条消息』,多个独立花费靠消息摘要对齐,交易里凑不齐宣告就全体无效。复杂度观:EVM 有 Gas 与操作码定价表管着资源滥用;CLVM 用成本表逐原语计费,同样能防资源型拒绝服务——LISP 的简洁不等于免费午餐,求值一样按成本计量。三组对照里最有启发的还是第一组:状态不是智能合约的必要条件,只是以太坊选定的必要条件。

适合什么,不适合什么

CLVM 的世界观偏爱能表达成『花费条件』的合约:多签、时间锁、哈希锁、带条件分叉的支付通道、按条件转移的限定用途资金——逻辑短、事实明确、验证即判定。不擅长的是需要长期聚合状态的场景:去中心化交易所的自动做市商、复杂借贷协议,把状态散在币上的写法要么靠固定合约合约(固定谜题哈希的虚拟账户)打补丁,要么干脆做不了。生态演化也诚实:Chia 的 DeFi 层在标准条件之外长出了若干新条件类型与合约服务来补状态类需求。判断一个链的脚本系统走哪条路,看它把钱锁在哪:锁在程序上(比特币、Chia)还是锁在账户上(以太坊),后面的一切差异——可组合性、隐私形态、升级策略——都是这个选择的影子。

快速问答

CLVM 图灵完备为什么还不能随意写合约?图灵完备保证程序算得出,但『调用外部链上状态』这类需求不是求值问题,是没有对应条件操作码就无从表达。

宣告机制和事件日志是一回事吗?方向相反:EVM 事件是执行过程的输出供链下索引;宣告是花费之间的握手凭证,链上验证时逐条核对,不满足整笔作废。

Chialisp 和 CLVM 什么关系?Chialisp 是高级语言(带宏、模块、 curry 语法),编译成 CLVM 的字节码;类比 Solidity 与 EVM 字节码,只是编译目标括号小得多。

风险提示:本文仅作脚本系统机制科普,不构成任何投资建议。