智能合约 Design

Posted by Lengzhao Blog on July 19, 2026

智能合约设计(单链 · 基于 lengzhao/vm)

日期:2026-07-19
类型:合约 / VM 适配设计
状态:已对齐(跨链 Call = 第一版不做;执行方案见 §0 选型结论)
关联:

  • 2026-07-19-主分片共识-design.md
  • 2026-07-19-账户类型-design.md
    上游参考:lengzhao/vm docs(以链接为准,本文只写本链差异与装配

0. 主流合约方案对比与本链选型

0.1 主流方案一览

方案 代表链 语言/形态 状态模型 并行 生态 与本链契合度
EVM Ethereum、多数 L2 Solidity → 字节码 账户 + 合约存储槽 弱(主路径串行) 最强 低:与 Object/version/声明式并行冲突大
SVM Solana Rust → BPF 程序无状态,账户显式传入 强(Sealevel) 中高:并行哲学接近,但工具链/账户模型需重做
MoveVM Sui、Aptos Move 资源/对象一等公民 强(所有权) 高(状态观接近),但语言与现有 Go VM 路线分叉
WASM CosmWasm、NEAR、部分 Substrate Rust 等 → WASM 多为合约存储 + 消息 中:性能好,与 Object Owner 要自研一层
Go 源码 VM lengzhao/vm Go 源码 + TinyGo/沙箱 默认 Object + 用户 Object 靠 Read/WriteList 最高:已与账户文档同构

补充参考:VM 综论EVM/WASM/SVM/CKB 对比

0.2 各方案要点(架构视角)

EVM

  • 优点:工具、审计、流动性、开发者最多;同步 CALL 可组合性成熟。
  • 缺点:256-bit 栈机偏慢;全局账户存储天然串行;重入等历史包袱。
  • 对本链:若强行 EVM,会放弃 Object 并行与 version 活键优势,等于另做一条「EVM 侧链心智」。

SVM

  • 优点:显式账户列表 → 冲突可知 → 多核并行;吞吐导向。
  • 缺点:Rust/Anchor 栈;硬件门槛;可组合模式与 EVM 不同。
  • 对本链:并行调度可借鉴(你们已有 Read/WriteList);不必整栈换 BPF。

MoveVM(尤其 Sui)

  • 优点:对象/资源与资产安全同语言绑定;Owned/Shared 与并行路径清晰。
  • 缺点:Move 生态与人才池小于 Solidity/Go;与 lengzhao/vm 重复建设。
  • 对本链:账户文档已吸收「Owner + 对象版本」直觉,不必再上 Move 运行时

WASM(CosmWasm 等)

  • 优点:近原生性能、多语言、Cosmos 应用链常见。
  • 缺点:计量与确定性要额外工程;默认不是 Object-UTXO。
  • 对本链:可作为远期第二运行时,不是 v1 最优。

lengzhao/vm(Go 源码)

  • 优点:与默认 Object / 用户 Object / 审查白名单 / Gas 注入已对齐;Go 团队上手快;库式嵌入节点。
  • 缺点:生态与审计市场远小于 EVM;源码合约的确定性/供应链要靠沙箱与白名单扛住。
  • 对本链:与已定账户、单链 Call、Coin Object 阻抗最低

0.3 选型结论(合适方案)

flowchart TD
  R[目标: Object并行 + Go友好 + 快速落地] --> A{是否要最大DeFi生态?}
  A -->|是,可另议| EVM[EVM 兼容层/侧系统]
  A -->|否,本链主路径| B{状态是否已是Object?}
  B -->|是| G[lengzhao/vm 主路径]
  B -->|想要语言级资源| M[Move 重做成本高]
  G --> G1[借 SVM: 声明式读写集并行]
  G --> G2[借 Sui: Owner/version 语义]
  G --> G3[借 EVM: 仅同链同步Call可组合]

推荐方案(定稿)

  1. 主执行引擎:继续 lengzhao/vm(Go 源码合约 + 沙箱 + Gas)。
  2. 状态与并行:账户设计(Object / Owner / version / 续期 / Coin)+ 交易 Read/WriteList(借 SVM/Sui 调度思想)。
  3. 可组合:v1 仅同链同步 Call(借 EVM 可组合,不做跨链 Call)。
  4. 明确不选为 v1 主路径:纯 EVM、纯 MoveVM、纯 SVM/BPF;避免双栈。
  5. 可选演进:生态需要时再评估 EVM 兼容预编译/桥WASM 第二运行时,与主 Object 状态通过适配层互通——不阻塞第一版。

以下各节按该结论做本链装配说明。


1. 目标与范围

定值
语言 Go 源码即合约(非字节码 DSL)
VM 直接采用 / 集成 lengzhao/vm
状态 统一走账户文档的 Object + Owner + version + expire_at
执行域 仅单链:部署、调用、同链 Call
明确不做(v1) 合约同步跨链 Call;跨链资产走共识层消息,不经 VM 跨链调用
flowchart LR
  subgraph 本设计装配
    Tx[交易] --> Node[链节点调度]
    Node --> VM[lengzhao/vm Engine]
    VM --> Host[Host 适配层]
    Host --> Obj[本链 Object 存储]
    Host --> Coin[Coin / Gas / Renew]
  end

文档分工

内容 以谁为准
编译管线、沙箱、安全审查、ABI、Gas 注入细节 vm docs
Owner / version / 续期 / Coin / 并行 ReadWriteList 账户类型-design.md
出块、空块、分片树 主分片共识-design.md
Host 如何把 vm 默认库接到本链 本文

2. 采用 vm 的哪些部分(原文链接)

00_directory_structure 阅读顺序,本链整包采用以下能力:

模块 文档 本链态度
总体架构 architecture.md 采用:源码合约、审查、沙箱、默认库、并行 Object 模式
模块划分 modular_architecture_design.md 采用:以库形式嵌入节点
默认库 default_library.md 采用接口形状;语义按 §4 适配账户模型
执行环境 execution_environment.md 采用:TinyGo、沙箱、并行由集成方调度
Gas gas_metering.md 采用计费思路;支付载体改为 Coin Object
安全审查 security_review.md 采用:白名单 import/关键字、禁全局变量
ABI abi_generation.md 采用
处理流程 contract_processing_flow.md 采用:审查→Gas 注入→编译→ABI→存储

详细设计目录 detailed_design/ 作为实现蓝本,本文不重复展开。


3. 合约生命周期(本链装配)

对齐 contract_processing_flow,部署交易在当前链上执行:

flowchart TD
  A[部署交易: Go 源码 + 部署费/Gas Coin] --> B[安全审查]
  B --> C[编译 + Gas 注入 + TinyGo]
  C --> D[生成 ABI / 可执行文件]
  D --> E[分配合约 Address]
  E --> F[创建默认 Object<br/>Owner=合约 version=1 expire_at]
  F --> G[代码与元数据上链/存节点<br/>状态根可锚定]
  G --> H[可被 Call / 用户交易调用]
阶段 规则
部署 付 Gas(及可选部署费);审查失败则整笔失败
默认 Object 自动创建;Owner=合约地址;承载「全局账户」状态
调用 交易指定 contractfunction、JSON args(vm 约定);带 Read/WriteList
同链 Call 合约内 Call(addr, fn, args...) 仅允许本 chain_id
升级 v1 建议不可变代码;配置放默认 Object 或新建合约迁移

4. 默认库:本链语义适配

接口形状保持 default_library.md;Host 实现须遵守账户设计。

4.1 保留并直通

  • BlockHeight / BlockTime / ContractAddress / Sender / User
  • Log / Assert / GetHash
  • CreateObject / GetObject / GetObjectWithOwner / DeleteObject
  • Object.ID/Owner/Contract/Get/Set/SetOwner

4.2 必须适配的行为

API 本链语义
CreateObject 新对象 version=1expire_at=now+TTL;Owner 初始为合约或按 API 约定
Object.Set / SetOwner 业务写入version+1;校验 Owner 授权;冻结地址拒绝写
GetObject(id) 仅返回活集且未过期;引用侧用 (id, version)
Transfer 语法糖 → Coin Object 拆并 + SetOwner(见账户文档);不再假定独立余额表
Call 仅同链;禁止填其他 chain_id 的合约地址

4.3 本链增补 API(建议)

在默认库同包或 host 扩展中增加(名称可调):

Renew(objectID, extendBy)     // 任何人可调;只延 expire_at;version 不变
SplitCoin / MergeCoin         // 显式 Coin 操作(Transfer 底层用)

Gas:执行消耗按 gas_metering.md扣费从交易声明的原生 Coin Object 扣除(账户文档 §3.2)。

4.4 与 Owner 规则一致

Owner 合约内可写条件
用户 外层交易已带该用户签名,且对象在 write_list
合约 当前执行栈顶/授权栈为该合约
FREEZE_ADDR 任何 Set/SetOwner 失败;Renew 仍允许

5. 安全模型(采用 vm + 本链加强)

完整规范见 security_review.md。本链强调:

  1. 禁止全局变量 → 状态只进 Object
  2. import / 关键字白名单 → 无 unsafe/系统调用等
  3. 沙箱执行 → 无宿主机文件/网络
  4. Gas 上限 → 超限回滚(状态先缓存再提交,见 gas 文档)
  5. 声明式并行 → 交易必须带 Read/WriteList;节点判冲突(账户文档 §4)
  6. 单链 Call 边界 → Host 层强制 callee.chain_id == current

6. 执行与并行(节点侧)

对齐 execution_environment §6 与账户文档:

flowchart TD
  T[区块内交易集] --> C[按 Read/WriteList 建冲突图]
  C --> P[无冲突子集并行调 vm.Engine]
  C --> S[争用默认 Object 等串行]
  P --> V[校验 id@version 活集 + 未过期]
  S --> V
  V --> E[执行 / Gas / 提交或回滚]
  • 写冲突键:(object_id, version)(账户文档已定)
  • 续期交易:目标 Object 可不进 write_list(version 不变);付费 Coin 进 write_list

7. 与共识 / 分片的边界

层级 合约相关
单链内 部署、调用、同链 Call、Object 状态机
父子链 跑跨链合约调用;跨链资产/消息由共识锚定与专门交易类型处理
创链 在首链 CreateChild(共识文档);新链有自己的合约与 Object 空间

合约地址与 ObjectID 建议带隐式 chain_id 命名空间,避免多链 ID 碰撞。


8. 交易类型(合约相关,示意)

类型 作用
DeployContract 源码部署
ExecuteContract 调用函数 + args + Read/WriteList + Gas Coin
RenewObject 任意人为任意 Object 续期(也可由合约 API 触发,效果相同)

参数编码:与 vm 一致,调用数据可用 JSON(function + args)。


9. 决策记录

选择
VM lengzhao/vm(Go 源码合约)为主路径;不选 EVM/Move/SVM 作 v1 主引擎
借鉴 SVM/Sui 的声明式并行与对象版本;EVM 的同链同步 Call
文档策略 vm 原文为细则;本文为装配与差异
跨链合约 Call v1 不做(选项 A)
状态 账户设计 Object/version/expire_at/Coin
Transfer Coin 语法糖,无独立余额账本
Gas 支付 原生 Coin Object

10. 待标定 / 实现清单

  • Host 适配层:Object 存储、签名集、version 校验、单链 Call 守卫
  • 默认库包路径:沿用 github.com/lengzhao/vm 或 fork 改模块路径
  • 部署费是否与 Gas 分离
  • 合约代码上链 vs 仅存内容哈希 + 节点存储(GOVM/多链下存储策略)
  • Gas 表是否按账户模型微调(CreateObject/Renew 单价)
  • 白名单是否允许合约 import 同链已部署合约源码模块(vm 流程已支持「可 import 模块」)

11. 阅读指引

  1. 本文 §1–§4(装配与差异)
  2. architecture.md
  3. default_library.md + security_review.md
  4. gas_metering.md + contract_processing_flow.md
  5. 账户类型-design.md(状态真相)
  6. 实现时再下钻 detailed_design/

本设计 = lengzhao/vm 合约栈 + 本链账户/共识约束;不复制 vm 全文,避免双源漂移。