@gooddollar/goodprotocol 2.0.12 → 2.0.14-beta.0

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 (495) hide show
  1. package/artifacts/abis/AdminWallet.min.json +1 -1
  2. package/artifacts/abis/AdminWalletFuse.min.json +1 -1
  3. package/artifacts/abis/DistributionBridgeMock.min.json +1 -1
  4. package/artifacts/abis/DistributionHelper.min.json +1 -1
  5. package/artifacts/abis/DistributionHelperTest.min.json +1 -1
  6. package/artifacts/abis/DistributionHelperTestHelper.min.json +1 -1
  7. package/artifacts/abis/GasPriceMockOracle.min.json +1 -1
  8. package/artifacts/abis/GoodCompoundStakingTest.min.json +1 -1
  9. package/artifacts/abis/GoodReserveCDai.min.json +1 -1
  10. package/artifacts/abis/IFeesFormula.min.json +1 -1
  11. package/artifacts/abis/ISuperGoodDollar.min.json +1 -1
  12. package/artifacts/abis/ISuperToken.min.json +1 -0
  13. package/artifacts/abis/MultichainFeeFormula.min.json +1 -0
  14. package/artifacts/abis/SuperGoodDollar.min.json +1 -1
  15. package/artifacts/abis/SuperToken.min.json +1 -1
  16. package/artifacts/abis/UBIScheme.min.json +1 -1
  17. package/artifacts/abis/UBISchemeV2.min.json +1 -1
  18. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  19. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  20. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  21. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  22. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  23. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  28. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  34. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  35. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
  36. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  37. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
  38. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  39. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  40. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  43. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  44. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  45. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  46. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  47. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
  48. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +2 -2
  49. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  50. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +2 -2
  51. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
  52. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +2 -2
  53. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  55. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  56. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +2 -2
  57. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  58. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
  59. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
  60. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.json +2 -2
  61. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
  62. package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
  63. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
  64. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  65. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
  66. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  67. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  68. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
  69. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  71. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
  72. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  73. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
  74. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.json +2 -2
  75. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  76. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
  77. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
  78. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.json +2 -2
  79. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  80. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.json +2 -2
  81. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
  82. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.json +2 -2
  83. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
  84. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.json +2 -2
  85. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
  86. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.json +2 -2
  87. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  88. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.json +2 -2
  89. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
  90. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.json +2 -2
  91. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  92. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.json +2 -2
  93. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
  94. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.json +122 -17
  95. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
  96. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.json +242 -17
  97. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
  98. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +256 -18
  99. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
  100. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.json +2 -2
  101. package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
  102. package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.json +2 -2
  103. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
  104. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.json +15 -2
  105. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  106. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +6 -6
  107. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
  108. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +2 -2
  109. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  110. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
  111. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
  112. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.json +2 -2
  113. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  114. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.json +2 -2
  115. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  116. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.json +2 -2
  117. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
  118. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
  119. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.json +2 -2
  120. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
  121. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  122. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +2 -2
  123. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  124. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  125. package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
  126. package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.json +2 -2
  127. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  128. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.json +2 -2
  129. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
  130. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.json +2 -2
  131. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  132. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
  133. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  134. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.json +2 -2
  135. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  136. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
  137. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  138. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
  139. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  140. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
  141. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  142. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
  143. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  144. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.json +2 -2
  145. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  146. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.json +2 -2
  147. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  148. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.json +2 -2
  149. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  150. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.json +2 -2
  151. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  152. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.json +2 -2
  153. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  154. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.json +2 -2
  155. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  156. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.json +2 -2
  157. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  158. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.json +2 -2
  159. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
  160. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +242 -17
  161. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  162. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  163. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  164. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
  165. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  166. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  167. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +45 -19
  168. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  169. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
  170. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  171. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
  172. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  173. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  174. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  175. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +2 -2
  176. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  177. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  178. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  179. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +2 -2
  180. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  181. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  182. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  183. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  184. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  185. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  186. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  187. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  188. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  189. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  190. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  191. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  192. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  193. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  194. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  195. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  196. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
  197. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.json +2 -2
  198. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
  199. package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
  200. package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.json +2 -2
  201. package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
  202. package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
  203. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
  204. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.json +2 -2
  205. package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +4 -0
  206. package/artifacts/contracts/token/{FeesFormula.sol → IFeesFormula.sol}/IFeesFormula.json +1 -1
  207. package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +4 -0
  208. package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.json +58 -0
  209. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
  210. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
  211. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
  212. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
  213. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.json +159 -5
  214. package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +4 -0
  215. package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.json +1609 -0
  216. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
  217. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +233 -190
  218. package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
  219. package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.json +198 -193
  220. package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
  221. package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
  222. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
  223. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
  224. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.json +2 -2
  225. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
  226. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.json +2 -2
  227. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  228. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +20 -2
  229. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
  230. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.json +20 -2
  231. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  232. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +41 -2
  233. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
  234. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.json +35 -9
  235. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  236. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.json +2 -2
  237. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  238. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +2 -2
  239. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
  240. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.json +2 -2
  241. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
  242. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.json +2 -2
  243. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
  244. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.json +2 -2
  245. package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.dbg.json +1 -1
  246. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  247. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
  248. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  249. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
  250. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  251. package/artifacts/contracts/utils/DSMath.sol/DSMath.json +2 -2
  252. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  253. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.json +2 -2
  254. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
  255. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.json +2 -2
  256. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
  257. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +2 -2
  258. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
  259. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
  260. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
  261. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.json +2 -2
  262. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
  263. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.json +2 -2
  264. package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
  265. package/artifacts/contracts/utils/MultiCall.sol/Multicall.json +2 -2
  266. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
  267. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.json +2 -2
  268. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  269. package/artifacts/contracts/utils/NameService.sol/NameService.json +2 -2
  270. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
  271. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.json +2 -2
  272. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
  273. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.json +2 -2
  274. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  275. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  276. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
  277. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  278. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
  279. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  280. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
  281. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  282. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
  283. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  284. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.json +2 -2
  285. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  286. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.json +2 -2
  287. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  288. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  289. package/contracts/invite/InvitesFuseV2.sol +3 -2
  290. package/contracts/mocks/DistributionBridgeMock.sol +42 -15
  291. package/contracts/mocks/DistributionHelperTest.sol +6 -2
  292. package/contracts/mocks/FeesFormularMock.sol +14 -14
  293. package/contracts/mocks/GasPriceMockOracle.sol +7 -1
  294. package/contracts/reserve/DistributionHelper.sol +147 -23
  295. package/contracts/reserve/GoodReserveCDai.sol +39 -47
  296. package/contracts/staking/GoodFundManager.sol +18 -37
  297. package/contracts/token/GoodDollar.sol +11 -16
  298. package/contracts/token/MultichainFeeFormula.sol +34 -0
  299. package/contracts/token/superfluid/ConstantFlowNFTs.sol +3 -0
  300. package/contracts/token/superfluid/ISuperGoodDollar.sol +4 -5
  301. package/contracts/token/superfluid/ISuperToken.sol +464 -0
  302. package/contracts/token/superfluid/SuperGoodDollar.sol +408 -376
  303. package/contracts/token/superfluid/SuperToken.sol +144 -144
  304. package/contracts/ubi/UBIScheme.sol +9 -5
  305. package/contracts/ubi/UBISchemeV2.sol +6 -0
  306. package/contracts/utils/AdminWallet.sol +23 -11
  307. package/contracts/utils/AdminWalletFuse.sol +21 -15
  308. package/contracts/utils/BuyAndBridgeHelper.sol +13 -13
  309. package/contracts/utils/MultiCall.sol +8 -10
  310. package/dist/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  311. package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +233 -190
  312. package/dist/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.json +2 -2
  313. package/dist/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.json +2 -2
  314. package/hardhat.config.ts +49 -14
  315. package/package.json +7 -7
  316. package/releases/deploy-settings.json +3 -1
  317. package/releases/deployment.json +9 -3
  318. package/scripts/analytics/checkActiveWallets.ts +60 -0
  319. package/scripts/analytics/faucetStats.ts +30 -39
  320. package/scripts/fv.ts +305 -0
  321. package/scripts/multichain-deploy/1_basicdao-deploy.ts +18 -9
  322. package/scripts/multichain-deploy/helpers.ts +205 -65
  323. package/scripts/proposals/gip-15.ts +427 -0
  324. package/scripts/upgrades/multichain-formula-upgrade.ts +140 -0
  325. package/scripts/upgrades/restoreFunds.ts +91 -0
  326. package/scripts/upgrades/superfluid-nft-celo-gas-token.ts +159 -0
  327. package/scripts/upgrades/upgradeAdminWallet.ts +29 -0
  328. package/scripts/utils.ts +15 -0
  329. package/test/helpers.ts +73 -10
  330. package/test/reserve/DistributionHelper.test.ts +183 -218
  331. package/test/reserve/GoodReserveCDai.distribution.test.ts +21 -144
  332. package/test/reserve/GoodReserveCDai.test.ts +98 -302
  333. package/test/staking/StakingRewards.test.ts +324 -936
  334. package/test/token/CeloGasToken.test.ts +108 -0
  335. package/test/token/SuperGoodDollar.test.ts +15 -6
  336. package/test/utils/AdminWallet.test.ts +19 -12
  337. package/test/utils/BuyAndBridgeHelper.test.ts +9 -33
  338. package/truffle-config.js +24 -6
  339. package/types/AdminWallet.ts +59 -0
  340. package/types/AdminWalletFuse.ts +41 -7
  341. package/types/ConstantInflowNFT.ts +969 -0
  342. package/types/ConstantOutflowNFT.ts +1031 -0
  343. package/types/DistributionBridgeMock.ts +203 -70
  344. package/types/DistributionHelper.ts +325 -30
  345. package/types/DistributionHelperTest.ts +325 -30
  346. package/types/DistributionHelperTestHelper.ts +355 -35
  347. package/types/FlowNFTBase.ts +887 -0
  348. package/types/GasPriceMockOracle.ts +29 -0
  349. package/types/GoodReserveCDai.ts +79 -20
  350. package/types/IConstantFlowAgreementV1.ts +1391 -0
  351. package/types/IConstantInflowNFT.ts +772 -0
  352. package/types/IConstantOutflowNFT.ts +834 -0
  353. package/types/IERC721.ts +487 -0
  354. package/types/IERC721Metadata.ts +538 -0
  355. package/types/IFlowNFTBase.ts +711 -0
  356. package/types/IInstantDistributionAgreementV1.ts +1183 -0
  357. package/types/ILayerZeroFeeEstimator.ts +136 -0
  358. package/types/IMessagePassingBridge.ts +774 -0
  359. package/types/ISETH.ts +2668 -0
  360. package/types/ISETHCustom.ts +161 -0
  361. package/types/ISuperGoodDollar.ts +277 -25
  362. package/types/ISuperToken.ts +202 -346
  363. package/types/ISuperfluid.ts +7 -2
  364. package/types/ISuperfluidGovernance.ts +40 -5
  365. package/types/MultichainFeeFormula.ts +130 -0
  366. package/types/SuperGoodDollar.ts +383 -349
  367. package/types/SuperToken.ts +319 -344
  368. package/types/UBIScheme.ts +36 -0
  369. package/types/UBISchemeV2.ts +36 -0
  370. package/types/factories/AaveMock__factory.ts +1 -1
  371. package/types/factories/AaveStakingFactory__factory.ts +1 -1
  372. package/types/factories/AaveUSDMockOracle__factory.ts +1 -1
  373. package/types/factories/AdminWalletFuse__factory.ts +34 -8
  374. package/types/factories/AdminWallet__factory.ts +40 -1
  375. package/types/factories/BancorFormula__factory.ts +1 -1
  376. package/types/factories/BaseShareFieldV2__factory.ts +1 -1
  377. package/types/factories/BaseShareField__factory.ts +1 -1
  378. package/types/factories/BatUSDMockOracle__factory.ts +1 -1
  379. package/types/factories/BuyAndBridgeHelper__factory.ts +1 -1
  380. package/types/factories/BuyGDCloneFactory__factory.ts +1 -1
  381. package/types/factories/BuyGDClone__factory.ts +1 -1
  382. package/types/factories/CBATMock__factory.ts +1 -1
  383. package/types/factories/CDAILowWorthMock__factory.ts +1 -1
  384. package/types/factories/CDAIMock__factory.ts +1 -1
  385. package/types/factories/CDAINonMintableMock__factory.ts +1 -1
  386. package/types/factories/CDecimalsMock__factory.ts +1 -1
  387. package/types/factories/CSDTMock__factory.ts +1 -1
  388. package/types/factories/CUSDCMock__factory.ts +1 -1
  389. package/types/factories/ClaimersDistribution__factory.ts +1 -1
  390. package/types/factories/CompUSDMockOracle__factory.ts +1 -1
  391. package/types/factories/CompoundStakingFactory__factory.ts +1 -1
  392. package/types/factories/CompoundVotingMachine__factory.ts +1 -1
  393. package/types/factories/ConstantInflowNFT__factory.ts +758 -0
  394. package/types/factories/ConstantOutflowNFT__factory.ts +817 -0
  395. package/types/factories/DAIMock__factory.ts +1 -1
  396. package/types/factories/DAOContract__factory.ts +1 -1
  397. package/types/factories/DAOUpgradeableContract__factory.ts +1 -1
  398. package/types/factories/DaiEthPriceMockOracle__factory.ts +1 -1
  399. package/types/factories/DecimalsMock__factory.ts +1 -1
  400. package/types/factories/DistributionBridgeMock__factory.ts +121 -16
  401. package/types/factories/DistributionHelperTestHelper__factory.ts +255 -17
  402. package/types/factories/DistributionHelperTest__factory.ts +241 -16
  403. package/types/factories/DistributionHelper__factory.ts +241 -16
  404. package/types/factories/DonationsStaking__factory.ts +1 -1
  405. package/types/factories/ERC1967Proxy__factory.ts +1 -1
  406. package/types/factories/ERC20PresetMinterPauserUpgradeable__factory.ts +1 -1
  407. package/types/factories/ERC20Upgradeable__factory.ts +1 -1
  408. package/types/factories/EthUSDMockOracle__factory.ts +1 -1
  409. package/types/factories/EventsEmitter__factory.ts +1 -1
  410. package/types/factories/ExchangeHelper__factory.ts +1 -1
  411. package/types/factories/Faucet__factory.ts +1 -1
  412. package/types/factories/FeesFormulaMock__factory.ts +1 -1
  413. package/types/factories/FlowNFTBase__factory.ts +642 -0
  414. package/types/factories/FuseFaucetV2__factory.ts +1 -1
  415. package/types/factories/FuseFaucet__factory.ts +1 -1
  416. package/types/factories/FuseStakingV3__factory.ts +1 -1
  417. package/types/factories/GDFaucet__factory.ts +1 -1
  418. package/types/factories/GReputation__factory.ts +1 -1
  419. package/types/factories/GasPriceMockOracle__factory.ts +14 -1
  420. package/types/factories/GoodAaveStakingV2__factory.ts +1 -1
  421. package/types/factories/GoodAaveStaking__factory.ts +1 -1
  422. package/types/factories/GoodCompoundStakingTest__factory.ts +1 -1
  423. package/types/factories/GoodCompoundStakingV2__factory.ts +1 -1
  424. package/types/factories/GoodCompoundStaking__factory.ts +1 -1
  425. package/types/factories/GoodDollarMintBurnWrapper__factory.ts +1 -1
  426. package/types/factories/GoodDollarStakingMock__factory.ts +1 -1
  427. package/types/factories/GoodDollarStaking__factory.ts +1 -1
  428. package/types/factories/GoodDollar__factory.ts +1 -1
  429. package/types/factories/GoodFundManagerTest__factory.ts +1 -1
  430. package/types/factories/GoodFundManager__factory.ts +1 -1
  431. package/types/factories/GoodMarketMaker__factory.ts +1 -1
  432. package/types/factories/GoodReserveCDai__factory.ts +44 -18
  433. package/types/factories/GovernanceStaking__factory.ts +1 -1
  434. package/types/factories/IConstantFlowAgreementV1__factory.ts +1064 -0
  435. package/types/factories/IConstantInflowNFT__factory.ts +551 -0
  436. package/types/factories/IConstantOutflowNFT__factory.ts +614 -0
  437. package/types/factories/IERC721Metadata__factory.ts +356 -0
  438. package/types/factories/IERC721__factory.ts +308 -0
  439. package/types/factories/IFlowNFTBase__factory.ts +512 -0
  440. package/types/factories/IInstantDistributionAgreementV1__factory.ts +1015 -0
  441. package/types/factories/ILayerZeroFeeEstimator__factory.ts +79 -0
  442. package/types/factories/IMessagePassingBridge__factory.ts +446 -0
  443. package/types/factories/ISETHCustom__factory.ts +56 -0
  444. package/types/factories/ISETH__factory.ts +1866 -0
  445. package/types/factories/ISuperGoodDollar__factory.ts +159 -5
  446. package/types/factories/ISuperTokenFactory__factory.ts +5 -0
  447. package/types/factories/ISuperToken__factory.ts +130 -191
  448. package/types/factories/ISuperfluidGovernance__factory.ts +23 -5
  449. package/types/factories/ISuperfluid__factory.ts +10 -0
  450. package/types/factories/IdentityFix__factory.ts +1 -1
  451. package/types/factories/IdentityMock__factory.ts +1 -1
  452. package/types/factories/IdentityV2__factory.ts +1 -1
  453. package/types/factories/IncentiveControllerMock__factory.ts +1 -1
  454. package/types/factories/InvitesFuseV2__factory.ts +1 -1
  455. package/types/factories/InvitesV1__factory.ts +1 -1
  456. package/types/factories/InvitesV2__factory.ts +1 -1
  457. package/types/factories/LendingPoolMock__factory.ts +1 -1
  458. package/types/factories/Multicall__factory.ts +1 -1
  459. package/types/factories/MultichainBridgeHelper__factory.ts +1 -1
  460. package/types/factories/MultichainFeeFormula__factory.ts +113 -0
  461. package/types/factories/MultichainRouterMock__factory.ts +1 -1
  462. package/types/factories/NameService__factory.ts +1 -1
  463. package/types/factories/OneTimePaymentsV2__factory.ts +1 -1
  464. package/types/factories/OneTimePayments__factory.ts +1 -1
  465. package/types/factories/OverMintTesterRegularStake__factory.ts +1 -1
  466. package/types/factories/OverMintTester__factory.ts +1 -1
  467. package/types/factories/PayableMock__factory.ts +1 -1
  468. package/types/factories/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  469. package/types/factories/ProtocolUpgradeFuse__factory.ts +1 -1
  470. package/types/factories/ProtocolUpgradeRecover__factory.ts +1 -1
  471. package/types/factories/ProtocolUpgrade__factory.ts +1 -1
  472. package/types/factories/ProxyFactory1967__factory.ts +1 -1
  473. package/types/factories/ReputationTestHelper__factory.ts +1 -1
  474. package/types/factories/Reputation__factory.ts +1 -1
  475. package/types/factories/SixteenDecimalsTokenMock__factory.ts +1 -1
  476. package/types/factories/StakersDistribution__factory.ts +1 -1
  477. package/types/factories/StakingMockFixedAPY__factory.ts +1 -1
  478. package/types/factories/SuperGoodDollar__factory.ts +230 -187
  479. package/types/factories/SuperToken__factory.ts +197 -192
  480. package/types/factories/SwapHelperTest__factory.ts +1 -1
  481. package/types/factories/TwentyDecimalsTokenMock__factory.ts +1 -1
  482. package/types/factories/UBISchemeV2__factory.ts +19 -1
  483. package/types/factories/UBIScheme__factory.ts +19 -1
  484. package/types/factories/USDCMock__factory.ts +1 -1
  485. package/types/factories/UUPSProxy__factory.ts +1 -1
  486. package/types/factories/UniswapV2SwapHelper__factory.ts +1 -1
  487. package/types/factories/UpgradableMock2__factory.ts +1 -1
  488. package/types/factories/UpgradableMock3__factory.ts +1 -1
  489. package/types/factories/UpgradableMock4__factory.ts +1 -1
  490. package/types/factories/UpgradableMock__factory.ts +1 -1
  491. package/types/hardhat.d.ts +166 -4
  492. package/types/index.ts +34 -4
  493. package/yarn.lock +1288 -719
  494. package/artifacts/contracts/token/FeesFormula.sol/IFeesFormula.dbg.json +0 -4
  495. /package/contracts/token/{FeesFormula.sol → IFeesFormula.sol} +0 -0
