@gooddollar/goodprotocol 2.1.3 → 2.2.0-beta.1
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/README.md +0 -2
- package/artifacts/abis/IdentityV4.min.json +1 -0
- 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/IUniswapV3.sol/INonfungiblePositionManager.dbg.json +1 -1
- package/artifacts/contracts/IUniswapV3.sol/IUniswapV3Pool.dbg.json +1 -1
- 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/GoodDollarStaking.json +2 -2
- 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/identity/IdentityV3.sol/IdentityV3.json +2 -2
- package/artifacts/contracts/identity/IdentityV4.sol/IdentityV4.dbg.json +4 -0
- package/artifacts/contracts/identity/IdentityV4.sol/IdentityV4.json +1162 -0
- 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/DistributionBridgeMock.sol/DistributionBridgeMock.json +2 -2
- 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/GenericDistributionHelperTest.sol/GenericDistributionHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GenericDistributionHelperTest.sol/GenericDistributionHelperTestHelper.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/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +2 -2
- 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/MultichainRouterMock.sol/MultichainRouterMock.json +2 -2
- 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/StakingMockFixedAPY.sol/StakingMockFixedAPY.json +2 -2
- 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 +1 -1
- 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/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/LastauthReduction.sol/LastauthReduction.json +2 -2
- 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/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.json +2 -2
- package/contracts/identity/IdentityV3.sol +0 -3
- package/contracts/identity/IdentityV4.sol +578 -0
- package/hardhat.config.ts +3 -4
- package/package.json +8 -4
- package/test/governance/ClaimersDistribution.test.ts +1 -1
- package/test/governance/CompoundVotingMachine.castvote.test.ts +30 -30
- package/test/helpers.ts +76 -195
- package/test/identity/IdentityV3.test.ts +53 -129
- package/test/identity/IdentityV4.test.ts +454 -0
- package/test/reserve/GenericDistributionHelper.e2e.test.ts +445 -0
- package/test/utils/AdminWallet.test.ts +14 -15
- package/types/contracts/identity/IdentityV4.ts +2001 -0
- package/types/contracts/identity/index.ts +1 -0
- package/types/contracts/utils/UpdateReserveRatio.sol/MentoExchange.ts +81 -0
- package/types/contracts/utils/UpdateReserveRatio.sol/UpdateReserveRatio.ts +134 -0
- package/types/contracts/utils/UpdateReserveRatio.sol/index.ts +5 -0
- package/types/contracts/utils/UpdateReserveRatioAfterXDC.sol/UpdateReserveRatioAfterXDC.ts +7 -2
- package/types/contracts/utils/index.ts +2 -2
- package/types/factories/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking__factory.ts +1 -1
- package/types/factories/contracts/identity/IdentityV3__factory.ts +1 -1
- package/types/factories/contracts/identity/IdentityV4__factory.ts +1213 -0
- package/types/factories/contracts/identity/index.ts +1 -0
- package/types/factories/contracts/mocks/DistributionBridgeMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/GoodDollarStakingMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/StakingMockFixedAPY__factory.ts +1 -1
- package/types/factories/contracts/utils/LastauthReduction__factory.ts +1 -1
- package/types/factories/contracts/utils/ReserveRestore__factory.ts +1 -1
- package/types/factories/contracts/utils/UpdateReserveRatio.sol/MentoExchange__factory.ts +39 -0
- package/types/factories/contracts/utils/UpdateReserveRatio.sol/UpdateReserveRatio__factory.ts +113 -0
- package/types/factories/contracts/utils/UpdateReserveRatio.sol/index.ts +5 -0
- package/types/factories/contracts/utils/UpdateReserveRatioAfterXDC.sol/UpdateReserveRatioAfterXDC__factory.ts +9 -15
- package/types/factories/contracts/utils/index.ts +1 -1
- package/types/hardhat.d.ts +13 -4
- package/types/index.ts +4 -2
- package/scripts/ProxyFactory.json +0 -4425
- package/scripts/analytics/activeGDStakers.ts +0 -188
- package/scripts/analytics/activeStakers.ts +0 -25
- package/scripts/analytics/activeUsersCount.ts +0 -156
- package/scripts/analytics/activeWalletsStats.ts +0 -301
- package/scripts/analytics/checkActiveWallets.ts +0 -60
- package/scripts/analytics/checkBridgeBalances.ts +0 -442
- package/scripts/analytics/claimIncidentStats.ts +0 -98
- package/scripts/analytics/faucetStats.ts +0 -130
- package/scripts/analytics/gdinflow.ts +0 -57
- package/scripts/analytics/goodHolders.ts +0 -46
- package/scripts/analytics/goodgiveback.ts +0 -64
- package/scripts/analytics/p2pTxs.ts +0 -564
- package/scripts/analytics/stuckgd.ts +0 -70
- package/scripts/analytics/tokenInOutStats.ts +0 -48
- package/scripts/analytics/whitelistsyncIssue.ts +0 -87
- package/scripts/bulkProof.ts +0 -202
- package/scripts/bulkWhitelist.ts +0 -31
- package/scripts/deployGnosisSafe.ts +0 -111
- package/scripts/fetchOrDeployProxyFactory.ts +0 -46
- package/scripts/fv.ts +0 -263
- package/scripts/gdx/gdxAirdropCalculation.ts +0 -479
- package/scripts/getFounders.ts +0 -32
- package/scripts/governance/README.md +0 -70
- package/scripts/governance/airdropCalculation.ts +0 -1119
- package/scripts/governance/airdropCalculationRecover.ts +0 -416
- package/scripts/governance/airdropCalculationSorted.ts +0 -438
- package/scripts/governance/goodCheckpointSorted.ts +0 -300
- package/scripts/keeper/fishInactive.ts +0 -47
- package/scripts/minimize.sh +0 -17
- package/scripts/multichain-deploy/0_proxyFactory-deploy.ts +0 -131
- package/scripts/multichain-deploy/1_basicdao-deploy.ts +0 -294
- package/scripts/multichain-deploy/2_helpers-deploy.ts +0 -152
- package/scripts/multichain-deploy/2b_otp-deploy.ts +0 -73
- package/scripts/multichain-deploy/3_gdSavings-deploy.ts +0 -190
- package/scripts/multichain-deploy/4_ubi-deploy.ts +0 -129
- package/scripts/multichain-deploy/5_gov-deploy.ts +0 -179
- package/scripts/multichain-deploy/6_testnetFaucet.ts +0 -85
- package/scripts/multichain-deploy/7_superfluidfaucet-deploy.ts +0 -123
- package/scripts/multichain-deploy/8_disthelper-deploy.ts +0 -152
- package/scripts/multichain-deploy/createUniswapTestPools.ts +0 -163
- package/scripts/multichain-deploy/flattened/Avatar.sol +0 -913
- package/scripts/multichain-deploy/flattened/Controller.sol +0 -1891
- package/scripts/multichain-deploy/flattened/FeeFormula.sol +0 -1290
- package/scripts/multichain-deploy/fulldeploy.sh +0 -26
- package/scripts/multichain-deploy/helpers.ts +0 -647
- package/scripts/multichain-deploy/multichainWrapper-deploy.ts +0 -59
- package/scripts/multichain-deploy/verifyEtherscan.ts +0 -177
- package/scripts/proposals/gip-14_1.ts +0 -251
- package/scripts/proposals/gip-15.ts +0 -427
- package/scripts/proposals/gip-25-xdc-upgrade-ubi.ts +0 -746
- package/scripts/proposals/gips-14_1.md +0 -29
- package/scripts/proposals/hack-ubi-recovery.ts +0 -414
- package/scripts/proposals/identityAuthPeriod.ts +0 -229
- package/scripts/proposals/reserveRestore.ts +0 -474
- package/scripts/proposals/updateDistHelper.ts +0 -180
- package/scripts/proposals/v4Upgrade.ts +0 -845
- package/scripts/releaser.js +0 -24
- package/scripts/staking/stakersGdRewardsCalculation.ts +0 -64
- package/scripts/upgradeScheme.ts +0 -97
- package/scripts/upgradeToV2/upgradeToV2.ts +0 -853
- package/scripts/upgradeToV2/upgradeToV2Recover.ts +0 -939
- package/scripts/upgradeToV3/v3-fix.ts +0 -120
- package/scripts/upgradeToV3/v3-fuse-multichain.ts +0 -117
- package/scripts/upgradeToV3/v3-upgrade.ts +0 -219
- package/scripts/upgrades/celo-defi-ubi-deploy.ts +0 -184
- package/scripts/upgrades/identity-upgrade.ts +0 -126
- package/scripts/upgrades/multichain-formula-upgrade.ts +0 -143
- package/scripts/upgrades/multichain-temp-fix.ts +0 -129
- package/scripts/upgrades/restoreFunds.ts +0 -91
- package/scripts/upgrades/superfluid-nft-celo-gas-token.ts +0 -159
- package/scripts/upgrades/transferDaoToGuardians.ts +0 -80
- package/scripts/upgrades/upgradeAdminWallet.ts +0 -29
- package/scripts/upgrades/upgradeFaucet.ts +0 -46
- package/scripts/utils.ts +0 -50
- package/scripts/verify.ts +0 -67
- package/scripts/voltageswaps.ts +0 -46
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
/***
|
|
2
|
-
* Mainnet:
|
|
3
|
-
* FIXES:
|
|
4
|
-
* - prevent hacked funds burnFrom
|
|
5
|
-
* - set GOOD rewards to 0
|
|
6
|
-
* - prevent untrusted contracts in goodfundmanager
|
|
7
|
-
* - use bonding curve for actual cDAI balance (prevent the "buy" instead of "transferTo" used in hack to trick reserve into minting UBI from interest)
|
|
8
|
-
* - set exit contribution to 10%
|
|
9
|
-
* - disable gdx
|
|
10
|
-
* - fix reserve calculations of expansion/currentprice
|
|
11
|
-
* - add requirement of guardians to approve on-chain proposals
|
|
12
|
-
* - reserve should not trust exchange helper
|
|
13
|
-
* - resere should not trust fundmanager for its starting balance
|
|
14
|
-
*
|
|
15
|
-
* PLAN:
|
|
16
|
-
* - pause staking
|
|
17
|
-
* - prevent fusebridge usage
|
|
18
|
-
* - set GOOD rewards to 0
|
|
19
|
-
* - blacklist hacked accounts to prevent burn (transfer already blocked done via tax)
|
|
20
|
-
* - withdraw funds from fuse
|
|
21
|
-
* - transfer to MPB bridge
|
|
22
|
-
* - upgrade reserve
|
|
23
|
-
* - set new reserve ratio, supply(minus hacked funds) and reserve
|
|
24
|
-
* - set contribution to 10%
|
|
25
|
-
* - unpause reserve
|
|
26
|
-
* - upgrade exchangeHelper
|
|
27
|
-
* - upgrade goodfundmanager
|
|
28
|
-
* - upgrade governance
|
|
29
|
-
* - unpause reserve
|
|
30
|
-
* - unpause goodfundmanager
|
|
31
|
-
* - switch fuse distribution to use lz bridge insted of deprecated fuse bridge
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* Fuse:
|
|
35
|
-
* PLAN:
|
|
36
|
-
* - prevent old fuse bridge usage
|
|
37
|
-
* - upgrade governance
|
|
38
|
-
*
|
|
39
|
-
**/
|
|
40
|
-
|
|
41
|
-
import { network, ethers } from "hardhat";
|
|
42
|
-
import { reset, time } from "@nomicfoundation/hardhat-network-helpers";
|
|
43
|
-
import { defaultsDeep, last } from "lodash";
|
|
44
|
-
import prompt from "prompt";
|
|
45
|
-
// import mpbDeployments from "@gooddollar/bridge-contracts/release/mpb.json"
|
|
46
|
-
|
|
47
|
-
import { executeViaGuardian, executeViaSafe, verifyProductionSigner } from "../multichain-deploy/helpers";
|
|
48
|
-
|
|
49
|
-
import ProtocolSettings from "../../releases/deploy-settings.json";
|
|
50
|
-
|
|
51
|
-
import dao from "../../releases/deployment.json";
|
|
52
|
-
import {
|
|
53
|
-
ExchangeHelper,
|
|
54
|
-
FuseOldBridgeKill,
|
|
55
|
-
GoodFundManager,
|
|
56
|
-
GoodMarketMaker,
|
|
57
|
-
GoodReserveCDai,
|
|
58
|
-
IGoodDollar,
|
|
59
|
-
ReserveRestore
|
|
60
|
-
} from "../../types";
|
|
61
|
-
let { name: networkName } = network;
|
|
62
|
-
|
|
63
|
-
const isSimulation = network.name === "hardhat" || network.name === "fork" || network.name === "localhost";
|
|
64
|
-
|
|
65
|
-
// hacker and hacked multichain bridge accounts
|
|
66
|
-
const LOCKED_ACCOUNTS = [
|
|
67
|
-
"0xeC577447D314cf1e443e9f4488216651450DBE7c",
|
|
68
|
-
"0xD17652350Cfd2A37bA2f947C910987a3B1A1c60d",
|
|
69
|
-
"0x6738fA889fF31F82d9Fe8862ec025dbE318f3Fde"
|
|
70
|
-
];
|
|
71
|
-
const INITIAL_DAI = ethers.utils.parseEther("100000"); // 100k
|
|
72
|
-
// reserve funder (goodlabs safe)
|
|
73
|
-
const funder = "0xF0652a820dd39EC956659E0018Da022132f2f40a";
|
|
74
|
-
|
|
75
|
-
export const upgradeMainnet = async network => {
|
|
76
|
-
const isProduction = networkName.includes("production");
|
|
77
|
-
let [root, ...signers] = await ethers.getSigners();
|
|
78
|
-
|
|
79
|
-
if (isProduction) verifyProductionSigner(root);
|
|
80
|
-
|
|
81
|
-
let guardian = root;
|
|
82
|
-
|
|
83
|
-
//simulate produciton on fork
|
|
84
|
-
if (isSimulation) {
|
|
85
|
-
networkName = "production-mainnet";
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
let release: { [key: string]: any } = dao[networkName];
|
|
89
|
-
let protocolSettings = defaultsDeep({}, ProtocolSettings[networkName], ProtocolSettings["default"]);
|
|
90
|
-
|
|
91
|
-
//simulate on fork, make sure safe has enough eth to simulate txs
|
|
92
|
-
if (isSimulation) {
|
|
93
|
-
await reset("https://eth.drpc.org");
|
|
94
|
-
guardian = await ethers.getImpersonatedSigner(protocolSettings.guardiansSafe);
|
|
95
|
-
|
|
96
|
-
await root.sendTransaction({
|
|
97
|
-
value: ethers.utils.parseEther("1"),
|
|
98
|
-
to: protocolSettings.guardiansSafe
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const rootBalance = await ethers.provider.getBalance(root.address).then(_ => _.toString());
|
|
103
|
-
const guardianBalance = await ethers.provider.getBalance(guardian.address).then(_ => _.toString());
|
|
104
|
-
|
|
105
|
-
console.log("got signers:", {
|
|
106
|
-
networkName,
|
|
107
|
-
root: root.address,
|
|
108
|
-
guardian: guardian.address,
|
|
109
|
-
balance: rootBalance,
|
|
110
|
-
guardianBalance: guardianBalance
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
const reserveImpl = await ethers.deployContract("GoodReserveCDai");
|
|
114
|
-
const goodFundManagerImpl = await ethers.deployContract("GoodFundManager");
|
|
115
|
-
const exchangeHelperImpl = await ethers.deployContract("ExchangeHelper");
|
|
116
|
-
const stakersDistImpl = await ethers.deployContract("StakersDistribution");
|
|
117
|
-
const govImpl = await ethers.deployContract("CompoundVotingMachine");
|
|
118
|
-
const distHelperImplt = await ethers.deployContract("DistributionHelper");
|
|
119
|
-
const marketMakerImpl = await ethers.deployContract("GoodMarketMaker");
|
|
120
|
-
const upgradeImpl = (await ethers.deployContract("ReserveRestore", [release.NameService])) as ReserveRestore;
|
|
121
|
-
|
|
122
|
-
const gd = (await ethers.getContractAt("IGoodDollar", release.GoodDollar)) as IGoodDollar;
|
|
123
|
-
|
|
124
|
-
// test blacklisting to prevent burn by hacker
|
|
125
|
-
if (isSimulation) {
|
|
126
|
-
const locked = await ethers.getImpersonatedSigner(LOCKED_ACCOUNTS[0]);
|
|
127
|
-
const tx = await gd
|
|
128
|
-
.connect(locked)
|
|
129
|
-
.burn("10")
|
|
130
|
-
.then(_ => _.wait())
|
|
131
|
-
.then(_ => _.status)
|
|
132
|
-
.catch(e => e);
|
|
133
|
-
|
|
134
|
-
console.log("Burn tx before:", tx);
|
|
135
|
-
|
|
136
|
-
const funderSigner = await ethers.getImpersonatedSigner(funder);
|
|
137
|
-
const dai = await ethers.getContractAt("IGoodDollar", release.DAI);
|
|
138
|
-
await dai.connect(funderSigner).approve(upgradeImpl.address, ethers.utils.parseEther("200000"));
|
|
139
|
-
const whale = await ethers.getImpersonatedSigner("0xa359Fc83C48277EedF375a5b6DC9Ec7D093aD3f2");
|
|
140
|
-
await dai.connect(whale).transfer(root.address, ethers.utils.parseEther("100000"));
|
|
141
|
-
|
|
142
|
-
const lockedFunds = await Promise.all(LOCKED_ACCOUNTS.map(_ => gd.balanceOf(_)));
|
|
143
|
-
const totalLocked = lockedFunds.reduce((acc, cur) => acc.add(cur), ethers.constants.Zero);
|
|
144
|
-
console.log({ totalLocked });
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const startSupply = await gd.totalSupply();
|
|
148
|
-
|
|
149
|
-
console.log("executing proposals");
|
|
150
|
-
|
|
151
|
-
const proposalContracts = [
|
|
152
|
-
release.StakingContractsV3[0][0], // pause staking
|
|
153
|
-
release.StakingContractsV3[1][0], // pause staking
|
|
154
|
-
release.StakersDistribution, //set GOOD rewards to 0
|
|
155
|
-
release.GoodReserveCDai, //expansion ratio
|
|
156
|
-
release.ForeignBridge, // prevent from using
|
|
157
|
-
release.Identity, // set locked G$ accounts as blacklisted so cant do burn from
|
|
158
|
-
release.Identity, // set locked G$ accounts as blacklisted so cant do burn from
|
|
159
|
-
release.Identity, // set locked G$ accounts as blacklisted so cant do burnfrom
|
|
160
|
-
release.ForeignBridge, // claim bridge tokens to mpb bridge
|
|
161
|
-
release.GoodReserveCDai, //upgrade reserve
|
|
162
|
-
release.GoodFundManager, //upgrade fundmanager
|
|
163
|
-
release.ExchangeHelper, //upgrade exchangehelper
|
|
164
|
-
release.DistributionHelper, //upgrade disthelper
|
|
165
|
-
release.StakersDistribution, //upgrade stakers dist
|
|
166
|
-
release.GoodMarketMaker, //upgrade mm
|
|
167
|
-
release.CompoundVotingMachine, // upgrade gov
|
|
168
|
-
release.DistributionHelper, // switch to lz bridge for fuse
|
|
169
|
-
release.ExchangeHelper, // activate upgrade changes
|
|
170
|
-
release.Controller,
|
|
171
|
-
// upgradeImpl.address,
|
|
172
|
-
release.GoodReserveCDai
|
|
173
|
-
];
|
|
174
|
-
|
|
175
|
-
const proposalEthValues = proposalContracts.map(_ => 0);
|
|
176
|
-
|
|
177
|
-
const proposalFunctionSignatures = [
|
|
178
|
-
"pause(bool)",
|
|
179
|
-
"pause(bool)",
|
|
180
|
-
"setMonthlyReputationDistribution(uint256)",
|
|
181
|
-
"setReserveRatioDailyExpansion(uint256,uint256)",
|
|
182
|
-
"setExecutionDailyLimit(uint256)", // set limit to 0 so old bridge cant be used
|
|
183
|
-
"addBlacklisted(address)",
|
|
184
|
-
"addBlacklisted(address)",
|
|
185
|
-
"addBlacklisted(address)",
|
|
186
|
-
"claimTokens(address,address)",
|
|
187
|
-
"upgradeTo(address)",
|
|
188
|
-
"upgradeTo(address)",
|
|
189
|
-
"upgradeTo(address)",
|
|
190
|
-
"upgradeTo(address)",
|
|
191
|
-
"upgradeTo(address)",
|
|
192
|
-
"upgradeTo(address)",
|
|
193
|
-
"upgradeTo(address)",
|
|
194
|
-
"addOrUpdateRecipient((uint32,uint32,address,uint8))",
|
|
195
|
-
"setAddresses()",
|
|
196
|
-
"registerScheme(address,bytes32,bytes4,address)", // give upgrade contract permissions
|
|
197
|
-
"grantRole(bytes32,address)"
|
|
198
|
-
];
|
|
199
|
-
|
|
200
|
-
const proposalFunctionInputs = [
|
|
201
|
-
ethers.utils.defaultAbiCoder.encode(["bool"], [true]),
|
|
202
|
-
ethers.utils.defaultAbiCoder.encode(["bool"], [true]),
|
|
203
|
-
ethers.utils.defaultAbiCoder.encode(["uint256"], [0]),
|
|
204
|
-
ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [999711382710978, 1e15]),
|
|
205
|
-
ethers.utils.defaultAbiCoder.encode(["uint256"], [0]),
|
|
206
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [LOCKED_ACCOUNTS[0]]),
|
|
207
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [LOCKED_ACCOUNTS[1]]),
|
|
208
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [LOCKED_ACCOUNTS[2]]),
|
|
209
|
-
ethers.utils.defaultAbiCoder.encode(["address", "address"], [release.GoodDollar, release.MpbBridge]),
|
|
210
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [reserveImpl.address]),
|
|
211
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [goodFundManagerImpl.address]),
|
|
212
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [exchangeHelperImpl.address]),
|
|
213
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [distHelperImplt.address]),
|
|
214
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [stakersDistImpl.address]),
|
|
215
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [marketMakerImpl.address]),
|
|
216
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [govImpl.address]),
|
|
217
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
218
|
-
["uint32", "uint32", "address", "uint8"],
|
|
219
|
-
[1000, 122, dao["production"].UBIScheme, 1] //10% chainId 122 ubischeme 1-lz bridge
|
|
220
|
-
),
|
|
221
|
-
"0x", //setAddresses
|
|
222
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
223
|
-
["address", "bytes32", "bytes4", "address"],
|
|
224
|
-
[
|
|
225
|
-
upgradeImpl.address, //scheme
|
|
226
|
-
ethers.constants.HashZero, //paramshash
|
|
227
|
-
"0x000000f1", //permissions - minimal
|
|
228
|
-
release.Avatar
|
|
229
|
-
]
|
|
230
|
-
),
|
|
231
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
232
|
-
["bytes32", "address"],
|
|
233
|
-
[
|
|
234
|
-
"0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", //pauser role
|
|
235
|
-
release.Avatar
|
|
236
|
-
]
|
|
237
|
-
)
|
|
238
|
-
];
|
|
239
|
-
|
|
240
|
-
if (isProduction) {
|
|
241
|
-
await executeViaSafe(
|
|
242
|
-
proposalContracts,
|
|
243
|
-
proposalEthValues,
|
|
244
|
-
proposalFunctionSignatures,
|
|
245
|
-
proposalFunctionInputs,
|
|
246
|
-
protocolSettings.guardiansSafe,
|
|
247
|
-
"mainnet"
|
|
248
|
-
);
|
|
249
|
-
} else {
|
|
250
|
-
//simulation or dev envs
|
|
251
|
-
await executeViaGuardian(
|
|
252
|
-
proposalContracts,
|
|
253
|
-
proposalEthValues,
|
|
254
|
-
proposalFunctionSignatures,
|
|
255
|
-
proposalFunctionInputs,
|
|
256
|
-
guardian,
|
|
257
|
-
networkName
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
if (isSimulation) {
|
|
262
|
-
await mainnetPostChecks(upgradeImpl);
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
|
|
266
|
-
const mainnetPostChecks = async (upgradeImpl: ReserveRestore) => {
|
|
267
|
-
networkName = "production-mainnet";
|
|
268
|
-
let release: { [key: string]: any } = dao[networkName];
|
|
269
|
-
|
|
270
|
-
let [root, ...signers] = await ethers.getSigners();
|
|
271
|
-
const gd = await ethers.getContractAt("IGoodDollar", release.GoodDollar);
|
|
272
|
-
|
|
273
|
-
//execute the reserve initialization
|
|
274
|
-
(await upgradeImpl.upgrade(funder, INITIAL_DAI)).wait();
|
|
275
|
-
|
|
276
|
-
const locked = await ethers.getImpersonatedSigner(LOCKED_ACCOUNTS[0]);
|
|
277
|
-
const tx = await gd
|
|
278
|
-
.connect(locked)
|
|
279
|
-
.burn("10", { maxFeePerGas: 30e9, maxPriorityFeePerGas: 1e9, gasLimit: 200000 })
|
|
280
|
-
.then(_ => _.wait())
|
|
281
|
-
.then(_ => _.status)
|
|
282
|
-
.catch(e => e);
|
|
283
|
-
console.log("Burn tx after should fail:", tx);
|
|
284
|
-
|
|
285
|
-
const dai = await ethers.getContractAt("IGoodDollar", release.DAI);
|
|
286
|
-
const cdai = await ethers.getContractAt("IGoodDollar", release.cDAI);
|
|
287
|
-
const reserve = (await ethers.getContractAt("GoodReserveCDai", release.GoodReserveCDai)) as GoodReserveCDai;
|
|
288
|
-
const mm = (await ethers.getContractAt("GoodMarketMaker", release.GoodMarketMaker)) as GoodMarketMaker;
|
|
289
|
-
const newExpansion = await mm.reserveRatioDailyExpansion();
|
|
290
|
-
console.log(
|
|
291
|
-
"new expansion set:",
|
|
292
|
-
newExpansion,
|
|
293
|
-
newExpansion.mul(1e15).div(ethers.utils.parseEther("1000000000")).toNumber() / 1e15 === 0.999711382710978
|
|
294
|
-
);
|
|
295
|
-
console.log(
|
|
296
|
-
"discount should be disabled:",
|
|
297
|
-
await reserve.discountDisabled(),
|
|
298
|
-
" gdx should be disabled:",
|
|
299
|
-
await reserve.gdxDisabled()
|
|
300
|
-
);
|
|
301
|
-
const resereState = await mm.reserveTokens(release.cDAI);
|
|
302
|
-
console.log({ resereState });
|
|
303
|
-
const finalSupply = await gd.totalSupply();
|
|
304
|
-
const distHelper = await ethers.getContractAt("DistributionHelper", release.DistributionHelper);
|
|
305
|
-
const result = await distHelper.calcGDToSell(1e9);
|
|
306
|
-
console.log("how much G$ to sell to cover distribution fees out of 1M:", result.toNumber() / 100);
|
|
307
|
-
const [cdaiPriceBefore, daiPriceBefore] = await (
|
|
308
|
-
await Promise.all([reserve.currentPrice(), reserve.currentPriceDAI()])
|
|
309
|
-
).map(_ => _.toNumber());
|
|
310
|
-
console.log({ cdaiPriceBefore, daiPriceBefore });
|
|
311
|
-
const dex = (await ethers.getContractAt("ExchangeHelper", release.ExchangeHelper)) as ExchangeHelper;
|
|
312
|
-
await dai.approve(dex.address, ethers.utils.parseEther("10000"));
|
|
313
|
-
await dex.buy([release.DAI], ethers.utils.parseEther("10000"), 0, 0, root.address);
|
|
314
|
-
// check g$ prices
|
|
315
|
-
const [cdaiPriceAfter, daiPriceAfter] = await (
|
|
316
|
-
await Promise.all([reserve.currentPrice(), reserve.currentPriceDAI()])
|
|
317
|
-
).map(_ => _.toNumber());
|
|
318
|
-
console.log("prices after buying form reserve with 10k DAI", { cdaiPriceAfter, daiPriceAfter });
|
|
319
|
-
await gd.approve(dex.address, await gd.balanceOf(root.address));
|
|
320
|
-
await dex.sell([release.DAI], await gd.balanceOf(root.address), 0, 0, root.address);
|
|
321
|
-
const daiBalanceAfterSell = await dai.balanceOf(root.address);
|
|
322
|
-
// expect a 10% sell fee
|
|
323
|
-
console.log("expect 10% sell fee (selling 10K gets only 9K of dai, balance should be ~99K):", {
|
|
324
|
-
daiBalanceAfterSell
|
|
325
|
-
});
|
|
326
|
-
const cdaiReserveBalance = await cdai.balanceOf(reserve.address);
|
|
327
|
-
console.log({ cdaiReserveBalance });
|
|
328
|
-
|
|
329
|
-
const [mpbBalance, fuseBalance] = await Promise.all([
|
|
330
|
-
gd.balanceOf(release.MpbBridge),
|
|
331
|
-
gd.balanceOf(release.ForeignBridge)
|
|
332
|
-
]);
|
|
333
|
-
console.log("fuse bridge should have 0 balance and Mpb should be >6B", { mpbBalance, fuseBalance });
|
|
334
|
-
const gfm = (await ethers.getContractAt("GoodFundManager", release.GoodFundManager)) as GoodFundManager;
|
|
335
|
-
const stakingContracts = await gfm.callStatic.calcSortedContracts();
|
|
336
|
-
console.log({ stakingContracts });
|
|
337
|
-
const interesTX = await (
|
|
338
|
-
await gfm.collectInterest(
|
|
339
|
-
stakingContracts.map(_ => _[0]),
|
|
340
|
-
false
|
|
341
|
-
)
|
|
342
|
-
).wait();
|
|
343
|
-
const ubiEvents = last(await reserve.queryFilter(reserve.filters.UBIMinted(), -1));
|
|
344
|
-
console.log(
|
|
345
|
-
"collectinterest gfm events:",
|
|
346
|
-
interesTX.events?.find(_ => _.event === "FundsTransferred")
|
|
347
|
-
);
|
|
348
|
-
console.log("ubiEvents after collect interest:", ubiEvents);
|
|
349
|
-
// check expansion after some time
|
|
350
|
-
await time.increase(365 * 60 * 60 * 24);
|
|
351
|
-
const gdSupplyBeforeExpansion = await gd.totalSupply();
|
|
352
|
-
const reserveStateBeforeYearExpansion = await mm.reserveTokens(release.cDAI);
|
|
353
|
-
|
|
354
|
-
const expansionTX = await (await gfm.collectInterest([], false)).wait();
|
|
355
|
-
const ubiExpansionEvents = last(await reserve.queryFilter(reserve.filters.UBIMinted(), -1));
|
|
356
|
-
console.log(
|
|
357
|
-
"gfm events after 1 year expansion:",
|
|
358
|
-
expansionTX.events?.filter(_ => _.event === "FundsTransferred")
|
|
359
|
-
);
|
|
360
|
-
console.log("ubiEvents after 1 year expansion:", ubiExpansionEvents);
|
|
361
|
-
const reserveStateAfterYearExpansion = await mm.reserveTokens(release.cDAI);
|
|
362
|
-
const gdSupplyAfterExpansion = await gd.totalSupply();
|
|
363
|
-
console.log({
|
|
364
|
-
reserveStateAfterYearExpansion,
|
|
365
|
-
gdSupplyAfterExpansion,
|
|
366
|
-
gdSupplyBeforeExpansion,
|
|
367
|
-
reserveStateBeforeYearExpansion
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
//execute the reserve initialization
|
|
371
|
-
await (await upgradeImpl.donate(funder, INITIAL_DAI)).wait();
|
|
372
|
-
const [cdaiPriceAfterDonation, daiPriceAfterDonation] = await (
|
|
373
|
-
await Promise.all([reserve.currentPrice(), reserve.currentPriceDAI()])
|
|
374
|
-
).map(_ => _.toNumber());
|
|
375
|
-
console.log("price after dai donation:", { cdaiPriceAfterDonation, daiPriceAfterDonation });
|
|
376
|
-
const reserveStateAfterDonation = await mm.reserveTokens(release.cDAI);
|
|
377
|
-
console.log({ reserveStateAfterDonation });
|
|
378
|
-
|
|
379
|
-
await (await upgradeImpl.end()).wait();
|
|
380
|
-
};
|
|
381
|
-
export const upgradeFuse = async network => {
|
|
382
|
-
let [root] = await ethers.getSigners();
|
|
383
|
-
|
|
384
|
-
const isProduction = networkName.includes("production");
|
|
385
|
-
|
|
386
|
-
let networkEnv = networkName.split("-")[0];
|
|
387
|
-
if (isSimulation) networkEnv = "production";
|
|
388
|
-
|
|
389
|
-
let release: { [key: string]: any } = dao[networkEnv];
|
|
390
|
-
|
|
391
|
-
let guardian = root;
|
|
392
|
-
//simulate on fork, make sure safe has enough eth to simulate txs
|
|
393
|
-
if (isSimulation) {
|
|
394
|
-
await reset("https://fuse.liquify.com");
|
|
395
|
-
guardian = await ethers.getImpersonatedSigner(release.GuardiansSafe);
|
|
396
|
-
|
|
397
|
-
await root.sendTransaction({ value: ethers.constants.WeiPerEther.mul(3), to: guardian.address });
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
const gd = (await ethers.getContractAt("IGoodDollar", release.GoodDollar)) as IGoodDollar;
|
|
401
|
-
|
|
402
|
-
const isMinter = await gd.isMinter(release.HomeBridge);
|
|
403
|
-
|
|
404
|
-
console.log({ networkEnv, guardian: guardian.address, isSimulation, isProduction, isMinter });
|
|
405
|
-
|
|
406
|
-
const govImpl = await ethers.deployContract("CompoundVotingMachine");
|
|
407
|
-
const killBridge = (await ethers.deployContract("FuseOldBridgeKill")) as FuseOldBridgeKill;
|
|
408
|
-
|
|
409
|
-
const proposalContracts = [
|
|
410
|
-
release.HomeBridge, // prevent from using by upgrading to empty contract and removing minting rights
|
|
411
|
-
release.CompoundVotingMachine //upgrade gov
|
|
412
|
-
];
|
|
413
|
-
|
|
414
|
-
const proposalEthValues = proposalContracts.map(_ => 0);
|
|
415
|
-
|
|
416
|
-
const proposalFunctionSignatures = [
|
|
417
|
-
"upgradeToAndCall(uint256,address,bytes)", // upgrade and call end
|
|
418
|
-
"upgradeTo(address)"
|
|
419
|
-
];
|
|
420
|
-
|
|
421
|
-
const proposalFunctionInputs = [
|
|
422
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
423
|
-
["uint256", "address", "bytes"],
|
|
424
|
-
[2, killBridge.address, killBridge.interface.encodeFunctionData("end")]
|
|
425
|
-
),
|
|
426
|
-
ethers.utils.defaultAbiCoder.encode(["address"], [govImpl.address])
|
|
427
|
-
];
|
|
428
|
-
|
|
429
|
-
if (isProduction) {
|
|
430
|
-
await executeViaSafe(
|
|
431
|
-
proposalContracts,
|
|
432
|
-
proposalEthValues,
|
|
433
|
-
proposalFunctionSignatures,
|
|
434
|
-
proposalFunctionInputs,
|
|
435
|
-
release.GuardiansSafe,
|
|
436
|
-
"fuse"
|
|
437
|
-
);
|
|
438
|
-
} else {
|
|
439
|
-
await executeViaGuardian(
|
|
440
|
-
proposalContracts,
|
|
441
|
-
proposalEthValues,
|
|
442
|
-
proposalFunctionSignatures,
|
|
443
|
-
proposalFunctionInputs,
|
|
444
|
-
guardian,
|
|
445
|
-
networkEnv
|
|
446
|
-
);
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
if (isSimulation) {
|
|
450
|
-
const isMinter = await gd.isMinter(release.HomeBridge);
|
|
451
|
-
console.log("Fuse bridge scheme registration check:", isMinter ? "Failed" : "Success");
|
|
452
|
-
}
|
|
453
|
-
};
|
|
454
|
-
|
|
455
|
-
export const main = async () => {
|
|
456
|
-
prompt.start();
|
|
457
|
-
const { network } = await prompt.get(["network"]);
|
|
458
|
-
|
|
459
|
-
console.log("running step:", { network });
|
|
460
|
-
const chain = last(network.split("-"));
|
|
461
|
-
switch (chain) {
|
|
462
|
-
case "mainnet":
|
|
463
|
-
// await mainnetPostChecks()
|
|
464
|
-
await upgradeMainnet(network);
|
|
465
|
-
|
|
466
|
-
break;
|
|
467
|
-
case "fuse":
|
|
468
|
-
await upgradeFuse(network);
|
|
469
|
-
|
|
470
|
-
break;
|
|
471
|
-
}
|
|
472
|
-
};
|
|
473
|
-
|
|
474
|
-
main().catch(console.log);
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/***
|
|
2
|
-
* Upgrade dist helper to have better axelar base fee
|
|
3
|
-
* Update the axelarbasefee
|
|
4
|
-
* Send UBI G$s to the bridge for liquidity
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { network, ethers } from "hardhat";
|
|
8
|
-
import { Contract } from "ethers";
|
|
9
|
-
import { defaultsDeep } from "lodash";
|
|
10
|
-
import prompt from "prompt";
|
|
11
|
-
import { reset } from "@nomicfoundation/hardhat-network-helpers";
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
printDeploy,
|
|
15
|
-
executeViaGuardian,
|
|
16
|
-
executeViaSafe,
|
|
17
|
-
verifyProductionSigner
|
|
18
|
-
} from "../multichain-deploy/helpers";
|
|
19
|
-
|
|
20
|
-
import ProtocolSettings from "../../releases/deploy-settings.json";
|
|
21
|
-
|
|
22
|
-
import dao from "../../releases/deployment.json";
|
|
23
|
-
import { verifyContract } from "../multichain-deploy/helpers";
|
|
24
|
-
import { IStaticOracle } from "../../types";
|
|
25
|
-
let { name: networkName } = network;
|
|
26
|
-
|
|
27
|
-
export const upgrade = async () => {
|
|
28
|
-
const isProduction = networkName.includes("production");
|
|
29
|
-
let [root, ...signers] = await ethers.getSigners();
|
|
30
|
-
|
|
31
|
-
// if (isProduction) verifyProductionSigner(root);
|
|
32
|
-
|
|
33
|
-
let guardian = root;
|
|
34
|
-
|
|
35
|
-
//simulate produciton on fork
|
|
36
|
-
if (
|
|
37
|
-
network.name === "localhost" ||
|
|
38
|
-
network.name === "hardhat" ||
|
|
39
|
-
network.name === "fork"
|
|
40
|
-
) {
|
|
41
|
-
networkName = "production-mainnet";
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
let release: { [key: string]: any } = dao[networkName];
|
|
45
|
-
let protocolSettings = defaultsDeep(
|
|
46
|
-
{},
|
|
47
|
-
ProtocolSettings[networkName],
|
|
48
|
-
ProtocolSettings["default"]
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
//simulate on fork, make sure safe has enough eth to simulate txs
|
|
52
|
-
if (
|
|
53
|
-
network.name === "localhost" ||
|
|
54
|
-
network.name === "hardhat" ||
|
|
55
|
-
network.name === "fork"
|
|
56
|
-
) {
|
|
57
|
-
guardian = await ethers.getImpersonatedSigner(
|
|
58
|
-
protocolSettings.guardiansSafe
|
|
59
|
-
);
|
|
60
|
-
networkName = "production-mainnet";
|
|
61
|
-
|
|
62
|
-
await root.sendTransaction({
|
|
63
|
-
value: ethers.constants.WeiPerEther.mul(3),
|
|
64
|
-
to: protocolSettings.guardiansSafe
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const rootBalance = await ethers.provider
|
|
69
|
-
.getBalance(root.address)
|
|
70
|
-
.then(_ => _.toString());
|
|
71
|
-
const guardianBalance = await ethers.provider
|
|
72
|
-
.getBalance(guardian.address)
|
|
73
|
-
.then(_ => _.toString());
|
|
74
|
-
|
|
75
|
-
const gd = await ethers.getContractAt("IGoodDollar", release["GoodDollar"]);
|
|
76
|
-
|
|
77
|
-
const NEWBRIDGE = "0xa3247276DbCC76Dd7705273f766eB3E8a5ecF4a5";
|
|
78
|
-
const GUARDIANS_BALANCE = await gd.balanceOf(protocolSettings.guardiansSafe);
|
|
79
|
-
|
|
80
|
-
if (GUARDIANS_BALANCE.eq(0)) throw new Error("guardian has no G$ balance");
|
|
81
|
-
|
|
82
|
-
const bridgeDeployed = await ethers.provider
|
|
83
|
-
.getCode(NEWBRIDGE)
|
|
84
|
-
.then(_ => _ != "0x");
|
|
85
|
-
if (!bridgeDeployed) throw new Error("bridge not deployed yet");
|
|
86
|
-
|
|
87
|
-
console.log("got signers:", {
|
|
88
|
-
networkName,
|
|
89
|
-
root: root.address,
|
|
90
|
-
guardian: guardian.address,
|
|
91
|
-
balance: rootBalance,
|
|
92
|
-
guardianBalance: guardianBalance
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
console.log("executing proposals");
|
|
96
|
-
|
|
97
|
-
const proposalContracts = [
|
|
98
|
-
release.DistributionHelper, //controller -> upgrade disthelper
|
|
99
|
-
release.DistributionHelper, //update axelar fee
|
|
100
|
-
protocolSettings.guardiansSafe + "_" + release.GoodDollar //transfer G$s from guardians to bridge
|
|
101
|
-
];
|
|
102
|
-
|
|
103
|
-
const proposalEthValues = proposalContracts.map(_ => 0);
|
|
104
|
-
|
|
105
|
-
const proposalFunctionSignatures = [
|
|
106
|
-
"upgradeTo(address)", //upgrade disthelper
|
|
107
|
-
"setFeeSettings((uint128,uint128,uint128,uint128,uint128,uint8))",
|
|
108
|
-
"transfer(address,uint256)" // transfer G$s from guardians to bridge
|
|
109
|
-
];
|
|
110
|
-
|
|
111
|
-
const proposalFunctionInputs = [
|
|
112
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
113
|
-
["address"],
|
|
114
|
-
["0xa339B7F4E95A93d2c6569cb139AD034C3b9cAA77"]
|
|
115
|
-
),
|
|
116
|
-
//uint128 axelarBaseFeeUSD;uint128 bridgeExecuteGas;uint128 targetChainGasPrice;uint128 maxFee;uint128 minBalanceForFees;uint8 percentageToSellForFee;
|
|
117
|
-
//0.2 AXL base fee, 400000 bridge execute, 5 gwei gas price, 5e15 eth max fee, min balance 1e16, percentage 5%
|
|
118
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
119
|
-
["uint128", "uint128", "uint128", "uint128", "uint128", "uint8"],
|
|
120
|
-
[
|
|
121
|
-
"200000000000000000",
|
|
122
|
-
"400000",
|
|
123
|
-
"5000000000",
|
|
124
|
-
"5000000000000000",
|
|
125
|
-
"10000000000000000",
|
|
126
|
-
"5"
|
|
127
|
-
]
|
|
128
|
-
),
|
|
129
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
130
|
-
["address", "uint256"],
|
|
131
|
-
[NEWBRIDGE, GUARDIANS_BALANCE] // transfer G$ to bridge
|
|
132
|
-
)
|
|
133
|
-
];
|
|
134
|
-
|
|
135
|
-
if (isProduction) {
|
|
136
|
-
await executeViaSafe(
|
|
137
|
-
proposalContracts,
|
|
138
|
-
proposalEthValues,
|
|
139
|
-
proposalFunctionSignatures,
|
|
140
|
-
proposalFunctionInputs,
|
|
141
|
-
protocolSettings.guardiansSafe,
|
|
142
|
-
"mainnet"
|
|
143
|
-
);
|
|
144
|
-
} else {
|
|
145
|
-
//simulation or dev envs
|
|
146
|
-
await executeViaGuardian(
|
|
147
|
-
proposalContracts,
|
|
148
|
-
proposalEthValues,
|
|
149
|
-
proposalFunctionSignatures,
|
|
150
|
-
proposalFunctionInputs,
|
|
151
|
-
guardian,
|
|
152
|
-
networkName
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
//perform sanity checks on fork, for production we need to wait until everything executed
|
|
157
|
-
if (!isProduction) {
|
|
158
|
-
let fm = await ethers.getContractAt(
|
|
159
|
-
"GoodFundManager",
|
|
160
|
-
release.GoodFundManager
|
|
161
|
-
);
|
|
162
|
-
let dh = await ethers.getContractAt(
|
|
163
|
-
"DistributionHelper",
|
|
164
|
-
release.DistributionHelper
|
|
165
|
-
);
|
|
166
|
-
|
|
167
|
-
console.log(
|
|
168
|
-
"gd balances: guardians:",
|
|
169
|
-
await gd.balanceOf(guardian.address),
|
|
170
|
-
" bridge:",
|
|
171
|
-
await gd.balanceOf(NEWBRIDGE)
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
export const main = async () => {
|
|
177
|
-
await upgrade();
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
main().catch(console.log);
|