本文已参与「新人创作礼」活动,一起开启掘金创作之路。
对下面这个合约进行一个调用
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会返回没有被补全的