delegatecall在不同版本的Solidity中的使用语法

假如合约A通过delegatecall调用合约B的test()函数

(1) 对于0.4.26版本的Solidity,delegatecall的使用语法语法如下:

ContractBAddress.delegatecall(bytes4(keccak256("test()"))); // test为函数名

(2) 对于0.6.8版本的Solidity,delegatecall的使用语法语法如下:

contract A {

bool flag;

bytes memory result;

function callLogicContract(address logicContractAddr) public {

(flag, result) = ContractAddr.delegatecall(abi.encodeWithSignature("test(address)", this));

emit Log("delegatecall return ", r); // r为true或false

uint256 result = bytesToUint(s);

emit Log2("test() return ", result);

}

}

contract B{

uint256 public num1;

uint256 public num2;

uint256 public num3; //num1, num2, num3声明的顺序和位置必须和DataContract中的一样,否则无法修改DataContract中的num3

address public caller;

address public dataContract;

event Log(string str, uint256 num);

event Log2(string str, address addr);

function test(address addr) public returns(uint256) {

dataContract = addr; // 数据合约DataContract地址

caller = msg.sender; // 运行数据合约DataContract的以太坊账号

num3 = num3*10; // DataContract通过delegatecall调用LogicContract的test函数,test函数里修改的是DataContract中的num3而不是LogicContract中的num3

emit Log("after upgrading contract, num3=", num3);

emit Log2("dataContract=", dataContract);

emit Log2("caller=", caller);

return num3;

}

}

我的csdn:powervip-CSDN博客

我的学习笔记:www.0101.vip

我的github: https://github.com/powervip

如果你觉得这篇文章写得还可以,请帮忙点个赞,谢谢!

你的鼓励,我的动力!

相关推荐
Web3_Daisy4 小时前
从流动性到执行:如何降低 MEV 对 Web3 市场
大数据·人工智能·web3·区块链
qq_33776320195 小时前
仿博易大师内外盘国际期货软件源码全套开发:期货交易系统架构设计与核心技术解析
大数据·区块链
磐链科技1 天前
账户抽象+社交恢复:社交钱包开发的核心技术底座与落地实践
区块链
MartinYeung52 天前
[bug 分析] Orchard 伪造漏洞: 深度代码剖析
安全·区块链·bug
ZDGJ60993 天前
大恒指与小恒指交易时间详解
区块链
Web3李李3 天前
Web3项目拆分模式:项目方核心诉求与实战逻辑
web3·区块链·软件开发·dapp·dapp拆分模式·案例msa
Blockchina3 天前
2026新型区块链交易所系统|一线交易所架构 + 全套源码 + White Label UI,可二次开发部署
架构·区块链
Richown3 天前
AI + Web3 融合架构:大模型驱动的智能合约自动生成与审计
区块链·react
Web3_Daisy4 天前
牛市临近,发币工具该怎么选?
大数据·人工智能·金融·web3·区块链
磐链科技4 天前
交易所开发新范式:从社交钱包隐私保护中汲取的五大架构启示
架构·区块链