@@ -58,14 +58,8 @@ describe("GoodReserve - staking with cDAI mocks", () => {
58
58
  nameService = ns;
59
59
  runAsAvatarOnly = raao;
60
60
  await setDAOAddress("UNISWAP_ROUTER", signers[0].address);
61
- const exchangeHelperFactory = await ethers.getContractFactory(
62
- "ExchangeHelper"
63
- );
64
- exchangeHelper = await upgrades.deployProxy(
65
- exchangeHelperFactory,
66
- [nameService.address],
67
- { kind: "uups" }
68
- );
61
+ const exchangeHelperFactory = await ethers.getContractFactory("ExchangeHelper");
62
+ exchangeHelper = await upgrades.deployProxy(exchangeHelperFactory, [nameService.address], { kind: "uups" });
69
63
  await exchangeHelper.setAddresses();
70
64
  await setDAOAddress("EXCHANGE_HELPER", exchangeHelper.address);
71
65
  console.log("deployed dao", {
@@ -165,17 +159,11 @@ describe("GoodReserve - staking with cDAI mocks", () => {
165
159
 
166
160
  await increaseTime(24 * 60 * 60); //required for reserve ratio advance
167
161
  const er = await cDAI.exchangeRateStored();
168
- const daiAmount = ethers.utils
169
- .parseEther("0.1")
170
- .mul(BN.from("10").pow(10))
171
- .mul(er)
172
- .div(BN.from("10").pow(28));
162
+ const daiAmount = ethers.utils.parseEther("0.1").mul(BN.from("10").pow(10)).mul(er).div(BN.from("10").pow(28));
173
163
 
174
164
  await dai["mint(address,uint256)"](goodReserve.address, daiAmount);
175
- const tx = await (
176
- await goodReserve.mintUBI(daiAmount, 0, cDAI.address)
177
- ).wait();
178
- const gdBalanceFund = await goodDollar.balanceOf(founder.address);
165
+ const tx = await (await goodReserve.mintUBI(daiAmount, 0, cDAI.address)).wait();
166
+ const gdBalanceFund = await goodDollar.balanceOf(await goodReserve.distributionHelper());
179
167
  const gdPriceAfter = await goodReserve["currentPrice()"]();
180
168
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
181
169
  let reserveBalanceAfter = reserveToken.reserveSupply;
@@ -183,32 +171,20 @@ describe("GoodReserve - staking with cDAI mocks", () => {
183
171
  let rrAfter = reserveToken.reserveRatio;
184
172
  // expected that minted token will be added to the previous supply
185
173
  const mintEvent = tx.events.find(_ => _.event === "UBIMinted");
186
- console.log(
187
- gdPriceBefore.toNumber(),
188
- supplyAfter.toNumber(),
189
- supplyBefore.toNumber()
190
- );
174
+ console.log(gdPriceBefore.toNumber(), supplyAfter.toNumber(), supplyBefore.toNumber());
191
175
  expect(supplyAfter).to.be.equal(
192
- mintEvent.args.gdInterestMinted
193
- .add(mintEvent.args.gdExpansionMinted)
194
- .add(supplyBefore)
176
+ mintEvent.args.gdInterestMinted.add(mintEvent.args.gdExpansionMinted).add(supplyBefore)
195
177
  );
196
178
  // expected that the new reserve balance will include
197
179
  // the new 1e18 cdai which transferred
198
- expect(reserveBalanceAfter).to.be.equal(
199
- reserveBalanceBefore.add(BN.from("10").pow(17))
200
- );
180
+ expect(reserveBalanceAfter).to.be.equal(reserveBalanceBefore.add(BN.from("10").pow(17)));
201
181
  // the new reserve ratio should be effected from the mintExpansion by:
202
182
  // the daily change that was set up in the constructor (999388834642296)
203
183
  // requires the time advance simulation above
204
184
  expect(rrAfter.toString()).to.be.equal("999388");
205
185
  // the price should be the same
206
186
  expect(gdPriceAfter).to.be.equal(gdPriceBefore);
207
- expect(gdBalanceFund).to.be.equal(
208
- mintEvent.args.gdInterestMinted
209
- .add(mintEvent.args.gdExpansionMinted)
210
- .toString()
211
- );
187
+ expect(gdBalanceFund).to.be.equal(mintEvent.args.gdInterestMinted.add(mintEvent.args.gdExpansionMinted).toString());
212
188
  });
213
189
 
214
190
  it("should not mint UBI if the reserve is not cDAI", async () => {
@@ -224,10 +200,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
224
200
  it("should be able to buy gd with DAI", async () => {
225
201
  let daiAmount = ethers.utils.parseEther("100");
226
202
  const cdaiRateStored = await cDAI.exchangeRateStored();
227
- let amount = daiAmount
228
- .div(BigNumber.from(10).pow(10))
229
- .mul(BigNumber.from(10).pow(28))
230
- .div(cdaiRateStored);
203
+ let amount = daiAmount.div(BigNumber.from(10).pow(10)).mul(BigNumber.from(10).pow(28)).div(cdaiRateStored);
231
204
  await dai["mint(uint256)"](daiAmount);
232
205
  await dai.approve(exchangeHelper.address, daiAmount);
233
206
  expect(await nameService.getAddress("DAI")).to.be.equal(dai.address);
@@ -240,9 +213,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
240
213
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
241
214
  const priceBefore = await goodReserve["currentPrice()"]();
242
215
 
243
- let transaction = await (
244
- await exchangeHelper.buy([dai.address], daiAmount, 0, 0, NULL_ADDRESS)
245
- ).wait();
216
+ let transaction = await (await exchangeHelper.buy([dai.address], daiAmount, 0, 0, NULL_ADDRESS)).wait();
246
217
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
247
218
  let reserveBalanceAfter = reserveToken.reserveSupply;
248
219
  let supplyAfter = reserveToken.gdSupply;
@@ -251,21 +222,14 @@ describe("GoodReserve - staking with cDAI mocks", () => {
251
222
  const daiBalanceAfter = await dai.balanceOf(founder.address);
252
223
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
253
224
  const priceAfter = await goodReserve["currentPrice()"]();
254
- expect(
255
- (cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()
256
- ).to.be.equal(amount.toString());
257
- expect(
258
- reserveBalanceAfter.sub(reserveBalanceBefore).toString()
259
- ).to.be.equal(amount.toString());
260
- expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(
261
- gdBalanceAfter.sub(gdBalanceBefore).toString()
262
- );
225
+ expect((cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()).to.be.equal(amount.toString());
226
+ expect(reserveBalanceAfter.sub(reserveBalanceBefore).toString()).to.be.equal(amount.toString());
227
+ expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(gdBalanceAfter.sub(gdBalanceBefore).toString());
263
228
  expect(rrAfter.toString()).to.be.equal(rrBefore.toString());
264
229
  expect(gdBalanceAfter.gt(gdBalanceBefore)).to.be.true;
265
230
  expect(daiBalanceBefore.gt(daiBalanceAfter)).to.be.true;
266
231
  expect(priceAfter.toString()).to.be.equal(priceBefore.toString());
267
- expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not
268
- .empty;
232
+ expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not.empty;
269
233
  });
270
234
 
271
235
  it("should be able to buy gd with cDAI through buy", async () => {
@@ -282,9 +246,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
282
246
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
283
247
  const priceBefore = await goodReserve["currentPrice()"]();
284
248
  await cDAI.approve(exchangeHelper.address, amount);
285
- let transaction = await (
286
- await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)
287
- ).wait();
249
+ let transaction = await (await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)).wait();
288
250
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
289
251
  let reserveBalanceAfter = reserveToken.reserveSupply;
290
252
  let supplyAfter = reserveToken.gdSupply;
@@ -293,21 +255,14 @@ describe("GoodReserve - staking with cDAI mocks", () => {
293
255
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
294
256
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
295
257
  const priceAfter = await goodReserve["currentPrice()"]();
296
- expect(
297
- (cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()
298
- ).to.be.equal(amount.toString());
299
- expect(
300
- reserveBalanceAfter.sub(reserveBalanceBefore).toString()
301
- ).to.be.equal(amount.toString());
302
- expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(
303
- gdBalanceAfter.sub(gdBalanceBefore).toString()
304
- );
258
+ expect((cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()).to.be.equal(amount.toString());
259
+ expect(reserveBalanceAfter.sub(reserveBalanceBefore).toString()).to.be.equal(amount.toString());
260
+ expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(gdBalanceAfter.sub(gdBalanceBefore).toString());
305
261
  expect(rrAfter.toString()).to.be.equal(rrBefore.toString());
306
262
  expect(gdBalanceAfter.gt(gdBalanceBefore)).to.be.true;
307
263
  expect(cDAIBalanceBefore.gt(cDAIBalanceAfter)).to.be.true;
308
264
  expect(priceAfter.toString()).to.be.equal(priceBefore.toString());
309
- expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not
310
- .empty;
265
+ expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not.empty;
311
266
  });
312
267
 
313
268
  it("should be able to buy gd with cDAI", async () => {
@@ -324,9 +279,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
324
279
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
325
280
  const priceBefore = await goodReserve["currentPrice()"]();
326
281
  await cDAI.approve(exchangeHelper.address, amount);
327
- let transaction = await (
328
- await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)
329
- ).wait();
282
+ let transaction = await (await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)).wait();
330
283
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
331
284
  let reserveBalanceAfter = reserveToken.reserveSupply;
332
285
  let supplyAfter = reserveToken.gdSupply;
@@ -335,21 +288,14 @@ describe("GoodReserve - staking with cDAI mocks", () => {
335
288
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
336
289
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
337
290
  const priceAfter = await goodReserve["currentPrice()"]();
338
- expect(
339
- (cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()
340
- ).to.be.equal(amount.toString());
341
- expect(
342
- reserveBalanceAfter.sub(reserveBalanceBefore).toString()
343
- ).to.be.equal(amount.toString());
344
- expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(
345
- gdBalanceAfter.sub(gdBalanceBefore).toString()
346
- );
291
+ expect((cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()).to.be.equal(amount.toString());
292
+ expect(reserveBalanceAfter.sub(reserveBalanceBefore).toString()).to.be.equal(amount.toString());
293
+ expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(gdBalanceAfter.sub(gdBalanceBefore).toString());
347
294
  expect(rrAfter.toString()).to.be.equal(rrBefore.toString());
348
295
  expect(gdBalanceAfter.gt(gdBalanceBefore)).to.be.true;
349
296
  expect(cDAIBalanceBefore.gt(cDAIBalanceAfter)).to.be.true;
350
297
  expect(priceAfter.toString()).to.be.equal(priceBefore.toString());
351
- expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not
352
- .empty;
298
+ expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not.empty;
353
299
  });
354
300
 
355
301
  it("should be able to buy gd with cDAI with generic amount of cdai tokens", async () => {
@@ -365,27 +311,18 @@ describe("GoodReserve - staking with cDAI mocks", () => {
365
311
  const gdBalanceBefore = await goodDollar.balanceOf(founder.address);
366
312
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
367
313
  await cDAI.approve(exchangeHelper.address, amount);
368
- let transaction = await (
369
- await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)
370
- ).wait();
314
+ let transaction = await (await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)).wait();
371
315
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
372
316
  let reserveBalanceAfter = reserveToken.reserveSupply;
373
317
  let supplyAfter = reserveToken.gdSupply;
374
318
  const gdBalanceAfter = await goodDollar.balanceOf(founder.address);
375
319
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
376
320
  // actual cdai balance
377
- expect(
378
- cDAIBalanceReserveAfter.sub(cDAIBalanceReserveBefore).toString()
379
- ).to.be.equal(amount.toString());
321
+ expect(cDAIBalanceReserveAfter.sub(cDAIBalanceReserveBefore).toString()).to.be.equal(amount.toString());
380
322
  // cdai balance according to the market maker
381
- expect(
382
- reserveBalanceAfter.sub(reserveBalanceBefore).toString()
383
- ).to.be.equal(amount.toString());
384
- expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(
385
- gdBalanceAfter.sub(gdBalanceBefore).toString()
386
- );
387
- expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not
388
- .empty;
323
+ expect(reserveBalanceAfter.sub(reserveBalanceBefore).toString()).to.be.equal(amount.toString());
324
+ expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(gdBalanceAfter.sub(gdBalanceBefore).toString());
325
+ expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not.empty;
389
326
  });
390
327
 
391
328
  it("should be able to buy gd with other non initialized tokens beside cDAI", async () => {
@@ -399,9 +336,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
399
336
  it("should not be able to buy gd without cDAI allowance", async () => {
400
337
  let amount = 1e8;
401
338
  await cDAI.approve(exchangeHelper.address, "0");
402
- let error = await exchangeHelper
403
- .buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)
404
- .catch(e => e);
339
+ let error = await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS).catch(e => e);
405
340
  expect(error.message).to.have.string("ERC20: insufficient allowance");
406
341
  });
407
342
 
@@ -412,20 +347,14 @@ describe("GoodReserve - staking with cDAI mocks", () => {
412
347
  await cDAI.approve(exchangeHelper.address, amount);
413
348
  const gdBalanceBefore = await goodDollar.balanceOf(founder.address);
414
349
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
415
- let error = await exchangeHelper
416
- .buy([cDAI.address], amount, 0, 0, NULL_ADDRESS)
417
- .catch(e => e);
350
+ let error = await exchangeHelper.buy([cDAI.address], amount, 0, 0, NULL_ADDRESS).catch(e => e);
418
351
  const gdBalanceAfter = await goodDollar.balanceOf(founder.address);
419
352
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
420
353
  expect(error.message).not.to.be.empty;
421
354
  expect(gdBalanceAfter.toString()).to.be.equal(gdBalanceBefore.toString());
422
- expect(cDAIBalanceAfter.toString()).to.be.equal(
423
- cDAIBalanceBefore.toString()
424
- );
355
+ expect(cDAIBalanceAfter.toString()).to.be.equal(cDAIBalanceBefore.toString());
425
356
 
426
- await cDAI
427
- .connect(staker)
428
- .transfer(founder.address, cDAIBalanceBeforeTransfer.toString());
357
+ await cDAI.connect(staker).transfer(founder.address, cDAIBalanceBeforeTransfer.toString());
429
358
  });
430
359
 
431
360
  it("should not be able to buy gd when the minimum return is higher than the actual return", async () => {
@@ -433,18 +362,12 @@ describe("GoodReserve - staking with cDAI mocks", () => {
433
362
  await cDAI.approve(exchangeHelper.address, amount);
434
363
  const gdBalanceBefore = await goodDollar.balanceOf(founder.address);
435
364
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
436
- let error = await exchangeHelper
437
- .buy([cDAI.address], amount, 2000000, 0, NULL_ADDRESS)
438
- .catch(e => e);
365
+ let error = await exchangeHelper.buy([cDAI.address], amount, 2000000, 0, NULL_ADDRESS).catch(e => e);
439
366
  const gdBalanceAfter = await goodDollar.balanceOf(founder.address);
440
367
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
441
- expect(error.message).to.have.string(
442
- "GD return must be above the minReturn"
443
- );
368
+ expect(error.message).to.have.string("GD return must be above the minReturn");
444
369
  expect(gdBalanceAfter.toString()).to.be.equal(gdBalanceBefore.toString());
445
- expect(cDAIBalanceAfter.toString()).to.be.equal(
446
- cDAIBalanceBefore.toString()
447
- );
370
+ expect(cDAIBalanceAfter.toString()).to.be.equal(cDAIBalanceBefore.toString());
448
371
  });
449
372
 
450
373
  it("should be able to sell gd to cDAI without contribution", async () => {
@@ -457,9 +380,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
457
380
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
458
381
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
459
382
  await goodDollar.approve(exchangeHelper.address, amount);
460
- let transaction = await (
461
- await exchangeHelper.sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
462
- ).wait();
383
+ let transaction = await (await exchangeHelper.sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)).wait();
463
384
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
464
385
  let reserveBalanceAfter = reserveToken.reserveSupply;
465
386
  let supplyAfter = reserveToken.gdSupply;
@@ -468,10 +389,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
468
389
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
469
390
  // according to the initialization settings reserve ratio is 100%. the calculation is:
470
391
  // Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1000000 / _reserveRatio))
471
- const bancor = await ethers.getContractAt(
472
- "BancorFormula",
473
- await marketMaker.getBancor()
474
- );
392
+ const bancor = await ethers.getContractAt("BancorFormula", await marketMaker.getBancor());
475
393
  const expectedReturn = await bancor.calculateSaleReturn(
476
394
  supplyBefore.toString(),
477
395
  reserveBalanceBefore.toString(),
@@ -479,18 +397,13 @@ describe("GoodReserve - staking with cDAI mocks", () => {
479
397
  amount
480
398
  );
481
399
  expect(cDAIBalanceAfter - cDAIBalanceBefore).to.be.equal(expectedReturn);
482
- expect(cDAIBalanceReserveBefore - cDAIBalanceReserveAfter).to.be.equal(
483
- expectedReturn
484
- );
485
- expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(
486
- expectedReturn
487
- );
400
+ expect(cDAIBalanceReserveBefore - cDAIBalanceReserveAfter).to.be.equal(expectedReturn);
401
+ expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(expectedReturn);
488
402
  // 1e4 gd sold (burn from the supply)
489
403
  expect(supplyBefore.sub(supplyAfter)).to.be.equal(amount);
490
404
  expect(gdBalanceBefore.gt(gdBalanceAfter)).to.be.true;
491
405
  expect(cDAIBalanceAfter.gt(cDAIBalanceBefore)).to.be.true;
492
- expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not
493
- .empty;
406
+ expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not.empty;
494
407
  });
495
408
 
496
409
  it("should be able to sell gd to cDAI without contribution through sell function", async () => {
@@ -503,9 +416,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
503
416
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
504
417
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
505
418
  await goodDollar.approve(exchangeHelper.address, amount);
506
- let transaction = await (
507
- await exchangeHelper.sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
508
- ).wait();
419
+ let transaction = await (await exchangeHelper.sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)).wait();
509
420
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
510
421
  let reserveBalanceAfter = reserveToken.reserveSupply;
511
422
  let supplyAfter = reserveToken.gdSupply;
@@ -514,10 +425,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
514
425
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
515
426
  // according to the initialization settings reserve ratio is 100%. the calculation is:
516
427
  // Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1000000 / _reserveRatio))
517
- const bancor = await ethers.getContractAt(
518
- "BancorFormula",
519
- await marketMaker.getBancor()
520
- );
428
+ const bancor = await ethers.getContractAt("BancorFormula", await marketMaker.getBancor());
521
429
  const expectedReturn = await bancor.calculateSaleReturn(
522
430
  supplyBefore.toString(),
523
431
  reserveBalanceBefore.toString(),
@@ -525,18 +433,13 @@ describe("GoodReserve - staking with cDAI mocks", () => {
525
433
  amount
526
434
  );
527
435
  expect(cDAIBalanceAfter - cDAIBalanceBefore).to.be.equal(expectedReturn);
528
- expect(cDAIBalanceReserveBefore - cDAIBalanceReserveAfter).to.be.equal(
529
- expectedReturn
530
- );
531
- expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(
532
- expectedReturn
533
- );
436
+ expect(cDAIBalanceReserveBefore - cDAIBalanceReserveAfter).to.be.equal(expectedReturn);
437
+ expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(expectedReturn);
534
438
  // 1e4 gd sold (burn from the supply)
535
439
  expect(supplyBefore.sub(supplyAfter)).to.be.equal(amount);
536
440
  expect(gdBalanceBefore.gt(gdBalanceAfter)).to.be.true;
537
441
  expect(cDAIBalanceAfter.gt(cDAIBalanceBefore)).to.be.true;
538
- expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not
539
- .empty;
442
+ expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not.empty;
540
443
  });
541
444
 
542
445
  it("should be able to sell gd to DAI without contribution through sell function", async () => {
@@ -549,9 +452,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
549
452
  const daiBalanceBefore = await dai.balanceOf(founder.address);
550
453
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
551
454
  await goodDollar.approve(exchangeHelper.address, amount);
552
- let transaction = await (
553
- await exchangeHelper.sell([dai.address], amount, 0, 0, NULL_ADDRESS)
554
- ).wait();
455
+ let transaction = await (await exchangeHelper.sell([dai.address], amount, 0, 0, NULL_ADDRESS)).wait();
555
456
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
556
457
  let reserveBalanceAfter = reserveToken.reserveSupply;
557
458
  let supplyAfter = reserveToken.gdSupply;
@@ -560,10 +461,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
560
461
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
561
462
  // according to the initialization settings reserve ratio is 100%. the calculation is:
562
463
  // Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1000000 / _reserveRatio))
563
- const bancor = await ethers.getContractAt(
564
- "BancorFormula",
565
- await marketMaker.getBancor()
566
- );
464
+ const bancor = await ethers.getContractAt("BancorFormula", await marketMaker.getBancor());
567
465
  const expectedReturn = await bancor.calculateSaleReturn(
568
466
  supplyBefore.toString(),
569
467
  reserveBalanceBefore.toString(),
@@ -582,26 +480,15 @@ describe("GoodReserve - staking with cDAI mocks", () => {
582
480
  //expect(supplyBefore.sub(supplyAfter)).to.be.equal(amount);
583
481
  //expect(gdBalanceBefore.gt(gdBalanceAfter)).to.be.true;
584
482
  expect(daiBalanceAfter.gt(daiBalanceBefore)).to.be.true;
585
- expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not
586
- .empty;
483
+ expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not.empty;
587
484
  });
588
485
 
589
486
  it("should set sell contribution ratio by avatar", async () => {
590
487
  let nom = ethers.utils.parseUnits("2", 14);
591
488
  let denom = ethers.utils.parseUnits("1", 15);
592
- let ccFactory = await ethers.getContractFactory(
593
- ContributionCalculation.abi,
594
- ContributionCalculation.bytecode
595
- );
596
- let encodedCall = ccFactory.interface.encodeFunctionData(
597
- "setContributionRatio",
598
- [nom, denom]
599
- );
600
- const ctrl = await ethers.getContractAt(
601
- "Controller",
602
- controller,
603
- schemeMock
604
- );
489
+ let ccFactory = await ethers.getContractFactory(ContributionCalculation.abi, ContributionCalculation.bytecode);
490
+ let encodedCall = ccFactory.interface.encodeFunctionData("setContributionRatio", [nom, denom]);
491
+ const ctrl = await ethers.getContractAt("Controller", controller, schemeMock);
605
492
 
606
493
  await ctrl.genericCall(contribution.address, encodedCall, avatar, 0);
607
494
  const newRatio = await contribution.sellContributionRatio();
@@ -609,9 +496,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
609
496
  });
610
497
 
611
498
  it("should not be able to set the sell contribution ratio if not avatar", async () => {
612
- let error = await contribution
613
- .setContributionRatio(2e14, 1e15)
614
- .catch(e => e);
499
+ let error = await contribution.setContributionRatio(2e14, 1e15).catch(e => e);
615
500
  expect(error.message).to.have.string("only Avatar can call this method");
616
501
  });
617
502
 
@@ -712,9 +597,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
712
597
 
713
598
  await goodDollar.connect(staker).approve(exchangeHelper.address, amount);
714
599
  let transaction = await (
715
- await exchangeHelper
716
- .connect(staker)
717
- .sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
600
+ await exchangeHelper.connect(staker).sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
718
601
  ).wait();
719
602
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
720
603
  let reserveBalanceAfter = reserveToken.reserveSupply;
@@ -724,25 +607,18 @@ describe("GoodReserve - staking with cDAI mocks", () => {
724
607
  const cDAIBalanceAfter = await cDAI.balanceOf(staker.address);
725
608
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
726
609
  const priceAfter = await goodReserve["currentPrice()"]();
727
- expect(cDAIBalanceAfter.sub(cDAIBalanceBefore)).to.be.equal(
728
- expectedReturn,
729
- "seller return mismatch"
730
- );
610
+ expect(cDAIBalanceAfter.sub(cDAIBalanceBefore)).to.be.equal(expectedReturn, "seller return mismatch");
731
611
  expect(cDAIBalanceReserveBefore.sub(cDAIBalanceReserveAfter)).to.be.equal(
732
612
  expectedReturn,
733
613
  "reserve balance mismatch"
734
614
  );
735
- expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(
736
- expectedReturn,
737
- "reserve token data mismatch"
738
- );
615
+ expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(expectedReturn, "reserve token data mismatch");
739
616
  expect(supplyBefore.sub(supplyAfter)).to.be.equal(amount);
740
617
  expect(rrAfter.toString()).to.be.equal(rrBefore.toString());
741
618
  expect(gdBalanceBefore.gt(gdBalanceAfter)).to.be.true;
742
619
  expect(cDAIBalanceAfter.gt(cDAIBalanceBefore)).to.be.true;
743
620
  expect(priceAfter.toString()).to.be.equal(priceBefore.toString());
744
- expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not
745
- .empty;
621
+ expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not.empty;
746
622
  });
747
623
 
748
624
  it("should able to sell gd to DAI or cDAI token", async () => {
@@ -758,43 +634,30 @@ describe("GoodReserve - staking with cDAI mocks", () => {
758
634
  await goodDollar.approve(exchangeHelper.address, "0");
759
635
  const gdBalanceBefore = await goodDollar.balanceOf(founder.address);
760
636
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
761
- let error = await exchangeHelper
762
- .sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
763
- .catch(e => e);
637
+ let error = await exchangeHelper.sell([cDAI.address], amount, 0, 0, NULL_ADDRESS).catch(e => e);
764
638
  const gdBalanceAfter = await goodDollar.balanceOf(founder.address);
765
639
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
766
640
  expect(error.message).not.to.be.empty;
767
641
  expect(gdBalanceAfter.toString()).to.be.equal(gdBalanceBefore.toString());
768
- expect(cDAIBalanceAfter.toString()).to.be.equal(
769
- cDAIBalanceBefore.toString()
770
- );
642
+ expect(cDAIBalanceAfter.toString()).to.be.equal(cDAIBalanceBefore.toString());
771
643
  });
772
644
 
773
645
  it("should not be able to sell gd without enough gd funds", async () => {
774
646
  let amount = 1e4;
775
647
  const gdBalanceBeforeTransfer = await goodDollar.balanceOf(founder.address);
776
648
  //reset gd holdings
777
- await goodDollar.transfer(
778
- staker.address,
779
- gdBalanceBeforeTransfer.toString()
780
- );
649
+ await goodDollar.transfer(staker.address, gdBalanceBeforeTransfer.toString());
781
650
  await goodDollar.approve(exchangeHelper.address, amount);
782
651
  const gdBalanceBefore = await goodDollar.balanceOf(founder.address);
783
652
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
784
- let error = await exchangeHelper
785
- .sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
786
- .catch(e => e);
653
+ let error = await exchangeHelper.sell([cDAI.address], amount, 0, 0, NULL_ADDRESS).catch(e => e);
787
654
  const gdBalanceAfter = await goodDollar.balanceOf(founder.address);
788
655
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
789
656
  expect(error.message).not.to.be.empty;
790
657
  expect(gdBalanceAfter.toString()).to.be.equal(gdBalanceBefore.toString());
791
- expect(cDAIBalanceAfter.toString()).to.be.equal(
792
- cDAIBalanceBefore.toString()
793
- );
658
+ expect(cDAIBalanceAfter.toString()).to.be.equal(cDAIBalanceBefore.toString());
794
659
  //restore gd holdings
795
- await goodDollar
796
- .connect(staker)
797
- .transfer(founder.address, gdBalanceBeforeTransfer.toString());
660
+ await goodDollar.connect(staker).transfer(founder.address, gdBalanceBeforeTransfer.toString());
798
661
  });
799
662
 
800
663
  it("should not be able to sell gd when the minimum return is higher than the actual return", async () => {
@@ -802,18 +665,12 @@ describe("GoodReserve - staking with cDAI mocks", () => {
802
665
  await goodDollar.approve(exchangeHelper.address, amount);
803
666
  const gdBalanceBefore = await goodDollar.balanceOf(founder.address);
804
667
  const cDAIBalanceBefore = await cDAI.balanceOf(founder.address);
805
- let error = await exchangeHelper
806
- .sell([cDAI.address], amount, 2000000, 0, NULL_ADDRESS)
807
- .catch(e => e);
668
+ let error = await exchangeHelper.sell([cDAI.address], amount, 2000000, 0, NULL_ADDRESS).catch(e => e);
808
669
  const gdBalanceAfter = await goodDollar.balanceOf(founder.address);
809
670
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
810
- expect(error.message).to.have.string(
811
- "Token return must be above the minReturn"
812
- );
671
+ expect(error.message).to.have.string("Token return must be above the minReturn");
813
672
  expect(gdBalanceAfter.toString()).to.be.equal(gdBalanceBefore.toString());
814
- expect(cDAIBalanceAfter.toString()).to.be.equal(
815
- cDAIBalanceBefore.toString()
816
- );
673
+ expect(cDAIBalanceAfter.toString()).to.be.equal(cDAIBalanceBefore.toString());
817
674
  });
818
675
 
819
676
  it("should return an error if non avatar account is trying to execute recover", async () => {
@@ -822,23 +679,14 @@ describe("GoodReserve - staking with cDAI mocks", () => {
822
679
  });
823
680
 
824
681
  it("should transfer funds when execute recover of token which the reserve has some balance", async () => {
825
- await dai["mint(address,uint256)"](
826
- goodReserve.address,
827
- ethers.utils.parseEther("100")
828
- );
682
+ await dai["mint(address,uint256)"](goodReserve.address, ethers.utils.parseEther("100"));
829
683
 
830
684
  let reserveBalance = await dai.balanceOf(goodReserve.address);
831
685
  const reserveFactory = await ethers.getContractFactory("GoodReserveCDai");
832
686
 
833
- let encodedCall = reserveFactory.interface.encodeFunctionData("recover", [
834
- dai.address
835
- ]);
687
+ let encodedCall = reserveFactory.interface.encodeFunctionData("recover", [dai.address]);
836
688
 
837
- const ctrl = await ethers.getContractAt(
838
- "Controller",
839
- controller,
840
- schemeMock
841
- );
689
+ const ctrl = await ethers.getContractAt("Controller", controller, schemeMock);
842
690
  await ctrl.genericCall(goodReserve.address, encodedCall, avatar, 0);
843
691
  let recoveredBalance = await dai.balanceOf(avatar);
844
692
  expect(recoveredBalance).to.be.equal(reserveBalance);
@@ -863,9 +711,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
863
711
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
864
712
  let reserveBalanceAfter = reserveToken.reserveSupply;
865
713
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
866
- expect(cDAIBalanceReserveAfter.sub(cDAIBalanceReserveBefore)).to.be.equal(
867
- amount.toString()
868
- );
714
+ expect(cDAIBalanceReserveAfter.sub(cDAIBalanceReserveBefore)).to.be.equal(amount.toString());
869
715
  expect(reserveBalanceAfter.sub(reserveBalanceBefore)).to.be.equal(amount);
870
716
  });
871
717
  it("should be able to buy gd with cDAI directly through reserve", async () => {
@@ -894,15 +740,11 @@ describe("GoodReserve - staking with cDAI mocks", () => {
894
740
  });
895
741
  it("should not be able to sell gd through reserve when there is no enough allowance", async () => {
896
742
  await goodDollar.approve(goodReserve.address, "0");
897
- const tx = await goodReserve
898
- .sell("100", 0, founder.address, staker.address)
899
- .catch(e => e);
743
+ const tx = await goodReserve.sell("100", 0, founder.address, staker.address).catch(e => e);
900
744
  expect(tx.message).to.be.not.empty;
901
745
  });
902
746
  it("seller parameter should not matter if caller is not exchange helper", async () => {
903
- const stakerGDBalanceBeforeSell = await goodDollar.balanceOf(
904
- staker.address
905
- );
747
+ const stakerGDBalanceBeforeSell = await goodDollar.balanceOf(staker.address);
906
748
  await goodDollar.approve(goodReserve.address, "100");
907
749
  await goodReserve.sell("100", 0, founder.address, staker.address);
908
750
  const stakerGDBalanceAfterSell = await goodDollar.balanceOf(staker.address);
@@ -948,9 +790,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
948
790
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
949
791
  await goodDollar.connect(staker).approve(exchangeHelper.address, amount);
950
792
  const transaction = await (
951
- await exchangeHelper
952
- .connect(staker)
953
- .sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
793
+ await exchangeHelper.connect(staker).sell([cDAI.address], amount, 0, 0, NULL_ADDRESS)
954
794
  ).wait();
955
795
 
956
796
  const cDAIBalanceAfter = await cDAI.balanceOf(staker.address);
@@ -962,16 +802,12 @@ describe("GoodReserve - staking with cDAI mocks", () => {
962
802
  // the contribution ratio is 20%
963
803
  let expected =
964
804
  parseInt(reserveBalance.toString()) *
965
- (1 -
966
- (1 - amount.toNumber() / parseInt(supply.toString())) **
967
- (1000000 / reserveToken.reserveRatio));
805
+ (1 - (1 - amount.toNumber() / parseInt(supply.toString())) ** (1000000 / reserveToken.reserveRatio));
968
806
 
969
807
  expected = Math.ceil((0.8 * expected) / 100) * 100; //deduct 20% contribution, allow 5 points precission mismatch (due to bancor pow estimation?), match solidity no floating point
970
808
  //expected = Math.floor(0.8 * expected);
971
809
  expect(cDAIBalanceAfter.sub(cDAIBalanceBefore)).to.be.equal(expected);
972
- expect(cDAIBalanceReserveBefore.sub(cDAIBalanceReserveAfter)).to.be.equal(
973
- expected
974
- );
810
+ expect(cDAIBalanceReserveBefore.sub(cDAIBalanceReserveAfter)).to.be.equal(expected);
975
811
  });
976
812
 
977
813
  it("should be able to buy gd with cDAI for some other address through buy", async () => {
@@ -988,9 +824,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
988
824
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
989
825
  const priceBefore = await goodReserve["currentPrice()"]();
990
826
  await cDAI.approve(exchangeHelper.address, amount);
991
- let transaction = await (
992
- await exchangeHelper.buy([cDAI.address], amount, 0, 0, staker.address)
993
- ).wait();
827
+ let transaction = await (await exchangeHelper.buy([cDAI.address], amount, 0, 0, staker.address)).wait();
994
828
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
995
829
  let reserveBalanceAfter = reserveToken.reserveSupply;
996
830
  let supplyAfter = reserveToken.gdSupply;
@@ -999,21 +833,14 @@ describe("GoodReserve - staking with cDAI mocks", () => {
999
833
  const cDAIBalanceAfter = await cDAI.balanceOf(founder.address);
1000
834
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
1001
835
  const priceAfter = await goodReserve["currentPrice()"]();
1002
- expect(
1003
- (cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()
1004
- ).to.be.equal(amount.toString());
1005
- expect(
1006
- reserveBalanceAfter.sub(reserveBalanceBefore).toString()
1007
- ).to.be.equal(amount.toString());
1008
- expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(
1009
- gdBalanceAfter.sub(gdBalanceBefore).toString()
1010
- );
836
+ expect((cDAIBalanceReserveAfter - cDAIBalanceReserveBefore).toString()).to.be.equal(amount.toString());
837
+ expect(reserveBalanceAfter.sub(reserveBalanceBefore).toString()).to.be.equal(amount.toString());
838
+ expect(supplyAfter.sub(supplyBefore).toString()).to.be.equal(gdBalanceAfter.sub(gdBalanceBefore).toString());
1011
839
  expect(rrAfter.toString()).to.be.equal(rrBefore.toString());
1012
840
  expect(gdBalanceAfter.gt(gdBalanceBefore)).to.be.true;
1013
841
  expect(cDAIBalanceBefore.gt(cDAIBalanceAfter)).to.be.true;
1014
842
  expect(priceAfter.toString()).to.be.equal(priceBefore.toString());
1015
- expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not
1016
- .empty;
843
+ expect(transaction.events.find(_ => _.event === "TokenPurchased")).to.be.not.empty;
1017
844
  });
1018
845
 
1019
846
  it("should be able to sell gd to cDAI without contribution through sell function for some other address", async () => {
@@ -1026,9 +853,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
1026
853
  const cDAIBalanceBefore = await cDAI.balanceOf(staker.address);
1027
854
  const cDAIBalanceReserveBefore = await cDAI.balanceOf(goodReserve.address);
1028
855
  await goodDollar.approve(exchangeHelper.address, amount);
1029
- let transaction = await (
1030
- await exchangeHelper.sell([cDAI.address], amount, 0, 0, staker.address)
1031
- ).wait();
856
+ let transaction = await (await exchangeHelper.sell([cDAI.address], amount, 0, 0, staker.address)).wait();
1032
857
  reserveToken = await marketMaker.reserveTokens(cDAI.address);
1033
858
  let reserveBalanceAfter = reserveToken.reserveSupply;
1034
859
  let supplyAfter = reserveToken.gdSupply;
@@ -1037,10 +862,7 @@ describe("GoodReserve - staking with cDAI mocks", () => {
1037
862
  const cDAIBalanceReserveAfter = await cDAI.balanceOf(goodReserve.address);
1038
863
  // according to the initialization settings reserve ratio is 100%. the calculation is:
1039
864
  // Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1000000 / _reserveRatio))
1040
- const bancor = await ethers.getContractAt(
1041
- "BancorFormula",
1042
- await marketMaker.getBancor()
1043
- );
865
+ const bancor = await ethers.getContractAt("BancorFormula", await marketMaker.getBancor());
1044
866
  const expectedReturn = await bancor.calculateSaleReturn(
1045
867
  supplyBefore.toString(),
1046
868
  reserveBalanceBefore.toString(),
@@ -1048,18 +870,13 @@ describe("GoodReserve - staking with cDAI mocks", () => {
1048
870
  amount
1049
871
  );
1050
872
  expect(cDAIBalanceAfter - cDAIBalanceBefore).to.be.equal(expectedReturn);
1051
- expect(cDAIBalanceReserveBefore - cDAIBalanceReserveAfter).to.be.equal(
1052
- expectedReturn
1053
- );
1054
- expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(
1055
- expectedReturn
1056
- );
873
+ expect(cDAIBalanceReserveBefore - cDAIBalanceReserveAfter).to.be.equal(expectedReturn);
874
+ expect(reserveBalanceBefore.sub(reserveBalanceAfter)).to.be.equal(expectedReturn);
1057
875
  // 1e4 gd sold (burn from the supply)
1058
876
  expect(supplyBefore.sub(supplyAfter)).to.be.equal(amount);
1059
877
  expect(gdBalanceBefore.gt(gdBalanceAfter)).to.be.true;
1060
878
  expect(cDAIBalanceAfter.gt(cDAIBalanceBefore)).to.be.true;
1061
- expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not
1062
- .empty;
879
+ expect(transaction.events.find(_ => _.event === "TokenSold")).to.be.not.empty;
1063
880
  });
1064
881
 
1065
882
  it("should be able to retain the precision when selling a low quantity of tokens", async () => {
@@ -1086,57 +903,36 @@ describe("GoodReserve - staking with cDAI mocks", () => {
1086
903
 
1087
904
  let encodedCall = reserveFactory.interface.encodeFunctionData("end");
1088
905
 
1089
- const ctrl = await ethers.getContractAt(
1090
- "Controller",
1091
- controller,
1092
- schemeMock
1093
- );
906
+ const ctrl = await ethers.getContractAt("Controller", controller, schemeMock);
1094
907
 
1095
- const tx = await (
1096
- await ctrl.genericCall(goodReserve.address, encodedCall, avatar, 0)
1097
- ).wait();
908
+ const tx = await (await ctrl.genericCall(goodReserve.address, encodedCall, avatar, 0)).wait();
1098
909
 
1099
910
  let avatarBalanceAfter = await cDAI.balanceOf(avatar);
1100
911
  let reserveBalanceAfter = await cDAI.balanceOf(goodReserve.address);
1101
912
 
1102
- expect(avatarBalanceAfter.sub(avatarBalanceBefore)).to.be.equal(
1103
- reserveBalanceBefore
1104
- );
913
+ expect(avatarBalanceAfter.sub(avatarBalanceBefore)).to.be.equal(reserveBalanceBefore);
1105
914
  expect(reserveBalanceAfter.toString()).to.be.equal("0");
1106
915
  expect(await goodDollar.isMinter(goodReserve.address)).to.be.false;
1107
916
  expect(await goodDollar.isMinter(avatar)).to.be.true;
1108
917
  });
1109
918
 
1110
919
  it("should set reserve ratio daily expansion by avatar", async () => {
1111
- let currentReserveRatioDailyExpansion =
1112
- await marketMaker.reserveRatioDailyExpansion();
920
+ let currentReserveRatioDailyExpansion = await marketMaker.reserveRatioDailyExpansion();
1113
921
  console.log(currentReserveRatioDailyExpansion.toString());
1114
922
 
1115
- await runAsAvatarOnly(
1116
- goodReserve,
1117
- "setReserveRatioDailyExpansion(uint256,uint256)",
1118
- 1,
1119
- 1e15
1120
- );
923
+ await runAsAvatarOnly(goodReserve, "setReserveRatioDailyExpansion(uint256,uint256)", 1, 1e15);
1121
924
 
1122
- let newReserveRatioDailyExpansion =
1123
- await marketMaker.reserveRatioDailyExpansion();
925
+ let newReserveRatioDailyExpansion = await marketMaker.reserveRatioDailyExpansion();
1124
926
  console.log(newReserveRatioDailyExpansion.toString());
1125
927
 
1126
- expect(newReserveRatioDailyExpansion).to.not.equal(
1127
- currentReserveRatioDailyExpansion
1128
- );
928
+ expect(newReserveRatioDailyExpansion).to.not.equal(currentReserveRatioDailyExpansion);
1129
929
  expect(newReserveRatioDailyExpansion).to.be.equal(BN.from("1000000000000"));
1130
930
 
1131
- const encodedCall = goodReserve.interface.encodeFunctionData(
1132
- "setReserveRatioDailyExpansion",
1133
- [BN.from(currentReserveRatioDailyExpansion).div(1e12), 1e15]
1134
- );
1135
- const ctrl = await ethers.getContractAt(
1136
- "Controller",
1137
- controller,
1138
- schemeMock
1139
- );
931
+ const encodedCall = goodReserve.interface.encodeFunctionData("setReserveRatioDailyExpansion", [
932
+ BN.from(currentReserveRatioDailyExpansion).div(1e12),
933
+ 1e15
934
+ ]);
935
+ const ctrl = await ethers.getContractAt("Controller", controller, schemeMock);
1140
936
  await ctrl.genericCall(goodReserve.address, encodedCall, avatar, 0);
1141
937
  });
1142
938
  });