没有合适的资源?快使用搜索试试~ 我知道了~
图文并茂详细介绍Solidity的三种合约间的调用方式 call、delegatecall 和 callcode
10 下载量 83 浏览量
2021-01-20
13:15:25
上传
评论
收藏 435KB PDF 举报
温馨提示
试读
5页
最近开始学习以太坊智能合约编程,其中涉及到智能合约之间的函数调用。 Solidity的三种合约间的调用方式有call、delegatecall 和 callcode这3种方式。参考了下面的文章: https://www.cnblogs.com/x-poior/p/10511552.html 对于文章中提到的三种调用方式的异同点 call: 最常用的调用方式,调用后内置变量 msg 的值会修改为调用者,执行环境为被调用者的运行环境(合约的 storage)。 delegatecall: 调用后内置变量 msg 的值不会修改为调用者,但执行环境为调用者的运行环境。 callcode: 调用后内
资源详情
资源评论
资源推荐
图文并茂详细介绍图文并茂详细介绍Solidity的三种合约间的调用方式的三种合约间的调用方式 call、、delegatecall 和和 callcode
最近开始学习以太坊智能合约编程,其中涉及到智能合约之间的函数调用。
Solidity的三种合约间的调用方式有call、delegatecall 和 callcode这3种方式。参考了下面的文章:
https://www.cnblogs.com/x-poior/p/10511552.html
对于文章中提到的三种调用方式的异同点
call: 最常用的调用方式,调用后内置变量 msg 的值会修改为调用者,执行环境为被调用者的运行环境(合约的 storage)。
delegatecall: 调用后内置变量 msg 的值不会修改为调用者,但执行环境为调用者的运行环境。
callcode: 调用后内置变量 msg 的值会修改为调用者,但执行环境为调用者的运行环境。
初步感觉不好理解,于是按文中给出的智能合约例子直接运行一次。我使用Solidity在线编译器remix IDE进行测试。直接打开浏览器,输入http://remix.ethereum.org
点击“+”按钮,然后输入Solidity智能合约文件名:test3.sol
test3.sol的代码如下:
pragma solidity ^0.4.0;
contract A {
address public temp1;
uint256 public temp2;
function three_call(address addr) public {
addr.call(bytes4(keccak256("test()"))); // 情况1
//addr.delegatecall(bytes4(keccak256("test()"))); // 情况2
//addr.callcode(bytes4(keccak256("test()"))); // 情况3
}
}
contract B {
address public temp1;
uint256 public temp2;
function test() public {
temp1 = msg.sender; temp2 = 100;
}
}
weixin_38530415
- 粉丝: 4
- 资源: 940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0