solidity call delegate的用法

call()、delegatecall()

call()

当使用方法是:require(msg.sender.call.value(_weiToWithdraw)());

则作用是将_weiToWithdraw个以太币发送给msg.sender地址,并且调用msg.sender地址的fallback函数

当使用方法是:

bytes4 methodId = bytes4(keccak256("increaseAge(string,uint)"));//函数hash

addr.call(methodId,"jack",1);

那就是调用了函数increaseAge,并且传入参数是"jack",1

函数的结果

call()的返回结果是一个bool,表示是否成功的调用,或者是失败引起了EVM异常。该方法无法直接访问函数返回结果(因为需要事前知道编码和返回结果大小)。

call()的返回结果即使成功,并不能说操作成功了,只是没有出现异常,比如我们第一个例子中,实际是调用到了fallback()函数。

delegatecall()

call与delegatecall的功能类似,区别仅在于后者仅使用给定地址的代码,其它信息则使用当前合约(如存储,余额等等)。

函数的设计目的是为了使用存储在另一个合约的库代码。

二者执行代码的上下文环境的不同,当使用call调用其它合约的函数时,代码是在被调用的合约的环境里执行,对应的,使用delegatecall进行函数调用时代码则是在调用函数的合约的环境里执行

参考文献:https://www.cnblogs.com/wanghui-garcia/p/9619350.html

我的理解 call()方法是在别的合约里执行,修改的是执行合约里的数据,delegatecall()把调用的合约代码植入到当前待用合约中,修改的是当前合约的数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容