@gooddollar/goodprotocol 2.0.25-beta.0 → 2.0.25-beta.10
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/BulkWhitelist.min.json +1 -0
- package/artifacts/abis/CompoundVotingMachine.min.json +1 -1
- package/artifacts/abis/DistributionHelper.min.json +1 -1
- package/artifacts/abis/DistributionHelperTest.min.json +1 -1
- package/artifacts/abis/DistributionHelperTestHelper.min.json +1 -1
- package/artifacts/abis/EternalStorage.min.json +1 -0
- package/artifacts/abis/FuseOldBridgeKill.min.json +1 -0
- package/artifacts/abis/FuseStakingV3.min.json +1 -1
- package/artifacts/abis/GoodFundManager.min.json +1 -1
- package/artifacts/abis/GoodFundManagerTest.min.json +1 -1
- package/artifacts/abis/GoodMarketMaker.min.json +1 -1
- package/artifacts/abis/GoodReserveCDai.min.json +1 -1
- package/artifacts/abis/IQuoterV2.min.json +1 -1
- package/artifacts/abis/ISwapRouter.min.json +1 -1
- package/artifacts/abis/IUpgradeabilityOwnerStorage.min.json +1 -0
- package/artifacts/abis/Initializable.min.json +1 -0
- package/artifacts/abis/InvitesV2.min.json +1 -1
- package/artifacts/abis/LastauthReduction.min.json +1 -0
- package/artifacts/abis/OneTimeReward.min.json +1 -0
- package/artifacts/abis/Ownable.min.json +1 -0
- package/artifacts/abis/ReserveRestore.min.json +1 -0
- package/artifacts/abis/Upgradeable.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/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 +4 -0
- package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ISwapRouter.dbg.json +4 -0
- package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.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/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +2 -2
- package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +2 -2
- package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +2 -2
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +20 -2
- package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
- 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/GovernanceStaking.sol/GovernanceStaking.json +2 -2
- 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/Reputation.sol/Reputation.json +2 -2
- 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/identity/IdentityV2.sol/IdentityV2.json +2 -2
- package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.json +2 -2
- package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
- package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.json +15 -2
- package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.dbg.json +4 -0
- package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.json +291 -0
- 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/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/DistributionHelperTest.json +21 -2
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +21 -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/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +2 -2
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +21 -2
- package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.json +2 -2
- 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/OverMintTester.sol/OverMintTester.json +2 -2
- 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/SwapHelperTest.sol/SwapHelperTest.json +2 -2
- 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/UpgradableMock.json +2 -2
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
- 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/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +21 -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 +6 -6
- 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 +3 -3
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
- 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/FuseStakingV3.json +7 -2
- 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 +21 -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/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
- 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/GoodDollar.sol/GoodDollar.json +2 -2
- 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/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
- 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/UBIScheme.sol/UBIScheme.json +2 -2
- package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.json +2 -2
- package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +2 -2
- package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.json +2 -2
- 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 +4 -0
- package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.json +67 -0
- 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/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.json +2 -2
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.json +2 -2
- package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.json +2 -2
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
- 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 +4 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.json +10 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.dbg.json +4 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.json +31 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.dbg.json +4 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.json +24 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.dbg.json +4 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.json +24 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.dbg.json +4 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.json +56 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.dbg.json +4 -0
- package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.json +10 -0
- package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
- package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.json +2 -2
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +2 -2
- 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/GoodDollarMintBurnWrapper.sol/TokenOperation.json +2 -2
- package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
- package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.json +2 -2
- package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.dbg.json +4 -0
- package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.json +81 -0
- 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/MultichainBridgeHelper.sol/MultichainBridgeHelper.json +2 -2
- 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/OneTimePayments.sol/OneTimePayments.json +2 -2
- package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.json +2 -2
- 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/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
- 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/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
- package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.dbg.json +4 -0
- package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.json +91 -0
- package/contracts/Interfaces.sol +122 -0
- package/contracts/governance/CompoundVotingMachine.sol +26 -11
- package/contracts/governance/StakersDistribution.sol +13 -13
- package/contracts/invite/InvitesV2.sol +60 -43
- package/contracts/invite/OneTimeReward.sol +87 -0
- package/contracts/reserve/DistributionHelper.sol +29 -10
- package/contracts/reserve/ExchangeHelper.sol +16 -7
- package/contracts/reserve/GoodMarketMaker.sol +43 -53
- package/contracts/reserve/GoodReserveCDai.sol +44 -16
- package/contracts/staking/FuseStakingV3.sol +4 -2
- package/contracts/staking/GoodFundManager.sol +44 -4
- package/contracts/utils/BulkWhitelist.sol +51 -0
- package/contracts/utils/BuyGDClone.sol +0 -122
- package/contracts/utils/FuseOldBridgeKill.sol +123 -0
- package/contracts/utils/LastauthReduction.sol +92 -0
- package/contracts/utils/ReserveRestore.sol +157 -0
- package/dist/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
- package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
- package/dist/test-sdk/deploySuperGoodDollar.js +1 -1
- package/package.json +19 -20
- package/releases/deployment.json +612 -599
- package/scripts/analytics/activeStakers.ts +25 -0
- package/scripts/analytics/activeUsersCount.ts +80 -26
- package/scripts/analytics/activeWalletsStats.ts +155 -22
- package/scripts/analytics/checkBridgeBalances.ts +442 -0
- package/scripts/deployFullDAO.ts +6 -4
- package/scripts/fv.ts +148 -35
- package/scripts/multichain-deploy/helpers.ts +10 -8
- package/scripts/proposals/identityAuthPeriod.ts +229 -0
- package/scripts/proposals/reserveRestore.ts +429 -0
- package/scripts/test/localOldDaoDeploy.ts +2 -1
- package/scripts/utils.ts +28 -16
- package/test/governance/CompoundVotingMachine.daoscheme.ts +3 -0
- package/test/governance/CompoundVotingMachine.guardian.test.ts +76 -21
- package/test/governance/CompoundVotingMachine.state.test.ts +31 -28
- package/test/governance/StakersDistribution.test.ts +79 -5
- package/test/helpers.ts +9 -0
- package/test/invite/InvitesV2.test.ts +165 -271
- package/test/reserve/DistributionHelper.test.ts +10 -10
- package/test/reserve/GoodMarketMaker.test.ts +75 -26
- package/test/reserve/GoodReserveCDai.test.ts +2 -1
- package/test/staking/FuseStaking.test.ts +23 -54
- package/test/staking/StakingRewards.test.ts +106 -29
- package/test/utils/ProtocolUpgrade.test.ts +1 -0
- package/tsconfig.json +1 -1
- package/types/@openzeppelin/contracts/access/Ownable.ts +175 -0
- package/types/@openzeppelin/contracts/access/index.ts +1 -0
- package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.ts +1 -1
- package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.ts +1 -1
- package/types/contracts/Interfaces.sol/index.ts +2 -0
- package/types/contracts/governance/CompoundVotingMachine.ts +44 -3
- package/types/contracts/invite/InvitesV2.ts +32 -0
- package/types/contracts/invite/OneTimeReward.ts +521 -0
- package/types/contracts/invite/index.ts +1 -0
- package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.ts +35 -0
- package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.ts +35 -0
- package/types/contracts/mocks/GoodFundManagerTest.ts +35 -0
- package/types/contracts/reserve/DistributionHelper.ts +35 -0
- package/types/contracts/reserve/GoodMarketMaker.ts +3 -3
- package/types/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.ts +5 -5
- package/types/contracts/staking/FuseStakingV3.sol/FuseStakingV3.ts +7 -2
- package/types/contracts/staking/GoodFundManager.ts +35 -0
- package/types/contracts/utils/BulkWhitelist.ts +153 -0
- package/types/contracts/utils/BuyGDClone.sol/index.ts +0 -2
- package/types/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.ts +108 -0
- package/types/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.ts +89 -0
- package/types/contracts/utils/FuseOldBridgeKill.sol/Initializable.ts +87 -0
- package/types/contracts/utils/FuseOldBridgeKill.sol/Ownable.ts +148 -0
- package/types/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
- package/types/contracts/utils/LastauthReduction.ts +168 -0
- package/types/contracts/utils/ReserveRestore.ts +201 -0
- package/types/contracts/utils/index.ts +5 -0
- package/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +78 -0
- package/types/factories/@openzeppelin/contracts/access/index.ts +1 -0
- package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2__factory.ts +1 -1
- package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter__factory.ts +1 -1
- package/types/factories/contracts/Interfaces.sol/index.ts +2 -0
- package/types/factories/contracts/fuseFaucet/Faucet__factory.ts +1 -1
- package/types/factories/contracts/fuseFaucet/FuseFaucetV2__factory.ts +1 -1
- package/types/factories/contracts/fuseFaucet/FuseFaucet__factory.ts +1 -1
- package/types/factories/contracts/governance/ClaimersDistribution__factory.ts +1 -1
- package/types/factories/contracts/governance/CompoundVotingMachine__factory.ts +19 -1
- package/types/factories/contracts/governance/GReputation__factory.ts +1 -1
- package/types/factories/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking__factory.ts +1 -1
- package/types/factories/contracts/governance/GovernanceStaking__factory.ts +1 -1
- package/types/factories/contracts/governance/Reputation__factory.ts +1 -1
- package/types/factories/contracts/governance/StakersDistribution__factory.ts +1 -1
- package/types/factories/contracts/identity/IdentityV2__factory.ts +1 -1
- package/types/factories/contracts/invite/InvitesFuseV2__factory.ts +1 -1
- package/types/factories/contracts/invite/InvitesV1__factory.ts +1 -1
- package/types/factories/contracts/invite/InvitesV2__factory.ts +14 -1
- package/types/factories/contracts/invite/OneTimeReward__factory.ts +361 -0
- package/types/factories/contracts/invite/index.ts +1 -0
- package/types/factories/contracts/mocks/DistributionBridgeMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +20 -1
- package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest__factory.ts +20 -1
- package/types/factories/contracts/mocks/GoodCompoundStakingTest__factory.ts +1 -1
- package/types/factories/contracts/mocks/GoodDollarStakingMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/GoodFundManagerTest__factory.ts +20 -1
- package/types/factories/contracts/mocks/IdentityMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock__factory.ts +1 -1
- package/types/factories/contracts/mocks/OverMintTester.sol/OverMintTester__factory.ts +1 -1
- package/types/factories/contracts/mocks/OverMintTesterRegularStake__factory.ts +1 -1
- package/types/factories/contracts/mocks/SwapHelperTest__factory.ts +1 -1
- package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock2__factory.ts +1 -1
- package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock3__factory.ts +1 -1
- package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock4__factory.ts +1 -1
- package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock__factory.ts +1 -1
- package/types/factories/contracts/reserve/DistributionHelper__factory.ts +20 -1
- package/types/factories/contracts/reserve/ExchangeHelper__factory.ts +1 -1
- package/types/factories/contracts/reserve/GoodMarketMaker__factory.ts +5 -5
- package/types/factories/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai__factory.ts +2 -2
- package/types/factories/contracts/staking/BaseShareFieldV2__factory.ts +1 -1
- package/types/factories/contracts/staking/BaseShareField__factory.ts +1 -1
- package/types/factories/contracts/staking/DonationsStaking__factory.ts +1 -1
- package/types/factories/contracts/staking/FuseStakingV3.sol/FuseStakingV3__factory.ts +6 -1
- package/types/factories/contracts/staking/GoodFundManager__factory.ts +20 -1
- package/types/factories/contracts/staking/UniswapV2SwapHelper__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/token/GoodDollar__factory.ts +1 -1
- package/types/factories/contracts/token/superfluid/SuperGoodDollar__factory.ts +1 -1
- package/types/factories/contracts/ubi/UBISchemeV2__factory.ts +1 -1
- package/types/factories/contracts/ubi/UBIScheme__factory.ts +1 -1
- package/types/factories/contracts/utils/AdminWalletFuse__factory.ts +1 -1
- package/types/factories/contracts/utils/AdminWallet__factory.ts +1 -1
- package/types/factories/contracts/utils/BulkWhitelist__factory.ts +123 -0
- package/types/factories/contracts/utils/BuyAndBridgeHelper__factory.ts +1 -1
- package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory__factory.ts +1 -1
- package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDClone__factory.ts +1 -1
- package/types/factories/contracts/utils/BuyGDClone.sol/DonateGDClone__factory.ts +1 -1
- package/types/factories/contracts/utils/BuyGDClone.sol/index.ts +0 -2
- package/types/factories/contracts/utils/DAOContract__factory.ts +1 -1
- package/types/factories/contracts/utils/DAOUpgradeableContract__factory.ts +1 -1
- package/types/factories/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill__factory.ts +82 -0
- package/types/factories/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage__factory.ts +43 -0
- package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Initializable__factory.ts +75 -0
- package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Ownable__factory.ts +105 -0
- package/types/factories/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
- package/types/factories/contracts/utils/GDFaucet__factory.ts +1 -1
- package/types/factories/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper__factory.ts +1 -1
- package/types/factories/contracts/utils/IdentityFix__factory.ts +1 -1
- package/types/factories/contracts/utils/LastauthReduction__factory.ts +134 -0
- package/types/factories/contracts/utils/MultichainBridgeHelper__factory.ts +1 -1
- package/types/factories/contracts/utils/OneTimePaymentsV2__factory.ts +1 -1
- package/types/factories/contracts/utils/OneTimePayments__factory.ts +1 -1
- package/types/factories/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade__factory.ts +1 -1
- package/types/factories/contracts/utils/ProtocolUpgradeFuseRecover__factory.ts +1 -1
- package/types/factories/contracts/utils/ProtocolUpgradeFuse__factory.ts +1 -1
- package/types/factories/contracts/utils/ProtocolUpgradeRecover__factory.ts +1 -1
- package/types/factories/contracts/utils/ReputationTestHelper__factory.ts +1 -1
- package/types/factories/contracts/utils/ReserveRestore__factory.ts +144 -0
- package/types/factories/contracts/utils/index.ts +4 -0
- package/types/hardhat.d.ts +97 -16
- package/types/index.ts +18 -4
- package/artifacts/contracts/utils/BuyGDClone.sol/IQuoterV2.dbg.json +0 -4
- package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.dbg.json +0 -4
- package/contracts/utils/.DS_Store +0 -0
- package/yarn.lock +0 -23715
|
@@ -52,6 +52,7 @@ contract StakersDistribution is
|
|
|
52
52
|
) external {
|
|
53
53
|
_onlyAvatar();
|
|
54
54
|
monthlyReputationDistribution = newMonthlyReputationDistribution;
|
|
55
|
+
_updateRewards();
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
/**
|
|
@@ -174,9 +175,10 @@ contract StakersDistribution is
|
|
|
174
175
|
_claimReputation(_staker, _stakingContracts);
|
|
175
176
|
}
|
|
176
177
|
|
|
177
|
-
function _claimReputation(
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
function _claimReputation(
|
|
179
|
+
address _staker,
|
|
180
|
+
address[] memory _stakingContracts
|
|
181
|
+
) internal {
|
|
180
182
|
uint256 totalRep;
|
|
181
183
|
GoodFundManager gfm = GoodFundManager(
|
|
182
184
|
nameService.getAddress("FUND_MANAGER")
|
|
@@ -206,11 +208,10 @@ contract StakersDistribution is
|
|
|
206
208
|
* @param _user the user to check rewards for
|
|
207
209
|
* @return reputation rewards pending for user
|
|
208
210
|
*/
|
|
209
|
-
function getUserPendingRewards(
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
{
|
|
211
|
+
function getUserPendingRewards(
|
|
212
|
+
address[] memory _contracts,
|
|
213
|
+
address _user
|
|
214
|
+
) public view returns (uint256) {
|
|
214
215
|
uint256 pending;
|
|
215
216
|
for (uint256 i = 0; i < _contracts.length; i++) {
|
|
216
217
|
(
|
|
@@ -239,11 +240,10 @@ contract StakersDistribution is
|
|
|
239
240
|
* @param _user account to get rewards status for
|
|
240
241
|
* @return (minted, pending) in GDAO 18 decimals
|
|
241
242
|
*/
|
|
242
|
-
function getUserMintedAndPending(
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
{
|
|
243
|
+
function getUserMintedAndPending(
|
|
244
|
+
address[] memory _contracts,
|
|
245
|
+
address _user
|
|
246
|
+
) public view returns (uint256, uint256) {
|
|
247
247
|
uint256 pending = getUserPendingRewards(_contracts, _user);
|
|
248
248
|
uint256 minted;
|
|
249
249
|
for (uint256 i = 0; i < _contracts.length; i++) {
|
|
@@ -57,6 +57,8 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
57
57
|
|
|
58
58
|
bool public levelExpirationEnabled;
|
|
59
59
|
|
|
60
|
+
bytes32 private campaignCode;
|
|
61
|
+
|
|
60
62
|
event InviteeJoined(address indexed inviter, address indexed invitee);
|
|
61
63
|
event InviterBounty(
|
|
62
64
|
address indexed inviter,
|
|
@@ -125,8 +127,9 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
125
127
|
address inviter = codeToUser[_inviterCode];
|
|
126
128
|
//allow user to set inviter if doesnt have one
|
|
127
129
|
require(
|
|
128
|
-
user.
|
|
129
|
-
(user.
|
|
130
|
+
!user.bountyPaid &&
|
|
131
|
+
(user.inviteCode == 0x0 ||
|
|
132
|
+
(user.invitedBy == address(0) && inviter != address(0))),
|
|
130
133
|
"user already joined"
|
|
131
134
|
);
|
|
132
135
|
if (user.inviteCode == 0x0) {
|
|
@@ -138,10 +141,15 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
138
141
|
if (inviter != address(0)) {
|
|
139
142
|
require(inviter != msg.sender, "self invite");
|
|
140
143
|
user.invitedBy = inviter;
|
|
141
|
-
users[inviter].invitees.push(msg.sender);
|
|
142
|
-
users[inviter].pending.push(msg.sender);
|
|
143
144
|
stats.totalInvited += 1;
|
|
144
|
-
|
|
145
|
+
/** support special campaign code without inviter */
|
|
146
|
+
if (inviter == address(this)) {
|
|
147
|
+
user.bountyAtJoin = levels[0].bounty;
|
|
148
|
+
} else {
|
|
149
|
+
users[inviter].invitees.push(msg.sender);
|
|
150
|
+
users[inviter].pending.push(msg.sender);
|
|
151
|
+
user.bountyAtJoin = levels[users[inviter].level].bounty;
|
|
152
|
+
}
|
|
145
153
|
}
|
|
146
154
|
|
|
147
155
|
if (canCollectBountyFor(msg.sender)) {
|
|
@@ -165,19 +173,15 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
165
173
|
|
|
166
174
|
function canCollectBountyFor(address _invitee) public view returns (bool) {
|
|
167
175
|
address invitedBy = users[_invitee].invitedBy;
|
|
168
|
-
uint256 daysToComplete = levels[users[invitedBy].level].daysToComplete;
|
|
169
|
-
bool isLevelExpired = levelExpirationEnabled == true &&
|
|
170
|
-
daysToComplete > 0 &&
|
|
171
|
-
daysToComplete <
|
|
172
|
-
(users[_invitee].joinedAt - users[invitedBy].levelStarted) / 1 days;
|
|
173
176
|
|
|
174
177
|
return
|
|
175
|
-
|
|
178
|
+
users[_invitee].bountyAtJoin > 0 &&
|
|
176
179
|
!users[_invitee].bountyPaid &&
|
|
177
180
|
getIdentity().isWhitelisted(_invitee) &&
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
+
(invitedBy == address(0) ||
|
|
182
|
+
invitedBy == address(this) ||
|
|
183
|
+
getIdentity().isWhitelisted(invitedBy)) &&
|
|
184
|
+
_whitelistedOnChainOrDefault(_invitee) == _chainId();
|
|
181
185
|
}
|
|
182
186
|
|
|
183
187
|
function getInvitees(
|
|
@@ -237,44 +241,51 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
237
241
|
bool isSingleBounty
|
|
238
242
|
) internal returns (uint256 bounty) {
|
|
239
243
|
address invitedBy = users[_invitee].invitedBy;
|
|
240
|
-
uint256 joinedAt = users[_invitee].joinedAt;
|
|
241
|
-
Level memory level = levels[users[invitedBy].level];
|
|
242
244
|
uint256 bountyToPay = users[_invitee].bountyAtJoin;
|
|
245
|
+
bool earnedLevel = false;
|
|
243
246
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
247
|
+
if (invitedBy != address(this) && invitedBy != address(0)) {
|
|
248
|
+
uint256 joinedAt = users[_invitee].joinedAt;
|
|
249
|
+
Level memory level = levels[users[invitedBy].level];
|
|
250
|
+
|
|
251
|
+
//hardcoded for users invited before the bountyAtJoin change
|
|
252
|
+
if (bountyToPay == 0) {
|
|
253
|
+
uint precision = 10 ** goodDollar.decimals();
|
|
254
|
+
bountyToPay = joinedAt > 1687878272
|
|
255
|
+
? 1000 * precision
|
|
256
|
+
: 500 * precision;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// if inviter level is now higher than when invitee joined or the base level has changed
|
|
260
|
+
// we give level bounty if it is higher otherwise the original bounty at the time the user registered
|
|
261
|
+
|
|
262
|
+
bountyToPay = level.bounty > bountyToPay ? level.bounty : bountyToPay;
|
|
249
263
|
|
|
250
|
-
|
|
251
|
-
|
|
264
|
+
bool isLevelExpired = level.daysToComplete > 0 &&
|
|
265
|
+
joinedAt > users[invitedBy].levelStarted && //prevent overflow in subtraction
|
|
266
|
+
level.daysToComplete <
|
|
267
|
+
(joinedAt - users[invitedBy].levelStarted) / 1 days; //how long after level started did invitee join
|
|
252
268
|
|
|
253
|
-
|
|
269
|
+
users[invitedBy].totalApprovedInvites += 1;
|
|
270
|
+
users[invitedBy].totalEarned += bountyToPay;
|
|
254
271
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
272
|
+
if (
|
|
273
|
+
level.toNext > 0 &&
|
|
274
|
+
users[invitedBy].totalApprovedInvites >= level.toNext &&
|
|
275
|
+
isLevelExpired == false
|
|
276
|
+
) {
|
|
277
|
+
users[invitedBy].level += 1;
|
|
278
|
+
users[invitedBy].levelStarted = block.timestamp;
|
|
279
|
+
earnedLevel = true;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (isSingleBounty) goodDollar.transfer(invitedBy, bountyToPay);
|
|
283
|
+
}
|
|
259
284
|
|
|
260
285
|
users[_invitee].bountyPaid = true;
|
|
261
|
-
users[invitedBy].totalApprovedInvites += 1;
|
|
262
|
-
users[invitedBy].totalEarned += bountyToPay;
|
|
263
286
|
stats.totalApprovedInvites += 1;
|
|
264
287
|
stats.totalBountiesPaid += bountyToPay;
|
|
265
288
|
|
|
266
|
-
bool earnedLevel = false;
|
|
267
|
-
if (
|
|
268
|
-
level.toNext > 0 &&
|
|
269
|
-
users[invitedBy].totalApprovedInvites >= level.toNext &&
|
|
270
|
-
isLevelExpired == false
|
|
271
|
-
) {
|
|
272
|
-
users[invitedBy].level += 1;
|
|
273
|
-
users[invitedBy].levelStarted = block.timestamp;
|
|
274
|
-
earnedLevel = true;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
if (isSingleBounty) goodDollar.transfer(invitedBy, bountyToPay);
|
|
278
289
|
goodDollar.transfer(_invitee, bountyToPay / 2); //pay invitee half the bounty
|
|
279
290
|
emit InviterBounty(
|
|
280
291
|
invitedBy,
|
|
@@ -322,6 +333,11 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
322
333
|
active = _active;
|
|
323
334
|
}
|
|
324
335
|
|
|
336
|
+
function setCampaignCode(bytes32 _code) public ownerOrAvatar {
|
|
337
|
+
campaignCode = _code;
|
|
338
|
+
codeToUser[campaignCode] = address(this);
|
|
339
|
+
}
|
|
340
|
+
|
|
325
341
|
function end() public ownerOrAvatar isActive {
|
|
326
342
|
uint256 gdBalance = goodDollar.balanceOf(address(this));
|
|
327
343
|
goodDollar.transfer(msg.sender, gdBalance);
|
|
@@ -346,8 +362,9 @@ contract InvitesV2 is DAOUpgradeableContract {
|
|
|
346
362
|
* 2 uses uups upgradeable - not compatible upgrade for v1
|
|
347
363
|
* 2.1 prevent multichain claims
|
|
348
364
|
* 2.2 record bounty at join time
|
|
365
|
+
* 2.3 support campaignCode
|
|
349
366
|
*/
|
|
350
367
|
function version() public pure returns (string memory) {
|
|
351
|
-
return "2.
|
|
368
|
+
return "2.3";
|
|
352
369
|
}
|
|
353
370
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
5
|
+
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
6
|
+
|
|
7
|
+
import "../Interfaces.sol";
|
|
8
|
+
import "../utils/NameService.sol";
|
|
9
|
+
import "../utils/DAOUpgradeableContract.sol";
|
|
10
|
+
|
|
11
|
+
contract OneTimeReward is Ownable, DAOContract {
|
|
12
|
+
bool public isActive;
|
|
13
|
+
uint public rewardAmount;
|
|
14
|
+
mapping(address => bool) public claimed;
|
|
15
|
+
|
|
16
|
+
event RewardClaimed(address indexed user, uint amount);
|
|
17
|
+
|
|
18
|
+
constructor(uint256 _rewardAmount, INameService _nameService) {
|
|
19
|
+
rewardAmount = _rewardAmount;
|
|
20
|
+
isActive = true;
|
|
21
|
+
setDAO(_nameService);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getIdentity() public view returns (IIdentityV2) {
|
|
25
|
+
return IIdentityV2(nameService.getAddress("IDENTITY"));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function updateSettings(
|
|
29
|
+
bool _isActive,
|
|
30
|
+
uint _rewardAmount
|
|
31
|
+
) external onlyOwner {
|
|
32
|
+
isActive = _isActive;
|
|
33
|
+
rewardAmount = _rewardAmount;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function checkActiveAndBalance() public view returns (bool) {
|
|
37
|
+
if (!isActive) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (nativeToken().balanceOf(address(this)) < rewardAmount) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function checkCanClaimReward(address _user) public view returns (bool) {
|
|
49
|
+
address whitelistedRoot = getIdentity().getWhitelistedRoot(_user);
|
|
50
|
+
return canClaimReward(whitelistedRoot);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function canClaimReward(
|
|
54
|
+
address whitelistedRoot
|
|
55
|
+
) internal view returns (bool) {
|
|
56
|
+
if (checkActiveAndBalance() == false) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (whitelistedRoot == address(0)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (claimed[whitelistedRoot]) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function claimReward(address _user) public {
|
|
72
|
+
address whitelistedRoot = getIdentity().getWhitelistedRoot(_user);
|
|
73
|
+
require(canClaimReward(whitelistedRoot), "User cannot claim reward");
|
|
74
|
+
claimed[whitelistedRoot] = true;
|
|
75
|
+
|
|
76
|
+
nativeToken().transfer(_user, rewardAmount);
|
|
77
|
+
|
|
78
|
+
emit RewardClaimed(_user, rewardAmount);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function withdrawAll(address _token) external onlyOwner {
|
|
82
|
+
uint balance = IERC20(_token).balanceOf(address(this));
|
|
83
|
+
require(balance > 0, "No tokens to withdraw");
|
|
84
|
+
|
|
85
|
+
IERC20(_token).transfer(msg.sender, balance);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -44,7 +44,7 @@ contract DistributionHelper is
|
|
|
44
44
|
0x467719aD09025FcC6cF6F8311755809d45a5E5f3;
|
|
45
45
|
|
|
46
46
|
enum TransferType {
|
|
47
|
-
|
|
47
|
+
DEPRECATED_FuseBridge,
|
|
48
48
|
LayerZeroBridge,
|
|
49
49
|
AxelarBridge,
|
|
50
50
|
Contract
|
|
@@ -182,10 +182,11 @@ contract DistributionHelper is
|
|
|
182
182
|
if (toDistribute == 0) return;
|
|
183
183
|
|
|
184
184
|
if (address(this).balance < feeSettings.minBalanceForFees) {
|
|
185
|
-
uint256
|
|
185
|
+
uint256 gdToSellForFee = (toDistribute *
|
|
186
186
|
feeSettings.percentageToSellForFee) / 100;
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
gdToSellForFee = calcGDToSell(gdToSellForFee);
|
|
188
|
+
toDistribute -= gdToSellForFee;
|
|
189
|
+
buyNativeWithGD(gdToSellForFee);
|
|
189
190
|
}
|
|
190
191
|
|
|
191
192
|
uint256 totalDistributed;
|
|
@@ -234,12 +235,8 @@ contract DistributionHelper is
|
|
|
234
235
|
DistributionRecipient storage _recipient,
|
|
235
236
|
uint256 _amount
|
|
236
237
|
) internal {
|
|
237
|
-
if (_recipient.transferType == TransferType.
|
|
238
|
-
|
|
239
|
-
fuseBridge,
|
|
240
|
-
_amount,
|
|
241
|
-
abi.encodePacked(_recipient.addr)
|
|
242
|
-
);
|
|
238
|
+
if (_recipient.transferType == TransferType.DEPRECATED_FuseBridge) {
|
|
239
|
+
revert("DEPRECATED");
|
|
243
240
|
} else if (_recipient.transferType == TransferType.LayerZeroBridge) {
|
|
244
241
|
nativeToken().approve(address(mpbBridge), _amount);
|
|
245
242
|
(uint256 lzFee, ) = ILayerZeroFeeEstimator(address(mpbBridge))
|
|
@@ -276,6 +273,28 @@ contract DistributionHelper is
|
|
|
276
273
|
}
|
|
277
274
|
}
|
|
278
275
|
|
|
276
|
+
function calcGDToSell(
|
|
277
|
+
uint256 maxAmountToSell
|
|
278
|
+
) public view returns (uint256 gdToSell) {
|
|
279
|
+
uint24[] memory fees = new uint24[](1);
|
|
280
|
+
fees[0] = 500;
|
|
281
|
+
|
|
282
|
+
uint256 ethToBuy = feeSettings.minBalanceForFees * 3;
|
|
283
|
+
(uint256 ethValueInUSDC, ) = STATIC_ORACLE
|
|
284
|
+
.quoteSpecificFeeTiersWithTimePeriod(
|
|
285
|
+
uint128(ethToBuy),
|
|
286
|
+
WETH_TOKEN,
|
|
287
|
+
USDC_TOKEN,
|
|
288
|
+
fees,
|
|
289
|
+
60 //last 1 minute
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
uint256 gdPriceInDai = GoodReserveCDai(nameService.getAddress("RESERVE"))
|
|
293
|
+
.currentPriceDAI();
|
|
294
|
+
gdToSell = (ethValueInUSDC * 1e12 * 100) / gdPriceInDai; //* 1e12 to increase usdc to 18 decimals, mul by 100 so result is in 2 G$ 2 decimals
|
|
295
|
+
gdToSell = gdToSell > maxAmountToSell ? maxAmountToSell : gdToSell;
|
|
296
|
+
}
|
|
297
|
+
|
|
279
298
|
function buyNativeWithGD(uint256 amountToSell) internal {
|
|
280
299
|
address[] memory path = new address[](2);
|
|
281
300
|
path[0] = nameService.getAddress("DAI");
|
|
@@ -5,6 +5,8 @@ import "../utils/DAOUpgradeableContract.sol";
|
|
|
5
5
|
import "../utils/NameService.sol";
|
|
6
6
|
import "./GoodReserveCDai.sol";
|
|
7
7
|
|
|
8
|
+
// import "hardhat/console.sol";
|
|
9
|
+
|
|
8
10
|
contract ExchangeHelper is DAOUpgradeableContract {
|
|
9
11
|
uint256 private _status;
|
|
10
12
|
|
|
@@ -78,6 +80,14 @@ contract ExchangeHelper is DAOUpgradeableContract {
|
|
|
78
80
|
cDaiAddress = nameService.getAddress("CDAI");
|
|
79
81
|
// Approve transfer to cDAI contract
|
|
80
82
|
ERC20(daiAddress).approve(cDaiAddress, type(uint256).max);
|
|
83
|
+
address reserve = nameService.getAddress("RESERVE");
|
|
84
|
+
if (reserve != address(0)) {
|
|
85
|
+
ERC20(nameService.getAddress("GOODDOLLAR")).approve(
|
|
86
|
+
reserve,
|
|
87
|
+
type(uint256).max
|
|
88
|
+
);
|
|
89
|
+
ERC20(cDaiAddress).approve(reserve, type(uint256).max);
|
|
90
|
+
}
|
|
81
91
|
ERC20(daiAddress).approve(
|
|
82
92
|
nameService.getAddress("UNISWAP_ROUTER"),
|
|
83
93
|
type(uint256).max
|
|
@@ -121,11 +131,9 @@ contract ExchangeHelper is DAOUpgradeableContract {
|
|
|
121
131
|
require(
|
|
122
132
|
ERC20(_buyPath[0]).transferFrom(
|
|
123
133
|
msg.sender,
|
|
124
|
-
address(
|
|
125
|
-
? address(reserve)
|
|
126
|
-
: address(this),
|
|
134
|
+
address(this),
|
|
127
135
|
_tokenAmount
|
|
128
|
-
)
|
|
136
|
+
),
|
|
129
137
|
"transferFrom failed, make sure you approved input token transfer"
|
|
130
138
|
);
|
|
131
139
|
}
|
|
@@ -191,8 +199,9 @@ contract ExchangeHelper is DAOUpgradeableContract {
|
|
|
191
199
|
GoodReserveCDai reserve = GoodReserveCDai(
|
|
192
200
|
nameService.getAddress("RESERVE")
|
|
193
201
|
);
|
|
194
|
-
|
|
202
|
+
ERC20(nameService.getAddress("GOODDOLLAR")).transferFrom(
|
|
195
203
|
msg.sender,
|
|
204
|
+
address(this),
|
|
196
205
|
_gdAmount
|
|
197
206
|
);
|
|
198
207
|
|
|
@@ -290,7 +299,6 @@ contract ExchangeHelper is DAOUpgradeableContract {
|
|
|
290
299
|
require(cDaiResult == 0, "Minting cDai failed");
|
|
291
300
|
|
|
292
301
|
uint256 cDaiInput = cDai.balanceOf(address(this)) - currCDaiBalance;
|
|
293
|
-
cDai.transfer(address(reserve), cDaiInput);
|
|
294
302
|
return reserve.buy(cDaiInput, _minReturn, _targetAddress);
|
|
295
303
|
}
|
|
296
304
|
|
|
@@ -333,8 +341,9 @@ contract ExchangeHelper is DAOUpgradeableContract {
|
|
|
333
341
|
);
|
|
334
342
|
return swap;
|
|
335
343
|
} else {
|
|
336
|
-
if (isBuy)
|
|
344
|
+
if (isBuy) {
|
|
337
345
|
ERC20(_inputPath[0]).approve(address(uniswapContract), _tokenAmount);
|
|
346
|
+
}
|
|
338
347
|
swap = uniswapContract.swapExactTokensForTokens(
|
|
339
348
|
_tokenAmount,
|
|
340
349
|
isBuy ? _minDAIAmount : _minTokenReturn,
|
|
@@ -8,6 +8,8 @@ import "../DAOStackInterfaces.sol";
|
|
|
8
8
|
import "../Interfaces.sol";
|
|
9
9
|
import "../utils/DAOUpgradeableContract.sol";
|
|
10
10
|
|
|
11
|
+
// import "hardhat/console.sol";
|
|
12
|
+
|
|
11
13
|
/**
|
|
12
14
|
@title Dynamic reserve ratio market maker
|
|
13
15
|
*/
|
|
@@ -187,11 +189,10 @@ contract GoodMarketMaker is DAOUpgradeableContract, DSMath {
|
|
|
187
189
|
* @param _tokenAmount The amount of reserve token buying with
|
|
188
190
|
* @return Number of GD that should be given in exchange as calculated by the bonding curve
|
|
189
191
|
*/
|
|
190
|
-
function buyReturn(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
{
|
|
192
|
+
function buyReturn(
|
|
193
|
+
ERC20 _token,
|
|
194
|
+
uint256 _tokenAmount
|
|
195
|
+
) public view returns (uint256) {
|
|
195
196
|
ReserveToken memory rtoken = reserveTokens[address(_token)];
|
|
196
197
|
return
|
|
197
198
|
getBancor().calculatePurchaseReturn(
|
|
@@ -208,11 +209,10 @@ contract GoodMarketMaker is DAOUpgradeableContract, DSMath {
|
|
|
208
209
|
* @param _gdAmount The amount of GD that are sold
|
|
209
210
|
* @return Number of tokens that should be given in exchange as calculated by the bonding curve
|
|
210
211
|
*/
|
|
211
|
-
function sellReturn(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
{
|
|
212
|
+
function sellReturn(
|
|
213
|
+
ERC20 _token,
|
|
214
|
+
uint256 _gdAmount
|
|
215
|
+
) public view returns (uint256) {
|
|
216
216
|
ReserveToken memory rtoken = reserveTokens[address(_token)];
|
|
217
217
|
return
|
|
218
218
|
getBancor().calculateSaleReturn(
|
|
@@ -264,7 +264,8 @@ contract GoodMarketMaker is DAOUpgradeableContract, DSMath {
|
|
|
264
264
|
rtoken.gdSupply += _gdAmount;
|
|
265
265
|
rtoken.reserveRatio = uint32(
|
|
266
266
|
((rtoken.reserveSupply * 1e27) /
|
|
267
|
-
(rtoken.gdSupply * priceBeforeGdSupplyChange)) /
|
|
267
|
+
(rtoken.gdSupply * priceBeforeGdSupplyChange)) /
|
|
268
|
+
10 ** reserveDecimalsDiff
|
|
268
269
|
); // Divide it decimal diff to bring it proper decimal
|
|
269
270
|
}
|
|
270
271
|
|
|
@@ -317,55 +318,46 @@ contract GoodMarketMaker is DAOUpgradeableContract, DSMath {
|
|
|
317
318
|
* @param _token The desired reserve token to have
|
|
318
319
|
* @return price of GD
|
|
319
320
|
*/
|
|
320
|
-
function currentPrice(ERC20 _token) public view returns (uint256) {
|
|
321
|
+
function currentPrice(ERC20 _token) public view returns (uint256 price) {
|
|
321
322
|
ReserveToken memory rtoken = reserveTokens[address(_token)];
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
rtoken.reserveSupply,
|
|
326
|
-
rtoken.reserveRatio,
|
|
327
|
-
(10**decimals)
|
|
328
|
-
);
|
|
323
|
+
price =
|
|
324
|
+
(rtoken.reserveSupply * 1e8) /
|
|
325
|
+
(rtoken.gdSupply * rtoken.reserveRatio); // gd precision 1e2 + reserveRatio precision 1e6 = multiply by 1e8 not to lose precision
|
|
329
326
|
}
|
|
330
327
|
|
|
331
|
-
//TODO: need real calculation and tests
|
|
332
328
|
/**
|
|
333
329
|
* @dev Calculates how much G$ to mint based on added token supply (from interest)
|
|
334
330
|
* and on current reserve ratio, in order to keep G$ price the same at the bonding curve
|
|
335
|
-
* formula to calculate the gd to mint:
|
|
336
|
-
* addreservebalance * (gdsupply / (reservebalance * reserveratio))
|
|
331
|
+
* formula to calculate the gd to mint: amountToMint = reserveInterest * tokenSupply / reserveBalance
|
|
337
332
|
* @param _token the reserve token
|
|
338
333
|
* @param _addTokenSupply amount of token added to supply
|
|
339
|
-
* @return how much to mint in order to keep price in bonding curve the same
|
|
334
|
+
* @return toMint how much to mint in order to keep price in bonding curve the same
|
|
340
335
|
*/
|
|
341
|
-
function calculateMintInterest(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
//we divide by decimalsdiff to get precision in GD (2 decimals)
|
|
349
|
-
return
|
|
350
|
-
((_addTokenSupply * 1e27) / currentPrice(_token)) / (10**decimalsDiff);
|
|
336
|
+
function calculateMintInterest(
|
|
337
|
+
ERC20 _token,
|
|
338
|
+
uint256 _addTokenSupply
|
|
339
|
+
) public view returns (uint256 toMint) {
|
|
340
|
+
ReserveToken memory rtoken = reserveTokens[address(_token)];
|
|
341
|
+
|
|
342
|
+
toMint = (_addTokenSupply * rtoken.gdSupply) / rtoken.reserveSupply;
|
|
351
343
|
}
|
|
352
344
|
|
|
353
345
|
/**
|
|
354
346
|
* @dev Updates bonding curve based on _addTokenSupply and new minted amount
|
|
355
347
|
* @param _token The reserve token
|
|
356
348
|
* @param _addTokenSupply Amount of token added to supply
|
|
357
|
-
* @return How much to mint in order to keep price in bonding curve the same
|
|
349
|
+
* @return toMint How much to mint in order to keep price in bonding curve the same
|
|
358
350
|
*/
|
|
359
|
-
function mintInterest(
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
{
|
|
351
|
+
function mintInterest(
|
|
352
|
+
ERC20 _token,
|
|
353
|
+
uint256 _addTokenSupply
|
|
354
|
+
) public returns (uint256 toMint) {
|
|
363
355
|
_onlyReserveOrAvatar();
|
|
364
356
|
_onlyActiveToken(_token);
|
|
365
357
|
if (_addTokenSupply == 0) {
|
|
366
358
|
return 0;
|
|
367
359
|
}
|
|
368
|
-
|
|
360
|
+
toMint = calculateMintInterest(_token, _addTokenSupply);
|
|
369
361
|
ReserveToken storage reserveToken = reserveTokens[address(_token)];
|
|
370
362
|
reserveToken.gdSupply += toMint;
|
|
371
363
|
reserveToken.reserveSupply += _addTokenSupply;
|
|
@@ -376,24 +368,22 @@ contract GoodMarketMaker is DAOUpgradeableContract, DSMath {
|
|
|
376
368
|
/**
|
|
377
369
|
* @dev Calculate how much G$ to mint based on expansion change (new reserve
|
|
378
370
|
* ratio), in order to keep G$ price the same at the bonding curve. the
|
|
379
|
-
* formula to calculate the gd to mint:
|
|
380
|
-
*
|
|
371
|
+
* formula to calculate the gd to mint:
|
|
372
|
+
* amountToMint = (tokenSupply * reserveRatio - tokenSupply * newRatio) / newRatio
|
|
381
373
|
* @param _token The reserve token
|
|
382
|
-
* @return How much to mint in order to keep price in bonding curve the same
|
|
374
|
+
* @return toMint How much to mint in order to keep price in bonding curve the same
|
|
383
375
|
*/
|
|
384
|
-
function calculateMintExpansion(
|
|
376
|
+
function calculateMintExpansion(
|
|
377
|
+
ERC20 _token
|
|
378
|
+
) public view returns (uint256 toMint) {
|
|
385
379
|
ReserveToken memory reserveToken = reserveTokens[address(_token)];
|
|
386
380
|
uint32 newReserveRatio = calculateNewReserveRatio(_token); // new reserve ratio
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
uint256 toMint = ((reserveToken.reserveSupply *
|
|
394
|
-
(10**reserveDecimalsDiff) *
|
|
395
|
-
1e27) / denom) / (10**gdDecimalsDiff); // reservebalance in RAY precision // return to gd precision
|
|
396
|
-
return toMint - reserveToken.gdSupply;
|
|
381
|
+
toMint =
|
|
382
|
+
(reserveToken.gdSupply *
|
|
383
|
+
reserveToken.reserveRatio -
|
|
384
|
+
reserveToken.gdSupply *
|
|
385
|
+
newReserveRatio) /
|
|
386
|
+
newReserveRatio;
|
|
397
387
|
}
|
|
398
388
|
|
|
399
389
|
/**
|