@gooddollar/goodprotocol 1.0.28 → 1.0.29-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/artifacts/abis/BulkProof.min.json +1 -1
  2. package/artifacts/abis/DistributionBridgeMock.min.json +1 -0
  3. package/artifacts/abis/DistributionHelper.min.json +1 -0
  4. package/artifacts/abis/DistributionHelperTest.min.json +1 -0
  5. package/artifacts/abis/DistributionHelperTestHelper.min.json +1 -0
  6. package/artifacts/abis/ERC20.min.json +1 -1
  7. package/artifacts/abis/GoodDollarMintBurnWrapper.min.json +1 -0
  8. package/artifacts/abis/GoodDollarStaking.min.json +1 -0
  9. package/artifacts/abis/GoodDollarStakingMock.min.json +1 -0
  10. package/artifacts/abis/GoodReserveCDai.min.json +1 -1
  11. package/artifacts/abis/IERC2917.min.json +1 -1
  12. package/artifacts/abis/IGoodDollarStakingTest.min.json +1 -0
  13. package/artifacts/abis/IMultichainRouter.min.json +1 -0
  14. package/artifacts/abis/IRouter.min.json +1 -0
  15. package/artifacts/abis/IWrapper.min.json +1 -0
  16. package/artifacts/abis/Math64x64.min.json +1 -0
  17. package/artifacts/abis/MultichainBridgeHelper.min.json +1 -0
  18. package/artifacts/abis/MultichainRouterMock.min.json +1 -0
  19. package/artifacts/abis/OverMintTester.min.json +1 -1
  20. package/artifacts/abis/PausableControl.min.json +1 -0
  21. package/artifacts/abis/RewardsMinter.min.json +1 -0
  22. package/artifacts/abis/StakingMockFixedAPY.min.json +1 -0
  23. package/artifacts/abis/StakingRewardsFixedAPY.min.json +1 -0
  24. package/artifacts/abis/TokenOperation.min.json +1 -0
  25. package/artifacts/abis/cERC20.min.json +1 -1
  26. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  27. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  28. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  29. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  30. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  31. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  34. package/artifacts/contracts/Interfaces.sol/ERC20.json +13 -0
  35. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  36. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  37. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  38. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  39. package/artifacts/contracts/Interfaces.sol/IERC2917.json +13 -0
  40. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  43. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  44. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  45. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  46. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +4 -0
  47. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.json +67 -0
  48. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  49. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  50. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  51. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  52. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  53. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  54. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  55. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  56. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  57. package/artifacts/contracts/Interfaces.sol/cERC20.json +13 -0
  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/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  61. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  62. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  63. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +2 -2
  64. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  65. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
  66. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +4 -0
  67. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.json +1322 -0
  68. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +4 -0
  69. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.json +35 -0
  70. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  71. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
  72. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  73. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  74. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
  75. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  76. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  77. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  78. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
  79. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  80. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  81. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  82. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +4 -0
  83. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.json +152 -0
  84. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +4 -0
  85. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.json +662 -0
  86. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +4 -0
  87. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +680 -0
  88. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  89. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  90. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +4 -0
  91. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +1322 -0
  92. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  93. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
  94. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  95. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  96. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +4 -0
  97. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.json +59 -0
  98. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +4 -0
  99. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.json +81 -0
  100. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +4 -0
  101. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.json +49 -0
  102. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  103. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +4 -4
  104. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  105. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  106. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  107. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +4 -0
  108. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.json +682 -0
  109. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  110. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
  111. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  112. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  113. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
  114. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  115. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
  116. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  117. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
  118. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  119. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
  120. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  121. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  122. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  123. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  124. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  125. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  126. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  127. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  128. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +4 -0
  129. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +662 -0
  130. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  131. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  132. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  133. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
  134. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  135. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  136. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +75 -35
  137. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  138. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
  139. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  140. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
  141. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  142. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  143. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  144. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +2 -2
  145. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  146. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  147. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  148. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +2 -2
  149. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  150. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  151. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  152. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  153. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  154. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  155. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  156. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  157. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  158. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  159. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  160. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  161. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  162. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  163. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  164. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  165. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +4 -0
  166. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.json +10 -0
  167. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +4 -0
  168. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.json +268 -0
  169. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  170. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  171. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  172. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +2 -2
  173. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  174. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  175. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +3 -34
  176. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  177. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
  178. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  179. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
  180. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  181. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  182. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +4 -0
  183. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +1263 -0
  184. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +4 -0
  185. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.json +59 -0
  186. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +4 -0
  187. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.json +69 -0
  188. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +4 -0
  189. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.json +10 -0
  190. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +4 -0
  191. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.json +79 -0
  192. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  193. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  194. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  195. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
  196. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  197. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
  198. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  199. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
  200. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  201. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
  202. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  203. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  204. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  205. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  206. package/contracts/Interfaces.sol +20 -0
  207. package/contracts/governance/GoodDollarStaking.sol +510 -0
  208. package/contracts/governance/MultiBaseGovernanceShareField.sol +1 -0
  209. package/contracts/mocks/DistributionBridgeMock.sol +50 -0
  210. package/contracts/mocks/DistributionHelperTest.sol +22 -0
  211. package/contracts/mocks/GoodDollarStakingMock.sol +24 -0
  212. package/contracts/mocks/MultichainRouterMock.sol +38 -0
  213. package/contracts/mocks/OverMintTester.sol +39 -25
  214. package/contracts/mocks/StakingMockFixedAPY.sol +78 -0
  215. package/contracts/reserve/DistributionHelper.sol +142 -0
  216. package/contracts/reserve/GoodReserveCDai.sol +95 -41
  217. package/contracts/staking/utils/Math64X64.sol +268 -0
  218. package/contracts/staking/utils/StakingRewardsFixedAPY.sol +336 -0
  219. package/contracts/utils/BulkProof.sol +10 -10
  220. package/contracts/utils/GoodDollarMintBurnWrapper.sol +638 -0
  221. package/contracts/utils/MultichainBridgeHelper.sol +39 -0
  222. package/hardhat.config.ts +5 -3
  223. package/package.json +7 -4
  224. package/patches/@openzeppelin+hardhat-upgrades+1.7.0.patch.depracate +67 -0
  225. package/releases/deployment.json +10 -3
  226. package/releases/olddao.json +1 -1
  227. package/scripts/analytics/activeUsersCount.ts +65 -0
  228. package/scripts/analytics/activeWalletsStats.ts +150 -0
  229. package/scripts/analytics/claimIncidentStats.ts +117 -0
  230. package/scripts/analytics/faucetStats.ts +103 -0
  231. package/scripts/analytics/goodHolders.ts +50 -0
  232. package/scripts/{misc → analytics}/goodgiveback.ts +0 -0
  233. package/scripts/governance/airdropCalculation.ts +1 -0
  234. package/scripts/multichain-deploy/basicdao-deploy.ts +20 -5
  235. package/scripts/multichain-deploy/gdSavings-deploy.ts +232 -0
  236. package/scripts/multichain-deploy/helpers.ts +73 -8
  237. package/scripts/multichain-deploy/multichainWrapper-deploy.ts +56 -0
  238. package/scripts/multichain-deploy/nonubiDistribution-deploy.ts +170 -0
  239. package/scripts/voltageswaps.ts +47 -0
  240. package/test/governance/ClaimersDistribution.test.ts +1 -1
  241. package/test/governance/GoodDollarStaking.gd.test.ts +559 -0
  242. package/test/governance/GoodDollarStaking.good.test.ts +998 -0
  243. package/test/governance/GovernanceStaking.test.ts +43 -0
  244. package/test/helpers.ts +9 -12
  245. package/test/reserve/DistributionHelper.test.ts +394 -0
  246. package/test/reserve/GoodReserveCDai.distribution.test.ts +296 -0
  247. package/test/reserve/GoodReserveCDai.gdx.test.ts +21 -16
  248. package/test/reserve/GoodReserveCDai.pause.test.ts +116 -0
  249. package/test/staking/StakingRewardsFixedAPY.test.ts +900 -0
  250. package/test/utils/AdminWallet.test.ts +35 -6
  251. package/test/utils/GoodDollarMintBurnWrapper.test.ts +796 -0
  252. package/tsconfig.json +4 -9
  253. package/types/AccessControl.ts +361 -0
  254. package/types/CERC20.ts +25 -0
  255. package/types/DistributionBridgeMock.ts +251 -0
  256. package/types/DistributionHelper.ts +908 -0
  257. package/types/DistributionHelperTest.ts +909 -0
  258. package/types/DistributionHelperTestHelper.ts +945 -0
  259. package/types/ERC165.ts +104 -0
  260. package/types/ERC20.ts +101 -49
  261. package/types/GoodDollarMintBurnWrapper.ts +1806 -0
  262. package/types/GoodDollarStaking.ts +1855 -0
  263. package/types/GoodDollarStakingMock.ts +1855 -0
  264. package/types/GoodReserveCDai.ts +90 -55
  265. package/types/IAccessControl.ts +306 -0
  266. package/types/IERC165.ts +104 -0
  267. package/types/IERC20.ts +300 -0
  268. package/types/IERC20Metadata.ts +339 -0
  269. package/types/IERC2917.ts +25 -0
  270. package/types/IGoodDollarStakingTest.ts +160 -0
  271. package/types/IMultichainRouter.ts +166 -0
  272. package/types/IRouter.ts +143 -0
  273. package/types/IWrapper.ts +143 -0
  274. package/types/MultichainBridgeHelper.ts +170 -0
  275. package/types/MultichainRouterMock.ts +141 -0
  276. package/types/Pausable.ts +103 -0
  277. package/types/PausableControl.ts +125 -0
  278. package/types/{BulkProof.ts → RewardsMinter.ts} +24 -28
  279. package/types/StakingMockFixedAPY.ts +995 -0
  280. package/types/StakingRewardsFixedAPY.ts +428 -0
  281. package/types/factories/AaveStakingFactory__factory.ts +1 -1
  282. package/types/factories/AccessControl__factory.ts +227 -0
  283. package/types/factories/AdminWallet__factory.ts +1 -1
  284. package/types/factories/BaseShareFieldV2__factory.ts +1 -1
  285. package/types/factories/BaseShareField__factory.ts +1 -1
  286. package/types/factories/CERC20__factory.ts +13 -0
  287. package/types/factories/ClaimersDistribution__factory.ts +1 -1
  288. package/types/factories/CompoundStakingFactory__factory.ts +1 -1
  289. package/types/factories/CompoundVotingMachine__factory.ts +1 -1
  290. package/types/factories/DAOContract__factory.ts +1 -1
  291. package/types/factories/DAOUpgradeableContract__factory.ts +1 -1
  292. package/types/factories/DistributionBridgeMock__factory.ts +207 -0
  293. package/types/factories/DistributionHelperTestHelper__factory.ts +737 -0
  294. package/types/factories/DistributionHelperTest__factory.ts +717 -0
  295. package/types/factories/DistributionHelper__factory.ts +713 -0
  296. package/types/factories/DonationsStaking__factory.ts +1 -1
  297. package/types/factories/ERC165__factory.ts +39 -0
  298. package/types/factories/ERC20__factory.ts +13 -0
  299. package/types/factories/ExchangeHelper__factory.ts +1 -1
  300. package/types/factories/FuseFaucet__factory.ts +1 -1
  301. package/types/factories/FuseStakingV3__factory.ts +1 -1
  302. package/types/factories/GReputation__factory.ts +1 -1
  303. package/types/factories/GoodAaveStakingV2__factory.ts +1 -1
  304. package/types/factories/GoodAaveStaking__factory.ts +1 -1
  305. package/types/factories/GoodCompoundStakingTest__factory.ts +1 -1
  306. package/types/factories/GoodCompoundStakingV2__factory.ts +1 -1
  307. package/types/factories/GoodCompoundStaking__factory.ts +1 -1
  308. package/types/factories/GoodDollarMintBurnWrapper__factory.ts +1318 -0
  309. package/types/factories/GoodDollarStakingMock__factory.ts +1404 -0
  310. package/types/factories/GoodDollarStaking__factory.ts +1400 -0
  311. package/types/factories/GoodFundManagerTest__factory.ts +1 -1
  312. package/types/factories/GoodFundManager__factory.ts +1 -1
  313. package/types/factories/GoodMarketMaker__factory.ts +1 -1
  314. package/types/factories/GoodReserveCDai__factory.ts +74 -34
  315. package/types/factories/GovernanceStaking__factory.ts +1 -1
  316. package/types/factories/IAccessControl__factory.ts +198 -0
  317. package/types/factories/IERC165__factory.ts +42 -0
  318. package/types/factories/IERC20Metadata__factory.ts +248 -0
  319. package/types/factories/IERC20__factory.ts +203 -0
  320. package/types/factories/IERC2917__factory.ts +13 -0
  321. package/types/factories/IGoodDollarStakingTest__factory.ts +68 -0
  322. package/types/factories/IMultichainRouter__factory.ts +82 -0
  323. package/types/factories/IRouter__factory.ts +71 -0
  324. package/types/factories/IWrapper__factory.ts +71 -0
  325. package/types/factories/InvitesV1__factory.ts +1 -1
  326. package/types/factories/MultichainBridgeHelper__factory.ts +134 -0
  327. package/types/factories/MultichainRouterMock__factory.ts +141 -0
  328. package/types/factories/OverMintTesterRegularStake__factory.ts +1 -1
  329. package/types/factories/OverMintTester__factory.ts +3 -3
  330. package/types/factories/PausableControl__factory.ts +84 -0
  331. package/types/factories/Pausable__factory.ts +62 -0
  332. package/types/factories/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  333. package/types/factories/ProtocolUpgradeFuse__factory.ts +1 -1
  334. package/types/factories/ProtocolUpgradeRecover__factory.ts +1 -1
  335. package/types/factories/ProtocolUpgrade__factory.ts +1 -1
  336. package/types/factories/ReputationTestHelper__factory.ts +1 -1
  337. package/types/factories/Reputation__factory.ts +1 -1
  338. package/types/factories/RewardsMinter__factory.ts +47 -0
  339. package/types/factories/StakersDistribution__factory.ts +1 -1
  340. package/types/factories/StakingMockFixedAPY__factory.ts +745 -0
  341. package/types/factories/StakingRewardsFixedAPY__factory.ts +287 -0
  342. package/types/factories/SwapHelperTest__factory.ts +1 -1
  343. package/types/factories/UBIScheme__factory.ts +1 -1
  344. package/types/factories/UniswapV2SwapHelper__factory.ts +1 -1
  345. package/types/factories/UpgradableMock2__factory.ts +1 -1
  346. package/types/factories/UpgradableMock3__factory.ts +1 -1
  347. package/types/factories/UpgradableMock4__factory.ts +1 -1
  348. package/types/factories/UpgradableMock__factory.ts +1 -1
  349. package/types/hardhat.d.ts +225 -9
  350. package/types/index.ts +50 -4
  351. package/yarn.lock +180 -104
  352. package/types/factories/BulkProof__factory.ts +0 -89
