Skip to content

OTP-002: 合约 ABI

ABI 定义了如何与智能合约进行通信。它包含有关合约接收者、数据结构等的信息。

动机

ABI 是一个重要的工具,允许开发人员生成便捷的绑定、用户界面等。一个最好的用户案例是使用 DAO 并能够在签署交易之前确认它到底试图做什么。

指南

此 OTP 基于 TLB+ 中定义的类型,建议在阅读此 OTP 之前了解这些类型。

规范

ABI 是一个 JSON 文件:

json
{
  "name": "MyContract",
  "types": [
    {
      "name": "MyRequest",
      "header": 12315123,
      "fields": [
        {
          "name": "queryId",
          "type": {
            "kind": "simple",
            "type": "int",
            "optional": false,
            "format": "uint256"
          }
        }
      ]
    }
  ],
  "receivers": [
    { "type": "binary", "kind": "internal", "name": "MyRequest" },
    { "type": "binary", "kind": "internal" },
    { "type": "comment", "kind": "internal", "comment": "Vote!" },
    { "type": "comment", "kind": "internal" },
    { "type": "empty", "kind": "internal" }
  ],
  "getters": [
    { "name": "getOwner", "type": "address", "args": [] },
    {
      "name": "getBalance",
      "type": "coins",
      "args": [
        {
          "name": "invested",
          "type": {
            "kind": "simple",
            "type": "uint",
            "format": "coins"
          }
        }
      ]
    }
  ],
  "errors": {
    "123": "错误描述",
    "124": "除零错误"
  }
}

缺点

二进制和紧凑表示的 ABI 可能会更好,但目前这并不是关键问题。

先前的工作

OTP-001,与此 OTP 互补。