代码拉取完成,页面将自动刷新
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
/**
A calls B, sends 100 wei
B calls C, sends 50 wei
A --> B --> C
msg.sender = B
msg.value = 50
execute code on C's state variables 改变C合约的状态变量
use ETH in C
A calls B, sends 100 wei
B delegatecall C
A --> B --> C
msg.sender = A
msg.value = 100
execute code on B's state variables 改变B合约的状态变量
use ETH in B
*/
contract TestDelegateCall {
uint public num;
address public sender;
uint public value;
address public owner;
function setVars(uint _num) external payable {
num = 2*_num;
sender = msg.sender;
value = msg.value;
}
}
// 用于升级合约,代理合约状态变量要和被调用合约状态变量顺序要一致。
contract DelegateCall {
uint public num;
address public sender;
uint public value;
function setVars(address _test, uint _num) external payable{
// _test.delegatecall(abi.encodeWithSignature("setVars(uint256)", _num));
(bool success, bytes memory data) = _test.delegatecall(
abi.encodeWithSelector(TestDelegateCall.setVars.selector, _num)
);
require(success, "delegatecall failed");
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。