From 6136aac236c35990cdd07eb9d92ae4000308d39d Mon Sep 17 00:00:00 2001 From: Yuchen Lin Date: Thu, 6 Jul 2023 23:33:03 -0700 Subject: [PATCH 1/4] Restrict SAFU liquidation to owner --- contracts/truefi2/SAFU.sol | 2 +- test/truefi2/SAFU.test.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/contracts/truefi2/SAFU.sol b/contracts/truefi2/SAFU.sol index 81d0ec0bc..e3e3d7af0 100644 --- a/contracts/truefi2/SAFU.sol +++ b/contracts/truefi2/SAFU.sol @@ -93,7 +93,7 @@ contract SAFU is ISAFU, UpgradeableClaimable { * to compensate TrueFiPool. Deficit is saved to be redeemed later * @param loan Loan to be liquidated */ - function liquidate(ILoanToken2 loan) external { + function liquidate(ILoanToken2 loan) external onlyOwner { require(loanFactory.isLoanToken(address(loan)), "SAFU: Unknown loan"); require(loan.status() == ILoanToken2.Status.Defaulted, "SAFU: Loan is not defaulted"); diff --git a/test/truefi2/SAFU.test.ts b/test/truefi2/SAFU.test.ts index 4cda2d3b8..6a62ce33a 100644 --- a/test/truefi2/SAFU.test.ts +++ b/test/truefi2/SAFU.test.ts @@ -81,6 +81,11 @@ describe('SAFU', () => { describe('liquidate', () => { describe('reverts if', () => { + it('caller is not owner', async () => { + await expect(safu.connect(borrower).liquidate(loan.address)) + .to.be.revertedWith('Ownable: caller is not the owner') + }) + it('loan is not defaulted', async () => { await expect(safu.liquidate(loan.address)) .to.be.revertedWith('SAFU: Loan is not defaulted') From 280ab460c48609d5f0f7579c11672e7d32587adb Mon Sep 17 00:00:00 2001 From: Yuchen Lin Date: Thu, 20 Jul 2023 01:32:36 -0700 Subject: [PATCH 2/4] TEMP comment out all but SAFU deploy --- deploy/truefi2.ts | 216 +++++++++++++++++++++++----------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/deploy/truefi2.ts b/deploy/truefi2.ts index 3a746a75c..243ecde3f 100644 --- a/deploy/truefi2.ts +++ b/deploy/truefi2.ts @@ -53,117 +53,117 @@ const deployParams = { } deploy({}, (_, config) => { - const proxy = createProxy(OwnedUpgradeabilityProxy) - const timeProxy = createProxy(TimeOwnedUpgradeabilityProxy) - const isMainnet = config.network === 'mainnet' - const NETWORK = isMainnet ? 'mainnet' : 'testnet' + // const proxy = createProxy(OwnedUpgradeabilityProxy) + // const timeProxy = createProxy(TimeOwnedUpgradeabilityProxy) + // const isMainnet = config.network === 'mainnet' + // const NETWORK = isMainnet ? 'mainnet' : 'testnet' - // Existing contracts - const trustToken = isMainnet - ? timeProxy(contract(TrustToken), () => {}) - : timeProxy(contract(TestTrustToken), () => {}) - const stkTruToken = proxy(contract(StkTruToken), () => {}) - const trueFiPool = isMainnet - ? proxy(contract(TrueFiPool), () => {}) - : proxy(contract(TestTrueFiPool), () => {}) - const usdc = isMainnet - ? deployParams['mainnet'].USDC - : contract(TestUSDCToken) - const usdt = isMainnet - ? deployParams['mainnet'].USDT - : contract(TestUSDTToken) - const trueRatingAgencyV2 = proxy(contract(TrueRatingAgencyV2), () => {}) + // // Existing contracts + // const trustToken = isMainnet + // ? timeProxy(contract(TrustToken), () => {}) + // : timeProxy(contract(TestTrustToken), () => {}) + // const stkTruToken = proxy(contract(StkTruToken), () => {}) + // const trueFiPool = isMainnet + // ? proxy(contract(TrueFiPool), () => {}) + // : proxy(contract(TestTrueFiPool), () => {}) + // const usdc = isMainnet + // ? deployParams['mainnet'].USDC + // : contract(TestUSDCToken) + // const usdt = isMainnet + // ? deployParams['mainnet'].USDT + // : contract(TestUSDTToken) + // const trueRatingAgencyV2 = proxy(contract(TrueRatingAgencyV2), () => {}) - // New contract impls - const trueLender2_impl = contract(TrueLender2) - const poolFactory_impl = contract(PoolFactory) - const liquidator2_impl = contract(Liquidator2) - const loanFactory2_impl = contract(LoanFactory2) + // // New contract impls + // const trueLender2_impl = contract(TrueLender2) + // const poolFactory_impl = contract(PoolFactory) + // const liquidator2_impl = contract(Liquidator2) + // const loanFactory2_impl = contract(LoanFactory2) const safu_impl = contract(SAFU) - const usdc_TrueFiPool2_LinearTrueDistributor_impl = contract('usdc_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) - const usdc_TrueFiPool2_TrueFarm_impl = contract('usdc_TrueFiPool2_TrueFarm', TrueFarm) - const usdt_TrueFiPool2_LinearTrueDistributor_impl = contract('usdt_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) - const usdt_TrueFiPool2_TrueFarm_impl = contract('usdt_TrueFiPool2_TrueFarm', TrueFarm) - const trueFiCreditOracle_impl = contract(TrueFiCreditOracle) - const borrowingMutex_impl = contract(BorrowingMutex) + // const usdc_TrueFiPool2_LinearTrueDistributor_impl = contract('usdc_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) + // const usdc_TrueFiPool2_TrueFarm_impl = contract('usdc_TrueFiPool2_TrueFarm', TrueFarm) + // const usdt_TrueFiPool2_LinearTrueDistributor_impl = contract('usdt_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) + // const usdt_TrueFiPool2_TrueFarm_impl = contract('usdt_TrueFiPool2_TrueFarm', TrueFarm) + // const trueFiCreditOracle_impl = contract(TrueFiCreditOracle) + // const borrowingMutex_impl = contract(BorrowingMutex) - // New contract proxies - const trueLender2 = proxy(trueLender2_impl, () => {}) - const poolFactory = proxy(poolFactory_impl, () => {}) - const liquidator2 = proxy(liquidator2_impl, () => {}) - const loanFactory2 = proxy(loanFactory2_impl, () => {}) - const usdc_TrueFiPool2_LinearTrueDistributor = proxy(usdc_TrueFiPool2_LinearTrueDistributor_impl, () => {}) - const usdc_TrueFiPool2_TrueFarm = proxy(usdc_TrueFiPool2_TrueFarm_impl, () => {}) - const usdt_TrueFiPool2_LinearTrueDistributor = proxy(usdt_TrueFiPool2_LinearTrueDistributor_impl, () => {}) - const usdt_TrueFiPool2_TrueFarm = proxy(usdt_TrueFiPool2_TrueFarm_impl, () => {}) - const trueFiCreditOracle = proxy(trueFiCreditOracle_impl, () => {}) - const safu = proxy(safu_impl, () => {}) - const borrowingMutex = proxy(borrowingMutex_impl, () => {}) - // New bare contracts - const trueFiPool2 = contract(TrueFiPool2) - const implementationReference = contract(ImplementationReference, [trueFiPool2]) - const chainlinkTruTusdOracle = contract(ChainlinkTruTusdOracle) - const chainlinkTruUsdcOracle = contract(ChainlinkTruUsdcOracle) - const chainlinkTruUsdtOracle = contract(ChainlinkTruUsdtOracle) - const oneInch = isMainnet ? ONE_INCH_EXCHANGE : contract(Mock1InchV3) + // // New contract proxies + // const trueLender2 = proxy(trueLender2_impl, () => {}) + // const poolFactory = proxy(poolFactory_impl, () => {}) + // const liquidator2 = proxy(liquidator2_impl, () => {}) + // const loanFactory2 = proxy(loanFactory2_impl, () => {}) + // const usdc_TrueFiPool2_LinearTrueDistributor = proxy(usdc_TrueFiPool2_LinearTrueDistributor_impl, () => {}) + // const usdc_TrueFiPool2_TrueFarm = proxy(usdc_TrueFiPool2_TrueFarm_impl, () => {}) + // const usdt_TrueFiPool2_LinearTrueDistributor = proxy(usdt_TrueFiPool2_LinearTrueDistributor_impl, () => {}) + // const usdt_TrueFiPool2_TrueFarm = proxy(usdt_TrueFiPool2_TrueFarm_impl, () => {}) + // const trueFiCreditOracle = proxy(trueFiCreditOracle_impl, () => {}) + // const safu = proxy(safu_impl, () => {}) + // const borrowingMutex = proxy(borrowingMutex_impl, () => {}) + // // New bare contracts + // const trueFiPool2 = contract(TrueFiPool2) + // const implementationReference = contract(ImplementationReference, [trueFiPool2]) + // const chainlinkTruTusdOracle = contract(ChainlinkTruTusdOracle) + // const chainlinkTruUsdcOracle = contract(ChainlinkTruUsdcOracle) + // const chainlinkTruUsdtOracle = contract(ChainlinkTruUsdtOracle) + // const oneInch = isMainnet ? ONE_INCH_EXCHANGE : contract(Mock1InchV3) - // Contract initialization - runIf(safu.isInitialized().not(), () => { - safu.initialize(loanFactory2, liquidator2, oneInch) - }) - runIf(poolFactory.isInitialized().not(), () => { - poolFactory.initialize(implementationReference, trueLender2, safu) - }) - runIf(trueLender2.isInitialized().not(), () => { - trueLender2.initialize(stkTruToken, poolFactory, trueRatingAgencyV2, oneInch, trueFiCreditOracle, borrowingMutex) - }) - runIf(trueLender2.votingPeriod().equals(deployParams[NETWORK].WITHDRAW_PERIOD).not(), () => { - trueLender2.setVotingPeriod(deployParams[NETWORK].WITHDRAW_PERIOD) - }) - runIf(loanFactory2.isInitialized().not(), () => { - loanFactory2.initialize(poolFactory, trueLender2, liquidator2, AddressZero, trueFiCreditOracle, borrowingMutex) - }) - runIf(liquidator2.isInitialized().not(), () => { - liquidator2.initialize(stkTruToken, trustToken, loanFactory2, AddressZero) - }) - runIf(poolFactory.pool(usdc).equals(AddressZero), () => { - poolFactory.allowToken(usdc, true) - poolFactory.createPool(usdc) - }) - const usdc_TrueFiPool2 = poolFactory.pool(usdc) - runIf(trueLender2.feePool().equals(AddressZero), () => { - trueLender2.setFeePool(usdc_TrueFiPool2) - }) - runIf(usdc_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { - usdc_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) - }) - runIf(usdc_TrueFiPool2_LinearTrueDistributor.farm().equals(usdc_TrueFiPool2_TrueFarm).not(), () => { - usdc_TrueFiPool2_LinearTrueDistributor.setFarm(usdc_TrueFiPool2_TrueFarm) - }) - runIf(usdc_TrueFiPool2_TrueFarm.isInitialized().not(), () => { - usdc_TrueFiPool2_TrueFarm.initialize(usdc_TrueFiPool2, usdc_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDC Farm') - }) - runIf(poolFactory.pool(usdt).equals(AddressZero), () => { - poolFactory.allowToken(usdt, true) - poolFactory.createPool(usdt) - }) - const usdt_TrueFiPool2 = poolFactory.pool(usdt) - runIf(usdt_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { - usdt_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) - }) - runIf(usdt_TrueFiPool2_LinearTrueDistributor.farm().equals(usdt_TrueFiPool2_TrueFarm).not(), () => { - usdt_TrueFiPool2_LinearTrueDistributor.setFarm(usdt_TrueFiPool2_TrueFarm) - }) - runIf(usdt_TrueFiPool2_TrueFarm.isInitialized().not(), () => { - usdt_TrueFiPool2_TrueFarm.initialize(usdt_TrueFiPool2, usdt_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDT Farm') - }) - runIf(trueFiCreditOracle.isInitialized().not(), () => { - trueFiCreditOracle.initialize() - }) - if (!isMainnet) { - trueLender2.setFee(deployParams['testnet'].LOAN_INTEREST_FEE) - } - runIf(poolFactory.isPool(trueFiPool).not(), () => { - poolFactory.addLegacyPool(trueFiPool) - }) + // // Contract initialization + // runIf(safu.isInitialized().not(), () => { + // safu.initialize(loanFactory2, liquidator2, oneInch) + // }) + // runIf(poolFactory.isInitialized().not(), () => { + // poolFactory.initialize(implementationReference, trueLender2, safu) + // }) + // runIf(trueLender2.isInitialized().not(), () => { + // trueLender2.initialize(stkTruToken, poolFactory, trueRatingAgencyV2, oneInch, trueFiCreditOracle, borrowingMutex) + // }) + // runIf(trueLender2.votingPeriod().equals(deployParams[NETWORK].WITHDRAW_PERIOD).not(), () => { + // trueLender2.setVotingPeriod(deployParams[NETWORK].WITHDRAW_PERIOD) + // }) + // runIf(loanFactory2.isInitialized().not(), () => { + // loanFactory2.initialize(poolFactory, trueLender2, liquidator2, AddressZero, trueFiCreditOracle, borrowingMutex) + // }) + // runIf(liquidator2.isInitialized().not(), () => { + // liquidator2.initialize(stkTruToken, trustToken, loanFactory2, AddressZero) + // }) + // runIf(poolFactory.pool(usdc).equals(AddressZero), () => { + // poolFactory.allowToken(usdc, true) + // poolFactory.createPool(usdc) + // }) + // const usdc_TrueFiPool2 = poolFactory.pool(usdc) + // runIf(trueLender2.feePool().equals(AddressZero), () => { + // trueLender2.setFeePool(usdc_TrueFiPool2) + // }) + // runIf(usdc_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { + // usdc_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) + // }) + // runIf(usdc_TrueFiPool2_LinearTrueDistributor.farm().equals(usdc_TrueFiPool2_TrueFarm).not(), () => { + // usdc_TrueFiPool2_LinearTrueDistributor.setFarm(usdc_TrueFiPool2_TrueFarm) + // }) + // runIf(usdc_TrueFiPool2_TrueFarm.isInitialized().not(), () => { + // usdc_TrueFiPool2_TrueFarm.initialize(usdc_TrueFiPool2, usdc_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDC Farm') + // }) + // runIf(poolFactory.pool(usdt).equals(AddressZero), () => { + // poolFactory.allowToken(usdt, true) + // poolFactory.createPool(usdt) + // }) + // const usdt_TrueFiPool2 = poolFactory.pool(usdt) + // runIf(usdt_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { + // usdt_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) + // }) + // runIf(usdt_TrueFiPool2_LinearTrueDistributor.farm().equals(usdt_TrueFiPool2_TrueFarm).not(), () => { + // usdt_TrueFiPool2_LinearTrueDistributor.setFarm(usdt_TrueFiPool2_TrueFarm) + // }) + // runIf(usdt_TrueFiPool2_TrueFarm.isInitialized().not(), () => { + // usdt_TrueFiPool2_TrueFarm.initialize(usdt_TrueFiPool2, usdt_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDT Farm') + // }) + // runIf(trueFiCreditOracle.isInitialized().not(), () => { + // trueFiCreditOracle.initialize() + // }) + // if (!isMainnet) { + // trueLender2.setFee(deployParams['testnet'].LOAN_INTEREST_FEE) + // } + // runIf(poolFactory.isPool(trueFiPool).not(), () => { + // poolFactory.addLegacyPool(trueFiPool) + // }) }) From 25eabf9047586883accbc873dba4a665e6165cde Mon Sep 17 00:00:00 2001 From: Yuchen Lin Date: Thu, 20 Jul 2023 01:32:49 -0700 Subject: [PATCH 3/4] Deploy SAFU to mainnet --- deployments.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployments.json b/deployments.json index 155096d30..2ee4b2877 100644 --- a/deployments.json +++ b/deployments.json @@ -557,8 +557,8 @@ "address": "0xCB829B1Aa77B8B57D320AF05a780757c8c2B88C1" }, "sAFU": { - "txHash": "0x5856ef56a67575ed46d74f86e7c5c6a4eb344a516ddfdc83fac445b324ac96ac", - "address": "0xc7B4BB7c8e3620A6c4F9E96524ccB8a81D52A1b1" + "txHash": "0x9f05b29a297527d56a4d3baed643928d4267404acedd1aec6190ec72376fcc69", + "address": "0x97638479ee4a25e69F8782a18831325C78485565" }, "sAFU_proxy": { "txHash": "0xaa5bbaa6ca71899793cea116bfa42e4b06791c7ab85523e83bf911a4b9e12c42", From 5147405510475390be42fe3ba35e94ba30470b5e Mon Sep 17 00:00:00 2001 From: Yuchen Lin Date: Thu, 20 Jul 2023 01:34:05 -0700 Subject: [PATCH 4/4] Revert "TEMP comment out all but SAFU deploy" This reverts commit 280ab460c48609d5f0f7579c11672e7d32587adb. --- deploy/truefi2.ts | 216 +++++++++++++++++++++++----------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/deploy/truefi2.ts b/deploy/truefi2.ts index 243ecde3f..3a746a75c 100644 --- a/deploy/truefi2.ts +++ b/deploy/truefi2.ts @@ -53,117 +53,117 @@ const deployParams = { } deploy({}, (_, config) => { - // const proxy = createProxy(OwnedUpgradeabilityProxy) - // const timeProxy = createProxy(TimeOwnedUpgradeabilityProxy) - // const isMainnet = config.network === 'mainnet' - // const NETWORK = isMainnet ? 'mainnet' : 'testnet' + const proxy = createProxy(OwnedUpgradeabilityProxy) + const timeProxy = createProxy(TimeOwnedUpgradeabilityProxy) + const isMainnet = config.network === 'mainnet' + const NETWORK = isMainnet ? 'mainnet' : 'testnet' - // // Existing contracts - // const trustToken = isMainnet - // ? timeProxy(contract(TrustToken), () => {}) - // : timeProxy(contract(TestTrustToken), () => {}) - // const stkTruToken = proxy(contract(StkTruToken), () => {}) - // const trueFiPool = isMainnet - // ? proxy(contract(TrueFiPool), () => {}) - // : proxy(contract(TestTrueFiPool), () => {}) - // const usdc = isMainnet - // ? deployParams['mainnet'].USDC - // : contract(TestUSDCToken) - // const usdt = isMainnet - // ? deployParams['mainnet'].USDT - // : contract(TestUSDTToken) - // const trueRatingAgencyV2 = proxy(contract(TrueRatingAgencyV2), () => {}) + // Existing contracts + const trustToken = isMainnet + ? timeProxy(contract(TrustToken), () => {}) + : timeProxy(contract(TestTrustToken), () => {}) + const stkTruToken = proxy(contract(StkTruToken), () => {}) + const trueFiPool = isMainnet + ? proxy(contract(TrueFiPool), () => {}) + : proxy(contract(TestTrueFiPool), () => {}) + const usdc = isMainnet + ? deployParams['mainnet'].USDC + : contract(TestUSDCToken) + const usdt = isMainnet + ? deployParams['mainnet'].USDT + : contract(TestUSDTToken) + const trueRatingAgencyV2 = proxy(contract(TrueRatingAgencyV2), () => {}) - // // New contract impls - // const trueLender2_impl = contract(TrueLender2) - // const poolFactory_impl = contract(PoolFactory) - // const liquidator2_impl = contract(Liquidator2) - // const loanFactory2_impl = contract(LoanFactory2) + // New contract impls + const trueLender2_impl = contract(TrueLender2) + const poolFactory_impl = contract(PoolFactory) + const liquidator2_impl = contract(Liquidator2) + const loanFactory2_impl = contract(LoanFactory2) const safu_impl = contract(SAFU) - // const usdc_TrueFiPool2_LinearTrueDistributor_impl = contract('usdc_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) - // const usdc_TrueFiPool2_TrueFarm_impl = contract('usdc_TrueFiPool2_TrueFarm', TrueFarm) - // const usdt_TrueFiPool2_LinearTrueDistributor_impl = contract('usdt_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) - // const usdt_TrueFiPool2_TrueFarm_impl = contract('usdt_TrueFiPool2_TrueFarm', TrueFarm) - // const trueFiCreditOracle_impl = contract(TrueFiCreditOracle) - // const borrowingMutex_impl = contract(BorrowingMutex) + const usdc_TrueFiPool2_LinearTrueDistributor_impl = contract('usdc_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) + const usdc_TrueFiPool2_TrueFarm_impl = contract('usdc_TrueFiPool2_TrueFarm', TrueFarm) + const usdt_TrueFiPool2_LinearTrueDistributor_impl = contract('usdt_TrueFiPool2_LinearTrueDistributor', LinearTrueDistributor) + const usdt_TrueFiPool2_TrueFarm_impl = contract('usdt_TrueFiPool2_TrueFarm', TrueFarm) + const trueFiCreditOracle_impl = contract(TrueFiCreditOracle) + const borrowingMutex_impl = contract(BorrowingMutex) - // // New contract proxies - // const trueLender2 = proxy(trueLender2_impl, () => {}) - // const poolFactory = proxy(poolFactory_impl, () => {}) - // const liquidator2 = proxy(liquidator2_impl, () => {}) - // const loanFactory2 = proxy(loanFactory2_impl, () => {}) - // const usdc_TrueFiPool2_LinearTrueDistributor = proxy(usdc_TrueFiPool2_LinearTrueDistributor_impl, () => {}) - // const usdc_TrueFiPool2_TrueFarm = proxy(usdc_TrueFiPool2_TrueFarm_impl, () => {}) - // const usdt_TrueFiPool2_LinearTrueDistributor = proxy(usdt_TrueFiPool2_LinearTrueDistributor_impl, () => {}) - // const usdt_TrueFiPool2_TrueFarm = proxy(usdt_TrueFiPool2_TrueFarm_impl, () => {}) - // const trueFiCreditOracle = proxy(trueFiCreditOracle_impl, () => {}) - // const safu = proxy(safu_impl, () => {}) - // const borrowingMutex = proxy(borrowingMutex_impl, () => {}) - // // New bare contracts - // const trueFiPool2 = contract(TrueFiPool2) - // const implementationReference = contract(ImplementationReference, [trueFiPool2]) - // const chainlinkTruTusdOracle = contract(ChainlinkTruTusdOracle) - // const chainlinkTruUsdcOracle = contract(ChainlinkTruUsdcOracle) - // const chainlinkTruUsdtOracle = contract(ChainlinkTruUsdtOracle) - // const oneInch = isMainnet ? ONE_INCH_EXCHANGE : contract(Mock1InchV3) + // New contract proxies + const trueLender2 = proxy(trueLender2_impl, () => {}) + const poolFactory = proxy(poolFactory_impl, () => {}) + const liquidator2 = proxy(liquidator2_impl, () => {}) + const loanFactory2 = proxy(loanFactory2_impl, () => {}) + const usdc_TrueFiPool2_LinearTrueDistributor = proxy(usdc_TrueFiPool2_LinearTrueDistributor_impl, () => {}) + const usdc_TrueFiPool2_TrueFarm = proxy(usdc_TrueFiPool2_TrueFarm_impl, () => {}) + const usdt_TrueFiPool2_LinearTrueDistributor = proxy(usdt_TrueFiPool2_LinearTrueDistributor_impl, () => {}) + const usdt_TrueFiPool2_TrueFarm = proxy(usdt_TrueFiPool2_TrueFarm_impl, () => {}) + const trueFiCreditOracle = proxy(trueFiCreditOracle_impl, () => {}) + const safu = proxy(safu_impl, () => {}) + const borrowingMutex = proxy(borrowingMutex_impl, () => {}) + // New bare contracts + const trueFiPool2 = contract(TrueFiPool2) + const implementationReference = contract(ImplementationReference, [trueFiPool2]) + const chainlinkTruTusdOracle = contract(ChainlinkTruTusdOracle) + const chainlinkTruUsdcOracle = contract(ChainlinkTruUsdcOracle) + const chainlinkTruUsdtOracle = contract(ChainlinkTruUsdtOracle) + const oneInch = isMainnet ? ONE_INCH_EXCHANGE : contract(Mock1InchV3) - // // Contract initialization - // runIf(safu.isInitialized().not(), () => { - // safu.initialize(loanFactory2, liquidator2, oneInch) - // }) - // runIf(poolFactory.isInitialized().not(), () => { - // poolFactory.initialize(implementationReference, trueLender2, safu) - // }) - // runIf(trueLender2.isInitialized().not(), () => { - // trueLender2.initialize(stkTruToken, poolFactory, trueRatingAgencyV2, oneInch, trueFiCreditOracle, borrowingMutex) - // }) - // runIf(trueLender2.votingPeriod().equals(deployParams[NETWORK].WITHDRAW_PERIOD).not(), () => { - // trueLender2.setVotingPeriod(deployParams[NETWORK].WITHDRAW_PERIOD) - // }) - // runIf(loanFactory2.isInitialized().not(), () => { - // loanFactory2.initialize(poolFactory, trueLender2, liquidator2, AddressZero, trueFiCreditOracle, borrowingMutex) - // }) - // runIf(liquidator2.isInitialized().not(), () => { - // liquidator2.initialize(stkTruToken, trustToken, loanFactory2, AddressZero) - // }) - // runIf(poolFactory.pool(usdc).equals(AddressZero), () => { - // poolFactory.allowToken(usdc, true) - // poolFactory.createPool(usdc) - // }) - // const usdc_TrueFiPool2 = poolFactory.pool(usdc) - // runIf(trueLender2.feePool().equals(AddressZero), () => { - // trueLender2.setFeePool(usdc_TrueFiPool2) - // }) - // runIf(usdc_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { - // usdc_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) - // }) - // runIf(usdc_TrueFiPool2_LinearTrueDistributor.farm().equals(usdc_TrueFiPool2_TrueFarm).not(), () => { - // usdc_TrueFiPool2_LinearTrueDistributor.setFarm(usdc_TrueFiPool2_TrueFarm) - // }) - // runIf(usdc_TrueFiPool2_TrueFarm.isInitialized().not(), () => { - // usdc_TrueFiPool2_TrueFarm.initialize(usdc_TrueFiPool2, usdc_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDC Farm') - // }) - // runIf(poolFactory.pool(usdt).equals(AddressZero), () => { - // poolFactory.allowToken(usdt, true) - // poolFactory.createPool(usdt) - // }) - // const usdt_TrueFiPool2 = poolFactory.pool(usdt) - // runIf(usdt_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { - // usdt_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) - // }) - // runIf(usdt_TrueFiPool2_LinearTrueDistributor.farm().equals(usdt_TrueFiPool2_TrueFarm).not(), () => { - // usdt_TrueFiPool2_LinearTrueDistributor.setFarm(usdt_TrueFiPool2_TrueFarm) - // }) - // runIf(usdt_TrueFiPool2_TrueFarm.isInitialized().not(), () => { - // usdt_TrueFiPool2_TrueFarm.initialize(usdt_TrueFiPool2, usdt_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDT Farm') - // }) - // runIf(trueFiCreditOracle.isInitialized().not(), () => { - // trueFiCreditOracle.initialize() - // }) - // if (!isMainnet) { - // trueLender2.setFee(deployParams['testnet'].LOAN_INTEREST_FEE) - // } - // runIf(poolFactory.isPool(trueFiPool).not(), () => { - // poolFactory.addLegacyPool(trueFiPool) - // }) + // Contract initialization + runIf(safu.isInitialized().not(), () => { + safu.initialize(loanFactory2, liquidator2, oneInch) + }) + runIf(poolFactory.isInitialized().not(), () => { + poolFactory.initialize(implementationReference, trueLender2, safu) + }) + runIf(trueLender2.isInitialized().not(), () => { + trueLender2.initialize(stkTruToken, poolFactory, trueRatingAgencyV2, oneInch, trueFiCreditOracle, borrowingMutex) + }) + runIf(trueLender2.votingPeriod().equals(deployParams[NETWORK].WITHDRAW_PERIOD).not(), () => { + trueLender2.setVotingPeriod(deployParams[NETWORK].WITHDRAW_PERIOD) + }) + runIf(loanFactory2.isInitialized().not(), () => { + loanFactory2.initialize(poolFactory, trueLender2, liquidator2, AddressZero, trueFiCreditOracle, borrowingMutex) + }) + runIf(liquidator2.isInitialized().not(), () => { + liquidator2.initialize(stkTruToken, trustToken, loanFactory2, AddressZero) + }) + runIf(poolFactory.pool(usdc).equals(AddressZero), () => { + poolFactory.allowToken(usdc, true) + poolFactory.createPool(usdc) + }) + const usdc_TrueFiPool2 = poolFactory.pool(usdc) + runIf(trueLender2.feePool().equals(AddressZero), () => { + trueLender2.setFeePool(usdc_TrueFiPool2) + }) + runIf(usdc_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { + usdc_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) + }) + runIf(usdc_TrueFiPool2_LinearTrueDistributor.farm().equals(usdc_TrueFiPool2_TrueFarm).not(), () => { + usdc_TrueFiPool2_LinearTrueDistributor.setFarm(usdc_TrueFiPool2_TrueFarm) + }) + runIf(usdc_TrueFiPool2_TrueFarm.isInitialized().not(), () => { + usdc_TrueFiPool2_TrueFarm.initialize(usdc_TrueFiPool2, usdc_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDC Farm') + }) + runIf(poolFactory.pool(usdt).equals(AddressZero), () => { + poolFactory.allowToken(usdt, true) + poolFactory.createPool(usdt) + }) + const usdt_TrueFiPool2 = poolFactory.pool(usdt) + runIf(usdt_TrueFiPool2_LinearTrueDistributor.isInitialized().not(), () => { + usdt_TrueFiPool2_LinearTrueDistributor.initialize(deployParams[NETWORK].DISTRIBUTION_START, deployParams[NETWORK].DISTRIBUTION_DURATION, deployParams[NETWORK].STAKE_DISTRIBUTION_AMOUNT, trustToken) + }) + runIf(usdt_TrueFiPool2_LinearTrueDistributor.farm().equals(usdt_TrueFiPool2_TrueFarm).not(), () => { + usdt_TrueFiPool2_LinearTrueDistributor.setFarm(usdt_TrueFiPool2_TrueFarm) + }) + runIf(usdt_TrueFiPool2_TrueFarm.isInitialized().not(), () => { + usdt_TrueFiPool2_TrueFarm.initialize(usdt_TrueFiPool2, usdt_TrueFiPool2_LinearTrueDistributor, 'TrueFi tfUSDT Farm') + }) + runIf(trueFiCreditOracle.isInitialized().not(), () => { + trueFiCreditOracle.initialize() + }) + if (!isMainnet) { + trueLender2.setFee(deployParams['testnet'].LOAN_INTEREST_FEE) + } + runIf(poolFactory.isPool(trueFiPool).not(), () => { + poolFactory.addLegacyPool(trueFiPool) + }) })