@gooddollar/goodprotocol 2.0.5-beta.6 → 2.0.5-beta.7

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 (166) hide show
  1. package/artifacts/abis/Faucet.min.json +1 -1
  2. package/artifacts/abis/FuseFaucetV2.min.json +1 -1
  3. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  4. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  5. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  6. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  7. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  8. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  9. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  10. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  11. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  12. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  13. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  14. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  15. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  16. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  17. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  18. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  19. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  20. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
  21. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  22. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
  23. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  28. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  32. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
  33. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +28 -9
  34. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  35. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
  36. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +28 -2
  37. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  38. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  39. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  40. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
  41. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
  42. package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
  43. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
  44. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  45. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  46. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  47. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  48. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
  49. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
  50. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  51. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
  58. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  59. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
  60. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
  61. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
  62. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
  63. package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
  64. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
  65. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  66. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
  67. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  68. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
  69. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  70. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  71. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
  72. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
  73. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
  74. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  75. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  76. package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
  77. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  78. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
  79. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  80. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  81. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  82. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  83. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  84. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  85. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  86. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  87. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  88. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  89. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  90. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  91. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  92. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  93. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
  94. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  95. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  96. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  97. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  98. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  99. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  100. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  101. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  102. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  103. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  104. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  105. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  106. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  107. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  108. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  109. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  110. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  111. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  112. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  113. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  114. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
  115. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
  116. package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
  117. package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
  118. package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
  119. package/artifacts/contracts/token/FeesFormula.sol/IFeesFormula.dbg.json +1 -1
  120. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
  121. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
  122. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
  123. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
  124. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
  125. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
  126. package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
  127. package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
  128. package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
  129. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
  130. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
  131. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
  132. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  133. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  134. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
  135. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  136. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  137. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
  138. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  139. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  140. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  141. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  142. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
  143. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
  144. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
  145. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
  146. package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
  147. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
  148. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  149. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
  150. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
  151. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  152. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  153. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  154. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  155. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  156. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  157. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  158. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  159. package/contracts/fuseFaucet/Faucet.sol +9 -8
  160. package/contracts/fuseFaucet/FuseFaucetV2.sol +16 -9
  161. package/package.json +1 -1
  162. package/test/faucet/Faucet.test.ts +166 -130
  163. package/types/Faucet.ts +50 -21
  164. package/types/FuseFaucetV2.ts +50 -0
  165. package/types/factories/Faucet__factory.ts +27 -8
  166. package/types/factories/FuseFaucetV2__factory.ts +27 -1
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/68cb43ee97229bfd7d32f64b68276b7f.json"
3
+ "buildInfo": "../../../build-info/61417d1e32653307199728de1d531678.json"
4
4
  }
