Skip to content

Commit

Permalink
fix factory, testnet deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
a17 committed Dec 22, 2023
1 parent 266d251 commit 01e2bd6
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 27 deletions.
19 changes: 11 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@ forge fmt

### Goerli testnet

* Controller 0xE3f1d1B8ea9721FF0399cF6c2990A4bE5e4fc023
* IFO 0xE0D142466d1BF88FE23D5D265d76068077E4D6F0
* STGN 0x95b012C1D02c859dab6b302F4b72941Ba4E3C3C3
* veSTGN proxy 0x33222Ee7eAb1aBE6fC1724eAce207fA3Fa62C7C3
* Multigauge 0xee7751bF946Da4cbb39A76fd8dD99a8872871a7F
* IFO Harvester 0x4e02AbD5Aa2731bdD1655D3a0a936912Ea5f0857
* Harvester 0x9FeCf0827e7253F4dd3e9bF92cDd7A0ebC547D16
* CompunderVault 0x0A45e97ACEBa96650F47DA979bde3A8642f26739
* Controller 0x8216C9afFC982428aF33D1D9F165bAf9D75AebBa
* IFO 0x029Dfd1a79e0AD9305d773fb8F3c01D8eF9b913d
* STGN 0x5B0Ad247bc0Fac75d76D1337932fc29b1eCb8eE6
* veSTGN proxy 0x87eDeA5aea52BA12Ebf4eBc253Ec3218C1090C70
* Multigauge 0xAf95468B1a624605bbFb862B0FB6e9C73Ad847b8
* Factory 0xBD5296DC2603942F116B375c8Ee373674be86f56
* MockGauge 0x54F22378E03BeA25a05A071b60357d31Ce535Bb9
* MockLiquidator 0x97B56FEAdA7fb2D7A0A8576635f05314f184f0C2
* MockA 0xBcA14CF8Cc2417a5B4ed242bA45aE4835aF4d5Df
* MockC 0x609e0d74fAB81085283df92B563750624054F8bE
* MockD 0x635B1F7dD7d0172533BA9fE5Cfe2D83D9848f701
4 changes: 2 additions & 2 deletions chains/TestnetLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import "../test/mock/MockTetuLiquidator.sol";
library TestnetLib {
address public constant TOKEN_WETH = 0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9;

function runDeploy(bool showLog) internal returns(address) {
function runDeploy(address rewardToken, bool showLog) internal returns(address) {
address governance = 0x3d0c177E035C30bb8681e5859EB98d114b48b935; // test deployer
address[] memory vestingClaimant = new address[](3);
uint[] memory vestingAmount = new uint[](3);
Expand All @@ -30,7 +30,7 @@ library TestnetLib {
vestingAmount: vestingAmount,
vestingPeriod: 365 days,
vestingCliff: 180 days,
rewardToken: TOKEN_WETH,
rewardToken: rewardToken,
liquidator: address(l)
})
)
Expand Down
21 changes: 6 additions & 15 deletions script/Deploy.Testnet.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,32 +14,23 @@ contract DeployTestnet is Script {
uint deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);
console.log("deployer", vm.addr(deployerPrivateKey));
IController controller = IController(TestnetLib.runDeploy(true));

// deploy mocks
address tokenA = address(new MockERC20("Mock Token A", "MOCK_A", 18));
address tokenC = address(new MockERC20("Mock Token C", "MOCK_C", 18));
address tokenD = address(new MockERC20("Mock Token D", "MOCK_D", 18));
IPearlGaugeV2 pearlGauge = IPearlGaugeV2(address(new MockPearlGaugeV2(tokenA, tokenC)));

IController controller = IController(TestnetLib.runDeploy(tokenC, true));
Factory factory = Factory(controller.factory());

// deploy IFO harvester
HarvesterVault vault =
new HarvesterVault(address(controller), IERC20(tokenA), "IFO Harvester MOCK_A", "xTokenA", 4_000);
PearlStrategy strategy = new PearlStrategy(address(vault), address(pearlGauge), true, address(0));
vault.setStrategy(address(strategy));
IGauge(controller.multigauge()).addStakingToken(address(vault));
factory.deployIfoHarvester(tokenA, address(pearlGauge), "IFO Harvester MOCK_A", "xTokenA");

// deploy compounder + harvester
vault = new HarvesterVault(address(controller), IERC20(tokenA), "Harvester MOCK_A", "xTokenA", 4_000);

CompounderVault compounderVault =
new CompounderVault(IERC20(tokenD), "Compounder vault for xTokenA", "xxTokenA");

strategy = new PearlStrategy(address(vault), address(pearlGauge), false, address(compounderVault));
vault.setStrategy(address(strategy));

IGauge(controller.multigauge()).addStakingToken(address(vault));
IMultiPool(controller.multigauge()).registerRewardToken(address(vault), address(compounderVault));
CompounderVault(factory.deployCompounder(tokenD, "Compounder vault for xTokenA", "xxTokenA"));
factory.deployHarvester(tokenA, address(pearlGauge), "Harvester MOCK_A", "xTokenA", address(compounderVault));

vm.stopBroadcast();
}
Expand Down
2 changes: 2 additions & 0 deletions src/Factory.sol
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ contract Factory is Controllable {
string calldata vaultSymbol
) external onlyGovernance returns (address compounder) {
compounder = address(new CompounderVault(IERC20(underlying), vaultName, vaultSymbol));
IController(controller()).registerVault(compounder, false);
}

