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

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

你的鼓励,我的动力!

相关推荐
SunkingYang14 小时前
做T和做T+0有什么区别
大数据·人工智能·区块链·股票·关系·做t·t+0
视界快讯1 天前
分析M0G突破后急剧下跌内因,x.game阐述不利面延续多久
区块链
珠穆拉玛峰2 天前
数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
深度学习·金融·区块链
江梦寻2 天前
区块链赋能数字藏品设计提案
java·数据库·sql·mysql·区块链·数据库架构
phial032 天前
预言机调研
区块链
Anna_Tong2 天前
区块链服务如何重塑企业数字化未来?
阿里云·去中心化·区块链
区块链文博2 天前
比特币国家与企业机构“战略储备”潮起
大数据·人工智能·web3·区块链·比特币
qiquandongkh3 天前
期权懂|如何用第三方平台开通期权?
大数据·区块链
Thanks_ks3 天前
深入探索现代 IT 技术:从云计算到人工智能的全面解析
大数据·人工智能·物联网·云计算·区块链·数字化转型·it 技术
QiJublockchain3 天前
Lumoz的ZK算力网络,加速以太坊3.0的到来
区块链