@@ -47,6 +47,7 @@ contract Faucet is Initializable, UUPSUpgradeable, AccessControlUpgradeable {
47
47
  uint64 public maxDailyNewWallets;
48
48
  uint64 public dailyNewWalletsCount;
49
49
  uint32 public version;
50
+ uint8 public minTopping; //percentage of topping amount, that user can request to top
50
51
 
51
52
  function initialize(
52
53
  NameService _ns,
@@ -65,6 +66,7 @@ contract Faucet is Initializable, UUPSUpgradeable, AccessControlUpgradeable {
65
66
  nameService = _ns;
66
67
  maxPerWeekMultiplier = 2;
67
68
  maxDailyNewWallets = 5000;
69
+ minTopping = 15;
68
70
  }
69
71
 
70
72
  function _authorizeUpgrade(
@@ -75,13 +77,6 @@ contract Faucet is Initializable, UUPSUpgradeable, AccessControlUpgradeable {
75
77
  return IIdentityV2(nameService.getAddress("IDENTITY"));
76
78
  }
77
79
 
78
- function upgrade() public {
79
- require(version == 0, "already upgraded");
80
- if (maxDailyNewWallets == 0) maxDailyNewWallets = 5000;
81
- version++;
82
- setGasTopping(gasTopping / gasPrice);
83
- }
84
-
85
80
  modifier reimburseGas() {
86
81
  uint256 _gasRefund = gasleft();
87
82
  _;
@@ -157,6 +152,8 @@ contract Faucet is Initializable, UUPSUpgradeable, AccessControlUpgradeable {
157
152
 
158
153
  function canTop(address _user) external view returns (bool) {
159
154
  if (getToppingAmount() < address(_user).balance) return false;
155
+ uint256 toTop = getToppingAmount() - address(_user).balance;
156
+ if ((toTop * 100) / getToppingAmount() < minTopping) return false;
160
157
 
161
158
  address whitelistedRoot = getIdentity().getWhitelistedRoot(_user);
162
159
  _user = whitelistedRoot == address(0) ? _user : whitelistedRoot;
@@ -206,8 +203,8 @@ contract Faucet is Initializable, UUPSUpgradeable, AccessControlUpgradeable {
206
203
  ? _wallet
207
204
  : payable(whitelistedRoot);
208
205
 
209
- require(getToppingAmount() > address(_wallet).balance);
210
206
  uint256 toTop = getToppingAmount() - address(_wallet).balance;
207
+ require((toTop * 100) / getToppingAmount() >= minTopping, "low toTop");
211
208
 
212
209
  uint256 dayOfWeek = currentDay % 7;
213
210
 
@@ -259,4 +256,8 @@ contract Faucet is Initializable, UUPSUpgradeable, AccessControlUpgradeable {
259
256
  function setGasPrice(uint64 _price) external onlyRole(DEFAULT_ADMIN_ROLE) {
260
257
  gasPrice = _price;
261
258
  }
259
+
260
+ function setMinTopping(uint8 _minTop) external onlyRole(DEFAULT_ADMIN_ROLE) {
261
+ minTopping = _minTop;
262
+ }
262
263
  }
@@ -46,6 +46,7 @@ contract FuseFaucetV2 is Initializable {
46
46
  address public relayer;
47
47
  address public owner;
48
48
  uint32 public version;
49
+ uint8 public minTopping;
49
50
 
50
51
  function initialize(
51
52
  NameService _ns,
@@ -53,15 +54,17 @@ contract FuseFaucetV2 is Initializable {
53
54
  address _relayer,
54
55
  uint64 gweiTopping
55
56
  ) public initializer {
56
- if (relayer != address(0)) relayer = _relayer;
57
+ relayer = _relayer;
57
58
  gasPrice = _gasPrice;
58
- setGasTopping(gweiTopping);
59
+ gasTopping = gweiTopping; //1m gwei
60
+ perDayRoughLimit = 2 * gasTopping;
59
61
  maxDailyToppings = 3;
60
62
  startTime = block.timestamp;
61
63
  nameService = _ns;
62
64
  maxPerWeekMultiplier = 2;
63
65
  maxSwapAmount = 1000;
64
66
  maxDailyNewWallets = 5000;
67
+ minTopping = 15;
65
68
  }
66
69
 
67
70
  modifier upgrader(uint32 _newversion) {
@@ -175,6 +178,8 @@ contract FuseFaucetV2 is Initializable {
175
178
 
176
179
  function canTop(address _user) external view returns (bool) {
177
180
  if (getToppingAmount() < address(_user).balance) return false;
181
+ uint256 toTop = getToppingAmount() - address(_user).balance;
182
+ if ((toTop * 100) / getToppingAmount() < minTopping) return false;
178
183
 
179
184
  address whitelistedRoot = getIdentity().getWhitelistedRoot(_user);
180
185
  _user = whitelistedRoot == address(0) ? _user : whitelistedRoot;
@@ -209,12 +214,9 @@ contract FuseFaucetV2 is Initializable {
209
214
  * can only be done by admin the amount of times specified in constructor per day
210
215
  * @param _user The address to transfer to
211
216
  */
212
- function topWallet(address payable _user)
213
- public
214
- reimburseGas
215
- toppingLimit(_user)
216
- onlyAuthorized(_user)
217
- {
217
+ function topWallet(
218
+ address payable _user
219
+ ) public reimburseGas toppingLimit(_user) onlyAuthorized(_user) {
218
220
  _topWallet(_user);
219
221
  }
220
222
 
@@ -227,8 +229,9 @@ contract FuseFaucetV2 is Initializable {
227
229
  ? _wallet
228
230
  : payable(whitelistedRoot);
229
231
 
230
- require(getToppingAmount() > address(_wallet).balance);
232
+ // require(getToppingAmount() > address(_wallet).balance);
231
233
  uint256 toTop = getToppingAmount() - address(_wallet).balance;
234
+ require((toTop * 100) / getToppingAmount() >= minTopping, "low toTop");
232
235
 
233
236
  uint256 dayOfWeek = currentDay % 7;
234
237
 
@@ -276,4 +279,8 @@ contract FuseFaucetV2 is Initializable {
276
279
  function setGasPrice(uint64 _price) external onlyOwner {
277
280
  gasPrice = _price;
278
281
  }
282
+
283
+ function setMinTopping(uint8 _minTop) external onlyOwner {
284
+ minTopping = _minTop;
285
+ }
279
286
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddollar/goodprotocol",
3
- "version": "2.0.5-beta.6",
3
+ "version": "2.0.5-beta.7",
4
4
  "description": "GoodDollar Protocol",
5
5
  "scripts": {
6
6
  "prepack": "npm run minimize",
@@ -1,158 +1,194 @@
1
1
  import hre, { ethers, upgrades } from "hardhat";
2
2
  import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
3
3
  import { expect } from "chai";
4
- import { Faucet, IGoodDollar, IIdentity } from "../../types";
4
+ import { Faucet, FuseFaucetV2, IGoodDollar, IIdentity } from "../../types";
5
5
  import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address";
6
6
  import { createDAO } from "../helpers";
7
7
 
8
8
  const BN = ethers.BigNumber;
9
-
10
- describe("Faucet", () => {
11
- let faucet: Faucet, founder: SignerWithAddress;
12
- let user1 = ethers.Wallet.createRandom().connect(ethers.provider);
13
- let user2 = ethers.Wallet.createRandom().connect(ethers.provider);
14
- let signers;
15
-
16
- let avatar, gd: IGoodDollar, Controller, id: IIdentity;
17
-
18
- before(async () => {
19
- [founder, ...signers] = await ethers.getSigners();
20
-
21
- const FuseFaucetF = await ethers.getContractFactory("Faucet");
22
-
23
- let { daoCreator, controller, avatar: av, gd: gooddollar, identity, nameService } = await loadFixture(createDAO);
24
-
25
- Controller = controller;
26
- avatar = av;
27
-
28
- // await daoCreator.setSchemes(
29
- // avatar,
30
- // [identity],
31
- // [ethers.constants.HashZero],
32
- // ["0x0000001F"],
33
- // ""
34
- // );
35
- //NameService _ns,
36
- // uint64 _gasPrice,
37
- // address relayer,
38
- // address owner
39
- faucet = (await upgrades.deployProxy(
40
- FuseFaucetF,
41
- [nameService.address, 1e10, signers[0].address, founder.address],
42
- {
43
- kind: "uups"
44
- }
45
- )) as Faucet;
46
-
47
- gd = (await ethers.getContractAt("IGoodDollar", gooddollar, founder)) as IGoodDollar;
48
- id = (await ethers.getContractAt("IIdentity", identity, founder)) as IIdentity;
49
-
50
- await founder.sendTransaction({
51
- value: ethers.utils.parseEther("1"),
52
- to: faucet.address
9
+ ["FuseFaucetV2", "Faucet"].forEach(factory => {
10
+ describe(factory, () => {
11
+ let faucet: FuseFaucetV2 | Faucet, founder: SignerWithAddress, fuseFaucet: FuseFaucetV2, faucets;
12
+ let user1 = ethers.Wallet.createRandom().connect(ethers.provider);
13
+ let user2 = ethers.Wallet.createRandom().connect(ethers.provider);
14
+ let signers;
15
+
16
+ let avatar, gd: IGoodDollar, Controller, id: IIdentity;
17
+
18
+ const cleanFixture = async () => {};
19
+ before(async () => {
20
+ [founder, ...signers] = await ethers.getSigners();
21
+
22
+ const FuseFaucetF = await ethers.getContractFactory(factory);
23
+
24
+ let { daoCreator, controller, avatar: av, gd: gooddollar, identity, nameService } = await loadFixture(createDAO);
25
+
26
+ Controller = controller;
27
+ avatar = av;
28
+
29
+ // await daoCreator.setSchemes(
30
+ // avatar,
31
+ // [identity],
32
+ // [ethers.constants.HashZero],
33
+ // ["0x0000001F"],
34
+ // ""
35
+ // );
36
+
37
+ // faucet = (await upgrades.deployProxy(
38
+ // FuseFaucetF,
39
+ // [nameService.address, 1e10, signers[0].address, founder.address],
40
+ // {
41
+ // kind: "uups"
42
+ // }
43
+ // )) as Faucet;
44
+
45
+ faucet = (await upgrades.deployProxy(
46
+ await ethers.getContractFactory("FuseFaucetV2"),
47
+ [nameService.address, 1e10, signers[0].address, 1000000],
48
+ {
49
+ kind: "transparent"
50
+ }
51
+ )) as FuseFaucetV2;
52
+
53
+ gd = (await ethers.getContractAt("IGoodDollar", gooddollar, founder)) as IGoodDollar;
54
+ id = (await ethers.getContractAt("IIdentity", identity, founder)) as IIdentity;
55
+
56
+ await founder.sendTransaction({
57
+ value: ethers.utils.parseEther("1"),
58
+ to: faucet.address
59
+ });
60
+ faucets = [fuseFaucet, faucet];
61
+ await loadFixture(cleanFixture);
53
62
  });
54
- });
55
63
 
56
- it("should have balance", async () => {
57
- const balance = await ethers.provider.getBalance(faucet.address);
58
- expect(balance).to.equal(ethers.utils.parseEther("1"));
59
- });
60
-
61
- it("should not unauthorized to top new user", async () => {
62
- expect(await faucet.canTop(user1.address)).to.true;
63
- await expect(faucet.topWallet(user1.address)).revertedWith("not authorized");
64
- });
64
+ it("should have balance", async () => {
65
+ const balance = await ethers.provider.getBalance(faucet.address);
66
+ expect(balance).to.equal(ethers.utils.parseEther("1"));
67
+ });
65
68
 
66
- it("should let new user top once", async () => {
67
- expect(await faucet.canTop(user1.address)).to.true;
68
- const tx = await (await faucet.connect(signers[0]).topWallet(user1.address)).wait();
69
- const balance = await ethers.provider.getBalance(user1.address);
70
- expect(balance).to.equal(await faucet.getToppingAmount());
71
- });
69
+ it("should not unauthorized to top new user", async () => {
70
+ expect(await faucet.canTop(user1.address)).to.true;
71
+ await expect(faucet.topWallet(user1.address)).revertedWith("not authorized");
72
+ });
72
73
 
73
- it("should not let new user top more than once", async () => {
74
- await user1.sendTransaction({
75
- to: ethers.constants.AddressZero,
76
- value: ethers.utils.parseUnits("400000", "gwei")
74
+ it("should let new user top once", async () => {
75
+ expect(await faucet.canTop(user1.address)).to.true;
76
+ const tx = await (await faucet.connect(signers[0]).topWallet(user1.address)).wait();
77
+ const balance = await ethers.provider.getBalance(user1.address);
78
+ expect(balance).to.equal(await faucet.getToppingAmount());
77
79
  });
78
- expect(await faucet.canTop(user1.address)).to.false;
79
- await expect(faucet.connect(signers[0]).topWallet(user1.address)).to.revertedWith(
80
- "User not whitelisted or not first time"
81
- );
82
- });
83
80
 
84
- it("should not refund gas when reverted", async () => {
85
- const balance = await ethers.provider.getBalance(founder.address);
86
- const faucetBalance = await ethers.provider.getBalance(faucet.address);
87
- expect(await faucet.canTop(user1.address)).to.false;
88
- await expect(faucet.topWallet(user1.address)).to.revertedWith("User not whitelisted or not first time");
89
- const balanceAfter = await ethers.provider.getBalance(founder.address);
90
- const faucetBalanceAfter = await ethers.provider.getBalance(faucet.address);
91
- expect(faucetBalanceAfter).to.eq(faucetBalance);
92
- expect(balanceAfter).to.lt(balance);
93
- });
81
+ it("should not let new user top more than once", async () => {
82
+ await user1.sendTransaction({
83
+ to: ethers.constants.AddressZero,
84
+ value: ethers.utils.parseUnits("400000", "gwei")
85
+ });
86
+ expect(await faucet.canTop(user1.address)).to.false;
87
+ await expect(faucet.connect(signers[0]).topWallet(user1.address)).to.revertedWith(
88
+ "User not whitelisted or not first time"
89
+ );
90
+ });
94
91
 
95
- it("should let user top again once identified", async () => {
96
- await id.addWhitelistedWithDID(user1.address, "did:1");
97
- expect(await faucet.canTop(user1.address)).to.true;
98
- const tx = await (await faucet.topWallet(user1.address)).wait();
99
- console.log(tx.gasUsed.toString());
100
- const balance = await ethers.provider.getBalance(user1.address);
101
- expect(balance).to.equal(await faucet.getToppingAmount());
102
- });
92
+ it("should not refund gas when reverted", async () => {
93
+ const balance = await ethers.provider.getBalance(founder.address);
94
+ const faucetBalance = await ethers.provider.getBalance(faucet.address);
95
+ expect(await faucet.canTop(user1.address)).to.false;
96
+ await expect(faucet.topWallet(user1.address)).to.revertedWith("User not whitelisted or not first time");
97
+ const balanceAfter = await ethers.provider.getBalance(founder.address);
98
+ const faucetBalanceAfter = await ethers.provider.getBalance(faucet.address);
99
+ expect(faucetBalanceAfter).to.eq(faucetBalance);
100
+ expect(balanceAfter).to.lt(balance);
101
+ });
103
102
 
104
- it("should not let identified user top over daily limit", async () => {
105
- await user1.sendTransaction({
106
- to: ethers.constants.AddressZero,
107
- value: ethers.utils.parseUnits("400000", "gwei")
103
+ it("should let user top again once identified", async () => {
104
+ await user1.sendTransaction({
105
+ to: ethers.constants.AddressZero,
106
+ value: (await ethers.provider.getBalance(user1.address)).sub(ethers.utils.parseUnits("100000", "gwei"))
107
+ });
108
+ await id.addWhitelistedWithDID(user1.address, "did:1");
109
+ expect(await faucet.canTop(user1.address)).to.true;
110
+ const tx = await (await faucet.topWallet(user1.address)).wait();
111
+ console.log(tx.gasUsed.toString());
112
+ const balance = await ethers.provider.getBalance(user1.address);
113
+ expect(balance).to.equal(await faucet.getToppingAmount());
108
114
  });
109
- const tx = await (await faucet.topWallet(user1.address)).wait();
110
- await user1.sendTransaction({
111
- to: ethers.constants.AddressZero,
112
- value: ethers.utils.parseUnits("400000", "gwei")
115
+
116
+ it("should not let identified user top over daily limit", async () => {
117
+ await user1.sendTransaction({
118
+ to: ethers.constants.AddressZero,
119
+ value: (await ethers.provider.getBalance(user1.address)).sub(ethers.utils.parseUnits("100000", "gwei"))
120
+ });
121
+ const tx = await (await faucet.topWallet(user1.address)).wait();
122
+ await user1.sendTransaction({
123
+ to: ethers.constants.AddressZero,
124
+ value: ethers.utils.parseUnits("400000", "gwei")
125
+ });
126
+ expect(await faucet.canTop(user1.address)).to.false;
127
+ await expect(faucet.topWallet(user1.address)).to.revertedWith("max daily toppings");
113
128
  });
114
- expect(await faucet.canTop(user1.address)).to.false;
115
- await expect(faucet.topWallet(user1.address)).to.revertedWith("max daily toppings");
116
- });
117
129
 
118
- // it("should not top if wallet not half empty", async () => {
119
- // expect(await faucet.canTop(founder.address)).to.false;
120
- // await expect(faucet.topWallet(founder.address)).to.revertedWith(
121
- // "User balance above minimum"
122
- // );
123
- // });
124
-
125
- it("should not let user top over weekly limit", async () => {
126
- const toppingAmount = await faucet.getToppingAmount();
127
- for (let i = 0; i < 5; i++) {
128
- await ethers.provider.send("evm_increaseTime", [60 * 60 * 24]);
129
- await (await faucet.topWallet(user1.address)).wait();
130
+ // it("should not top if wallet not half empty", async () => {
131
+ // expect(await faucet.canTop(founder.address)).to.false;
132
+ // await expect(faucet.topWallet(founder.address)).to.revertedWith(
133
+ // "User balance above minimum"
134
+ // );
135
+ // });
136
+
137
+ it("should not let user top over weekly limit", async () => {
138
+ const toppingAmount = await faucet.getToppingAmount();
130
139
  await user1.sendTransaction({
131
140
  to: ethers.constants.AddressZero,
132
141
  value: toppingAmount.mul(80).div(100)
133
142
  });
134
- }
135
- await ethers.provider.send("evm_increaseTime", [60 * 60 * 24]);
143
+ for (let i = 0; i < 2; i++) {
144
+ await ethers.provider.send("evm_increaseTime", [60 * 60 * 24]);
145
+ await (await faucet.topWallet(user1.address)).wait();
146
+ await user1.sendTransaction({
147
+ to: ethers.constants.AddressZero,
148
+ value: toppingAmount.mul(80).div(100)
149
+ });
150
+ console.log(toppingAmount.toString(), { i });
151
+ }
152
+ // await ethers.provider.send("evm_increaseTime", [60 * 60 * 24]);
136
153
 
137
- expect(await faucet.canTop(user1.address)).to.false;
138
- await expect(faucet.topWallet(user1.address)).to.revertedWith(
139
- "User wallet has been topped too many times this week"
140
- );
154
+ await expect(faucet.topWallet(user1.address)).to.revertedWith(
155
+ "User wallet has been topped too many times this week"
156
+ );
157
+ expect(await faucet.canTop(user1.address)).to.false;
141
158
 
142
- //should be able to top again after some days passed
143
- await ethers.provider.send("evm_increaseTime", [60 * 60 * 24 * 3]);
144
- await ethers.provider.send("evm_mine", []);
159
+ //should be able to top again after some days passed
160
+ await ethers.provider.send("evm_increaseTime", [60 * 60 * 24 * 5]);
161
+ await ethers.provider.send("evm_mine", []);
145
162
 
146
- expect(await faucet.canTop(user1.address)).to.true;
147
- });
163
+ expect(await faucet.canTop(user1.address)).to.true;
164
+ });
165
+
166
+ it("should not top below minTopping", async () => {
167
+ await id.addWhitelistedWithDID(user2.address, "did:2");
148
168
 
149
- it("should reimburse gas costs", async () => {
150
- const balance = await ethers.provider.getBalance(founder.address);
151
- const tx = await (await faucet.connect(signers[0]).topWallet(user2.address, { gasPrice: 1e9 })).wait();
152
- // const gasCosts = tx.gasUsed.mul(1e9);
153
- // const afterRefund = gasCosts.sub(await faucet["gasRefund()"]());
154
- const balanceAfter = await ethers.provider.getBalance(founder.address);
155
- const diff = balance.sub(balanceAfter).toNumber();
156
- expect(diff).to.lt(10000);
169
+ const toppingAmount = await faucet.getToppingAmount();
170
+ console.log(toppingAmount.toString(), "topping amount");
171
+ const minTopping = await faucet.minTopping();
172
+ const balance = await ethers.provider.getBalance(founder.address);
173
+ await founder.sendTransaction({ to: user2.address, value: toppingAmount.mul(100 - minTopping + 1).div(100) });
174
+
175
+ expect(await faucet.canTop(user2.address)).to.be.false;
176
+ await expect(faucet.topWallet(user2.address)).to.revertedWith("low toTop");
177
+ await user2.sendTransaction({ to: founder.address, value: toppingAmount.mul(2).div(100) });
178
+ expect(await faucet.canTop(user2.address)).to.be.true;
179
+ await expect(faucet.topWallet(user2.address)).not.reverted;
180
+ });
181
+
182
+ it("should reimburse gas costs", async () => {
183
+ const tempUser = ethers.Wallet.createRandom().connect(ethers.provider);
184
+
185
+ const balance = await ethers.provider.getBalance(founder.address);
186
+ const tx = await (await faucet.connect(signers[0]).topWallet(tempUser.address, { gasPrice: 1e9 })).wait();
187
+ // const gasCosts = tx.gasUsed.mul(1e9);
188
+ // const afterRefund = gasCosts.sub(await faucet["gasRefund()"]());
189
+ const balanceAfter = await ethers.provider.getBalance(founder.address);
190
+ const diff = balance.sub(balanceAfter).toNumber();
191
+ expect(diff).to.lt(10000);
192
+ });
157
193
  });
158
194
  });