Skip to content

OTP-006: 合约包

该提案定义了一种将已编译合约、其依赖项以及所有相关元数据打包到单个文件中的方法。

动机

需要一种统一的包格式,以简化使用各种工具部署和升级合约的过程,而无需配置它们。

规范

包文件扩展名为 .pkg,并且是一个 JSON 文件:

json
{
  "name": "My Contract",
  "code": "... boc of code ...",
  "abi": "ABI string to be uploaded as is to IPFS or Ton Storage",
  "init": {
    "kind": "direct",  // 表示该合约可以直接部署
    "args": {
      // ... ABI 格式的参数
    },
    "prefix": {
      // 合约初始化状态的可选前缀
      "bits": 0,  // 前缀中的位数
      "value": 0  // 前缀的值
    },
    "deployment": {
      "kind": "system-cell",  // 表示该合约可以直接部署
      "system": "... boc of system cell ..."
    }
  },
  "sources": {
    "file.ton": "... base64 encoded source file ..."
  },
  "compiler": {
    "name": "func",
    "version": "0.4.1",
    "parameters": "..."  // 可选的字符串参数
  }
}

字段解释

  • name: 合约的名称。
  • code: 合约代码的 BOC(Bag of Cells)格式。
  • abi: 合约的 ABI 字符串,可以直接上传到 IPFS 或 Ton Storage。
  • init: 初始化数据,包括:
    • kind: 初始化类型,例如 direct 表示合约可以直接部署。
    • args: 初始化参数,采用 ABI 格式。
    • prefix: 可选的初始化状态前缀,包括:
      • bits: 前缀中的位数。
      • value: 前缀的值。
    • deployment: 部署信息,包括:
      • kind: 部署类型,例如 system-cell 表示合约可以直接部署。
      • system: 系统单元的 BOC 格式。
  • sources: 源文件,以 base64 编码。
  • compiler: 编译器信息,包括:
    • name: 编译器名称。
    • version: 编译器版本。
    • parameters: 可选的字符串参数。

缺点

参考

BOC(Bag of Cells): BOC 文档