Appearance
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 互补。