什么是ABI
在以太坊中,ABI(Application Binary Interface) 是智能合约与外部世界(如 Web3 应用或 DApp)进行交互的接口。它定义了智能合约的函数、事件、数据结构的编码规则,并且通过 ABI,你可以从外部调用合约的函数,或监听合约事件。
一个智能合约的 ABI 通常是一个 JSON 文件,包含了合约中所有可调用的函数、可监听的事件及其参数的描述。了解 ABI 对于与智能合约交互非常重要,下面详细解释 ABI 的各个部分。
1. ABI 的结构
ABI 是一个包含对象的数组,每个对象定义了一个函数、构造函数或事件。每个对象包含的信息因类型不同而略有差异。常见类型包括 function
、constructor
和 event
。
[
{
"constant": false,
"inputs": [{"name": "recipient", "type": "address"}, {"name": "amount", "type": "uint256"}],
"name": "transfer",
"outputs": [{"name": "", "type": "bool"}],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{"name": "_initialSupply", "type": "uint256"}],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [{"indexed": true, "name": "from", "type": "address"}, {"indexed": true, "name": "to", "type": "address"}, {"indexed": false, "name": "value", "type": "uint256"}],
"name": "Transfer",
"type": "event"
}
]
2. 函数对象(function
)
ABI 中最常见的是 function
类型的对象。它表示合约中的某个函数,并描述如何调用该函数以及如何解析其返回值。
属性说明:
name
:函数的名称,如transfer
。inputs
:函数的输入参数列表,参数包含name
和type
属性。name
是参数名称,type
是参数类型(如address
,uint256
等)。outputs
:函数的返回值描述,通常是一个数组,包含每个返回值的类型和名称(名称可以为空)。constant
(过时):指明该函数是否为只读函数,不改变区块链状态。该字段已被stateMutability
取代。stateMutabil