Application Binary Interface 应⽤程序⼆进制接⼝
调⽤⼀个合约函数 = 向合约地址发送⼀个交易(交易的内容就是 ABI 编码数据)
⽤ABI编码传递数据给合约,因此与合约交互离不开ABI
abi.encode(...) returns (bytes) : 计算参数的ABI编码
abi.encodePacked(...) returns (bytes) : 计算参数的紧密打包编码,不会补零
abi.encodeWithSelector(bytes4 selector, ...) returns (bytes):计算函数选择器和参数的ABI编码
abi.encodeWithSignature(string signature, ...) returns (bytes): 等价于 abi.encodeWithSelector(bytes4(keccak256(signature), ...)
eg:
function set(uint x) public {
storedData = x;
}
function abiEncode() public constant returns (bytes) {
return abi.encode(1, 2); // 计算set(uint x) 的ABI编码
// return abi.encodePacked(1, 2);
// return abi.encodeWithSignature("set(uint256)" ,1); //计算函数ABI编码
// abi.encodeWithSelector(set.selector, x);
}