Skip to content

Latest commit

 

History

History
19 lines (14 loc) · 1.46 KB

File metadata and controls

19 lines (14 loc) · 1.46 KB

第二十二课 Call

call 是address类型的低级成员函数,它用来与其他合约交互。它的返回值为(bool, bytes memory),分别对应call是否成功以及目标函数的返回值。

call的使用规则

目标合约地址.call(字节码); 其中字节码利用结构化编码函数abi.encodeWithSignature获得: abi.encodeWithSignature("函数签名", 逗号分隔的具体参数)

另外call在调用合约时可以指定交易发送的ETH数额和gas数额: 目标合约地址.call{value:发送数额, gas:gas数额}(字节码);

当我们调用不存在的函数的时候,如果目标合约有fallback,那么返回的bool会为true,否则为false。

第二十三课

delegatecall与call类似,是Solidity中地址类型的低级成员函数。delegate中是委托/代表的意思

  1. 当用户A通过合约B来call合约C的时候,执行的是合约C的函数,上下文(Context,可以理解为包含变量和状态的环境)也是合约C的:msg.sender是B的地址,并且如果函数改变一些状态变量,产生的效果会作用于合约C的变量上。
  2. 当用户A通过合约B来delegatecall合约C的时候,执行的是合约C的函数,但是上下文仍是合约B的:msg.sender是A的地址,并且如果函数改变一些状态变量,产生的效果会作用于合约B的变量上。

和call不一样,delegatecall在调用合约时可以指定交易发送的gas,但不能指定发送的ETH数额