@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.
Files changed (441) hide show
  1. package/artifacts/abis/BulkWhitelist.min.json +1 -0
  2. package/artifacts/abis/CompoundVotingMachine.min.json +1 -1
  3. package/artifacts/abis/DistributionHelper.min.json +1 -1
  4. package/artifacts/abis/DistributionHelperTest.min.json +1 -1
  5. package/artifacts/abis/DistributionHelperTestHelper.min.json +1 -1
  6. package/artifacts/abis/EternalStorage.min.json +1 -0
  7. package/artifacts/abis/FuseOldBridgeKill.min.json +1 -0
  8. package/artifacts/abis/FuseStakingV3.min.json +1 -1
  9. package/artifacts/abis/GoodFundManager.min.json +1 -1
  10. package/artifacts/abis/GoodFundManagerTest.min.json +1 -1
  11. package/artifacts/abis/GoodMarketMaker.min.json +1 -1
  12. package/artifacts/abis/GoodReserveCDai.min.json +1 -1
  13. package/artifacts/abis/IQuoterV2.min.json +1 -1
  14. package/artifacts/abis/ISwapRouter.min.json +1 -1
  15. package/artifacts/abis/IUpgradeabilityOwnerStorage.min.json +1 -0
  16. package/artifacts/abis/Initializable.min.json +1 -0
  17. package/artifacts/abis/InvitesV2.min.json +1 -1
  18. package/artifacts/abis/LastauthReduction.min.json +1 -0
  19. package/artifacts/abis/OneTimeReward.min.json +1 -0
  20. package/artifacts/abis/Ownable.min.json +1 -0
  21. package/artifacts/abis/ReserveRestore.min.json +1 -0
  22. package/artifacts/abis/Upgradeable.min.json +1 -0
  23. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  24. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  25. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  26. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  27. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  28. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  34. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  35. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  36. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  37. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  38. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  39. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  40. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
  43. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  44. package/artifacts/contracts/Interfaces.sol/IQuoterV2.dbg.json +4 -0
  45. package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.json +1 -1
  46. package/artifacts/contracts/Interfaces.sol/ISwapRouter.dbg.json +4 -0
  47. package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.json +1 -1
  48. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  49. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  50. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  51. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  52. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  53. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  54. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  55. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  56. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
  57. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +2 -2
  58. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  59. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +2 -2
  60. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
  61. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +2 -2
  62. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  63. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  64. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  65. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +20 -2
  66. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  67. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
  68. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
  69. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.json +2 -2
  70. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
  71. package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
  72. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
  73. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  74. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
  75. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  76. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  77. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
  78. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  79. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  80. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
  81. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  82. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
  83. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.json +2 -2
  84. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  85. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
  86. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
  87. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.json +15 -2
  88. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.dbg.json +4 -0
  89. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.json +291 -0
  90. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  91. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
  92. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
  93. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
  94. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  95. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
  96. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  97. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
  98. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.json +2 -2
  99. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
  100. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.json +21 -2
  101. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
  102. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +21 -2
  103. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
  104. package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
  105. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
  106. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  107. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  108. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
  109. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +2 -2
  110. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  111. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +21 -2
  112. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
  113. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.json +2 -2
  114. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  115. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  116. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
  117. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
  118. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.json +2 -2
  119. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
  120. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  121. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +2 -2
  122. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  123. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  124. package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
  125. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  126. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
  127. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  128. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
  129. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  130. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  131. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
  132. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  133. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
  134. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  135. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
  136. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  137. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
  138. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  139. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  140. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  141. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  142. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  143. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  144. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  145. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  146. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
  147. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +21 -2
  148. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  149. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  150. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  151. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +6 -6
  152. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  153. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  154. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +3 -3
  155. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  156. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
  157. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  158. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
  159. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  160. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  161. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  162. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +7 -2
  163. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  164. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  165. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  166. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +21 -2
  167. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  168. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  169. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  170. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  171. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  172. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  173. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  174. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  175. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  176. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  177. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  178. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  179. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  180. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  181. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  182. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  183. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
  184. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
  185. package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
  186. package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
  187. package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
  188. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
  189. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.json +2 -2
  190. package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +1 -1
  191. package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +1 -1
  192. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
  193. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
  194. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
  195. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
  196. package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +1 -1
  197. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
  198. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
  199. package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
  200. package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
  201. package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
  202. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
  203. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
  204. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
  205. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  206. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  207. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
  208. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.json +2 -2
  209. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  210. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +2 -2
  211. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
  212. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.json +2 -2
  213. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  214. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  215. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +2 -2
  216. package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.dbg.json +4 -0
  217. package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.json +67 -0
  218. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
  219. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.json +2 -2
  220. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
  221. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.json +2 -2
  222. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
  223. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.json +2 -2
  224. package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
  225. package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.json +2 -2
  226. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  227. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
  228. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  229. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
  230. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  231. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  232. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.dbg.json +4 -0
  233. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.json +10 -0
  234. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.dbg.json +4 -0
  235. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.json +31 -0
  236. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.dbg.json +4 -0
  237. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.json +24 -0
  238. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.dbg.json +4 -0
  239. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.json +24 -0
  240. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.dbg.json +4 -0
  241. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.json +56 -0
  242. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.dbg.json +4 -0
  243. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.json +10 -0
  244. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
  245. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.json +2 -2
  246. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
  247. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +2 -2
  248. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
  249. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
  250. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
  251. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.json +2 -2
  252. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
  253. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.json +2 -2
  254. package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.dbg.json +4 -0
  255. package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.json +81 -0
  256. package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
  257. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
  258. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.json +2 -2
  259. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  260. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
  261. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.json +2 -2
  262. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
  263. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.json +2 -2
  264. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  265. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  266. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
  267. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  268. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
  269. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  270. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
  271. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  272. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
  273. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  274. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  275. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  276. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  277. package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.dbg.json +4 -0
  278. package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.json +91 -0
  279. package/contracts/Interfaces.sol +122 -0
  280. package/contracts/governance/CompoundVotingMachine.sol +26 -11
  281. package/contracts/governance/StakersDistribution.sol +13 -13
  282. package/contracts/invite/InvitesV2.sol +60 -43
  283. package/contracts/invite/OneTimeReward.sol +87 -0
  284. package/contracts/reserve/DistributionHelper.sol +29 -10
  285. package/contracts/reserve/ExchangeHelper.sol +16 -7
  286. package/contracts/reserve/GoodMarketMaker.sol +43 -53
  287. package/contracts/reserve/GoodReserveCDai.sol +44 -16
  288. package/contracts/staking/FuseStakingV3.sol +4 -2
  289. package/contracts/staking/GoodFundManager.sol +44 -4
  290. package/contracts/utils/BulkWhitelist.sol +51 -0
  291. package/contracts/utils/BuyGDClone.sol +0 -122
  292. package/contracts/utils/FuseOldBridgeKill.sol +123 -0
  293. package/contracts/utils/LastauthReduction.sol +92 -0
  294. package/contracts/utils/ReserveRestore.sol +157 -0
  295. package/dist/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  296. package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
  297. package/dist/test-sdk/deploySuperGoodDollar.js +1 -1
  298. package/package.json +19 -20
  299. package/releases/deployment.json +612 -599
  300. package/scripts/analytics/activeStakers.ts +25 -0
  301. package/scripts/analytics/activeUsersCount.ts +80 -26
  302. package/scripts/analytics/activeWalletsStats.ts +155 -22
  303. package/scripts/analytics/checkBridgeBalances.ts +442 -0
  304. package/scripts/deployFullDAO.ts +6 -4
  305. package/scripts/fv.ts +148 -35
  306. package/scripts/multichain-deploy/helpers.ts +10 -8
  307. package/scripts/proposals/identityAuthPeriod.ts +229 -0
  308. package/scripts/proposals/reserveRestore.ts +429 -0
  309. package/scripts/test/localOldDaoDeploy.ts +2 -1
  310. package/scripts/utils.ts +28 -16
  311. package/test/governance/CompoundVotingMachine.daoscheme.ts +3 -0
  312. package/test/governance/CompoundVotingMachine.guardian.test.ts +76 -21
  313. package/test/governance/CompoundVotingMachine.state.test.ts +31 -28
  314. package/test/governance/StakersDistribution.test.ts +79 -5
  315. package/test/helpers.ts +9 -0
  316. package/test/invite/InvitesV2.test.ts +165 -271
  317. package/test/reserve/DistributionHelper.test.ts +10 -10
  318. package/test/reserve/GoodMarketMaker.test.ts +75 -26
  319. package/test/reserve/GoodReserveCDai.test.ts +2 -1
  320. package/test/staking/FuseStaking.test.ts +23 -54
  321. package/test/staking/StakingRewards.test.ts +106 -29
  322. package/test/utils/ProtocolUpgrade.test.ts +1 -0
  323. package/tsconfig.json +1 -1
  324. package/types/@openzeppelin/contracts/access/Ownable.ts +175 -0
  325. package/types/@openzeppelin/contracts/access/index.ts +1 -0
  326. package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.ts +1 -1
  327. package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.ts +1 -1
  328. package/types/contracts/Interfaces.sol/index.ts +2 -0
  329. package/types/contracts/governance/CompoundVotingMachine.ts +44 -3
  330. package/types/contracts/invite/InvitesV2.ts +32 -0
  331. package/types/contracts/invite/OneTimeReward.ts +521 -0
  332. package/types/contracts/invite/index.ts +1 -0
  333. package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.ts +35 -0
  334. package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.ts +35 -0
  335. package/types/contracts/mocks/GoodFundManagerTest.ts +35 -0
  336. package/types/contracts/reserve/DistributionHelper.ts +35 -0
  337. package/types/contracts/reserve/GoodMarketMaker.ts +3 -3
  338. package/types/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.ts +5 -5
  339. package/types/contracts/staking/FuseStakingV3.sol/FuseStakingV3.ts +7 -2
  340. package/types/contracts/staking/GoodFundManager.ts +35 -0
  341. package/types/contracts/utils/BulkWhitelist.ts +153 -0
  342. package/types/contracts/utils/BuyGDClone.sol/index.ts +0 -2
  343. package/types/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.ts +108 -0
  344. package/types/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.ts +89 -0
  345. package/types/contracts/utils/FuseOldBridgeKill.sol/Initializable.ts +87 -0
  346. package/types/contracts/utils/FuseOldBridgeKill.sol/Ownable.ts +148 -0
  347. package/types/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
  348. package/types/contracts/utils/LastauthReduction.ts +168 -0
  349. package/types/contracts/utils/ReserveRestore.ts +201 -0
  350. package/types/contracts/utils/index.ts +5 -0
  351. package/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +78 -0
  352. package/types/factories/@openzeppelin/contracts/access/index.ts +1 -0
  353. package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2__factory.ts +1 -1
  354. package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter__factory.ts +1 -1
  355. package/types/factories/contracts/Interfaces.sol/index.ts +2 -0
  356. package/types/factories/contracts/fuseFaucet/Faucet__factory.ts +1 -1
  357. package/types/factories/contracts/fuseFaucet/FuseFaucetV2__factory.ts +1 -1
  358. package/types/factories/contracts/fuseFaucet/FuseFaucet__factory.ts +1 -1
  359. package/types/factories/contracts/governance/ClaimersDistribution__factory.ts +1 -1
  360. package/types/factories/contracts/governance/CompoundVotingMachine__factory.ts +19 -1
  361. package/types/factories/contracts/governance/GReputation__factory.ts +1 -1
  362. package/types/factories/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking__factory.ts +1 -1
  363. package/types/factories/contracts/governance/GovernanceStaking__factory.ts +1 -1
  364. package/types/factories/contracts/governance/Reputation__factory.ts +1 -1
  365. package/types/factories/contracts/governance/StakersDistribution__factory.ts +1 -1
  366. package/types/factories/contracts/identity/IdentityV2__factory.ts +1 -1
  367. package/types/factories/contracts/invite/InvitesFuseV2__factory.ts +1 -1
  368. package/types/factories/contracts/invite/InvitesV1__factory.ts +1 -1
  369. package/types/factories/contracts/invite/InvitesV2__factory.ts +14 -1
  370. package/types/factories/contracts/invite/OneTimeReward__factory.ts +361 -0
  371. package/types/factories/contracts/invite/index.ts +1 -0
  372. package/types/factories/contracts/mocks/DistributionBridgeMock__factory.ts +1 -1
  373. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +20 -1
  374. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest__factory.ts +20 -1
  375. package/types/factories/contracts/mocks/GoodCompoundStakingTest__factory.ts +1 -1
  376. package/types/factories/contracts/mocks/GoodDollarStakingMock__factory.ts +1 -1
  377. package/types/factories/contracts/mocks/GoodFundManagerTest__factory.ts +20 -1
  378. package/types/factories/contracts/mocks/IdentityMock__factory.ts +1 -1
  379. package/types/factories/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock__factory.ts +1 -1
  380. package/types/factories/contracts/mocks/OverMintTester.sol/OverMintTester__factory.ts +1 -1
  381. package/types/factories/contracts/mocks/OverMintTesterRegularStake__factory.ts +1 -1
  382. package/types/factories/contracts/mocks/SwapHelperTest__factory.ts +1 -1
  383. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock2__factory.ts +1 -1
  384. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock3__factory.ts +1 -1
  385. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock4__factory.ts +1 -1
  386. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock__factory.ts +1 -1
  387. package/types/factories/contracts/reserve/DistributionHelper__factory.ts +20 -1
  388. package/types/factories/contracts/reserve/ExchangeHelper__factory.ts +1 -1
  389. package/types/factories/contracts/reserve/GoodMarketMaker__factory.ts +5 -5
  390. package/types/factories/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai__factory.ts +2 -2
  391. package/types/factories/contracts/staking/BaseShareFieldV2__factory.ts +1 -1
  392. package/types/factories/contracts/staking/BaseShareField__factory.ts +1 -1
  393. package/types/factories/contracts/staking/DonationsStaking__factory.ts +1 -1
  394. package/types/factories/contracts/staking/FuseStakingV3.sol/FuseStakingV3__factory.ts +6 -1
  395. package/types/factories/contracts/staking/GoodFundManager__factory.ts +20 -1
  396. package/types/factories/contracts/staking/UniswapV2SwapHelper__factory.ts +1 -1
  397. package/types/factories/contracts/staking/aave/AaveStakingFactory__factory.ts +1 -1
  398. package/types/factories/contracts/staking/aave/GoodAaveStakingV2__factory.ts +1 -1
  399. package/types/factories/contracts/staking/aave/GoodAaveStaking__factory.ts +1 -1
  400. package/types/factories/contracts/staking/compound/CompoundStakingFactory__factory.ts +1 -1
  401. package/types/factories/contracts/staking/compound/GoodCompoundStakingV2__factory.ts +1 -1
  402. package/types/factories/contracts/staking/compound/GoodCompoundStaking__factory.ts +1 -1
  403. package/types/factories/contracts/token/GoodDollar__factory.ts +1 -1
  404. package/types/factories/contracts/token/superfluid/SuperGoodDollar__factory.ts +1 -1
  405. package/types/factories/contracts/ubi/UBISchemeV2__factory.ts +1 -1
  406. package/types/factories/contracts/ubi/UBIScheme__factory.ts +1 -1
  407. package/types/factories/contracts/utils/AdminWalletFuse__factory.ts +1 -1
  408. package/types/factories/contracts/utils/AdminWallet__factory.ts +1 -1
  409. package/types/factories/contracts/utils/BulkWhitelist__factory.ts +123 -0
  410. package/types/factories/contracts/utils/BuyAndBridgeHelper__factory.ts +1 -1
  411. package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory__factory.ts +1 -1
  412. package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDClone__factory.ts +1 -1
  413. package/types/factories/contracts/utils/BuyGDClone.sol/DonateGDClone__factory.ts +1 -1
  414. package/types/factories/contracts/utils/BuyGDClone.sol/index.ts +0 -2
  415. package/types/factories/contracts/utils/DAOContract__factory.ts +1 -1
  416. package/types/factories/contracts/utils/DAOUpgradeableContract__factory.ts +1 -1
  417. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill__factory.ts +82 -0
  418. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage__factory.ts +43 -0
  419. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Initializable__factory.ts +75 -0
  420. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Ownable__factory.ts +105 -0
  421. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
  422. package/types/factories/contracts/utils/GDFaucet__factory.ts +1 -1
  423. package/types/factories/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper__factory.ts +1 -1
  424. package/types/factories/contracts/utils/IdentityFix__factory.ts +1 -1
  425. package/types/factories/contracts/utils/LastauthReduction__factory.ts +134 -0
  426. package/types/factories/contracts/utils/MultichainBridgeHelper__factory.ts +1 -1
  427. package/types/factories/contracts/utils/OneTimePaymentsV2__factory.ts +1 -1
  428. package/types/factories/contracts/utils/OneTimePayments__factory.ts +1 -1
  429. package/types/factories/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade__factory.ts +1 -1
  430. package/types/factories/contracts/utils/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  431. package/types/factories/contracts/utils/ProtocolUpgradeFuse__factory.ts +1 -1
  432. package/types/factories/contracts/utils/ProtocolUpgradeRecover__factory.ts +1 -1
  433. package/types/factories/contracts/utils/ReputationTestHelper__factory.ts +1 -1
  434. package/types/factories/contracts/utils/ReserveRestore__factory.ts +144 -0
  435. package/types/factories/contracts/utils/index.ts +4 -0
  436. package/types/hardhat.d.ts +97 -16
  437. package/types/index.ts +18 -4
  438. package/artifacts/contracts/utils/BuyGDClone.sol/IQuoterV2.dbg.json +0 -4
  439. package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.dbg.json +0 -4
  440. package/contracts/utils/.DS_Store +0 -0
  441. 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
