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

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

你的鼓励,我的动力!

相关推荐
开源量化GO4 小时前
多合约期货策略目标持仓怎么更新不容易乱
python·区块链
品牌数字化增长观察5 小时前
2026酒企组织效能的数字化提升实战解读
区块链·数字化·数实融合
MicroTech20256 小时前
量子威胁倒逼区块链安全革新,微算法科技(MLGO)量子原生区块链技术突破
科技·安全·区块链
Shota Kishi18 小时前
SLV 新增 allnodes-jito 支持:Solana 验证者多客户端运维与 AI agent 自动化解析
运维·自动化·区块链
区块链小八歌1 天前
Berachain ERA:公链排放资本化与链上增长融资的范式革命
人工智能·区块链
酿情师1 天前
区块链网络与跨链操作03:区块链的分叉
网络·centos·区块链
CTA终结者1 天前
Python 写期货自动交易:行情下单与成交回报怎么组织
开发语言·python·区块链
yzx9910131 天前
ImToken智能合约交互避坑指南大纲
区块链
计算机安禾1 天前
【算法分析与设计】第45篇:交互式证明系统与零知识证明
算法·区块链·零知识证明
酿情师1 天前
区块链网络与跨链操作03:矿池网络协议
网络·网络协议·区块链