function deployHarvester(
Expand All @@ -53,6 +54,7 @@ contract Factory is Controllable {
address multigauge = IController(_controller).multigauge();
IGauge(multigauge).addStakingToken(vault);
IMultiPool(multigauge).registerRewardToken(vault, compounderVault);
IController(_controller).registerVault(vault, true);
}

function _requireGovernance() internal view {
Expand Down
22 changes: 20 additions & 2 deletions test/mock/MockTetuLiquidator.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.21;

//import {console} from "forge-std/Test.sol";
import "../../src/interfaces/ITetuLiquidator.sol";
import "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
import "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol";

contract MockTetuLiquidator is ITetuLiquidator {
function getPrice(address tokenIn, address tokenOut, uint amount) external view returns (uint) {}
mapping(address tokenIn => mapping(address tokenOut => uint price)) public prices;

function setPrice(address tokenIn, address tokenOut, uint price) external {
prices[tokenIn][tokenOut] = price;
}

function getPrice(address tokenIn, address tokenOut, uint amount) external view returns (uint) {
if (amount == 0) {
amount = 10 ** IERC20Metadata(tokenIn).decimals();
}
return prices[tokenIn][tokenOut] * amount / 10 ** IERC20Metadata(tokenIn).decimals();
}

function getPriceForRoute(PoolData[] memory route, uint amount) external view returns (uint) {}

Expand All @@ -17,7 +30,12 @@ contract MockTetuLiquidator is ITetuLiquidator {
) external view returns (PoolData[] memory route, string memory errorMessage) {}

function liquidate(address tokenIn, address tokenOut, uint amount, uint /*priceImpactTolerance*/ ) external {
uint amountOut = amount / 10;
// console.log('liquidate tokenIn', IERC20Metadata(tokenIn).symbol());
// console.log('liquidate tokenOut', IERC20Metadata(tokenOut).symbol());
if (amount == 0) {
amount = 10 ** IERC20Metadata(tokenIn).decimals();
}
uint amountOut = prices[tokenIn][tokenOut] * amount / 10 ** IERC20Metadata(tokenIn).decimals();
require(IERC20(tokenOut).balanceOf(address(this)) >= amountOut, "MockLiquidator: not enough balance");
IERC20(tokenIn).transferFrom(msg.sender, address(this), amount);
IERC20(tokenOut).transfer(msg.sender, amountOut);
Expand Down
2 changes: 2 additions & 0 deletions test/setup/MockSetup.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ abstract contract MockSetup is Test {
tokenD = address(new MockERC20("Mock Token D", "MOCK_D", 18));
controller = _init();
factory = Factory(controller.factory());
MockTetuLiquidator l = MockTetuLiquidator(controller.liquidator());
l.setPrice(tokenC, tokenD, 2e18);
}

function _init() public returns (Controller) {
Expand Down

0 comments on commit 01e2bd6

Please sign in to comment.