- curDay - ONE_DAY
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
- console.log("got inactive wallets:", walletStats.length);
40
- if (walletStats) {
41
- const accounts = walletStats.map(_ => _.id);
42
- allActive.push(...accounts);
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 * 14, 1);
61
- let curDay = twoWeeksAgo;
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
- curDay - ONE_HOUR
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
- } = await fetch("https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse", {
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 explorer = chain === "fuse" ? "https://explorer.fuse.io" : "https://explorer.celo.org";
16
- const subgraph = chain === "fuse" ? "https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse" : "https://";
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
- `https://explorer.fuse.io/api?module=token&action=getTokenHolders&contractaddress=0x495d133B938596C9984d462F007B676bDc57eCEC&page=${p}&offset=10000`
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(r => (balances[r.address.toLowerCase()] = { balance: r.value, lastSeen: 0 }));
33
- fs.writeFileSync("activeWalletsBalances.json", JSON.stringify(balances));
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
- // balances = JSON.parse(fs.readFileSync("activeWalletsBalances.json").toString());
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: 30 });
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("https://api.thegraph.com/subgraphs/name/gooddollar/gooddollarfuse", {
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("activeWalletsLastUsed.json", JSON.stringify(balances));
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("activeWalletsLastUsed.json").toString());
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 / 100, r.lastSeen, false]);
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 = (await provider.getCode(record[0]).catch(e => "0x")) !== "0x";
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("activeWalletsLastUsed.csv", arrayToCsv(sortBy(result, _ => -Number(_[1]))));
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
- // etl();
168
- fundsByLastSeen();
299
+ // fix();
300
+ etl();
301
+ // fundsByLastSeen();