【Solidity】合约升级1

合约升级主要是经过代理合约后面的逻辑合约给更改。
按照以下的代码范例,会有几个问题:
1. 经过interface的话,那所有的function量将被固定,无法增加
2. 数据是各自存在logic合约内的,如果改了logic合约,那么数据将不复存在
所以会在下一个教程当中,把合约升级写得更完美。
代码范例
Logic1.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Logic1 {
uint private number;
function setNum(uint _number)public{
number = _number + 1;
}
function checkNum()public view returns(uint){
return number;
}
}
Logic2.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Logic2 {
uint private number;
function setNum(uint _number)public{
number = _number + 2;
}
function checkNum()public view returns(uint){
return number;
}
}
Proxy.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
interface ILogic {
function setNum(uint _number)external;
function checkNum()external view returns(uint);
}
contract Proxy {
ILogic public logic;
function setLogic(address _address)public{
logic = ILogic(_address);
}
function getLogicAddress()public view returns(address){
return address(logic);
}
function setNumber(uint _num)public{
logic.setNum(_num);
}
function checkNum()public view returns(uint){
return logic.checkNum();
}
}
![]()
Facebook评论