40 lines
1.5 KiB
Solidity
40 lines
1.5 KiB
Solidity
|
|
pragma solidity 0.8.26;
|
|
|
|
import "@forge-std/Script.sol";
|
|
import "@forge-std/console2.sol";
|
|
import {IWETH9} from "../lib_uniswap/v3-periphery/contracts/interfaces/external/IWETH9.sol";
|
|
import "../src/interface/IVaultFactory.sol";
|
|
import "../src/core/VaultImpl.sol";
|
|
import {ArbitrumRouter} from "../src/core/Router.sol";
|
|
|
|
contract Upgrade is Script {
|
|
function run() external {
|
|
address factoryAddr = vm.envAddress('FACTORY');
|
|
console2.log(factoryAddr);
|
|
require( factoryAddr != address(0), 'Must set FACTORY envvar');
|
|
IVaultFactory factory = IVaultFactory(factoryAddr);
|
|
address upgrader = factory.upgrader();
|
|
console2.log('upgrader');
|
|
console2.log(upgrader);
|
|
console2.log(msg.sender);
|
|
require( msg.sender == upgrader, 'Must be upgrader account');
|
|
|
|
console2.log('old implementation');
|
|
IVaultImpl oldImpl = IVaultImpl(factory.implementation());
|
|
console2.log(address(oldImpl));
|
|
IFeeManager feeManager = oldImpl.feeManager();
|
|
console2.log('fee manager');
|
|
console2.log(address(feeManager));
|
|
vm.startBroadcast();
|
|
console2.log('deploy new router (Arbitrum)');
|
|
IRouter router = new ArbitrumRouter();
|
|
console2.log('deploy new implementation');
|
|
VaultImpl impl = new VaultImpl(router, feeManager, oldImpl.wrapper());
|
|
console2.log('invoke upgrade');
|
|
factory.upgradeImplementation(address(impl));
|
|
console2.log('impl upgrade proposed');
|
|
vm.stopBroadcast();
|
|
}
|
|
}
|