@gooddollar/goodprotocol 2.0.34-beta.2 → 2.0.34-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/abis/GenericDistributionHelper.min.json +1 -0
- package/artifacts/abis/INonfungiblePositionManager.min.json +1 -0
- package/artifacts/abis/IUniswapV3Pool.min.json +1 -0
- package/artifacts/abis/UBISchemeV2.min.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
- package/artifacts/contracts/IQuoter.sol/IQuoterV2.dbg.json +4 -0
- package/artifacts/contracts/IQuoter.sol/IQuoterV2.json +211 -0
- package/artifacts/contracts/IUniswapV3.sol/INonfungiblePositionManager.dbg.json +4 -0
- package/artifacts/contracts/IUniswapV3.sol/INonfungiblePositionManager.json +102 -0
- package/artifacts/contracts/IUniswapV3.sol/IUniswapV3Pool.dbg.json +4 -0
- package/artifacts/contracts/IUniswapV3.sol/IUniswapV3Pool.json +93 -0
- package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IQuoterV2.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ISwapRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
- package/artifacts/contracts/MentoInterfaces.sol/IBancorExchangeProvider.dbg.json +1 -1
- package/artifacts/contracts/MentoInterfaces.sol/IBroker.dbg.json +1 -1
- package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.dbg.json +1 -1
- package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.dbg.json +1 -1
- package/artifacts/contracts/MentoInterfaces.sol/IMentoReserve.dbg.json +1 -1
- package/artifacts/contracts/MentoInterfaces.sol/ITradingLimits.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
- package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
- package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
- package/artifacts/contracts/identity/IdentityV3.sol/IdentityV3.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
- package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.dbg.json +1 -1
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.dbg.json +1 -1
- package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
- package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
- package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
- package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
- package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
- package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
- package/artifacts/contracts/reserve/CeloDistributionHelper.sol/CeloDistributionHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/GenericDistributionHelper.sol/GenericDistributionHelper.dbg.json +4 -0
- package/artifacts/contracts/reserve/GenericDistributionHelper.sol/GenericDistributionHelper.json +931 -0
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
- package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
- package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
- package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
- package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
- package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/GoodDollar2.sol/GoodDollar2.dbg.json +1 -1
- package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +1 -1
- package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.json +7 -2
- package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
- package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
- package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyFromReserveHelper.sol/BuyFromReserveHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
- package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.dbg.json +1 -1
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.dbg.json +1 -1
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.dbg.json +1 -1
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.dbg.json +1 -1
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.dbg.json +1 -1
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.dbg.json +1 -1
- package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
- package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
- package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.dbg.json +1 -1
- package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
- package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.dbg.json +1 -1
- package/contracts/IQuoter.sol +108 -0
- package/contracts/IUniswapV3.sol +51 -0
- package/contracts/reserve/GenericDistributionHelper.sol +319 -0
- package/contracts/ubi/UBISchemeV2.sol +8 -4
- package/dist/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
- package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +179 -186
- package/dist/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.json +2 -2
- package/dist/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.json +2 -2
- package/dist/test-sdk/deploySuperGoodDollar.d.ts +1 -1
- package/dist/test-sdk/deploySuperGoodDollar.js +4 -8
- package/dist/test-sdk/index.js +1 -5
- package/hardhat.config.ts +14 -6
- package/package.json +1 -1
- package/releases/deploy-settings.json +15 -2
- package/releases/deployment.json +66 -45
- package/releases/olddao.json +1 -1
- package/scripts/fv.ts +19 -1
- package/scripts/multichain-deploy/0_proxyFactory-deploy.ts +4 -3
- package/scripts/multichain-deploy/1_basicdao-deploy.ts +18 -9
- package/scripts/multichain-deploy/4_ubi-deploy.ts +1 -1
- package/scripts/multichain-deploy/8_disthelper-deploy.ts +152 -0
- package/scripts/multichain-deploy/createUniswapTestPools.ts +163 -0
- package/scripts/multichain-deploy/fulldeploy.sh +17 -17
- package/scripts/multichain-deploy/helpers.ts +76 -6
- package/scripts/multichain-deploy/verify.ts +41 -0
- package/scripts/proposals/gip-25-xdc-upgrade.ts +438 -0
- package/test/helpers.ts +1 -1
- package/test/ubi/UBISchemeV2.test.ts +35 -108
- package/types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts +108 -0
- package/types/@openzeppelin/contracts/proxy/ERC1967/index.ts +1 -0
- package/types/@uniswap/index.ts +2 -0
- package/types/@uniswap/v2-periphery/contracts/index.ts +5 -0
- package/types/@uniswap/v2-periphery/contracts/interfaces/IWETH.ts +159 -0
- package/types/@uniswap/v2-periphery/contracts/interfaces/index.ts +4 -0
- package/types/@uniswap/v2-periphery/index.ts +5 -0
- package/types/contracts/IQuoter.sol/IQuoterV2.ts +297 -0
- package/types/contracts/IQuoter.sol/index.ts +4 -0
- package/types/contracts/IUniswapV3.sol/INonfungiblePositionManager.ts +151 -0
- package/types/contracts/IUniswapV3.sol/IUniswapV3Factory.ts +155 -0
- package/types/contracts/IUniswapV3.sol/IUniswapV3Pool.ts +179 -0
- package/types/contracts/IUniswapV3.sol/index.ts +5 -0
- package/types/contracts/Interfaces.sol/AToken.ts +81 -0
- package/types/contracts/Interfaces.sol/IAaveIncentivesControllerV3.ts +156 -0
- package/types/contracts/Interfaces.sol/ILendingPoolV3.ts +254 -0
- package/types/contracts/fuseFaucet/SuperfluidBaseFacuet.sol/EthDistributor.ts +648 -0
- package/types/contracts/fuseFaucet/SuperfluidBaseFacuet.sol/EthDistributorUpgradeable.ts +843 -0
- package/types/contracts/fuseFaucet/SuperfluidBaseFacuet.sol/index.ts +4 -0
- package/types/contracts/index.ts +4 -0
- package/types/contracts/mocks/CeloDistributionHelperTest.sol/DistributionHelperTestHelper.ts +1252 -0
- package/types/contracts/reserve/GenericDistributionHelper copy.sol/GenericDistributionHelper.ts +1247 -0
- package/types/contracts/reserve/GenericDistributionHelper copy.sol/index.ts +4 -0
- package/types/contracts/reserve/GenericDistributionHelper.ts +1304 -0
- package/types/contracts/reserve/GoodReserveADai.ts +2212 -0
- package/types/contracts/reserve/index.ts +1 -0
- package/types/contracts/staking/aave/GoodAave3StakingV2.sol/GoodAaveStakingV2.ts +1808 -0
- package/types/contracts/staking/aave/GoodAave3StakingV2.sol/index.ts +4 -0
- package/types/contracts/token/GoodDollar18.ts +1871 -0
- package/types/contracts/ubi/UBISchemeV2.ts +14 -3
- package/types/contracts/utils/BuyGDClone.sol/IQuoterV2.ts +184 -0
- package/types/contracts/utils/BuyGDClone.sol/ISwapRouter.ts +306 -0
- package/types/contracts/utils/FuseOldBridgeKill.sol/BasicAMBErc677ToErc677.ts +108 -0
- package/types/contracts/utils/ProtocolUpgradeV4Mento.sol/MentoExchange.ts +81 -0
- package/types/contracts/utils/ProtocolUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.ts +161 -0
- package/types/contracts/utils/ProtocolUpgradeV4Mento.sol/index.ts +5 -0
- package/types/contracts/utils/ReserveRestore.sol/MentoExchange.ts +81 -0
- package/types/contracts/utils/ReserveRestore.sol/ReserveRestore.ts +112 -0
- package/types/contracts/utils/ReserveRestore.sol/index.ts +5 -0
- package/types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts +146 -0
- package/types/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts +1 -0
- package/types/factories/@uniswap/index.ts +1 -0
- package/types/factories/@uniswap/v2-periphery/contracts/index.ts +4 -0
- package/types/factories/@uniswap/v2-periphery/contracts/interfaces/IWETH__factory.ts +67 -0
- package/types/factories/@uniswap/v2-periphery/contracts/interfaces/index.ts +4 -0
- package/types/factories/@uniswap/v2-periphery/index.ts +4 -0
- package/types/factories/contracts/IQuoter.sol/IQuoterV2__factory.ts +226 -0
- package/types/factories/contracts/IQuoter.sol/index.ts +4 -0
- package/types/factories/contracts/IUniswapV3.sol/INonfungiblePositionManager__factory.ts +121 -0
- package/types/factories/contracts/IUniswapV3.sol/IUniswapV3Factory__factory.ts +84 -0
- package/types/factories/contracts/IUniswapV3.sol/IUniswapV3Pool__factory.ts +108 -0
- package/types/factories/contracts/IUniswapV3.sol/index.ts +5 -0
- package/types/factories/contracts/Interfaces.sol/AToken__factory.ts +36 -0
- package/types/factories/contracts/Interfaces.sol/IAaveIncentivesControllerV3__factory.ts +88 -0
- package/types/factories/contracts/Interfaces.sol/ILendingPoolV3__factory.ts +186 -0
- package/types/factories/contracts/fuseFaucet/SuperfluidBaseFacuet.sol/EthDistributorUpgradeable__factory.ts +572 -0
- package/types/factories/contracts/fuseFaucet/SuperfluidBaseFacuet.sol/EthDistributor__factory.ts +482 -0
- package/types/factories/contracts/fuseFaucet/SuperfluidBaseFacuet.sol/index.ts +4 -0
- package/types/factories/contracts/index.ts +2 -0
- package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +929 -0
- package/types/factories/contracts/reserve/GenericDistributionHelper copy.sol/GenericDistributionHelper__factory.ts +935 -0
- package/types/factories/contracts/reserve/GenericDistributionHelper copy.sol/index.ts +4 -0
- package/types/factories/contracts/reserve/GenericDistributionHelper__factory.ts +987 -0
- package/types/factories/contracts/reserve/GoodReserveADai__factory.ts +1502 -0
- package/types/factories/contracts/reserve/index.ts +1 -0
- package/types/factories/contracts/staking/aave/GoodAave3StakingV2.sol/GoodAaveStakingV2__factory.ts +1240 -0
- package/types/factories/contracts/staking/aave/GoodAave3StakingV2.sol/index.ts +4 -0
- package/types/factories/contracts/token/GoodDollar18__factory.ts +1257 -0
- package/types/factories/contracts/ubi/UBISchemeV2__factory.ts +6 -1
- package/types/factories/contracts/utils/BuyGDClone.sol/IQuoterV2__factory.ts +126 -0
- package/types/factories/contracts/utils/BuyGDClone.sol/ISwapRouter__factory.ts +220 -0
- package/types/factories/contracts/utils/FuseOldBridgeKill.sol/BasicAMBErc677ToErc677__factory.ts +86 -0
- package/types/factories/contracts/utils/ProtocolUpgradeV4Mento.sol/MentoExchange__factory.ts +39 -0
- package/types/factories/contracts/utils/ProtocolUpgradeV4Mento.sol/ProtocolUpgradeV4Mento__factory.ts +152 -0
- package/types/factories/contracts/utils/ProtocolUpgradeV4Mento.sol/index.ts +5 -0
- package/types/factories/contracts/utils/ReserveRestore.sol/MentoExchange__factory.ts +39 -0
- package/types/factories/contracts/utils/ReserveRestore.sol/ReserveRestore__factory.ts +95 -0
- package/types/factories/contracts/utils/ReserveRestore.sol/index.ts +5 -0
- package/types/hardhat.d.ts +54 -0
- package/types/index.ts +10 -2
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
// Part 1 UBI+Bridge
|
|
2
|
+
// deploy dao to xdc - Done
|
|
3
|
+
// deploy bridge to xdc - Done
|
|
4
|
+
// give minting rights to xdc bridge
|
|
5
|
+
// upgrade to improved identity + ubischeme on celo + fuse
|
|
6
|
+
// upgrade bridge on celo/ethereum/fuse - make sure they include xdc
|
|
7
|
+
// burn celo bridge locked supply (now each chain has its own supply and all bridges are mint/burn)
|
|
8
|
+
|
|
9
|
+
// Part 2 Reserve
|
|
10
|
+
// create uniswap pools on xdc
|
|
11
|
+
// calculate how much G$s each reserve is backing
|
|
12
|
+
// deploy mento reserve to xdc with calculated parameters
|
|
13
|
+
// give mento broker minting rights on xdc
|
|
14
|
+
// deploy distribution helper
|
|
15
|
+
// transfer usdc to xdc reserve
|
|
16
|
+
// update celo reserve parameters accordingly
|
|
17
|
+
|
|
18
|
+
import { network, ethers, upgrades } from "hardhat";
|
|
19
|
+
import { reset } from "@nomicfoundation/hardhat-network-helpers";
|
|
20
|
+
import { defaultsDeep, last } from "lodash";
|
|
21
|
+
import prompt from "prompt";
|
|
22
|
+
|
|
23
|
+
import { executeViaGuardian, executeViaSafe, verifyProductionSigner } from "../multichain-deploy/helpers";
|
|
24
|
+
|
|
25
|
+
import ProtocolSettings from "../../releases/deploy-settings.json";
|
|
26
|
+
|
|
27
|
+
import dao from "../../releases/deployment.json";
|
|
28
|
+
import {
|
|
29
|
+
CeloDistributionHelper,
|
|
30
|
+
Controller,
|
|
31
|
+
FuseOldBridgeKill,
|
|
32
|
+
GoodMarketMaker,
|
|
33
|
+
IBancorExchangeProvider,
|
|
34
|
+
IBroker,
|
|
35
|
+
IGoodDollar,
|
|
36
|
+
IGoodDollarExchangeProvider,
|
|
37
|
+
IGoodDollarExpansionController,
|
|
38
|
+
IMentoReserve,
|
|
39
|
+
ProtocolUpgradeV4Mento
|
|
40
|
+
} from "../../types";
|
|
41
|
+
import releaser from "../releaser";
|
|
42
|
+
let { name: networkName } = network;
|
|
43
|
+
const isSimulation = network.name === "hardhat" || network.name === "fork" || network.name === "localhost";
|
|
44
|
+
|
|
45
|
+
export const upgradeCelo = async (network, checksOnly) => {
|
|
46
|
+
let [root] = await ethers.getSigners();
|
|
47
|
+
|
|
48
|
+
const isProduction = networkName.includes("production");
|
|
49
|
+
|
|
50
|
+
if (isProduction) verifyProductionSigner(root);
|
|
51
|
+
|
|
52
|
+
let networkEnv = networkName;
|
|
53
|
+
if (isSimulation) networkEnv = network;
|
|
54
|
+
|
|
55
|
+
let release: { [key: string]: any } = dao[networkEnv];
|
|
56
|
+
|
|
57
|
+
let guardian = root;
|
|
58
|
+
console.log("signer:", root.address, { networkEnv, isSimulation, isProduction, release });
|
|
59
|
+
|
|
60
|
+
const cusd = await ethers.getContractAt("IERC20", release.CUSD);
|
|
61
|
+
const gd = await ethers.getContractAt("GoodDollar", release.GoodDollar);
|
|
62
|
+
const mentoReserve = (await ethers.getContractAt("IMentoReserve", release.MentoReserve)) as IMentoReserve;
|
|
63
|
+
|
|
64
|
+
const ubiImpl = await ethers.deployContract("UBISchemeV2");
|
|
65
|
+
const identityImpl = await ethers.deployContract("IdentityV3");
|
|
66
|
+
|
|
67
|
+
console.log("deployed new impls", { ubiImpl: ubiImpl.address, identityImpl: identityImpl.address });
|
|
68
|
+
|
|
69
|
+
const proposalActions = [
|
|
70
|
+
[release.UBIScheme, "upgradeTo(address)", ethers.utils.defaultAbiCoder.encode(["address"], [ubiImpl.address]), "0"], //upgrade ubi
|
|
71
|
+
[
|
|
72
|
+
release.Identity,
|
|
73
|
+
"upgradeTo(address)",
|
|
74
|
+
ethers.utils.defaultAbiCoder.encode(["address"], [identityImpl.address]),
|
|
75
|
+
"0"
|
|
76
|
+
] //upgrade identity
|
|
77
|
+
];
|
|
78
|
+
const mentoExchange = (await ethers.getContractAt(
|
|
79
|
+
"IBancorExchangeProvider",
|
|
80
|
+
release.MentoExchangeProvider
|
|
81
|
+
)) as IBancorExchangeProvider;
|
|
82
|
+
|
|
83
|
+
//simulate on fork, make sure safe has enough eth to simulate txs
|
|
84
|
+
let DIST_HELPER_MIN_CELO_BALANCE = ethers.utils.parseEther("2");
|
|
85
|
+
|
|
86
|
+
if (isSimulation && !checksOnly) {
|
|
87
|
+
DIST_HELPER_MIN_CELO_BALANCE = ethers.utils.parseEther("0.1");
|
|
88
|
+
// await reset("https://rpc.ankr.com/celo");
|
|
89
|
+
await root.sendTransaction({ value: ethers.utils.parseEther("0.5"), to: release.Avatar });
|
|
90
|
+
|
|
91
|
+
const avatar = await ethers.getImpersonatedSigner(release.Avatar);
|
|
92
|
+
const reserveOwner = await ethers.getImpersonatedSigner(await mentoReserve.owner());
|
|
93
|
+
const eids = await mentoExchange.getExchangeIds();
|
|
94
|
+
if (eids.length > 0) {
|
|
95
|
+
await mentoExchange.connect(avatar).destroyExchange(eids[0], 0);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const devCUSD = await ethers.getContractAt(
|
|
99
|
+
[
|
|
100
|
+
"function mint(address,uint) external returns (uint)",
|
|
101
|
+
"function setValidators(address) external",
|
|
102
|
+
"function owner() view returns(address)"
|
|
103
|
+
],
|
|
104
|
+
release.CUSD
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
console.log("minting devCUSD");
|
|
108
|
+
const cusdOwner = await ethers.getImpersonatedSigner(await devCUSD.owner());
|
|
109
|
+
await root.sendTransaction({ value: ethers.utils.parseEther("0.5"), to: cusdOwner.address });
|
|
110
|
+
await devCUSD.connect(cusdOwner).setValidators(release.Avatar).catch(console.log);
|
|
111
|
+
await devCUSD.connect(avatar).mint(root.address, ethers.utils.parseEther("2000000")).catch(console.log);
|
|
112
|
+
|
|
113
|
+
console.log("transfering cusd to reserve");
|
|
114
|
+
await cusd.connect(root).transfer(release.MentoReserve, ethers.utils.parseEther("200000"));
|
|
115
|
+
|
|
116
|
+
guardian = await ethers.getImpersonatedSigner(release.GuardiansSafe);
|
|
117
|
+
await root.sendTransaction({ value: ethers.utils.parseEther("0.5"), to: guardian.address });
|
|
118
|
+
} else if (!isProduction && !checksOnly) {
|
|
119
|
+
DIST_HELPER_MIN_CELO_BALANCE = ethers.utils.parseEther("0.1");
|
|
120
|
+
const mentoReserve = (await ethers.getContractAt("IMentoReserve", release.MentoReserve)) as IMentoReserve;
|
|
121
|
+
const ctrl = (await ethers.getContractAt("Controller", release.Controller)) as Controller;
|
|
122
|
+
|
|
123
|
+
const eids = await mentoExchange.getExchangeIds();
|
|
124
|
+
if (eids.length > 0) {
|
|
125
|
+
await (
|
|
126
|
+
await ctrl.genericCall(
|
|
127
|
+
mentoExchange.address,
|
|
128
|
+
mentoExchange.interface.encodeFunctionData("destroyExchange", [eids[0], 0]),
|
|
129
|
+
release.Avatar,
|
|
130
|
+
0
|
|
131
|
+
)
|
|
132
|
+
).wait();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const devCUSD = await ethers.getContractAt(
|
|
136
|
+
["function mint(address,uint) external returns (uint)", "function setValidators(address) external"],
|
|
137
|
+
release.CUSD
|
|
138
|
+
);
|
|
139
|
+
await (
|
|
140
|
+
await ctrl.genericCall(
|
|
141
|
+
devCUSD.address,
|
|
142
|
+
devCUSD.interface.encodeFunctionData("setValidators", [release.Avatar]),
|
|
143
|
+
release.Avatar,
|
|
144
|
+
0
|
|
145
|
+
)
|
|
146
|
+
).wait();
|
|
147
|
+
await (
|
|
148
|
+
await ctrl.genericCall(
|
|
149
|
+
devCUSD.address,
|
|
150
|
+
devCUSD.interface.encodeFunctionData("mint", [root.address, ethers.utils.parseEther("2000000")]),
|
|
151
|
+
release.Avatar,
|
|
152
|
+
0
|
|
153
|
+
)
|
|
154
|
+
).wait();
|
|
155
|
+
|
|
156
|
+
if ((await cusd.balanceOf(release.MentoReserve)).lt(ethers.utils.parseEther("200000"))) {
|
|
157
|
+
await cusd.transfer(release.MentoReserve, ethers.utils.parseEther("200000"));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const mpbImplementation = mpbDeployments["42220"].find(_ => _.name === "celo")["MessagePassingBridge_Implementation"]
|
|
162
|
+
.address;
|
|
163
|
+
const bridgeLocked = ["0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5", "0xD5D11eE582c8931F336fbcd135e98CEE4DB8CCB0"];
|
|
164
|
+
const locked = [
|
|
165
|
+
"0xD17652350Cfd2A37bA2f947C910987a3B1A1c60d",
|
|
166
|
+
"0xeC577447D314cf1e443e9f4488216651450DBE7c",
|
|
167
|
+
"0x6738fA889fF31F82d9Fe8862ec025dbE318f3Fde"
|
|
168
|
+
];
|
|
169
|
+
|
|
170
|
+
const ethprovider = new ethers.providers.JsonRpcProvider("https://rpc.flashbots.net");
|
|
171
|
+
const fuseprovider = new ethers.providers.JsonRpcProvider("https://rpc.fuse.io");
|
|
172
|
+
const TOTAL_LOCKED = (
|
|
173
|
+
await Promise.all(
|
|
174
|
+
locked
|
|
175
|
+
.concat(bridgeLocked)
|
|
176
|
+
.map(_ => gd.connect(ethprovider).attach(dao["production-mainnet"].GoodDollar).balanceOf(_))
|
|
177
|
+
)
|
|
178
|
+
).reduce((prev, cur) => prev.add(cur), ethers.constants.Zero);
|
|
179
|
+
const TOTAL_SUPPLY_ETH = await gd.connect(ethprovider).attach(dao["production-mainnet"].GoodDollar).totalSupply();
|
|
180
|
+
const TOTAL_SUPPLY_FUSE = await gd.connect(fuseprovider).attach(dao["production"].GoodDollar).totalSupply();
|
|
181
|
+
const TOTAL_SUPPLY_CELO = await gd.totalSupply();
|
|
182
|
+
const TOTAL_GLOBAL_SUPPLY = TOTAL_SUPPLY_ETH.add(TOTAL_SUPPLY_FUSE)
|
|
183
|
+
.sub(TOTAL_LOCKED)
|
|
184
|
+
.mul(ethers.BigNumber.from("10000000000000000")) //convert to 18 decimals
|
|
185
|
+
.add(TOTAL_SUPPLY_CELO);
|
|
186
|
+
|
|
187
|
+
const exchangeParams = [release.CUSD, release.GoodDollar, 0, 0, 0, 0]; //address reserveAsset;address tokenAddress;uint256 tokenSupply;uint256 reserveBalance;uint32 reserveRatio;uint32 exitConribution;
|
|
188
|
+
|
|
189
|
+
console.log({
|
|
190
|
+
networkEnv,
|
|
191
|
+
mpbImplementation,
|
|
192
|
+
guardian: guardian.address,
|
|
193
|
+
isSimulation,
|
|
194
|
+
isProduction,
|
|
195
|
+
release,
|
|
196
|
+
TOTAL_GLOBAL_SUPPLY
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
const mentoUpgrade = release.MentoUpgradeHelper
|
|
200
|
+
? ((await ethers.getContractAt("ProtocolUpgradeV4Mento", release.MentoUpgradeHelper)) as ProtocolUpgradeV4Mento)
|
|
201
|
+
: await ethers.deployContract("ProtocolUpgradeV4Mento", [release.Avatar]);
|
|
202
|
+
let distHelper = release.CeloDistributionHelper
|
|
203
|
+
? ((await ethers.getContractAt("CeloDistributionHelper", release.CeloDistributionHelper)) as CeloDistributionHelper)
|
|
204
|
+
: ((await upgrades.deployProxy(
|
|
205
|
+
await ethers.getContractFactory("CeloDistributionHelper"),
|
|
206
|
+
[release.NameService, "0x00851A91a3c4E9a4c1B48df827Bacc1f884bdE28"], //static oracle for uniswap
|
|
207
|
+
{ initializer: "initialize" }
|
|
208
|
+
)) as CeloDistributionHelper);
|
|
209
|
+
|
|
210
|
+
release.MentoUpgradeHelper = mentoUpgrade.address;
|
|
211
|
+
release.CeloDistributionHelper = distHelper.address;
|
|
212
|
+
if (!isSimulation) {
|
|
213
|
+
releaser(release, networkEnv);
|
|
214
|
+
}
|
|
215
|
+
console.log("deployed mentoUpgrade", {
|
|
216
|
+
distribuitonHelper: distHelper.address,
|
|
217
|
+
mentoUpgrade: mentoUpgrade.address,
|
|
218
|
+
distHelperAvatar: await distHelper.avatar()
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
const proposalContracts = [
|
|
222
|
+
release.CeloDistributionHelper, //set fee settings
|
|
223
|
+
release.CeloDistributionHelper, //add ubi recipient
|
|
224
|
+
release.CeloDistributionHelper, //add community treasury recipient
|
|
225
|
+
release.MpbBridge, // upgrade
|
|
226
|
+
release.MpbBridge && release.GoodDollarMintBurnWrapper, // remove minting rights from bridge
|
|
227
|
+
release.GoodDollar, // set mento broker as minter
|
|
228
|
+
release.GoodDollar, // set reserve expansion controller as minter
|
|
229
|
+
release.Controller, // register upgrade contract
|
|
230
|
+
mentoUpgrade.address // create the exchange + set expansion rate
|
|
231
|
+
];
|
|
232
|
+
|
|
233
|
+
const proposalEthValues = proposalContracts.map(_ => 0);
|
|
234
|
+
|
|
235
|
+
const proposalFunctionSignatures = [
|
|
236
|
+
"setFeeSettings((uint128,uint128,uint8,uint8))",
|
|
237
|
+
"addOrUpdateRecipient((uint32,uint32,address,uint8))",
|
|
238
|
+
"addOrUpdateRecipient((uint32,uint32,address,uint8))",
|
|
239
|
+
"upgradeTo(address)",
|
|
240
|
+
"revokeRole(bytes32,address)", // mpb is now lock/unlock doesnt need minting
|
|
241
|
+
"addMinter(address)",
|
|
242
|
+
"addMinter(address)",
|
|
243
|
+
"registerScheme(address,bytes32,bytes4,address)",
|
|
244
|
+
"upgrade(address,(address,address,uint256,uint256,uint32,uint32),address,address,address,uint256)" //Controller _controller,PoolExchange memory _exchange,address _mentoExchange,address _mentoController, address _distHelper
|
|
245
|
+
];
|
|
246
|
+
|
|
247
|
+
console.log("preparing inputs...");
|
|
248
|
+
const proposalFunctionInputs = [
|
|
249
|
+
//uint128 maxFee;uint128 minBalanceForFees;uint8 percentageToSellForFee;
|
|
250
|
+
//2 celo max fee for lz bridge, min balance 2 celo, max percentage to sell 1%, max slippage 5%
|
|
251
|
+
ethers.utils.defaultAbiCoder.encode(
|
|
252
|
+
["uint128", "uint128", "uint8", "uint8"],
|
|
253
|
+
[ethers.utils.parseEther("2"), DIST_HELPER_MIN_CELO_BALANCE, "1", "5"]
|
|
254
|
+
),
|
|
255
|
+
ethers.utils.defaultAbiCoder.encode(["uint32", "uint32", "address", "uint8"], [9000, 42220, release.UBIScheme, 1]), // ubi pool recipient
|
|
256
|
+
ethers.utils.defaultAbiCoder.encode(
|
|
257
|
+
["uint32", "uint32", "address", "uint8"],
|
|
258
|
+
[1000, 42220, release.CommunitySafe, 1]
|
|
259
|
+
), //community treasury recipient
|
|
260
|
+
ethers.utils.defaultAbiCoder.encode(["address"], [mpbImplementation]),
|
|
261
|
+
release.MpbBridge &&
|
|
262
|
+
ethers.utils.defaultAbiCoder.encode(
|
|
263
|
+
["bytes32", "address"],
|
|
264
|
+
[ethers.utils.keccak256(ethers.utils.toUtf8Bytes("MINTER_ROLE")), release.MpbBridge]
|
|
265
|
+
),
|
|
266
|
+
ethers.utils.defaultAbiCoder.encode(["address"], [release.MentoBroker]),
|
|
267
|
+
ethers.utils.defaultAbiCoder.encode(["address"], [release.MentoExpansionController]),
|
|
268
|
+
ethers.utils.defaultAbiCoder.encode(
|
|
269
|
+
["address", "bytes32", "bytes4", "address"],
|
|
270
|
+
[mentoUpgrade.address, ethers.constants.HashZero, "0x0000001f", release.Avatar]
|
|
271
|
+
),
|
|
272
|
+
ethers.utils.defaultAbiCoder.encode(
|
|
273
|
+
["address", "(address,address,uint256,uint256,uint32,uint32)", "address", "address", "address", "uint256"],
|
|
274
|
+
[
|
|
275
|
+
release.Controller,
|
|
276
|
+
exchangeParams,
|
|
277
|
+
release.MentoExchangeProvider,
|
|
278
|
+
release.MentoExpansionController,
|
|
279
|
+
release.CeloDistributionHelper,
|
|
280
|
+
TOTAL_GLOBAL_SUPPLY
|
|
281
|
+
]
|
|
282
|
+
)
|
|
283
|
+
];
|
|
284
|
+
|
|
285
|
+
console.log({ exchangeParams, mentoExchange: release.MentoExchangeProvider });
|
|
286
|
+
console.log("executing upgrade...", { proposalContracts, proposalFunctionInputs, proposalFunctionSignatures });
|
|
287
|
+
|
|
288
|
+
if (isProduction && !checksOnly) {
|
|
289
|
+
await executeViaSafe(
|
|
290
|
+
proposalContracts,
|
|
291
|
+
proposalEthValues,
|
|
292
|
+
proposalFunctionSignatures,
|
|
293
|
+
proposalFunctionInputs,
|
|
294
|
+
release.GuardiansSafe,
|
|
295
|
+
"celo"
|
|
296
|
+
);
|
|
297
|
+
} else if (!checksOnly) {
|
|
298
|
+
await executeViaGuardian(
|
|
299
|
+
proposalContracts,
|
|
300
|
+
proposalEthValues,
|
|
301
|
+
proposalFunctionSignatures,
|
|
302
|
+
proposalFunctionInputs,
|
|
303
|
+
guardian,
|
|
304
|
+
networkEnv
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (isSimulation || !isProduction) {
|
|
309
|
+
const swapper = networkEnv.includes("production")
|
|
310
|
+
? await ethers.getImpersonatedSigner("0x66582D24FEaD72555adaC681Cc621caCbB208324")
|
|
311
|
+
: root;
|
|
312
|
+
const supplyAfter = await (await ethers.getContractAt("IGoodDollar", release.GoodDollar)).totalSupply();
|
|
313
|
+
console.log("Supply after upgrade:", { supplyAfter, TOTAL_GLOBAL_SUPPLY });
|
|
314
|
+
|
|
315
|
+
const isBrokerMinter = await gd.isMinter(release.MentoBroker);
|
|
316
|
+
const isExpansionMinter = await gd.isMinter(release.MentoExpansionController);
|
|
317
|
+
const mentoExchange = await ethers.getContractAt("IBancorExchangeProvider", release.MentoExchangeProvider);
|
|
318
|
+
const mentoBroker = (await ethers.getContractAt("IBroker", release.MentoBroker)) as IBroker;
|
|
319
|
+
const eids = await mentoExchange.getExchangeIds();
|
|
320
|
+
const exchange = await mentoExchange.getPoolExchange(eids[0]);
|
|
321
|
+
const price = (await mentoExchange.currentPrice(eids[0])) / 1e18;
|
|
322
|
+
console.log("current price:", price);
|
|
323
|
+
console.log("Exchange:", exchange, eids[0]);
|
|
324
|
+
|
|
325
|
+
console.log("Broker minter check:", isBrokerMinter ? "Success" : "Failed");
|
|
326
|
+
console.log("Expansion minter check:", isExpansionMinter ? "Success" : "Failed");
|
|
327
|
+
|
|
328
|
+
console.log("balance before swap:", await gd.balanceOf(swapper.address), await cusd.balanceOf(swapper.address));
|
|
329
|
+
await cusd.connect(swapper).approve(release.MentoBroker, ethers.utils.parseEther("1000"));
|
|
330
|
+
await mentoBroker
|
|
331
|
+
.connect(swapper)
|
|
332
|
+
.swapIn(mentoExchange.address, eids[0], cusd.address, gd.address, ethers.utils.parseEther("1000"), 0)
|
|
333
|
+
.then(_ => _.wait());
|
|
334
|
+
console.log(
|
|
335
|
+
"Balance after swap:",
|
|
336
|
+
swapper.address,
|
|
337
|
+
await gd.balanceOf(swapper.address),
|
|
338
|
+
await cusd.balanceOf(swapper.address)
|
|
339
|
+
);
|
|
340
|
+
const mentomint = (await ethers.getContractAt(
|
|
341
|
+
"IGoodDollarExpansionController",
|
|
342
|
+
release.MentoExpansionController
|
|
343
|
+
)) as IGoodDollarExpansionController;
|
|
344
|
+
await cusd.connect(swapper).approve(mentomint.address, ethers.utils.parseEther("1000"));
|
|
345
|
+
const tx = await (
|
|
346
|
+
await mentomint.connect(swapper).mintUBIFromInterest(eids[0], ethers.utils.parseEther("1000"))
|
|
347
|
+
).wait();
|
|
348
|
+
console.log(
|
|
349
|
+
"mint from interest:",
|
|
350
|
+
tx.events.find(_ => _.event === "InterestUBIMinted").args.amount.toString() / 1e18
|
|
351
|
+
);
|
|
352
|
+
console.log("price after interest mint:", (await mentoExchange.currentPrice(eids[0])) / 1e18);
|
|
353
|
+
const distTx = await (await distHelper.onDistribution(0, { gasLimit: 2000000 })).wait();
|
|
354
|
+
const { distributionRecipients, distributed } = distTx.events.find(_ => _.event === "Distribution").args;
|
|
355
|
+
console.log("Distribution events:", distributionRecipients, distributed, distTx.events.length);
|
|
356
|
+
const bridgeBalance = await gd.balanceOf("0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5");
|
|
357
|
+
console.log("Brigde balance should equal other chains total supply:", {
|
|
358
|
+
bridgeBalance,
|
|
359
|
+
isEqual: bridgeBalance.eq(TOTAL_GLOBAL_SUPPLY.sub(TOTAL_SUPPLY_CELO))
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
const calculateReserveParams = async () => {
|
|
365
|
+
const celoProvider = new ethers.providers.JsonRpcProvider("https://forno.celo.org");
|
|
366
|
+
const gd = await ethers.getContractAt("GoodDollar", dao["production-celo"].GoodDollar);
|
|
367
|
+
const celoCusd = (await ethers.getContractAt("IERC20", dao["production-celo"].CUSD)).connect(celoProvider);
|
|
368
|
+
const gdCelo = gd.connect(celoProvider);
|
|
369
|
+
const totalSupplyCelo = await gdCelo.totalSupply();
|
|
370
|
+
const reserveBalance = await celoCusd.balanceOf(dao["production-celo"].MentoReserve);
|
|
371
|
+
const xdcReserveBalance = ethers.utils.parseUnits("200000", 18); //200k in xdc
|
|
372
|
+
const totalUSD = reserveBalance.add(xdcReserveBalance); //reserve + 200k in xdc
|
|
373
|
+
const xdcSupplyShare = xdcReserveBalance.mul(1e8).div(totalUSD);
|
|
374
|
+
const xdcGdSupplyEquivalent = totalSupplyCelo.mul(xdcSupplyShare).div(1e8);
|
|
375
|
+
const price = ethers.utils.parseUnits("0.00013", 8);
|
|
376
|
+
const celoGdSupplyEquivalent = totalSupplyCelo.sub(xdcGdSupplyEquivalent);
|
|
377
|
+
|
|
378
|
+
console.log({
|
|
379
|
+
totalSupplyCelo,
|
|
380
|
+
reserveBalance,
|
|
381
|
+
totalUSD,
|
|
382
|
+
xdcSupplyShare,
|
|
383
|
+
xdcGdSupplyEquivalent,
|
|
384
|
+
celoGdSupplyEquivalent
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
// uint32 reserveRatio = uint32(
|
|
388
|
+
// (cUSDBalance * 1e18 * 1e8) / (price * totalGlobalSupply)
|
|
389
|
+
// );
|
|
390
|
+
//calculate reserve ratio
|
|
391
|
+
const reserveRatioXdc = xdcReserveBalance
|
|
392
|
+
.mul(ethers.BigNumber.from("100000000")) //1e8
|
|
393
|
+
.mul(ethers.BigNumber.from("1000000000000000000")) //1e18
|
|
394
|
+
.div(xdcGdSupplyEquivalent.mul(price));
|
|
395
|
+
console.log(
|
|
396
|
+
"recommended reserve ratio for xdc:",
|
|
397
|
+
reserveRatioXdc.toString(),
|
|
398
|
+
reserveRatioXdc.div("10000000000").toNumber() / 1e8
|
|
399
|
+
);
|
|
400
|
+
|
|
401
|
+
//calcualte reserve ratio for celo
|
|
402
|
+
const reserveRatioCelo = reserveBalance
|
|
403
|
+
.mul(ethers.BigNumber.from("100000000")) //1e8
|
|
404
|
+
.mul(ethers.BigNumber.from("1000000000000000000")) //1e18
|
|
405
|
+
.div(celoGdSupplyEquivalent.mul(price));
|
|
406
|
+
|
|
407
|
+
console.log(
|
|
408
|
+
"recommended reserve ratio for celo:",
|
|
409
|
+
reserveRatioCelo.toString(),
|
|
410
|
+
reserveRatioCelo.div("10000000000").toNumber() / 1e8
|
|
411
|
+
);
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
export const main = async () => {
|
|
415
|
+
await calculateReserveParams();
|
|
416
|
+
return;
|
|
417
|
+
prompt.start();
|
|
418
|
+
const { network } = await prompt.get(["network"]);
|
|
419
|
+
|
|
420
|
+
console.log("running step:", { network });
|
|
421
|
+
const chain = last(network.split("-"));
|
|
422
|
+
switch (chain) {
|
|
423
|
+
case "mainnet":
|
|
424
|
+
// await upgradeMainnet(network, true);
|
|
425
|
+
|
|
426
|
+
break;
|
|
427
|
+
case "fuse":
|
|
428
|
+
// await upgradeFuse(network);
|
|
429
|
+
|
|
430
|
+
break;
|
|
431
|
+
case "celo":
|
|
432
|
+
await upgradeCelo(network, true);
|
|
433
|
+
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
main().catch(console.log);
|
package/test/helpers.ts
CHANGED
|
@@ -525,7 +525,7 @@ export const deployUBI = async (deployedDAO, withFirstClaim = true) => {
|
|
|
525
525
|
|
|
526
526
|
let ubiScheme = await upgrades.deployProxy(
|
|
527
527
|
await ethers.getContractFactory("UBISchemeV2"),
|
|
528
|
-
[nameService.address],
|
|
528
|
+
[nameService.address, 1000],
|
|
529
529
|
{ kind: "uups" }
|
|
530
530
|
);
|
|
531
531
|
|