Skip to content

概述


什么是 UTXO_Compiler

UTXO_Compiler(可执行文件名 utxo_compiler)是一个面向比特币 UTXO 模型的智能合约编译器。它接受以 .ct 为扩展名的高级合约源文件,将其编译为可嵌入比特币交易锁定脚本的 BVM 字节码。

合约语言的语法脱胎于 Python——使用缩进划分代码块、def 定义函数——但加入了强制类型声明和一套编译期所有权检查机制,帮助开发者在部署前发现数据误用问题。


比特币智能合约的运作方式

UTXO 模型

与以太坊的账户模型不同,比特币采用 UTXO(Unspent Transaction Output,未花费交易输出) 模型。每一笔比特币交易消耗若干旧的 UTXO,同时产生新的 UTXO。

每个 UTXO 携带两样东西:

  • 聪(satoshis):这个输出锁定了多少比特币
  • 锁定脚本(locking script):一段字节码,规定了"什么条件下才能花费这笔钱"

花费 UTXO 时,发起方需要在交易输入中提供解锁脚本(unlocking script)。只有当解锁脚本与锁定脚本联合执行后结果为真,花费才被网络认可。

  上一笔交易的输出                当前交易
  ┌──────────────────┐           ┌──────────────────────┐
  │ value: 100000聪   │ ─────────▶│ 输入:解锁脚本(钥匙) │
  │ 锁定脚本(密码锁) │           │ 输出:新的锁定脚本    │
  └──────────────────┘           └──────────────────────┘
         锁                              钥匙 + 新锁

智能合约就是在锁定脚本里写入自定义逻辑:不只是验证签名,还可以验证时间、数据格式、多方条件等任意可编程条件。

BVM 是什么

BVM(Bitcoin Virtual Machine)是执行锁定脚本/解锁脚本的底层虚拟机,是一台基于栈的状态机。它没有堆,没有全局变量,只有两个栈(主栈和副栈)和一组操作码。

UTXO_Compiler 将你的高级合约代码翻译成 BVM 能直接执行的操作码序列。理解 BVM 的栈模型,是读懂编译器行为和所有权系统的关键。更多内容见 比特币基础


UTXO_Compiler 是如何工作的

  合约源码 (.ct)


  ┌──────────┐
  │  词法分析  │  将源码切分为 Token 流(关键字、标识符、字面量…)
  └──────────┘


  ┌──────────┐
  │  语法分析  │  构建抽象语法树(AST)
  └──────────┘


  ┌──────────┐
  │  语义分析  │  类型检查 · 所有权验证 · 作用域解析
  └──────────┘


  ┌──────────┐
  │ 字节码生成 │  AST Visitor 遍历 → BVM 操作码序列
  └──────────┘


  JSON 格式字节码(锁定脚本内容)

整个编译流程由内部的 Pass Manager 驱动,各阶段以独立 Pass 的形式注册执行。


语言的核心设计取舍

显式类型声明

所有函数参数、结构体字段都必须声明类型。没有自动类型推断,没有 var / auto。这看起来有些繁琐,但在 BVM 这种零容错环境里,"你在代码里看到什么,栈上就发生什么"是比简洁更重要的属性。

编译期所有权检查

局部变量在被传入内置函数或赋值给其他变量后,原变量即被"消耗",之后不能再次引用。这个机制直接对应 BVM 的栈弹出语义——在底层,变量被使用就意味着栈上的值被弹走了。所有权系统让编译器在编译期就捕获这类错误,而不是等到链上执行时出错。

合约状态固化在字节码中

合约成员变量会被直接编译进字节码本身,需要用户在字节码中用不同数据替换以生成不同的锁定脚本。这是 UTXO 模型"状态即代码"特性的直接体现,与以太坊那种"合约地址 + 链上存储"的模型有根本区别。

单合约文件

每个 .ct 文件包含且仅包含一个合约。这与"一个 UTXO 对应一段锁定脚本"的模型天然对齐。


与其他方案的横向对比

UTXO_Compiler .ctsCrypt (BSV)Bitcoin Script(原生)
抽象层级高级语言高级语言汇编级
语法风格Python-likeTypeScript-like操作码序列
类型系统强类型强类型无类型
所有权检查✓ 编译期
调试工具内置交互式调试器插件支持
构造函数手动嵌入手动嵌入

下一步


🇬🇧 English version

基于 MIT 许可发布