You are viewing a single comment's thread from:

RE: Solidity开发指南

in #starnote3 days ago

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);
}