【Solidity学习笔记】ABI编码解码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract ABIEncode {

    // ABI(Application Binary Interface): 应用二进制接口
    // 编码函数:encode, encodePacked, encodeWithSigature, encodeWithSelector
    // 解码函数: decode
    uint x = 10;
    address addr = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
    string name = "0xAA";
    uint[2] array = [5,6];

    function encode() public view returns(bytes memory result){
        result = abi.encode(x, addr, name, array);
    }

    function encodePacked() public view returns(bytes memory result) {
        result = abi.encodePacked(x, addr, name, array);
    }

    function encodeWithSignature() public view returns(bytes memory result) {
        result = abi.encodeWithSignature("foo(uint256,address,string,uint256[2])", x, addr, name, array);
    }

    function encodeWithSelector() public view returns(bytes memory result) {
        result = abi.encodeWithSelector(bytes4(keccak256("foo(uint256,address,string,uint256[2])")), x, addr, name, array);
    }

     function decode(bytes memory data) public pure returns(uint dx, address daddr, string memory dname, uint[2] memory darray) {
        (dx, daddr, dname, darray) = abi.decode(data, (uint, address, string, uint[2]));
    }
}

猜你喜欢

转载自blog.csdn.net/qq2942713658/article/details/129631639