@@ -0,0 +1,296 @@
1
+ import { ethers, waffle } from "hardhat";
2
+ import { expect } from "chai";
3
+ import { GoodReserveCDai, DistributionHelper } from "../../types";
4
+ import { createDAO, increaseTime } from "../helpers";
5
+ import { Contract } from "ethers";
6
+ import { FormatTypes } from "@ethersproject/abi";
7
+
8
+ const BN = ethers.BigNumber;
9
+ export const NULL_ADDRESS = ethers.constants.AddressZero;
10
+ export const BLOCK_INTERVAL = 1;
11
+
12
+ describe("GoodReserve - Distribution Helper", () => {
13
+ let goodReserve: GoodReserveCDai;
14
+ let goodDollar: Contract,
15
+ genericCall,
16
+ avatar,
17
+ founder,
18
+ signers,
19
+ setDAOAddress,
20
+ nameService,
21
+ cDai;
22
+
23
+ before(async () => {
24
+ [founder, ...signers] = await ethers.getSigners();
25
+
26
+ let {
27
+ controller: ctrl,
28
+ avatar: av,
29
+ gd,
30
+ identity,
31
+ setDAOAddress: sda,
32
+ setSchemes,
33
+ reserve,
34
+ cdaiAddress,
35
+ genericCall: gc,
36
+ nameService: ns
37
+ } = await createDAO();
38
+
39
+ nameService = ns;
40
+ genericCall = gc;
41
+ cDai = cdaiAddress;
42
+ avatar = av;
43
+ setDAOAddress = sda;
44
+
45
+ console.log("deployed dao", {
46
+ founder: founder.address,
47
+ gd,
48
+ identity,
49
+ avatar
50
+ });
51
+
52
+ goodDollar = await ethers.getContractAt("IGoodDollar", gd);
53
+
54
+ console.log("deployed contribution, deploying reserve...", {
55
+ founder: founder.address
56
+ });
57
+
58
+ goodReserve = reserve as GoodReserveCDai;
59
+
60
+ console.log("setting permissions...");
61
+ });
62
+
63
+ const fixture = async (wallets, provider) => {
64
+ const df = await ethers.getContractFactory("DistributionHelper");
65
+ wallets = provider.getWallets();
66
+ const distHelper = (await waffle.deployContract(wallets[0], {
67
+ abi: JSON.parse(df.interface.format(FormatTypes.json) as string) as any[],
68
+ bytecode: df.bytecode
69
+ })) as DistributionHelper;
70
+
71
+ return { distHelper };
72
+ };
73
+
74
+ const deployed_fixture = async (wallets, provider) => {
75
+ const df = await ethers.getContractFactory("DistributionHelper");
76
+ wallets = provider.getWallets();
77
+ const distHelper = (await waffle.deployContract(wallets[0], {
78
+ abi: JSON.parse(df.interface.format(FormatTypes.json) as string) as any[],
79
+ bytecode: df.bytecode
80
+ })) as DistributionHelper;
81
+
82
+ await distHelper.initialize(nameService.address);
83
+
84
+ const encodedCall = goodReserve.interface.encodeFunctionData(
85
+ "setDistributionHelper",
86
+ [distHelper.address, 1000]
87
+ );
88
+
89
+ await genericCall(goodReserve.address, encodedCall, avatar.address, 0);
90
+
91
+ return { distHelper };
92
+ };
93
+
94
+ const deployed_revert_fixture = async (wallets, provider) => {
95
+ const df = await ethers.getContractFactory("DistributionHelperTest");
96
+ wallets = provider.getWallets();
97
+ const distHelper = (await waffle.deployContract(wallets[0], {
98
+ abi: JSON.parse(df.interface.format(FormatTypes.json) as string) as any[],
99
+ bytecode: df.bytecode
100
+ })) as DistributionHelper;
101
+
102
+ await distHelper.initialize(nameService.address);
103
+
104
+ const encodedCall = goodReserve.interface.encodeFunctionData(
105
+ "setDistributionHelper",
106
+ [distHelper.address, 1000]
107
+ );
108
+
109
+ await genericCall(goodReserve.address, encodedCall, avatar.address, 0);
110
+
111
+ return { distHelper };
112
+ };
113
+
114
+ it("should allow avatar to set distribution helper target", async () => {
115
+ const { distHelper } = await waffle.loadFixture(fixture);
116
+ const encodedCall = goodReserve.interface.encodeFunctionData(
117
+ "setDistributionHelper",
118
+ [distHelper.address, 1000]
119
+ );
120
+
121
+ await genericCall(goodReserve.address, encodedCall, avatar.address, 0);
122
+
123
+ expect(await goodReserve.distributionHelper()).to.equal(distHelper.address);
124
+ expect(await goodReserve.nonUbiBps()).to.equal(1000);
125
+ });
126
+
127
+ it("should not allow to call setDistributionHelper", async () => {
128
+ const { distHelper } = await waffle.loadFixture(fixture);
129
+ await expect(
130
+ goodReserve.setDistributionHelper(distHelper.address, 1000)
131
+ ).to.be.revertedWith("avatar");
132
+ });
133
+
134
+ it("should send UBI to distribution contract", async () => {
135
+ const { distHelper } = await waffle.loadFixture(deployed_fixture);
136
+
137
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
138
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
139
+
140
+ let tx = await (
141
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
142
+ ).wait();
143
+
144
+ const nonUbiMintedEvent = tx.events.find(_ => _.event === "NonUBIMinted");
145
+ const ubiMintedEvent = tx.events.find(_ => _.event === "UBIMinted");
146
+
147
+ //verify amount transfered
148
+ expect(nonUbiMintedEvent.args.amountMinted).gt(0);
149
+ expect(nonUbiMintedEvent.args.amountMinted).to.equal(
150
+ await goodDollar.balanceOf(distHelper.address)
151
+ );
152
+
153
+ expect(
154
+ nonUbiMintedEvent.args.amountMinted.add(
155
+ ubiMintedEvent.args.gdUbiTransferred
156
+ )
157
+ ).to.equal(ubiMintedEvent.args.gdExpansionMinted);
158
+ });
159
+
160
+ it("should distribute according to 10% nonUbiBps", async () => {
161
+ let { distHelper } = await waffle.loadFixture(deployed_fixture);
162
+
163
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
164
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
165
+
166
+ let tx = await (
167
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
168
+ ).wait();
169
+
170
+ const nonUbiMintedEvent = tx.events.find(_ => _.event === "NonUBIMinted");
171
+ const ubiMintedEvent = tx.events.find(_ => _.event === "UBIMinted");
172
+
173
+ //verify 10%
174
+ expect(nonUbiMintedEvent.args.amountMinted).gt(0);
175
+ expect(nonUbiMintedEvent.args.amountMinted).to.equal(
176
+ ubiMintedEvent.args.gdExpansionMinted.mul(1000).div(10000)
177
+ );
178
+ });
179
+
180
+ it("should distribute according to 25% nonUbiBps", async () => {
181
+ let { distHelper } = await waffle.loadFixture(deployed_fixture);
182
+
183
+ const encodedCall = goodReserve.interface.encodeFunctionData(
184
+ "setDistributionHelper",
185
+ [distHelper.address, 2500]
186
+ );
187
+
188
+ await genericCall(goodReserve.address, encodedCall, avatar.address, 0);
189
+
190
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
191
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
192
+
193
+ let tx = await (
194
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
195
+ ).wait();
196
+
197
+ const nonUbiMintedEvent = tx.events.find(_ => _.event === "NonUBIMinted");
198
+ const ubiMintedEvent = tx.events.find(_ => _.event === "UBIMinted");
199
+
200
+ //verify 10%
201
+ expect(nonUbiMintedEvent.args.amountMinted).gt(0);
202
+ expect(nonUbiMintedEvent.args.amountMinted).to.equal(
203
+ ubiMintedEvent.args.gdExpansionMinted.mul(2500).div(10000)
204
+ );
205
+ });
206
+
207
+ it("should distribute even when DistributionHelper onDistribution reverts", async () => {
208
+ let { distHelper } = await waffle.loadFixture(deployed_revert_fixture); //using DistributionHelperTest which reverts
209
+
210
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
211
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
212
+
213
+ let tx = await (
214
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
215
+ ).wait();
216
+
217
+ const nonUbiMintedEvent = tx.events.find(_ => _.event === "NonUBIMinted");
218
+ const ubiMintedEvent = tx.events.find(_ => _.event === "UBIMinted");
219
+
220
+ const topic = distHelper.filters.Distribution().topics[0];
221
+ const distributionEvent = tx.events.find(_ =>
222
+ _.topics.includes(topic as string)
223
+ );
224
+
225
+ //verify onDistribution didnt happen
226
+ expect(distributionEvent).to.be.undefined;
227
+
228
+ //verify 10%
229
+ expect(nonUbiMintedEvent.args.amountMinted).gt(0);
230
+ expect(nonUbiMintedEvent.args.amountMinted).to.equal(
231
+ ubiMintedEvent.args.gdExpansionMinted.mul(1000).div(10000)
232
+ );
233
+ });
234
+
235
+ it("should trigger onDistribution of DistributionHelper", async () => {
236
+ let { distHelper } = await waffle.loadFixture(deployed_fixture); //using DistributionHelperTest which reverts
237
+
238
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
239
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
240
+
241
+ let tx = await (
242
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
243
+ ).wait();
244
+
245
+ const topic = distHelper.filters.Distribution().topics[0];
246
+ const distributionEvent = tx.events.find(_ =>
247
+ _.topics.includes(topic as string)
248
+ );
249
+
250
+ expect(distributionEvent).not.empty;
251
+ });
252
+
253
+ it("should not try to distribute UBI if bps=0", async () => {
254
+ let { distHelper } = await waffle.loadFixture(deployed_fixture);
255
+
256
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
257
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
258
+
259
+ const encodedCall = goodReserve.interface.encodeFunctionData(
260
+ "setDistributionHelper",
261
+ [distHelper.address, 0]
262
+ );
263
+
264
+ await genericCall(goodReserve.address, encodedCall, avatar.address, 0);
265
+
266
+ let tx = await (
267
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
268
+ ).wait();
269
+
270
+ const nonUbiMintedEvent = tx.events.find(_ => _.event === "NonUBIMinted");
271
+
272
+ expect(nonUbiMintedEvent).to.be.undefined;
273
+ });
274
+
275
+ it("should not try to distribute UBI if distributionhelper is null", async () => {
276
+ let { distHelper } = await waffle.loadFixture(deployed_fixture); //using DistributionHelperTest which reverts
277
+
278
+ await increaseTime(60 * 60 * 24 * 365); //required for reserve ratio advance
279
+ await setDAOAddress("FUND_MANAGER", founder.address); //required so we can call mintUBI
280
+
281
+ const encodedCall = goodReserve.interface.encodeFunctionData(
282
+ "setDistributionHelper",
283
+ [ethers.constants.AddressZero, 1000]
284
+ );
285
+
286
+ await genericCall(goodReserve.address, encodedCall, avatar.address, 0);
287
+
288
+ let tx = await (
289
+ await goodReserve.connect(founder).mintUBI(0, 0, cDai)
290
+ ).wait();
291
+
292
+ const nonUbiMintedEvent = tx.events.find(_ => _.event === "NonUBIMinted");
293
+
294
+ expect(nonUbiMintedEvent).to.be.undefined;
295
+ });
296
+ });
@@ -8,7 +8,7 @@ import { createDAO, increaseTime, advanceBlocks } from "../helpers";
8
8
  import ContributionCalculation from "@gooddollar/goodcontracts/stakingModel/build/contracts/ContributionCalculation.json";
