区块链编程语言Solidity学习:abi.*的作用

93 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。
对下面这个合约进行一个调用

Image.png

1.WithSignature

_test.delegatecall(

abi.encodeWithSignature("setVars(uint256)",_num)

);

2.WithSelect

_test.delegatecall(

abi.encodeWithSelect(TestDelegateCall.setVars.selector,_num)

);

3.模仿签名

function getEthSignedMessageHash(bytes32 _messageHash)

        public

        pure

        returns (bytes32)

    {

        /*

        Signature is produced by signing a keccak256 hash with the following format:

        "\x19Ethereum Signed Message\n" + len(msg) + msg

        */

        return

            keccak256(

                abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)

                //packed返回的是一个压缩过的编码,如果长度不到32就不会补长

                //但是如果使用的是abi.encode就会自动补全

            );

    }

4.encode和encodepacked的区别

如果不到32字节,code会自动补全到32,encodepacked会返回没有被补全的