@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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { uniq } from "lodash";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { network, ethers } from "hardhat";
|
|
4
|
+
import { Contract, Provider, setMulticallAddress } from "ethers-multicall";
|
|
5
|
+
import release from "../../releases/deployment.json"
|
|
6
|
+
import { SimpleStakingV2 } from "../../types";
|
|
7
|
+
|
|
8
|
+
setMulticallAddress(122, "0x3CE6158b7278Bf6792e014FA7B4f3c6c46fe9410");
|
|
9
|
+
|
|
10
|
+
setMulticallAddress(42220, "0x188C1bf697B66474dC3eaa119Ae691a8352537e3");
|
|
11
|
+
|
|
12
|
+
const main = async () => {
|
|
13
|
+
|
|
14
|
+
const c1 = await ethers.getContractAt("SimpleStakingV2", release["production-mainnet"].StakingContractsV3[0][0]) as SimpleStakingV2
|
|
15
|
+
const c2 = await ethers.getContractAt("SimpleStakingV2", release["production-mainnet"].StakingContractsV3[1][0]) as SimpleStakingV2
|
|
16
|
+
const f = c1.filters.Staked()
|
|
17
|
+
const events = await c1.queryFilter(f, 14338550)
|
|
18
|
+
const events2 = await c2.queryFilter(f, 14338550)
|
|
19
|
+
const stakers = uniq(events.concat(events2).map(_ => _.args[0]))
|
|
20
|
+
console.log(stakers)
|
|
21
|
+
const res = (await Promise.all(stakers.map(async s => [s, await c1.balanceOf(s), await c2.balanceOf(s)]))).filter(_ => _[1].gt(0) || _[2].gt(0))
|
|
22
|
+
console.log(events.length)
|
|
23
|
+
console.log(res)
|
|
24
|
+
}
|
|
25
|
+
main()
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { range, chunk, uniq } from "lodash";
|
|
2
|
-
import { ethers as Ethers } from "hardhat";
|
|
1
|
+
import { range, chunk, uniq, mapValues, groupBy } from "lodash";
|
|
2
|
+
import { ethers, ethers as Ethers } from "hardhat";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import { bulkGetLastAuth } from "../utils";
|
|
3
5
|
|
|
4
6
|
const ONE_DAY = 24 * 60 * 60;
|
|
5
7
|
const ONE_HOUR = 60 * 60;
|
|
@@ -19,28 +21,27 @@ const main = async () => {
|
|
|
19
21
|
for (let day of daysAgo) {
|
|
20
22
|
const query = `
|
|
21
23
|
{
|
|
22
|
-
walletStats(first:1000, where: { lastClaimed_lte: ${curDay},lastClaimed_gt: ${
|
|
23
|
-
|
|
24
|
-
} isActiveUser: true }) {
|
|
24
|
+
walletStats(first:1000, where: { lastClaimed_lte: ${curDay},lastClaimed_gt: ${curDay - ONE_DAY
|
|
25
|
+
} isActiveUser: true }) {
|
|
25
26
|
id
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
`;
|
|
29
30
|
|
|
30
31
|
console.log("fetching inactive users since:", { curDay, day }, JSON.stringify({ query }));
|
|
31
|
-
const {
|
|
32
|
-
data: { walletStats }
|
|
33
|
-
} = await fetch("https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse", {
|
|
32
|
+
const result = await fetch("https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse", {
|
|
34
33
|
method: "post",
|
|
35
34
|
body: JSON.stringify({ query }),
|
|
36
35
|
headers: { "Content-Type": "application/json" }
|
|
37
36
|
}).then(_ => _.json());
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
|
|
39
|
+
console.log("got inactive wallets:", result);
|
|
40
|
+
// if (walletStats) {
|
|
41
|
+
// const accounts = walletStats.map(_ => _.id);
|
|
42
|
+
// allActive.push(...accounts);
|
|
43
|
+
// }
|
|
44
|
+
|
|
44
45
|
// for (let tofish of chunk(accounts, 50)) {
|
|
45
46
|
// const tx = await ubiScheme.fishMulti(tofish, { gasLimit: 2000000 });
|
|
46
47
|
// console.log("fishing tx:", tx, tofish);
|
|
@@ -54,32 +55,83 @@ const main = async () => {
|
|
|
54
55
|
console.log("active claimers:", unique.length);
|
|
55
56
|
};
|
|
56
57
|
|
|
58
|
+
const countClaimersUsingExplorer = async () => {
|
|
59
|
+
let claimers = [] //JSON.parse(fs.readFileSync("claimers.json").toString())
|
|
60
|
+
const curBlock = await ethers.provider.getBlockNumber()
|
|
61
|
+
const DAYS = 1
|
|
62
|
+
let fromBlock = curBlock - 60 * 60 * 24 * DAYS / 5 //roughly DAYS of blocks
|
|
63
|
+
const querySize = 90// 15 min of blocks
|
|
64
|
+
const blockRanges = range(fromBlock, curBlock, querySize)
|
|
65
|
+
const chunks = chunk(blockRanges, 10)
|
|
66
|
+
for (let idx in chunks) {
|
|
67
|
+
const toFetch = chunks[idx]
|
|
68
|
+
const ps = toFetch.map(async fromBlock => {
|
|
69
|
+
let toBlock = fromBlock + querySize
|
|
70
|
+
toBlock = toBlock > curBlock ? curBlock : toBlock
|
|
71
|
+
const result = await fetch(`https://explorer.celo.org/mainnet/api?module=logs&action=getLogs&fromBlock=${fromBlock}&toBlock=${toBlock}&address=0x43d72ff17701b2da814620735c39c620ce0ea4a1&topic0=0x89ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304`).then(_ => _.json())
|
|
72
|
+
fromBlock = toBlock
|
|
73
|
+
const addrs = result.result.map(_ => ethers.utils.defaultAbiCoder.decode(["address"], _.topics[1])[0])
|
|
74
|
+
claimers.push(...addrs);
|
|
75
|
+
console.log("claimers:", addrs.length, "block range:", { fromBlock, toBlock }, addrs[0])
|
|
76
|
+
})
|
|
77
|
+
await Promise.all(ps)
|
|
78
|
+
console.log(`${idx} out of ${chunks.length}`)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
claimers = uniq(claimers)
|
|
82
|
+
fs.writeFileSync("claimers.json", JSON.stringify(claimers))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const countLastWhitelisted = async () => {
|
|
86
|
+
const claimers = JSON.parse(fs.readFileSync("claimers.json").toString())
|
|
87
|
+
const DAY = 60 * 60 * 24
|
|
88
|
+
let total = 0
|
|
89
|
+
let howOld = []
|
|
90
|
+
console.log("unique claimers:", claimers.length)
|
|
91
|
+
for (let bulk of chunk(claimers, 1000)) {
|
|
92
|
+
const results = await bulkGetLastAuth(bulk)
|
|
93
|
+
const older = results.filter(_ => _.toNumber() < Date.now() / 1000 - DAY * 180).length
|
|
94
|
+
bulk.forEach((_, i) => howOld.push([_, Math.ceil((Date.now() / 1000 - DAY * 180 - results[i].toNumber()) / (30 * DAY)).toFixed(0)]))
|
|
95
|
+
console.log(older, "out of", results.length)
|
|
96
|
+
total += older
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
howOld = howOld.filter(_ => Number(_[1]) > 0)
|
|
100
|
+
console.log({ total })
|
|
101
|
+
howOld = mapValues(groupBy(howOld, _ => _[1]), _ => _.length)
|
|
102
|
+
console.log(howOld)
|
|
103
|
+
}
|
|
104
|
+
|
|
57
105
|
const countActive = async () => {
|
|
58
|
-
const twoWeeksAgo = parseInt((Date.now() / 1000).toFixed(0)); //
|
|
59
106
|
|
|
60
|
-
const hoursAgo: number[] = range(0, 24 *
|
|
61
|
-
let curDay =
|
|
107
|
+
const hoursAgo: number[] = range(0, 24 * 30, 1);
|
|
108
|
+
let curDay = parseInt((Date.now() / 1000).toFixed(0));
|
|
62
109
|
const allActive = [];
|
|
63
110
|
for (let hour of hoursAgo) {
|
|
64
111
|
const query = `
|
|
65
112
|
{
|
|
66
|
-
walletStats(first:1000, where: { lastClaimed_lte: ${curDay},lastClaimed_gt: ${
|
|
67
|
-
|
|
68
|
-
} isActiveUser: true }) {
|
|
113
|
+
walletStats(first:1000, where: { lastClaimed_lte: ${curDay},lastClaimed_gt: ${curDay - ONE_HOUR
|
|
114
|
+
} isActiveUser: true }) {
|
|
69
115
|
id
|
|
70
116
|
}
|
|
71
117
|
}
|
|
72
118
|
`;
|
|
73
119
|
|
|
74
120
|
console.log("fetching active users since:", { curDay, hour }, JSON.stringify({ query }));
|
|
121
|
+
const result =
|
|
122
|
+
|
|
123
|
+
await fetch("https://gateway-arbitrum.network.thegraph.com/api/3c409250a317ce7b0c6a7a8b9a409ef8/subgraphs/id/F7314rxGdcpKPC1nN5KCoFW84EGRoUyzseY2sAT9PEkw", {
|
|
124
|
+
// await fetch("https://gateway.thegraph.com/api/3c409250a317ce7b0c6a7a8b9a409ef8/subgraphs/id/5cAhhzm7LSqGiFibV1odbbgZWiRmZsYjYrmaoj87UxFd", {
|
|
125
|
+
method: "post",
|
|
126
|
+
body: JSON.stringify({ query }),
|
|
127
|
+
headers: { "Content-Type": "application/json", "origin": "https://wallet.gooddollar.org" }
|
|
128
|
+
|
|
129
|
+
}).then(_ => _.json());
|
|
130
|
+
|
|
131
|
+
console.log(result)
|
|
75
132
|
const {
|
|
76
133
|
data: { walletStats }
|
|
77
|
-
} =
|
|
78
|
-
method: "post",
|
|
79
|
-
body: JSON.stringify({ query }),
|
|
80
|
-
headers: { "Content-Type": "application/json" }
|
|
81
|
-
}).then(_ => _.json());
|
|
82
|
-
|
|
134
|
+
} = result
|
|
83
135
|
console.log("got active wallets:", walletStats.length);
|
|
84
136
|
if (walletStats) {
|
|
85
137
|
const accounts = walletStats.map(_ => _.id);
|
|
@@ -99,4 +151,6 @@ const countActive = async () => {
|
|
|
99
151
|
};
|
|
100
152
|
|
|
101
153
|
//main();
|
|
102
|
-
countActive();
|
|
154
|
+
// countActive();
|
|
155
|
+
// countClaimersUsingExplorer()
|
|
156
|
+
countLastWhitelisted()
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { maxBy, range, sortBy } from "lodash";
|
|
1
|
+
import { maxBy, range, sortBy, flatten } from "lodash";
|
|
2
2
|
import PromisePool from "async-promise-pool";
|
|
3
3
|
import fs from "fs";
|
|
4
4
|
import { ethers } from "hardhat";
|
|
5
5
|
|
|
6
|
+
const today = new Date().toLocaleDateString().replace(/\//g, "");
|
|
7
|
+
console.log({ today });
|
|
6
8
|
/****
|
|
7
9
|
* Fetch token holders and their last activity date
|
|
8
10
|
* can be used to create stats about active users and how much G$ isnt active
|
|
@@ -12,14 +14,18 @@ const main = async (chain = "fuse") => {
|
|
|
12
14
|
let balances = {};
|
|
13
15
|
let curPage = 1;
|
|
14
16
|
let maxResult;
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
+
const fuseExplorer = "https://explorer.fuse.io/api";
|
|
18
|
+
const celoExplorer = "https://explorer.celo.org/mainnet/api";
|
|
19
|
+
const fuseSubgraph =
|
|
20
|
+
"https://gateway.thegraph.com/api/9048669a7632776aae01a191c4939445/subgraphs/id/5cAhhzm7LSqGiFibV1odbbgZWiRmZsYjYrmaoj87UxFd";
|
|
21
|
+
const celoSubgraph =
|
|
22
|
+
"https://gateway.thegraph.com/api/9048669a7632776aae01a191c4939445/subgraphs/id/F7314rxGdcpKPC1nN5KCoFW84EGRoUyzseY2sAT9PEkw";
|
|
17
23
|
do {
|
|
18
24
|
const pages = range(curPage, curPage + 5, 1);
|
|
19
25
|
curPage += 5;
|
|
20
26
|
const ps = pages.map(p =>
|
|
21
27
|
fetch(
|
|
22
|
-
|
|
28
|
+
`${fuseExplorer}?module=token&action=getTokenHolders&contractaddress=0x495d133B938596C9984d462F007B676bDc57eCEC&page=${p}&offset=10000`
|
|
23
29
|
)
|
|
24
30
|
.then(_ => _.json())
|
|
25
31
|
.then(_ => _.result)
|
|
@@ -29,17 +35,54 @@ const main = async (chain = "fuse") => {
|
|
|
29
35
|
maxResult = maxBy(results, "length");
|
|
30
36
|
console.log(maxResult.length, result.length);
|
|
31
37
|
} while (maxResult.length === 10000);
|
|
32
|
-
result.forEach(
|
|
33
|
-
|
|
38
|
+
result.forEach(
|
|
39
|
+
r =>
|
|
40
|
+
(balances[r.address.toLowerCase()] = {
|
|
41
|
+
balance: Number(r.value) / 100,
|
|
42
|
+
fuseBalance: Number(r.value) / 100,
|
|
43
|
+
lastSeen: 0
|
|
44
|
+
})
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
console.log("fetching celo balances....");
|
|
48
|
+
curPage = 1;
|
|
49
|
+
result = [];
|
|
50
|
+
do {
|
|
51
|
+
const pages = range(curPage, curPage + 3, 1);
|
|
52
|
+
curPage += 3;
|
|
53
|
+
const ps = pages.map(p =>
|
|
54
|
+
fetch(
|
|
55
|
+
`${celoExplorer}?module=token&action=getTokenHolders&contractaddress=0x62B8B11039FcfE5aB0C56E502b1C372A3d2a9c7A&page=${p}&offset=10000`
|
|
56
|
+
)
|
|
57
|
+
.then(_ => _.json())
|
|
58
|
+
.then(_ => _.result)
|
|
59
|
+
);
|
|
60
|
+
const results = await Promise.all(ps);
|
|
61
|
+
result = result.concat(...results);
|
|
62
|
+
maxResult = maxBy(results, "length");
|
|
63
|
+
console.log(maxResult.length, result.length);
|
|
64
|
+
} while (maxResult.length === 10000);
|
|
65
|
+
|
|
66
|
+
result.forEach(
|
|
67
|
+
r =>
|
|
68
|
+
(balances[r.address.toLowerCase()] = {
|
|
69
|
+
...balances[r.address.toLowerCase()],
|
|
70
|
+
celoBalance: Number(r.value) / 1e18,
|
|
71
|
+
balance: Number(balances[r.address.toLowerCase()]?.fuseBalance || 0) + Number(r.value) / 1e18,
|
|
72
|
+
lastSeen: 0
|
|
73
|
+
})
|
|
74
|
+
);
|
|
34
75
|
|
|
35
|
-
|
|
76
|
+
fs.writeFileSync(`activeWalletsBalances-${today}.json`, JSON.stringify(balances));
|
|
77
|
+
|
|
78
|
+
balances = JSON.parse(fs.readFileSync(`activeWalletsBalances-${today}.json`).toString());
|
|
36
79
|
|
|
37
80
|
const EPOCH = 60 * 60 * 6;
|
|
38
|
-
const pool = new PromisePool({ concurrency:
|
|
81
|
+
const pool = new PromisePool({ concurrency: 10 });
|
|
39
82
|
const lastUsed = {};
|
|
40
83
|
const epochs = range(1596045730, (Date.now() / 1000).toFixed(0), EPOCH);
|
|
41
84
|
|
|
42
|
-
const graphQuery = async (start, skip) => {
|
|
85
|
+
const graphQuery = async (start, skip, subgraph, retry = 3) => {
|
|
43
86
|
const query = `{
|
|
44
87
|
walletStats(first: 1000 skip:${skip} where: { dateAppeared_gte: ${start} dateAppeared_lt:${start + EPOCH} }) {
|
|
45
88
|
id
|
|
@@ -52,7 +95,7 @@ const main = async (chain = "fuse") => {
|
|
|
52
95
|
}`;
|
|
53
96
|
// console.log({ query });
|
|
54
97
|
try {
|
|
55
|
-
const { data = {}, errors } = await fetch(
|
|
98
|
+
const { data = {}, errors } = await fetch(subgraph, {
|
|
56
99
|
method: "POST",
|
|
57
100
|
headers: {
|
|
58
101
|
"Content-Type": "application/json"
|
|
@@ -60,27 +103,36 @@ const main = async (chain = "fuse") => {
|
|
|
60
103
|
body: JSON.stringify({ query })
|
|
61
104
|
}).then(_ => _.json());
|
|
62
105
|
errors && console.log({ errors });
|
|
106
|
+
if (errors) {
|
|
107
|
+
console.log("query failed:", { subgraph, start, skip, retrying: retry > 0 });
|
|
108
|
+
if (retry > 0) {
|
|
109
|
+
return graphQuery(start, skip, subgraph, retry - 1);
|
|
110
|
+
}
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
// console.log("query ok:", { subgraph, start, skip, records: data.walletStats.length })
|
|
63
114
|
if (data?.walletStats?.length === 1000) {
|
|
64
|
-
return data.walletStats.concat(await graphQuery(start, skip + 1000));
|
|
115
|
+
return data.walletStats.concat(await graphQuery(start, skip + 1000, subgraph));
|
|
65
116
|
}
|
|
66
117
|
return data.walletStats || [];
|
|
67
118
|
} catch (error) {
|
|
68
|
-
console.log({ query, error });
|
|
119
|
+
console.log({ query, error, subgraph });
|
|
69
120
|
return [];
|
|
70
121
|
}
|
|
71
122
|
};
|
|
72
123
|
epochs.forEach(e => {
|
|
73
124
|
pool.add(async () => {
|
|
74
|
-
const walletStats = await graphQuery(e, 0);
|
|
125
|
+
const walletStats = flatten(await Promise.all([graphQuery(e, 0, fuseSubgraph), graphQuery(e, 0, celoSubgraph)]));
|
|
75
126
|
walletStats.forEach(w => {
|
|
76
127
|
balances[w.id.toLowerCase()] = {
|
|
128
|
+
...balances[w.id.toLowerCase()],
|
|
77
129
|
lastSeen: Math.max(
|
|
130
|
+
balances[w.id.toLowerCase()]?.lastSeen,
|
|
78
131
|
Number(w.lastClaimed),
|
|
79
132
|
Number(w.lastTransactionFrom),
|
|
80
133
|
Number(w.lastTransactionTo),
|
|
81
134
|
Number(w.dateAppeared)
|
|
82
|
-
)
|
|
83
|
-
balance: balances[w.id.toLowerCase()]?.balance || w.balance
|
|
135
|
+
)
|
|
84
136
|
};
|
|
85
137
|
});
|
|
86
138
|
console.log({ curDate: e, records: walletStats.length });
|
|
@@ -88,10 +140,47 @@ const main = async (chain = "fuse") => {
|
|
|
88
140
|
});
|
|
89
141
|
|
|
90
142
|
await pool.all();
|
|
91
|
-
fs.writeFileSync(
|
|
143
|
+
fs.writeFileSync(`activeWalletsLastUsed-${today}.json`, JSON.stringify(balances));
|
|
92
144
|
// console.log({ lastUsed });
|
|
93
145
|
};
|
|
94
146
|
|
|
147
|
+
/** Convert a 2D array into a CSV string
|
|
148
|
+
*/
|
|
149
|
+
function arrayToCsv(data) {
|
|
150
|
+
return data
|
|
151
|
+
.map(
|
|
152
|
+
row =>
|
|
153
|
+
row
|
|
154
|
+
.map(String) // convert every value to String
|
|
155
|
+
.map(v => v.replaceAll('"', '""')) // escape double colons
|
|
156
|
+
.map(v => `"${v}"`) // quote it
|
|
157
|
+
.join(",") // comma-separated
|
|
158
|
+
)
|
|
159
|
+
.join("\r\n"); // rows starting on new lines
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const fix = async () => {
|
|
163
|
+
const balances = JSON.parse(fs.readFileSync(`activeWalletsLastUsed-${today}.json`).toString());
|
|
164
|
+
|
|
165
|
+
let result = [];
|
|
166
|
+
|
|
167
|
+
let missing = 0;
|
|
168
|
+
for (let addr in balances) {
|
|
169
|
+
const r = balances[addr];
|
|
170
|
+
if (!r.fuseBalance && !r.celoBalance) {
|
|
171
|
+
console.log("missing:", addr);
|
|
172
|
+
missing += 1;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
r.celoBalance = (r.celoBalance || 0) * 100;
|
|
176
|
+
r.balance = r.celoBalance + r.fuseBalance;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
console.log("missing balance", missing);
|
|
180
|
+
console.log(sortBy(Object.entries(balances), _ => -_.balance).slice(0, 10));
|
|
181
|
+
|
|
182
|
+
fs.writeFileSync(`activeWalletsLastUsed-${today}.json`, JSON.stringify(balances));
|
|
183
|
+
};
|
|
95
184
|
const etl = async () => {
|
|
96
185
|
/** Convert a 2D array into a CSV string
|
|
97
186
|
*/
|
|
@@ -108,7 +197,7 @@ const etl = async () => {
|
|
|
108
197
|
.join("\r\n"); // rows starting on new lines
|
|
109
198
|
}
|
|
110
199
|
|
|
111
|
-
const balances = JSON.parse(fs.readFileSync(
|
|
200
|
+
const balances = JSON.parse(fs.readFileSync(`activeWalletsLastUsed-${today}.json`).toString());
|
|
112
201
|
|
|
113
202
|
let result = [];
|
|
114
203
|
|
|
@@ -117,22 +206,64 @@ const etl = async () => {
|
|
|
117
206
|
if (!r.balance) {
|
|
118
207
|
continue;
|
|
119
208
|
}
|
|
120
|
-
result.push([addr, r.balance
|
|
209
|
+
result.push([addr, r.balance, r.lastSeen, false, r.fuseBalance, r.celoBalance]);
|
|
121
210
|
}
|
|
211
|
+
result = sortBy(result, _ => -_[1]);
|
|
122
212
|
const top100 = result.slice(0, 100);
|
|
123
213
|
const pool = new PromisePool({ concurrency: 30 });
|
|
124
214
|
const provider = new ethers.providers.JsonRpcBatchProvider("https://rpc.fuse.io");
|
|
215
|
+
const celoprovider = new ethers.providers.JsonRpcBatchProvider("https://forno.celo.org");
|
|
125
216
|
|
|
126
217
|
for (let idx in top100) {
|
|
127
218
|
pool.add(async () => {
|
|
128
219
|
const record = top100[idx];
|
|
129
|
-
let isContract =
|
|
220
|
+
let isContract =
|
|
221
|
+
(
|
|
222
|
+
await Promise.all([
|
|
223
|
+
provider.getCode(record[0]).catch(e => "0x"),
|
|
224
|
+
celoprovider.getCode(record[0]).catch(e => "0x")
|
|
225
|
+
])
|
|
226
|
+
).find(_ => _ !== "0x") !== undefined;
|
|
130
227
|
record[3] = isContract;
|
|
131
228
|
});
|
|
132
229
|
}
|
|
133
230
|
await pool.all();
|
|
134
231
|
console.log({ top100 });
|
|
135
|
-
fs.writeFileSync(
|
|
232
|
+
fs.writeFileSync(`activeWalletsLastUsed-${today}.csv`, arrayToCsv(result));
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const getFuseBalances = async (refetch = true) => {
|
|
236
|
+
if (refetch === false) {
|
|
237
|
+
const balances = JSON.parse(fs.readFileSync("activeWalletsBalances.json").toString());
|
|
238
|
+
const rows = Object.entries(balances).filter(_ => Number(_[1].balance) > 10000000);
|
|
239
|
+
const sorted = sortBy(rows, _ => -Number(_[1].balance));
|
|
240
|
+
sorted.forEach(_ => (_[1].balance = Number(_[1].balance) / 100));
|
|
241
|
+
console.log(arrayToCsv(sorted.slice(0, 20).map(_ => [_[0], _[1].balance])));
|
|
242
|
+
return balances;
|
|
243
|
+
}
|
|
244
|
+
let result = [];
|
|
245
|
+
let balances = {};
|
|
246
|
+
let curPage = 1;
|
|
247
|
+
let maxResult;
|
|
248
|
+
|
|
249
|
+
do {
|
|
250
|
+
const pages = range(curPage, curPage + 5, 1);
|
|
251
|
+
curPage += 5;
|
|
252
|
+
const ps = pages.map(p =>
|
|
253
|
+
fetch(
|
|
254
|
+
`https://explorer.fuse.io/api?module=token&action=getTokenHolders&contractaddress=0x495d133B938596C9984d462F007B676bDc57eCEC&page=${p}&offset=10000`
|
|
255
|
+
)
|
|
256
|
+
.then(_ => _.json())
|
|
257
|
+
.then(_ => _.result)
|
|
258
|
+
);
|
|
259
|
+
const results = await Promise.all(ps);
|
|
260
|
+
result = result.concat(...results);
|
|
261
|
+
maxResult = maxBy(results, "length");
|
|
262
|
+
console.log(maxResult.length, result.length);
|
|
263
|
+
} while (maxResult.length === 10000);
|
|
264
|
+
result.forEach(r => (balances[r.address.toLowerCase()] = { balance: r.value, lastSeen: 0 }));
|
|
265
|
+
fs.writeFileSync("activeWalletsBalances.json", JSON.stringify(balances));
|
|
266
|
+
return balances;
|
|
136
267
|
};
|
|
137
268
|
|
|
138
269
|
const fundsByLastSeen = async () => {
|
|
@@ -163,6 +294,8 @@ const fundsByLastSeen = async () => {
|
|
|
163
294
|
|
|
164
295
|
console.log({ total, total1Year, total2Year });
|
|
165
296
|
};
|
|
297
|
+
getFuseBalances(false).catch(e => console.log(e));
|
|
166
298
|
// main().catch(e => console.log(e));
|
|
167
|
-
//
|
|
168
|
-
|
|
299
|
+
// fix();
|
|
300
|
+
etl();
|
|
301
|
+
// fundsByLastSeen();
|