Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions script/v2/usd/DeploySwapManager.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,36 @@ contract DeploySwapManager is Configurable, DeploymentUtils, Script {
vm.label(msg.sender, "Deployer EOA");
}

function setUp_(BaseConfig.Config memory _config, uint256 _privateKey) public {
config = _config;

if (msg.sender != vm.addr(_privateKey)) {
revert("Private key does not match sender");
}

deployerWallet.privateKey = _privateKey;
deployerWallet.addr = vm.addr(_privateKey);

vm.label(msg.sender, "Deployer EOA");
}

modifier asDeployer() {
if (deployerWallet.privateKey != 0) {
vm.startBroadcast(deployerWallet.privateKey);
} else {
vm.startBroadcast();
}

_;

vm.stopBroadcast();
}

function run() external returns (BaseConfig.Config memory) {
return deploy();
}

function deploy() public returns (BaseConfig.Config memory) {
vm.startBroadcast(deployerWallet.privateKey);

function deploy() public asDeployer returns (BaseConfig.Config memory) {
console2.log("Deploying SwapManager from address %s", deployerWallet.addr);

if (address(config.levelContracts.pauserGuard) == address(0)) {
Expand Down Expand Up @@ -133,8 +156,6 @@ contract DeploySwapManager is Configurable, DeploymentUtils, Script {
// Transfer ownership to admin timelock
config.levelContracts.swapManager.transferOwnership(address(config.levelContracts.adminTimelock));

vm.stopBroadcast();

return config;
}

Expand Down
64 changes: 8 additions & 56 deletions test/v2/integration/RewardsManager.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import {Upgradev2_1} from "@level/script/v2/Upgradev2_1.s.sol";
import {SwapManager} from "@level/src/v2/usd/SwapManager.sol";
import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import {SwapConfig} from "@level/src/v2/usd/SwapManager.sol";
import {DeploySwapManager} from "@level/script/v2/usd/DeploySwapManager.s.sol";

contract RewardsManagerMainnetTests is Utils, Configurable {
using SafeTransferLib for ERC20;
Expand Down Expand Up @@ -63,9 +64,12 @@ contract RewardsManagerMainnetTests is Utils, Configurable {
initConfig(1);
_deployNewOracles();

vm.startPrank(deployer.addr);
_deploySwapManager();
vm.stopPrank();
DeploySwapManager deploySwapManager = new DeploySwapManager();

vm.prank(deployer.addr);
deploySwapManager.setUp_(config, deployer.privateKey);

config = deploySwapManager.run();

Upgradev2_1 upgrade = new Upgradev2_1();
upgrade.setUp_(config);
Expand Down Expand Up @@ -800,6 +804,7 @@ contract RewardsManagerMainnetTests is Utils, Configurable {
function _deployNewOracles() internal {
// Deploy CappedMNavOracle
CappedOneDollarOracle mNavOracle = new CappedOneDollarOracle(address(config.oracles.mNav));
config.oracles.cappedMNav = AggregatorV3Interface(address(mNavOracle));

// Deploy sUsdcOracle
config.sparkVaults.sUsdc.oracle = deployERC4626Oracle(config.sparkVaults.sUsdc.vault);
Expand All @@ -813,59 +818,6 @@ contract RewardsManagerMainnetTests is Utils, Configurable {
config.umbrellaVaults.waUsdtStakeToken.oracle = IERC4626Oracle(address(oracleUsdt));
}

function _deploySwapManager() internal {
// Replicate SwapManager deploy script
CappedOneDollarOracle mNavOracle = new CappedOneDollarOracle(address(config.oracles.mNav));
config.oracles.cappedMNav = AggregatorV3Interface(address(mNavOracle));

bytes memory constructorArgs = abi.encodeWithSignature(
"initialize(address,address,address)",
deployer.addr,
address(config.periphery.uniswapV3Router),
address(config.levelContracts.pauserGuard)
);

SwapManager _swapManager = new SwapManager();
ERC1967Proxy _swapManagerProxy = new ERC1967Proxy(address(_swapManager), constructorArgs);

config.levelContracts.swapManager = SwapManager(address(_swapManagerProxy));
config.levelContracts.swapManager.setAuthority(config.levelContracts.rolesAuthority);

config.levelContracts.swapManager.setSwapConfig(
address(config.tokens.usdc),
address(config.tokens.wrappedM),
SwapConfig({
pool: 0x970A7749EcAA4394C8B2Bf5F2471F41FD6b79288, // wM/USDC pool
fee: 100, //0.01%
tickLower: -10,
tickUpper: 10,
slippageBps: 5, //0.05%
active: true
})
);

config.levelContracts.swapManager.setSwapConfig(
address(config.tokens.wrappedM),
address(config.tokens.usdc),
SwapConfig({
pool: 0x970A7749EcAA4394C8B2Bf5F2471F41FD6b79288, // wM/USDC pool
fee: 100, //0.01%
tickLower: -10,
tickUpper: 10,
slippageBps: 5, //0.05%
active: true
})
);

config.levelContracts.swapManager.addOracle(address(config.tokens.usdc), address(config.oracles.usdc));
config.levelContracts.swapManager.addOracle(address(config.tokens.wrappedM), address(config.oracles.cappedMNav));
config.levelContracts.swapManager.setHeartBeat(address(config.tokens.usdc), 1 days);
config.levelContracts.swapManager.setHeartBeat(address(config.tokens.wrappedM), 26 hours);

// Transfer ownership to admin timelock
config.levelContracts.swapManager.transferOwnership(address(config.levelContracts.adminTimelock));
}

function _upgradeRewardsManager() internal {
RewardsManager impl = new RewardsManager();
vm.prank(address(config.levelContracts.adminTimelock));
Expand Down
11 changes: 8 additions & 3 deletions test/v2/integration/VaultManager.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import {SwapConfig} from "@level/src/v2/usd/SwapManager.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Upgradev2_1} from "@level/script/v2/Upgradev2_1.s.sol";
import {RewardsManager} from "@level/src/v2/usd/RewardsManager.sol";
import {DeploySwapManager} from "@level/script/v2/usd/DeploySwapManager.s.sol";

contract VaultManagerMainnetTests is Utils, Configurable {
using SafeTransferLib for ERC20;
Expand Down Expand Up @@ -66,9 +67,12 @@ contract VaultManagerMainnetTests is Utils, Configurable {
initConfig(1);
_deployNewOracles();

vm.startPrank(deployer.addr);
_deploySwapManager();
vm.stopPrank();
DeploySwapManager deploySwapManager = new DeploySwapManager();

vm.prank(deployer.addr);
deploySwapManager.setUp_(config, deployer.privateKey);

config = deploySwapManager.run();

Upgradev2_1 upgrade = new Upgradev2_1();
upgrade.setUp_(config);
Expand Down Expand Up @@ -166,6 +170,7 @@ contract VaultManagerMainnetTests is Utils, Configurable {
function _deployNewOracles() internal {
// Deploy CappedMNavOracle
CappedOneDollarOracle mNavOracle = new CappedOneDollarOracle(address(config.oracles.mNav));
config.oracles.cappedMNav = AggregatorV3Interface(address(mNavOracle));

// Deploy sUsdcOracle
config.sparkVaults.sUsdc.oracle = deployERC4626Oracle(config.sparkVaults.sUsdc.vault);
Expand Down