@gooddollar/goodprotocol 2.0.32-beta.0 → 2.0.33-beta.0
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/BuyFromReserveHelper.min.json +1 -0
- package/artifacts/abis/CeloDistributionHelper.min.json +1 -0
- package/artifacts/abis/CeloDistributionHelperTest.min.json +1 -0
- package/artifacts/abis/CeloDistributionHelperTestHelper.min.json +1 -0
- package/artifacts/abis/IBancorExchangeProvider.min.json +1 -0
- package/artifacts/abis/IBroker.min.json +1 -0
- package/artifacts/abis/IGoodDollarExchangeProvider.min.json +1 -0
- package/artifacts/abis/IGoodDollarExpansionController.min.json +1 -0
- package/artifacts/abis/IMentoReserve.min.json +1 -0
- package/artifacts/abis/ITradingLimits.min.json +1 -0
- package/artifacts/abis/MentoExchange.min.json +1 -0
- package/artifacts/abis/ProtocolUpgradeV4Mento.min.json +1 -0
- package/artifacts/abis/SuperfluidFaucet.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/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 +4 -0
- package/artifacts/contracts/MentoInterfaces.sol/IBancorExchangeProvider.json +282 -0
- package/artifacts/contracts/MentoInterfaces.sol/IBroker.dbg.json +4 -0
- package/artifacts/contracts/MentoInterfaces.sol/IBroker.json +491 -0
- package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.dbg.json +4 -0
- package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.json +164 -0
- package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.dbg.json +4 -0
- package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.json +333 -0
- package/artifacts/contracts/MentoInterfaces.sol/IMentoReserve.dbg.json +4 -0
- package/artifacts/contracts/MentoInterfaces.sol/IMentoReserve.json +927 -0
- package/artifacts/contracts/MentoInterfaces.sol/ITradingLimits.dbg.json +4 -0
- package/artifacts/contracts/MentoInterfaces.sol/ITradingLimits.json +10 -0
- 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/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.json +46 -28
- 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/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
- package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.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 +4 -0
- package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest.json +864 -0
- package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.dbg.json +4 -0
- package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.json +890 -0
- 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/DistributionHelperTest.json +2 -2
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +2 -2
- 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/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
- 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/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
- 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/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
- 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 +4 -0
- package/artifacts/contracts/reserve/CeloDistributionHelper.sol/CeloDistributionHelper.json +864 -0
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +2 -2
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
- 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/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +2 -2
- 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/DonationsStaking.sol/DonationsStaking.json +2 -2
- 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/GoodFundManager.sol/GoodFundManager.json +2 -2
- 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/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
- 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/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/BulkProof.sol/BulkProof.json +2 -2
- 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/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.json +2 -2
- package/artifacts/contracts/utils/BuyFromReserveHelper.sol/BuyFromReserveHelper.dbg.json +4 -0
- package/artifacts/contracts/utils/BuyFromReserveHelper.sol/BuyFromReserveHelper.json +476 -0
- 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 +4 -0
- package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange.json +24 -0
- package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.dbg.json +4 -0
- package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.json +92 -0
- 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/MentoInterfaces.sol +746 -0
- package/contracts/fuseFaucet/SuperfluidFacuet.sol +29 -8
- package/contracts/mocks/CeloDistributionHelperTest.sol +25 -0
- package/contracts/reserve/CeloDistributionHelper.sol +286 -0
- package/contracts/reserve/GoodMarketMaker.sol +11 -1
- package/contracts/staking/GoodFundManager.sol +5 -2
- package/contracts/utils/BuyFromReserveHelper.sol +129 -0
- package/contracts/utils/ProtoclUpgradeV4Mento.sol +99 -0
- package/contracts/utils/ReserveRestore.sol +171 -147
- package/hardhat.config.ts +4 -4
- package/package.json +5 -2
- package/releases/deployment.json +8 -5
- package/scripts/multichain-deploy/helpers.ts +45 -24
- package/scripts/proposals/reserveRestore.ts +130 -85
- package/scripts/proposals/v4Upgrade.ts +845 -0
- package/test/reserve/CeloDistributionHelper.test.ts +377 -0
- package/test/reserve/GoodMarketMaker.test.ts +98 -35
- package/test/zzz - e2e/CeloDistributionHelper.e2e.test.ts +0 -0
- package/types/contracts/MentoInterfaces.sol/IBancorExchangeProvider.ts +422 -0
- package/types/contracts/MentoInterfaces.sol/IBroker.ts +727 -0
- package/types/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.ts +341 -0
- package/types/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.ts +617 -0
- package/types/contracts/MentoInterfaces.sol/IMentoReserve.ts +1700 -0
- package/types/contracts/MentoInterfaces.sol/index.ts +8 -0
- package/types/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.ts +79 -41
- package/types/contracts/index.ts +2 -0
- package/types/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest.ts +1226 -0
- package/types/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.ts +1279 -0
- package/types/contracts/mocks/CeloDistributionHelperTest.sol/index.ts +5 -0
- package/types/contracts/mocks/index.ts +2 -0
- package/types/contracts/reserve/CeloDistributionHelper.ts +1226 -0
- package/types/contracts/reserve/index.ts +1 -0
- package/types/contracts/utils/BuyFromReserveHelper.ts +699 -0
- package/types/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange.ts +81 -0
- package/types/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.ts +161 -0
- package/types/contracts/utils/ProtoclUpgradeV4Mento.sol/index.ts +5 -0
- package/types/contracts/utils/index.ts +3 -0
- package/types/factories/contracts/MentoInterfaces.sol/IBancorExchangeProvider__factory.ts +301 -0
- package/types/factories/contracts/MentoInterfaces.sol/IBroker__factory.ts +506 -0
- package/types/factories/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider__factory.ts +183 -0
- package/types/factories/contracts/MentoInterfaces.sol/IGoodDollarExpansionController__factory.ts +352 -0
- package/types/factories/contracts/MentoInterfaces.sol/IMentoReserve__factory.ts +942 -0
- package/types/factories/contracts/MentoInterfaces.sol/index.ts +8 -0
- package/types/factories/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet__factory.ts +45 -27
- package/types/factories/contracts/governance/StakersDistribution__factory.ts +1 -1
- package/types/factories/contracts/index.ts +1 -0
- package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper__factory.ts +949 -0
- package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest__factory.ts +919 -0
- package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/index.ts +5 -0
- package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +1 -1
- package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest__factory.ts +1 -1
- package/types/factories/contracts/mocks/GoodCompoundStakingTest__factory.ts +1 -1
- package/types/factories/contracts/mocks/GoodFundManagerTest__factory.ts +1 -1
- package/types/factories/contracts/mocks/OverMintTesterRegularStake__factory.ts +1 -1
- package/types/factories/contracts/mocks/index.ts +1 -0
- package/types/factories/contracts/reserve/CeloDistributionHelper__factory.ts +919 -0
- package/types/factories/contracts/reserve/DistributionHelper__factory.ts +1 -1
- package/types/factories/contracts/reserve/ExchangeHelper__factory.ts +1 -1
- package/types/factories/contracts/reserve/GoodMarketMaker__factory.ts +1 -1
- package/types/factories/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai__factory.ts +1 -1
- package/types/factories/contracts/reserve/index.ts +1 -0
- package/types/factories/contracts/staking/DonationsStaking__factory.ts +1 -1
- package/types/factories/contracts/staking/GoodFundManager__factory.ts +1 -1
- package/types/factories/contracts/staking/aave/AaveStakingFactory__factory.ts +1 -1
- package/types/factories/contracts/staking/aave/GoodAaveStakingV2__factory.ts +1 -1
- package/types/factories/contracts/staking/aave/GoodAaveStaking__factory.ts +1 -1
- package/types/factories/contracts/staking/compound/CompoundStakingFactory__factory.ts +1 -1
- package/types/factories/contracts/staking/compound/GoodCompoundStakingV2__factory.ts +1 -1
- package/types/factories/contracts/staking/compound/GoodCompoundStaking__factory.ts +1 -1
- package/types/factories/contracts/utils/BuyAndBridgeHelper__factory.ts +1 -1
- package/types/factories/contracts/utils/BuyFromReserveHelper__factory.ts +566 -0
- package/types/factories/contracts/utils/LastauthReduction__factory.ts +1 -1
- package/types/factories/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange__factory.ts +39 -0
- package/types/factories/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento__factory.ts +152 -0
- package/types/factories/contracts/utils/ProtoclUpgradeV4Mento.sol/index.ts +5 -0
- package/types/factories/contracts/utils/ReserveRestore__factory.ts +1 -1
- package/types/factories/contracts/utils/index.ts +2 -0
- package/types/hardhat.d.ts +99 -0
- package/types/index.ts +22 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { ethers, upgrades, artifacts } from "hardhat";
|
|
2
|
+
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
|
3
|
+
import { expect } from "chai";
|
|
4
|
+
import {
|
|
5
|
+
GoodReserveCDai,
|
|
6
|
+
CeloDistributionHelperTestHelper,
|
|
7
|
+
DistributionBridgeMock,
|
|
8
|
+
IGoodDollar
|
|
9
|
+
} from "../../types";
|
|
10
|
+
import { createDAO, increaseTime } from "../helpers";
|
|
11
|
+
import * as waffle from "ethereum-waffle";
|
|
12
|
+
|
|
13
|
+
const BN = ethers.BigNumber;
|
|
14
|
+
export const NULL_ADDRESS = ethers.constants.AddressZero;
|
|
15
|
+
export const BLOCK_INTERVAL = 1;
|
|
16
|
+
|
|
17
|
+
describe("CeloDistributionHelper", () => {
|
|
18
|
+
let goodReserve: GoodReserveCDai;
|
|
19
|
+
let goodDollar: IGoodDollar,
|
|
20
|
+
genericCall,
|
|
21
|
+
avatar,
|
|
22
|
+
founder,
|
|
23
|
+
signers,
|
|
24
|
+
setDAOAddress,
|
|
25
|
+
nameService,
|
|
26
|
+
cDai;
|
|
27
|
+
|
|
28
|
+
before(async () => {
|
|
29
|
+
[founder, ...signers] = await ethers.getSigners();
|
|
30
|
+
let {
|
|
31
|
+
controller: ctrl,
|
|
32
|
+
avatar: av,
|
|
33
|
+
gd,
|
|
34
|
+
identity,
|
|
35
|
+
setDAOAddress: sda,
|
|
36
|
+
setSchemes,
|
|
37
|
+
reserve,
|
|
38
|
+
cdaiAddress,
|
|
39
|
+
genericCall: gc,
|
|
40
|
+
nameService: ns
|
|
41
|
+
} = await loadFixture(createDAO);
|
|
42
|
+
|
|
43
|
+
nameService = ns;
|
|
44
|
+
genericCall = gc;
|
|
45
|
+
cDai = cdaiAddress;
|
|
46
|
+
avatar = av;
|
|
47
|
+
setDAOAddress = sda;
|
|
48
|
+
|
|
49
|
+
console.log("deployed dao", {
|
|
50
|
+
founder: founder.address,
|
|
51
|
+
gd,
|
|
52
|
+
identity,
|
|
53
|
+
avatar
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
goodDollar = (await ethers.getContractAt("IGoodDollar", gd)) as IGoodDollar;
|
|
57
|
+
|
|
58
|
+
console.log("deployed contribution, deploying reserve...", {
|
|
59
|
+
founder: founder.address
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
goodReserve = reserve as GoodReserveCDai;
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const fixture = async () => {
|
|
66
|
+
const mpbf = await artifacts.readArtifact("IStaticOracle");
|
|
67
|
+
|
|
68
|
+
let oracle = await waffle.deployMockContract(founder, mpbf.abi);
|
|
69
|
+
oracle.mock.quoteSpecificFeeTiersWithTimePeriod.returns(1e13, []);
|
|
70
|
+
oracle.mock.prepareSpecificFeeTiersWithTimePeriod.returns([]);
|
|
71
|
+
|
|
72
|
+
const distHelper = (await upgrades.deployProxy(
|
|
73
|
+
await ethers.getContractFactory("CeloDistributionHelperTestHelper"),
|
|
74
|
+
[nameService.address, oracle.address],
|
|
75
|
+
{ kind: "uups" }
|
|
76
|
+
)) as CeloDistributionHelperTestHelper;
|
|
77
|
+
|
|
78
|
+
//make sure disthelper has enough native token so it doesnt try to swap G$s
|
|
79
|
+
await founder.sendTransaction({
|
|
80
|
+
to: distHelper.address,
|
|
81
|
+
value: ethers.constants.WeiPerEther
|
|
82
|
+
});
|
|
83
|
+
const bridge = (await ethers.deployContract(
|
|
84
|
+
"DistributionBridgeMock"
|
|
85
|
+
)) as DistributionBridgeMock;
|
|
86
|
+
|
|
87
|
+
const encodedCall = distHelper.interface.encodeFunctionData(
|
|
88
|
+
"setFeeSettings",
|
|
89
|
+
[
|
|
90
|
+
{
|
|
91
|
+
maxFee: "5000000000000000",
|
|
92
|
+
minBalanceForFees: "10000000000000000",
|
|
93
|
+
percentageToSellForFee: "5",
|
|
94
|
+
maxSlippage: "5"
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
100
|
+
await distHelper.setBridges(bridge.address);
|
|
101
|
+
|
|
102
|
+
return { distHelper, bridge, oracle };
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
it("should not allow to add recipient", async () => {
|
|
106
|
+
const { distHelper } = await loadFixture(fixture);
|
|
107
|
+
|
|
108
|
+
const recipient = signers[0];
|
|
109
|
+
|
|
110
|
+
await expect(
|
|
111
|
+
distHelper.addOrUpdateRecipient({
|
|
112
|
+
bps: 3000,
|
|
113
|
+
chainId: 42220,
|
|
114
|
+
addr: recipient.address,
|
|
115
|
+
transferType: 0
|
|
116
|
+
})
|
|
117
|
+
).to.be.revertedWith(
|
|
118
|
+
/is missing role 0x0000000000000000000000000000000000000000000000000000000000000000/
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("should allow to add recipient by avatar", async () => {
|
|
123
|
+
const { distHelper } = await loadFixture(fixture);
|
|
124
|
+
|
|
125
|
+
const recipient = signers[0];
|
|
126
|
+
|
|
127
|
+
const encodedCall = distHelper.interface.encodeFunctionData(
|
|
128
|
+
"addOrUpdateRecipient",
|
|
129
|
+
[
|
|
130
|
+
{
|
|
131
|
+
bps: 3000,
|
|
132
|
+
chainId: 42220,
|
|
133
|
+
addr: recipient.address,
|
|
134
|
+
transferType: 0
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
140
|
+
const dr = await distHelper.distributionRecipients(0);
|
|
141
|
+
expect(dr.addr).to.equal(recipient.address);
|
|
142
|
+
expect(dr.chainId).to.equal(42220);
|
|
143
|
+
expect(dr.bps).to.equal(3000);
|
|
144
|
+
expect(dr.transferType).to.equal(0);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("should allow to update recipient by avatar", async () => {
|
|
148
|
+
const { distHelper } = await loadFixture(fixture);
|
|
149
|
+
|
|
150
|
+
const recipient = signers[0];
|
|
151
|
+
|
|
152
|
+
let encodedCall = distHelper.interface.encodeFunctionData(
|
|
153
|
+
"addOrUpdateRecipient",
|
|
154
|
+
[
|
|
155
|
+
{
|
|
156
|
+
bps: 1000,
|
|
157
|
+
chainId: 4447,
|
|
158
|
+
addr: recipient.address,
|
|
159
|
+
transferType: 1
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
165
|
+
|
|
166
|
+
encodedCall = distHelper.interface.encodeFunctionData(
|
|
167
|
+
"addOrUpdateRecipient",
|
|
168
|
+
[
|
|
169
|
+
{
|
|
170
|
+
bps: 1500,
|
|
171
|
+
chainId: 45,
|
|
172
|
+
addr: recipient.address,
|
|
173
|
+
transferType: 0
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
179
|
+
|
|
180
|
+
const updEvents = await distHelper.queryFilter(
|
|
181
|
+
distHelper.filters.RecipientUpdated()
|
|
182
|
+
);
|
|
183
|
+
const addEvents = await distHelper.queryFilter(
|
|
184
|
+
distHelper.filters.RecipientAdded()
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
const dr = await distHelper.distributionRecipients(0);
|
|
188
|
+
expect(dr.addr).to.equal(recipient.address);
|
|
189
|
+
expect(dr.chainId).to.equal(45);
|
|
190
|
+
expect(dr.bps).to.equal(1500);
|
|
191
|
+
expect(dr.transferType).to.equal(0);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it("should distribute via layerzero bridge", async () => {
|
|
195
|
+
const { distHelper, bridge } = await loadFixture(fixture);
|
|
196
|
+
|
|
197
|
+
const recipient = signers[0];
|
|
198
|
+
|
|
199
|
+
let encodedCall = distHelper.interface.encodeFunctionData(
|
|
200
|
+
"addOrUpdateRecipient",
|
|
201
|
+
[
|
|
202
|
+
{
|
|
203
|
+
bps: 2000,
|
|
204
|
+
chainId: 42220,
|
|
205
|
+
addr: recipient.address,
|
|
206
|
+
transferType: 0
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
212
|
+
|
|
213
|
+
await goodDollar.mint(distHelper.address, "100000000000");
|
|
214
|
+
await founder.sendTransaction({
|
|
215
|
+
to: distHelper.address,
|
|
216
|
+
value: ethers.constants.WeiPerEther
|
|
217
|
+
});
|
|
218
|
+
await distHelper.onDistribution("100000000000");
|
|
219
|
+
expect(
|
|
220
|
+
await goodDollar.allowance(distHelper.address, bridge.address)
|
|
221
|
+
).to.equal((100000000000 * 2000) / 10000);
|
|
222
|
+
|
|
223
|
+
const events = await bridge.queryFilter(bridge.filters.BridgeLz());
|
|
224
|
+
expect(events[0].args.recipient).to.equal(recipient.address);
|
|
225
|
+
expect(events[0].args.amount).to.equal((100000000000 * 2000) / 10000);
|
|
226
|
+
expect(events[0].args.chainId).to.equal(42220);
|
|
227
|
+
expect(events[0].args.fee).to.equal(5e14);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("should distribute via transferAndCall", async () => {
|
|
231
|
+
const { distHelper, bridge } = await loadFixture(fixture);
|
|
232
|
+
|
|
233
|
+
const recipient = signers[0];
|
|
234
|
+
|
|
235
|
+
let encodedCall = distHelper.interface.encodeFunctionData(
|
|
236
|
+
"addOrUpdateRecipient",
|
|
237
|
+
[
|
|
238
|
+
{
|
|
239
|
+
bps: 2555,
|
|
240
|
+
chainId: 4447,
|
|
241
|
+
addr: signers[0].address,
|
|
242
|
+
transferType: 2
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
248
|
+
|
|
249
|
+
await goodDollar.mint(distHelper.address, "100000000000");
|
|
250
|
+
await distHelper.onDistribution("100000000000");
|
|
251
|
+
expect(await goodDollar.balanceOf(signers[0].address)).to.equal(
|
|
252
|
+
(100000000000 * 2555) / 10000
|
|
253
|
+
);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it("should distribute to multiple recipients", async () => {
|
|
257
|
+
const { distHelper, bridge } = await loadFixture(fixture);
|
|
258
|
+
|
|
259
|
+
const recipient = signers[0];
|
|
260
|
+
|
|
261
|
+
let encodedCall = distHelper.interface.encodeFunctionData(
|
|
262
|
+
"addOrUpdateRecipient",
|
|
263
|
+
[
|
|
264
|
+
{
|
|
265
|
+
bps: 2555,
|
|
266
|
+
chainId: 4447,
|
|
267
|
+
addr: signers[0].address,
|
|
268
|
+
transferType: 1
|
|
269
|
+
}
|
|
270
|
+
]
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
274
|
+
|
|
275
|
+
encodedCall = distHelper.interface.encodeFunctionData(
|
|
276
|
+
"addOrUpdateRecipient",
|
|
277
|
+
[
|
|
278
|
+
{
|
|
279
|
+
bps: 1000,
|
|
280
|
+
chainId: 4447,
|
|
281
|
+
addr: signers[1].address,
|
|
282
|
+
transferType: 1
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
288
|
+
|
|
289
|
+
encodedCall = distHelper.interface.encodeFunctionData(
|
|
290
|
+
"addOrUpdateRecipient",
|
|
291
|
+
[
|
|
292
|
+
{
|
|
293
|
+
bps: 5,
|
|
294
|
+
chainId: 4447,
|
|
295
|
+
addr: signers[2].address,
|
|
296
|
+
transferType: 2
|
|
297
|
+
}
|
|
298
|
+
]
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
302
|
+
|
|
303
|
+
await goodDollar.mint(distHelper.address, "100000000000");
|
|
304
|
+
await distHelper.onDistribution("100000000000");
|
|
305
|
+
expect(await goodDollar.balanceOf(signers[0].address)).to.equal(
|
|
306
|
+
(100000000000 * 2555) / 10000
|
|
307
|
+
);
|
|
308
|
+
expect(await goodDollar.balanceOf(signers[1].address)).to.equal(
|
|
309
|
+
(100000000000 * 1000) / 10000
|
|
310
|
+
);
|
|
311
|
+
expect(await goodDollar.balanceOf(signers[2].address)).to.equal(
|
|
312
|
+
(100000000000 * 5) / 10000
|
|
313
|
+
);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
it("should emit distribution event for multiple recipients", async () => {
|
|
317
|
+
const { distHelper, bridge } = await loadFixture(fixture);
|
|
318
|
+
|
|
319
|
+
let encodedCall = distHelper.interface.encodeFunctionData(
|
|
320
|
+
"addOrUpdateRecipient",
|
|
321
|
+
[
|
|
322
|
+
{
|
|
323
|
+
bps: 2555,
|
|
324
|
+
chainId: 122,
|
|
325
|
+
addr: signers[0].address,
|
|
326
|
+
transferType: 0
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
332
|
+
|
|
333
|
+
encodedCall = distHelper.interface.encodeFunctionData(
|
|
334
|
+
"addOrUpdateRecipient",
|
|
335
|
+
[
|
|
336
|
+
{
|
|
337
|
+
bps: 1000,
|
|
338
|
+
chainId: 4447,
|
|
339
|
+
addr: signers[1].address,
|
|
340
|
+
transferType: 1
|
|
341
|
+
}
|
|
342
|
+
]
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
346
|
+
|
|
347
|
+
encodedCall = distHelper.interface.encodeFunctionData(
|
|
348
|
+
"addOrUpdateRecipient",
|
|
349
|
+
[
|
|
350
|
+
{
|
|
351
|
+
bps: 5,
|
|
352
|
+
chainId: 4447,
|
|
353
|
+
addr: signers[2].address,
|
|
354
|
+
transferType: 2
|
|
355
|
+
}
|
|
356
|
+
]
|
|
357
|
+
);
|
|
358
|
+
|
|
359
|
+
await genericCall(distHelper.address, encodedCall, avatar.address, 0);
|
|
360
|
+
|
|
361
|
+
await goodDollar.mint(distHelper.address, "100000000000");
|
|
362
|
+
await distHelper.onDistribution("100000000000");
|
|
363
|
+
|
|
364
|
+
const DistributionEvents = await distHelper.queryFilter(
|
|
365
|
+
distHelper.filters.Distribution()
|
|
366
|
+
);
|
|
367
|
+
expect(DistributionEvents[0].args.distributionRecipients[0].addr).eq(
|
|
368
|
+
signers[0].address
|
|
369
|
+
);
|
|
370
|
+
expect(DistributionEvents[0].args.distributionRecipients[1].addr).eq(
|
|
371
|
+
signers[1].address
|
|
372
|
+
);
|
|
373
|
+
expect(DistributionEvents[0].args.distributionRecipients[2].addr).eq(
|
|
374
|
+
signers[2].address
|
|
375
|
+
);
|
|
376
|
+
});
|
|
377
|
+
});
|
|
@@ -189,24 +189,22 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
|
|
|
189
189
|
it("should be able to calculate and update bonding curve gd balance based on oncoming cDAI and the price stays the same", async () => {
|
|
190
190
|
let priceBefore = await marketMaker.currentPrice(cdai);
|
|
191
191
|
await marketMaker.mintInterest(cdai, BN.from(1e8));
|
|
192
|
-
let priceAfter = await marketMaker.currentPrice(cdai)
|
|
193
|
-
|
|
194
|
-
expect(priceAfter).gt(0)
|
|
195
|
-
expect(priceBefore).gt(0)
|
|
196
|
-
expect(
|
|
197
|
-
Math.floor(
|
|
198
|
-
(priceAfter.toNumber() / 100)).toString()
|
|
199
|
-
).to.be.equal(Math.floor(priceBefore.toNumber() / 100).toString());
|
|
192
|
+
let priceAfter = await marketMaker.currentPrice(cdai);
|
|
200
193
|
|
|
194
|
+
expect(priceAfter).gt(0);
|
|
195
|
+
expect(priceBefore).gt(0);
|
|
196
|
+
expect(Math.floor(priceAfter.toNumber() / 100).toString()).to.be.equal(
|
|
197
|
+
Math.floor(priceBefore.toNumber() / 100).toString()
|
|
198
|
+
);
|
|
201
199
|
|
|
202
200
|
// very large amount of cdai
|
|
203
201
|
priceBefore = await marketMaker.currentPrice(cdai);
|
|
204
202
|
await marketMaker.mintInterest(cdai, ethers.utils.parseEther("1"));
|
|
205
|
-
priceAfter = await marketMaker.currentPrice(cdai)
|
|
203
|
+
priceAfter = await marketMaker.currentPrice(cdai);
|
|
206
204
|
|
|
207
|
-
console.log({ priceAfter, priceBefore })
|
|
208
|
-
expect(priceAfter).gt(0)
|
|
209
|
-
expect(priceBefore).gt(0)
|
|
205
|
+
console.log({ priceAfter, priceBefore });
|
|
206
|
+
expect(priceAfter).gt(0);
|
|
207
|
+
expect(priceBefore).gt(0);
|
|
210
208
|
expect(priceAfter).to.eq(priceBefore);
|
|
211
209
|
});
|
|
212
210
|
|
|
@@ -316,15 +314,18 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
|
|
|
316
314
|
let reserveToken = await marketMaker.reserveTokens(dai);
|
|
317
315
|
|
|
318
316
|
//we expect price to stay the same p = reserve/supply*RR
|
|
319
|
-
const newPrice = reserveToken.reserveSupply
|
|
320
|
-
|
|
317
|
+
const newPrice = reserveToken.reserveSupply
|
|
318
|
+
.add(ethers.utils.parseEther("1"))
|
|
319
|
+
.mul(1e8)
|
|
320
|
+
.div(reserveToken.gdSupply.add(toMint).mul(reserveToken.reserveRatio));
|
|
321
|
+
expect(newPrice).equal(gdPrice);
|
|
321
322
|
|
|
322
323
|
// the formula is amountToMint = reserveInterest * tokenSupply / reserveBalance
|
|
323
|
-
const expectedTotalMinted =
|
|
324
|
+
const expectedTotalMinted =
|
|
325
|
+
(10 ** 18 * reserveToken.gdSupply.toNumber()) /
|
|
326
|
+
reserveToken.reserveSupply.toNumber();
|
|
324
327
|
expect(expectedTotalMinted).to.be.equal(1000000);
|
|
325
|
-
expect(toMint.toString()).to.be.equal(
|
|
326
|
-
(expectedTotalMinted).toString()
|
|
327
|
-
);
|
|
328
|
+
expect(toMint.toString()).to.be.equal(expectedTotalMinted.toString());
|
|
328
329
|
});
|
|
329
330
|
|
|
330
331
|
it("should calculate sell return with cDAI", async () => {
|
|
@@ -436,7 +437,7 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
|
|
|
436
437
|
.toString()
|
|
437
438
|
).to.be.equal(reserveBalanceBefore.toString());
|
|
438
439
|
expect(supplyBefore.sub(supplyAfter)).to.be.equal(BN.from(amount));
|
|
439
|
-
expect(rrAfter
|
|
440
|
+
expect(rrAfter).gte(rrBefore); //with sell contribution G$ are burned and increase RR
|
|
440
441
|
});
|
|
441
442
|
|
|
442
443
|
it("should not be able to calculate the buy return in gd and update the bonding curve params by a non-owner account", async () => {
|
|
@@ -547,34 +548,24 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
|
|
|
547
548
|
});
|
|
548
549
|
|
|
549
550
|
it("should calculate amount of gd to mint based on incoming cDAI without effecting bonding curve price", async () => {
|
|
550
|
-
await initializeToken(
|
|
551
|
-
dai,
|
|
552
|
-
6e11,
|
|
553
|
-
ethers.utils.parseEther("600000"),
|
|
554
|
-
5e5
|
|
555
|
-
);
|
|
551
|
+
await initializeToken(dai, 6e11, ethers.utils.parseEther("600000"), 5e5);
|
|
556
552
|
|
|
557
553
|
const priceBefore = await marketMaker.currentPrice(dai);
|
|
558
554
|
|
|
559
|
-
await marketMaker.mintInterest(dai, ethers.utils.parseEther("100"))
|
|
555
|
+
await marketMaker.mintInterest(dai, ethers.utils.parseEther("100"));
|
|
560
556
|
const priceAfter = await marketMaker.currentPrice(dai);
|
|
561
557
|
expect(priceBefore.toString()).to.be.equal(priceAfter.toString());
|
|
562
558
|
});
|
|
563
559
|
|
|
564
560
|
it("should calculate amount of gd to mint based on incoming cDAI with small precision issue effecting bonding curve price in very low amounts", async () => {
|
|
565
|
-
await initializeToken(
|
|
566
|
-
dai,
|
|
567
|
-
600,
|
|
568
|
-
600000000,
|
|
569
|
-
5e5
|
|
570
|
-
);
|
|
561
|
+
await initializeToken(dai, 600, 600000000, 5e5);
|
|
571
562
|
|
|
572
563
|
const priceBefore = await marketMaker.currentPrice(dai);
|
|
573
564
|
|
|
574
|
-
await marketMaker.mintInterest(dai, 60000)
|
|
565
|
+
await marketMaker.mintInterest(dai, 60000);
|
|
575
566
|
const priceAfter = await marketMaker.currentPrice(dai);
|
|
576
|
-
expect(priceBefore).equal(200000000)
|
|
577
|
-
expect(priceAfter).equal(200020000)
|
|
567
|
+
expect(priceBefore).equal(200000000);
|
|
568
|
+
expect(priceAfter).equal(200020000);
|
|
578
569
|
});
|
|
579
570
|
|
|
580
571
|
it("should not change the reserve ratio when calculate how much decrease it for the reservetoken", async () => {
|
|
@@ -624,6 +615,7 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
|
|
|
624
615
|
expect(gdPriceAfter.lt(gdPriceBefore));
|
|
625
616
|
expect(reserveRatioAfter).to.be.equal(reserveRatioBefore);
|
|
626
617
|
});
|
|
618
|
+
|
|
627
619
|
it("should price increase after buy gd when RR is not %100", async () => {
|
|
628
620
|
let reserveTokenBefore = await marketMaker.reserveTokens(cdai);
|
|
629
621
|
let gdPriceBefore = await marketMaker.currentPrice(cdai);
|
|
@@ -658,4 +650,75 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
|
|
|
658
650
|
)
|
|
659
651
|
).to.be.revertedWith(/Invalid nom or denom value/);
|
|
660
652
|
});
|
|
653
|
+
|
|
654
|
+
it("should return same amount when splitting sell into two when exit fee is 0", async () => {
|
|
655
|
+
let reserveTokenBefore = await marketMaker.reserveTokens(cdai);
|
|
656
|
+
console.log({ reserveTokenBefore });
|
|
657
|
+
const res = await (
|
|
658
|
+
await marketMaker.sellWithContribution(cdai, "100000000", "0")
|
|
659
|
+
).wait();
|
|
660
|
+
let reserveTokenAfterSale = await marketMaker.reserveTokens(cdai);
|
|
661
|
+
console.log({ reserveTokenAfterSale });
|
|
662
|
+
await marketMaker.initializeToken(
|
|
663
|
+
cdai,
|
|
664
|
+
reserveTokenBefore.gdSupply,
|
|
665
|
+
reserveTokenBefore.reserveSupply,
|
|
666
|
+
reserveTokenBefore.reserveRatio,
|
|
667
|
+
0
|
|
668
|
+
);
|
|
669
|
+
const split1 = await (
|
|
670
|
+
await marketMaker.sellWithContribution(cdai, "50000000", "0")
|
|
671
|
+
).wait();
|
|
672
|
+
const split2 = await (
|
|
673
|
+
await marketMaker.sellWithContribution(cdai, "50000000", "0")
|
|
674
|
+
).wait();
|
|
675
|
+
let reserveTokenAfterSplitSale = await marketMaker.reserveTokens(cdai);
|
|
676
|
+
|
|
677
|
+
expect(reserveTokenAfterSale.gdSupply).eq(
|
|
678
|
+
reserveTokenAfterSplitSale.gdSupply
|
|
679
|
+
);
|
|
680
|
+
expect(reserveTokenAfterSale.reserveSupply).eq(
|
|
681
|
+
reserveTokenAfterSplitSale.reserveSupply
|
|
682
|
+
);
|
|
683
|
+
});
|
|
684
|
+
|
|
685
|
+
it("should have minimal effect on return value when splitting sell into two txs when exit fee is non 0", async () => {
|
|
686
|
+
let reserveTokenBefore = await marketMaker.reserveTokens(cdai);
|
|
687
|
+
await marketMaker.initializeToken(
|
|
688
|
+
cdai,
|
|
689
|
+
reserveTokenBefore.gdSupply,
|
|
690
|
+
reserveTokenBefore.reserveSupply,
|
|
691
|
+
200000,
|
|
692
|
+
0
|
|
693
|
+
);
|
|
694
|
+
console.log({ reserveTokenBefore });
|
|
695
|
+
const res = await (
|
|
696
|
+
await marketMaker.sellWithContribution(cdai, "500000000", "50000000")
|
|
697
|
+
).wait();
|
|
698
|
+
let reserveTokenAfterSale = await marketMaker.reserveTokens(cdai);
|
|
699
|
+
console.log({ reserveTokenAfterSale });
|
|
700
|
+
await marketMaker.initializeToken(
|
|
701
|
+
cdai,
|
|
702
|
+
reserveTokenBefore.gdSupply,
|
|
703
|
+
reserveTokenBefore.reserveSupply,
|
|
704
|
+
200000,
|
|
705
|
+
0
|
|
706
|
+
);
|
|
707
|
+
const split1 = await (
|
|
708
|
+
await marketMaker.sellWithContribution(cdai, "250000000", "25000000")
|
|
709
|
+
).wait();
|
|
710
|
+
const split2 = await (
|
|
711
|
+
await marketMaker.sellWithContribution(cdai, "250000000", "25000000")
|
|
712
|
+
).wait();
|
|
713
|
+
let reserveTokenAfterSplitSale = await marketMaker.reserveTokens(cdai);
|
|
714
|
+
|
|
715
|
+
console.log({ reserveTokenAfterSplitSale });
|
|
716
|
+
expect(reserveTokenAfterSale.gdSupply).eq(
|
|
717
|
+
reserveTokenAfterSplitSale.gdSupply
|
|
718
|
+
);
|
|
719
|
+
expect(
|
|
720
|
+
Number(reserveTokenAfterSplitSale.reserveSupply) /
|
|
721
|
+
Number(reserveTokenAfterSale.reserveSupply)
|
|
722
|
+
).gte(0.981);
|
|
723
|
+
});
|
|
661
724
|
});
|
|
File without changes
|