9
9
 
10
10
  const BN = ethers.BigNumber;
11
- const RANDOM_GDX_MERKLEROOT1 =
11
+ const RANDOM_GDX_MERKLEROOT1 =
12
12
  "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
13
13
  export const NULL_ADDRESS = ethers.constants.AddressZero;
14
14
  export const BLOCK_INTERVAL = 1;
@@ -61,14 +61,14 @@ describe("GDX Token", () => {
61
61
  goodReserve = reserve as GoodReserveCDai;
62
62
  genericCall = gn;
63
63
  runAsAvatarOnly = raao;
64
-
64
+
65
65
  console.log("deployed dao", {
66
66
  founder: founder.address,
67
67
  gd,
68
68
  identity,
69
69
  controller,
70
70
  avatar,
71
- goodReserve: goodReserve.address,
71
+ goodReserve: goodReserve.address
72
72
  });
73
73
 
74
74
  goodDollar = await ethers.getContractAt("IGoodDollar", gd);
@@ -82,7 +82,7 @@ describe("GDX Token", () => {
82
82
  const reserveFactory = await ethers.getContractFactory("GoodReserveCDai");
83
83
 
84
84
  console.log("deployed contribution, deploying reserve...", {
85
- founder: founder.address,
85
+ founder: founder.address
86
86
  });
87
87
 
88
88
  console.log("setting permissions...");
@@ -184,7 +184,7 @@ describe("GDX Token", () => {
184
184
  await goodReserve.sell(amount, 0, NULL_ADDRESS, NULL_ADDRESS)
185
185
  ).wait();
186
186
 
187
- const event = transaction.events.find((_) => _.event === "TokenSold");
187
+ const event = transaction.events.find(_ => _.event === "TokenSold");
188
188
  expect(event.args.contributionAmount).to.equal(0);
189
189
  });
190
190
  it("GDX should be 2 decimals", async () => {
@@ -203,7 +203,7 @@ describe("GDX Token", () => {
203
203
  .sell(amount, 0, founder.address, NULL_ADDRESS)
204
204
  ).wait();
205
205
 
206
- const event = transaction.events.find((_) => _.event === "TokenSold");
206
+ const event = transaction.events.find(_ => _.event === "TokenSold");
207
207
  const gdxAfter = await goodReserve["balanceOf(address)"](staker.address);
208
208
 
209
209
  expect(gdxAfter).to.equal(0, "gdx not burned");
@@ -221,7 +221,7 @@ describe("GDX Token", () => {
221
221
  await goodReserve.sell(amount, 0, NULL_ADDRESS, NULL_ADDRESS)
222
222
  ).wait();
223
223
 
224
- const event = transaction.events.find((_) => _.event === "TokenSold");
224
+ const event = transaction.events.find(_ => _.event === "TokenSold");
225
225
  const gdxAfter = await goodReserve["balanceOf(address)"](founder.address);
226
226
 
227
227
  expect(gdxAfter).to.equal(0, "gdx not burned");
@@ -236,7 +236,7 @@ describe("GDX Token", () => {
236
236
  let reserve = (await rFactory.deploy()) as GoodReserveCDai;
237
237
  const airdropBytes = ethers.utils.defaultAbiCoder.encode(
238
238
  ["address[]", "uint256[]"],
239
- [signers.map((_) => _.address), signers.map((_) => 1000)]
239
+ [signers.map(_ => _.address), signers.map(_ => 1000)]
240
240
  );
241
241
 
242
242
  await reserve["initialize(address,bytes32)"](
@@ -256,11 +256,16 @@ describe("GDX Token", () => {
256
256
  );
257
257
  });
258
258
 
259
- it("should set GDX airdrop by avatar", async () => {
260
- await runAsAvatarOnly(goodReserve,"setGDXAirdrop(bytes32)", RANDOM_GDX_MERKLEROOT1);
259
+ xit("should set GDX airdrop by avatar", async () => {
260
+ await runAsAvatarOnly(
261
+ goodReserve,
262
+ "setGDXAirdrop(bytes32)",
263
+ RANDOM_GDX_MERKLEROOT1
264
+ );
261
265
  expect(await goodReserve.gdxAirdrop()).to.equal(RANDOM_GDX_MERKLEROOT1);
262
-
263
- const originalGDXAirdrop = "0x26ef809f3f845395c0bc66ce1eea85146516cb99afd030e2085b13e79514e94c";
266
+
267
+ const originalGDXAirdrop =
268
+ "0x26ef809f3f845395c0bc66ce1eea85146516cb99afd030e2085b13e79514e94c";
264
269
  const encodedCall = goodReserve.interface.encodeFunctionData(
265
270
  "setGDXAirdrop",
266
271
  [originalGDXAirdrop]
@@ -269,7 +274,7 @@ describe("GDX Token", () => {
269
274
  });
270
275
 
271
276
  //check sample proof generated by gdxAirdropCalculation.ts script
272
- it("should be able to claim gdx", async () => {
277
+ xit("should be able to claim gdx", async () => {
273
278
  await goodReserve.claimGDX(
274
279
  "0x0EeBBbbf6f97e73dd1d59e4F17666B36Ea12dD85",
275
280
  1436983746,
@@ -279,7 +284,7 @@ describe("GDX Token", () => {
279
284
  "0xf0db8914b45ce55ea25be091e1fe4d897db4cff19e1b1680c37061a30a95c102",
280
285
  "0xc6e2cbda2531c708550b3856fc208355b184483e19ad6d8877a541c441ad3fef",
281
286
  "0x355c34cc000364d5a1cebe4835197936bc5966e3e8ac116a8fa20a8d2714f7c5",
282
- "0xd515f7a623c1a18396a6aececcdcae32818b64faa0f536103b3a32e8c5ae7643",
287
+ "0xd515f7a623c1a18396a6aececcdcae32818b64faa0f536103b3a32e8c5ae7643"
283
288
  ]
284
289
  );
285
290
  expect(
@@ -294,7 +299,7 @@ describe("GDX Token", () => {
294
299
  ).to.be.true;
295
300
  });
296
301
 
297
- it("should not be able to claim gdx twice", async () => {
302
+ xit("should not be able to claim gdx twice", async () => {
298
303
  const tx = goodReserve.claimGDX(
299
304
  "0x0EeBBbbf6f97e73dd1d59e4F17666B36Ea12dD85",
300
305
  1436983746,
@@ -304,7 +309,7 @@ describe("GDX Token", () => {
304
309
  "0xf0db8914b45ce55ea25be091e1fe4d897db4cff19e1b1680c37061a30a95c102",
305
310
  "0xc6e2cbda2531c708550b3856fc208355b184483e19ad6d8877a541c441ad3fef",
306
311
  "0x355c34cc000364d5a1cebe4835197936bc5966e3e8ac116a8fa20a8d2714f7c5",
307
- "0xd515f7a623c1a18396a6aececcdcae32818b64faa0f536103b3a32e8c5ae7643",
312
+ "0xd515f7a623c1a18396a6aececcdcae32818b64faa0f536103b3a32e8c5ae7643"
308
313
  ]
309
314
  );
310
315
  await expect(tx).to.be.revertedWith("already claimed gdx");
@@ -0,0 +1,116 @@
1
+ import { ethers, waffle } from "hardhat";
2
+ import { expect } from "chai";
3
+ import { GoodReserveCDai, DistributionHelper } from "../../types";
4
+ import { createDAO, increaseTime } from "../helpers";
5
+ import { Contract } from "ethers";
6
+ import { FormatTypes } from "@ethersproject/abi";
7
+
8
+ const BN = ethers.BigNumber;
9
+ export const NULL_ADDRESS = ethers.constants.AddressZero;
10
+ export const BLOCK_INTERVAL = 1;
11
+
12
+ describe("GoodReserve - Distribution Helper", () => {
13
+ let goodReserve: GoodReserveCDai;
14
+ let goodDollar: Contract,
15
+ genericCall,
16
+ avatar,
17
+ founder,
18
+ signers,
19
+ dai,
20
+ cDAI,
21
+ setDAOAddress;
22
+
23
+ before(async () => {
24
+ [founder, ...signers] = await ethers.getSigners();
25
+
26
+ let {
27
+ controller: ctrl,
28
+ avatar: av,
29
+ gd,
30
+ identity,
31
+ setDAOAddress: sda,
32
+ setSchemes,
33
+ reserve,
34
+ daiAddress,
35
+ cdaiAddress,
36
+ genericCall: gc
37
+ } = await createDAO();
38
+
39
+ dai = await ethers.getContractAt("DAIMock", daiAddress);
40
+ cDAI = await ethers.getContractAt("cDAIMock", cdaiAddress);
41
+
42
+ genericCall = gc;
43
+ avatar = av;
44
+ setDAOAddress = sda;
45
+
46
+ console.log("deployed dao", {
47
+ founder: founder.address,
48
+ gd,
49
+ identity,
50
+ avatar
51
+ });
52
+
53
+ goodDollar = await ethers.getContractAt("IGoodDollar", gd);
54
+
55
+ console.log("deployed contribution, deploying reserve...", {
56
+ founder: founder.address
57
+ });
58
+
59
+ goodReserve = reserve as GoodReserveCDai;
60
+
61
+ console.log("setting permissions...");
62
+ });
63
+
64
+ const fixture = async (wallets, provider) => {
65
+ let encodedCall = goodReserve.interface.encodeFunctionData("grantRole", [
66
+ await goodReserve.PAUSER_ROLE(),
67
+ avatar
68
+ ]);
69
+ await genericCall(goodReserve.address, encodedCall);
70
+
71
+ encodedCall = goodReserve.interface.encodeFunctionData("pause");
72
+ await genericCall(goodReserve.address, encodedCall);
73
+
74
+ return { goodReserve };
75
+ };
76
+
77
+ it("should allow avatar to unpause", async () => {
78
+ const { goodReserve } = await waffle.loadFixture(fixture);
79
+ const encodedCall = goodReserve.interface.encodeFunctionData("unpause");
80
+
81
+ expect(await goodReserve.paused()).to.equal(true);
82
+ await genericCall(goodReserve.address, encodedCall);
83
+
84
+ expect(await goodReserve.paused()).to.equal(false);
85
+ });
86
+
87
+ it("should not be able to buy when paused", async () => {
88
+ let amount = 1e8;
89
+ const { goodReserve } = await waffle.loadFixture(fixture);
90
+ await dai["mint(uint256)"](ethers.utils.parseEther("100"));
91
+ await dai.approve(cDAI.address, ethers.utils.parseEther("100"));
92
+ await cDAI["mint(uint256)"](ethers.utils.parseEther("100"));
93
+ await cDAI.approve(goodReserve.address, ethers.utils.parseEther("10"));
94
+ await expect(goodReserve.buy(amount, 0, founder.address)).revertedWith(
95
+ "paused"
96
+ );
97
+ });
98
+
99
+ it("should not be able to sell when paused", async () => {
100
+ const { goodReserve } = await waffle.loadFixture(fixture);
101
+ await expect(
102
+ goodReserve.sell(1, 0, founder.address, founder.address)
103
+ ).revertedWith("paused");
104
+ });
105
+
106
+ it("should not be able to mint when paused", async () => {
107
+ const { goodReserve } = await waffle.loadFixture(fixture);
108
+ await setDAOAddress("FUND_MANAGER", founder.address);
109
+
110
+ await expect(
111
+ goodReserve
112
+ .connect(founder)
113
+ .mintRewardFromRR(cDAI.address, founder.address, 1000)
114
+ ).revertedWith("paused"); //10000 cdai wei is 1G$
115
+ });
116
+ });