42-Solidity8.0-委托调用

331 阅读1分钟

源码:

pragma solidity ^0.8.7;

contract TestDelegateCall {
    uint public num;
    address public sender;
    uint public value;

    function setVars(uint _num) external payable {
        num = _num;
        sender = msg.sender;
        value = msg.value;
    }
}
contract DelegateCall{
    uint public num;
    address public sender;
    uint public value;

    function setVars(address _test, uint _num) external payable  {
        //  _test.delegatecall(
        //      abi.encodeWithSignature("setVars(uint256)", _num)
        //  );
        (bool success, bytes memory data) = _test.delegatecall(
            abi.encodeWithSelector(TestDelegateCall.setVars.selector, _num)
        );
        require(success, "delegatecall failed");
    }
}