// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//一个委托合约的特性试验
//特性一: 变量顺序类型,位置,必须与委托合约的变量位置一样
//特性二:可以通过被调用的合约,来修改委托合约的值
//特性三:委托变量的值会被改变,而被委托调用的值不会被改变
contract beidiaoyong {
//特性一,变量顺序
uint public num;
address public add;
uint public vule;
//创建一个方法,来接受变量并尝试改变
function setVul(uint x) external payable {
num \= x;
//num = 2 * x; 特性二,通过被委托的合约来修改委托合约的结果
add \= msg.sender;
vule \= msg.value;
}
}
//创建一个委托合约
contract weituoheyue {
//特性三,这里的变量被改变了,而原来的合约没有改变
uint public num1;
address public add1;
uint public vule1;
function set(address _add,uint xx) external payable {
(bool isok,) \= _add.delegatecall(abi.encodeWithSelector(beidiaoyong.setVul.selector, xx));
//判断
require(isok,"fales");
}
}