智能合约的相互调用(call,delegatecall,callcode)
在函数调用的过程中, Solidity 中的内置变量 msg
会随着调用的发起而改变,msg
保存了调用方的信息包括:调用发起的地址,交易金额,被调用函数字符序列等
。
三种调用方式的异同点:
call:
最常用的调用方式,调用后内置变量msg
的值会
修改为调用者
,执行环境为被调用者
运行环境(合约的 storage)。delegatecall:
调用后内置变量msg
的值不会
修改为调用者
,但执行环境为调用者
的运行环境。(相当于复制被调用者的代码到调用者合约)callcode:
调用后内置变量msg
的值会
修改为调用者
,但执行环境为调用者
的运行环境。