@gooddollar/goodprotocol 2.0.31 → 2.0.32

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 (303) hide show
  1. package/artifacts/abis/CeloDistributionHelper.min.json +1 -0
  2. package/artifacts/abis/CeloDistributionHelperTest.min.json +1 -0
  3. package/artifacts/abis/CeloDistributionHelperTestHelper.min.json +1 -0
  4. package/artifacts/abis/IBancorExchangeProvider.min.json +1 -0
  5. package/artifacts/abis/IBroker.min.json +1 -0
  6. package/artifacts/abis/IGoodDollarExchangeProvider.min.json +1 -0
  7. package/artifacts/abis/IGoodDollarExpansionController.min.json +1 -0
  8. package/artifacts/abis/IMentoReserve.min.json +1 -0
  9. package/artifacts/abis/ITradingLimits.min.json +1 -0
  10. package/artifacts/abis/MentoExchange.min.json +1 -0
  11. package/artifacts/abis/ProtocolUpgradeV4Mento.min.json +1 -0
  12. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  13. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  14. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  15. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  16. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  17. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  18. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  19. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  20. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  21. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  22. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  23. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  28. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/IQuoterV2.dbg.json +1 -1
  34. package/artifacts/contracts/Interfaces.sol/ISwapRouter.dbg.json +1 -1
  35. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  36. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  38. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  39. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  40. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  43. package/artifacts/contracts/MentoInterfaces.sol/IBancorExchangeProvider.dbg.json +4 -0
  44. package/artifacts/contracts/MentoInterfaces.sol/IBancorExchangeProvider.json +282 -0
  45. package/artifacts/contracts/MentoInterfaces.sol/IBroker.dbg.json +4 -0
  46. package/artifacts/contracts/MentoInterfaces.sol/IBroker.json +491 -0
  47. package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.dbg.json +4 -0
  48. package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.json +164 -0
  49. package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.dbg.json +4 -0
  50. package/artifacts/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.json +333 -0
  51. package/artifacts/contracts/MentoInterfaces.sol/IMentoReserve.dbg.json +4 -0
  52. package/artifacts/contracts/MentoInterfaces.sol/IMentoReserve.json +927 -0
  53. package/artifacts/contracts/MentoInterfaces.sol/ITradingLimits.dbg.json +4 -0
  54. package/artifacts/contracts/MentoInterfaces.sol/ITradingLimits.json +10 -0
  55. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
  56. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  57. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
  58. package/artifacts/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.dbg.json +1 -1
  59. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  60. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  61. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  62. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
  63. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
  64. package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
  65. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
  66. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  67. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  68. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  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/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
  73. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  74. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
  75. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.dbg.json +1 -1
  76. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  77. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
  78. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
  79. package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest.dbg.json +4 -0
  80. package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest.json +864 -0
  81. package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.dbg.json +4 -0
  82. package/artifacts/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.json +890 -0
  83. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
  84. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  85. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
  86. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  87. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
  88. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
  89. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.json +2 -2
  90. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
  91. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +2 -2
  92. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
  93. package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
  94. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
  95. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  96. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  97. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
  98. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  99. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
  100. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
  101. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  102. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  103. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
  104. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
  105. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
  106. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  107. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  108. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  109. package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
  110. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  111. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
  112. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  113. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  114. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  115. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  116. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  117. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  118. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  119. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  120. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  121. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  122. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  123. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  124. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  125. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  126. package/artifacts/contracts/reserve/CeloDistributionHelper.sol/CeloDistributionHelper.dbg.json +4 -0
  127. package/artifacts/contracts/reserve/CeloDistributionHelper.sol/CeloDistributionHelper.json +864 -0
  128. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
  129. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +2 -2
  130. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  131. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  132. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  133. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
  134. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  135. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  136. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +2 -2
  137. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  138. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  139. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  140. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  141. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  142. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  143. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  144. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  145. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +2 -2
  146. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  147. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  148. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  149. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  150. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  151. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  152. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  153. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  154. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  155. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  156. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  157. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  158. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  159. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  160. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  161. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
  162. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
  163. package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
  164. package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
  165. package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
  166. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
  167. package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +1 -1
  168. package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +1 -1
  169. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
  170. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
  171. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
  172. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
  173. package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +1 -1
  174. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
  175. package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
  176. package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
  177. package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
  178. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
  179. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
  180. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
  181. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  182. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
  183. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  184. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
  185. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  186. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  187. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +2 -2
  188. package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.dbg.json +1 -1
  189. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
  190. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.json +2 -2
  191. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
  192. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
  193. package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
  194. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  195. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  196. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  197. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  198. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.dbg.json +1 -1
  199. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.dbg.json +1 -1
  200. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.dbg.json +1 -1
  201. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.dbg.json +1 -1
  202. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.dbg.json +1 -1
  203. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.dbg.json +1 -1
  204. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
  205. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
  206. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
  207. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
  208. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
  209. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
  210. package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.dbg.json +1 -1
  211. package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.json +2 -2
  212. package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
  213. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
  214. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  215. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
  216. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
  217. package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange.dbg.json +4 -0
  218. package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange.json +24 -0
  219. package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.dbg.json +4 -0
  220. package/artifacts/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.json +92 -0
  221. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  222. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  223. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  224. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  225. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  226. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  227. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  228. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  229. package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.dbg.json +1 -1
  230. package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.json +2 -2
  231. package/contracts/MentoInterfaces.sol +746 -0
  232. package/contracts/mocks/CeloDistributionHelperTest.sol +25 -0
  233. package/contracts/reserve/CeloDistributionHelper.sol +286 -0
  234. package/contracts/reserve/GoodMarketMaker.sol +11 -1
  235. package/contracts/staking/GoodFundManager.sol +5 -2
  236. package/contracts/utils/ProtoclUpgradeV4Mento.sol +99 -0
  237. package/contracts/utils/ReserveRestore.sol +171 -147
  238. package/hardhat.config.ts +4 -4
  239. package/package.json +5 -2
  240. package/releases/deployment.json +25 -13
  241. package/scripts/multichain-deploy/helpers.ts +45 -24
  242. package/scripts/proposals/reserveRestore.ts +130 -85
  243. package/scripts/proposals/v4Upgrade.ts +845 -0
  244. package/test/reserve/CeloDistributionHelper.test.ts +377 -0
  245. package/test/reserve/GoodMarketMaker.test.ts +98 -35
  246. package/test/zzz - e2e/CeloDistributionHelper.e2e.test.ts +0 -0
  247. package/types/contracts/MentoInterfaces.sol/IBancorExchangeProvider.ts +422 -0
  248. package/types/contracts/MentoInterfaces.sol/IBroker.ts +727 -0
  249. package/types/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider.ts +341 -0
  250. package/types/contracts/MentoInterfaces.sol/IGoodDollarExpansionController.ts +617 -0
  251. package/types/contracts/MentoInterfaces.sol/IMentoReserve.ts +1700 -0
  252. package/types/contracts/MentoInterfaces.sol/index.ts +8 -0
  253. package/types/contracts/index.ts +2 -0
  254. package/types/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest.ts +1226 -0
  255. package/types/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper.ts +1279 -0
  256. package/types/contracts/mocks/CeloDistributionHelperTest.sol/index.ts +5 -0
  257. package/types/contracts/mocks/index.ts +2 -0
  258. package/types/contracts/reserve/CeloDistributionHelper.ts +1226 -0
  259. package/types/contracts/reserve/index.ts +1 -0
  260. package/types/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange.ts +81 -0
  261. package/types/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento.ts +161 -0
  262. package/types/contracts/utils/ProtoclUpgradeV4Mento.sol/index.ts +5 -0
  263. package/types/contracts/utils/index.ts +2 -0
  264. package/types/factories/contracts/MentoInterfaces.sol/IBancorExchangeProvider__factory.ts +301 -0
  265. package/types/factories/contracts/MentoInterfaces.sol/IBroker__factory.ts +506 -0
  266. package/types/factories/contracts/MentoInterfaces.sol/IGoodDollarExchangeProvider__factory.ts +183 -0
  267. package/types/factories/contracts/MentoInterfaces.sol/IGoodDollarExpansionController__factory.ts +352 -0
  268. package/types/factories/contracts/MentoInterfaces.sol/IMentoReserve__factory.ts +942 -0
  269. package/types/factories/contracts/MentoInterfaces.sol/index.ts +8 -0
  270. package/types/factories/contracts/governance/StakersDistribution__factory.ts +1 -1
  271. package/types/factories/contracts/index.ts +1 -0
  272. package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTestHelper__factory.ts +949 -0
  273. package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/CeloDistributionHelperTest__factory.ts +919 -0
  274. package/types/factories/contracts/mocks/CeloDistributionHelperTest.sol/index.ts +5 -0
  275. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +1 -1
  276. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest__factory.ts +1 -1
  277. package/types/factories/contracts/mocks/GoodCompoundStakingTest__factory.ts +1 -1
  278. package/types/factories/contracts/mocks/GoodFundManagerTest__factory.ts +1 -1
  279. package/types/factories/contracts/mocks/OverMintTesterRegularStake__factory.ts +1 -1
  280. package/types/factories/contracts/mocks/index.ts +1 -0
  281. package/types/factories/contracts/reserve/CeloDistributionHelper__factory.ts +919 -0
  282. package/types/factories/contracts/reserve/DistributionHelper__factory.ts +1 -1
  283. package/types/factories/contracts/reserve/ExchangeHelper__factory.ts +1 -1
  284. package/types/factories/contracts/reserve/GoodMarketMaker__factory.ts +1 -1
  285. package/types/factories/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai__factory.ts +1 -1
  286. package/types/factories/contracts/reserve/index.ts +1 -0
  287. package/types/factories/contracts/staking/DonationsStaking__factory.ts +1 -1
  288. package/types/factories/contracts/staking/GoodFundManager__factory.ts +1 -1
  289. package/types/factories/contracts/staking/aave/AaveStakingFactory__factory.ts +1 -1
  290. package/types/factories/contracts/staking/aave/GoodAaveStakingV2__factory.ts +1 -1
  291. package/types/factories/contracts/staking/aave/GoodAaveStaking__factory.ts +1 -1
  292. package/types/factories/contracts/staking/compound/CompoundStakingFactory__factory.ts +1 -1
  293. package/types/factories/contracts/staking/compound/GoodCompoundStakingV2__factory.ts +1 -1
  294. package/types/factories/contracts/staking/compound/GoodCompoundStaking__factory.ts +1 -1
  295. package/types/factories/contracts/utils/BuyAndBridgeHelper__factory.ts +1 -1
  296. package/types/factories/contracts/utils/LastauthReduction__factory.ts +1 -1
  297. package/types/factories/contracts/utils/ProtoclUpgradeV4Mento.sol/MentoExchange__factory.ts +39 -0
  298. package/types/factories/contracts/utils/ProtoclUpgradeV4Mento.sol/ProtocolUpgradeV4Mento__factory.ts +152 -0
  299. package/types/factories/contracts/utils/ProtoclUpgradeV4Mento.sol/index.ts +5 -0
  300. package/types/factories/contracts/utils/ReserveRestore__factory.ts +1 -1
  301. package/types/factories/contracts/utils/index.ts +1 -0
  302. package/types/hardhat.d.ts +90 -0
  303. package/types/index.ts +20 -0
@@ -0,0 +1,377 @@
1
+ import { ethers, upgrades, artifacts } from "hardhat";
2
+ import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
3
+ import { expect } from "chai";
4
+ import {
5
+ GoodReserveCDai,
6
+ CeloDistributionHelperTestHelper,
7
+ DistributionBridgeMock,
8
+ IGoodDollar
9
+ } from "../../types";
10
+ import { createDAO, increaseTime } from "../helpers";
11
+ import * as waffle from "ethereum-waffle";
12
+
13
+ const BN = ethers.BigNumber;
14
+ export const NULL_ADDRESS = ethers.constants.AddressZero;
15
+ export const BLOCK_INTERVAL = 1;
16
+
17
+ describe("CeloDistributionHelper", () => {
18
+ let goodReserve: GoodReserveCDai;
19
+ let goodDollar: IGoodDollar,
20
+ genericCall,
21
+ avatar,
22
+ founder,
23
+ signers,
24
+ setDAOAddress,
25
+ nameService,
26
+ cDai;
27
+
28
+ before(async () => {
29
+ [founder, ...signers] = await ethers.getSigners();
30
+ let {
31
+ controller: ctrl,
32
+ avatar: av,
33
+ gd,
34
+ identity,
35
+ setDAOAddress: sda,
36
+ setSchemes,
37
+ reserve,
38
+ cdaiAddress,
39
+ genericCall: gc,
40
+ nameService: ns
41
+ } = await loadFixture(createDAO);
42
+
43
+ nameService = ns;
44
+ genericCall = gc;
45
+ cDai = cdaiAddress;
46
+ avatar = av;
47
+ setDAOAddress = sda;
48
+
49
+ console.log("deployed dao", {
50
+ founder: founder.address,
51
+ gd,
52
+ identity,
53
+ avatar
54
+ });
55
+
56
+ goodDollar = (await ethers.getContractAt("IGoodDollar", gd)) as IGoodDollar;
57
+
58
+ console.log("deployed contribution, deploying reserve...", {
59
+ founder: founder.address
60
+ });
61
+
62
+ goodReserve = reserve as GoodReserveCDai;
63
+ });
64
+
65
+ const fixture = async () => {
66
+ const mpbf = await artifacts.readArtifact("IStaticOracle");
67
+
68
+ let oracle = await waffle.deployMockContract(founder, mpbf.abi);
69
+ oracle.mock.quoteSpecificFeeTiersWithTimePeriod.returns(1e13, []);
70
+ oracle.mock.prepareSpecificFeeTiersWithTimePeriod.returns([]);
71
+
72
+ const distHelper = (await upgrades.deployProxy(
73
+ await ethers.getContractFactory("CeloDistributionHelperTestHelper"),
74
+ [nameService.address, oracle.address],
75
+ { kind: "uups" }
76
+ )) as CeloDistributionHelperTestHelper;
77
+
78
+ //make sure disthelper has enough native token so it doesnt try to swap G$s
79
+ await founder.sendTransaction({
80
+ to: distHelper.address,
81
+ value: ethers.constants.WeiPerEther
82
+ });
83
+ const bridge = (await ethers.deployContract(
84
+ "DistributionBridgeMock"
85
+ )) as DistributionBridgeMock;
86
+
87
+ const encodedCall = distHelper.interface.encodeFunctionData(
88
+ "setFeeSettings",
89
+ [
90
+ {
91
+ maxFee: "5000000000000000",
92
+ minBalanceForFees: "10000000000000000",
93
+ percentageToSellForFee: "5",
94
+ maxSlippage: "5"
95
+ }
96
+ ]
97
+ );
98
+
99
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
100
+ await distHelper.setBridges(bridge.address);
101
+
102
+ return { distHelper, bridge, oracle };
103
+ };
104
+
105
+ it("should not allow to add recipient", async () => {
106
+ const { distHelper } = await loadFixture(fixture);
107
+
108
+ const recipient = signers[0];
109
+
110
+ await expect(
111
+ distHelper.addOrUpdateRecipient({
112
+ bps: 3000,
113
+ chainId: 42220,
114
+ addr: recipient.address,
115
+ transferType: 0
116
+ })
117
+ ).to.be.revertedWith(
118
+ /is missing role 0x0000000000000000000000000000000000000000000000000000000000000000/
119
+ );
120
+ });
121
+
122
+ it("should allow to add recipient by avatar", async () => {
123
+ const { distHelper } = await loadFixture(fixture);
124
+
125
+ const recipient = signers[0];
126
+
127
+ const encodedCall = distHelper.interface.encodeFunctionData(
128
+ "addOrUpdateRecipient",
129
+ [
130
+ {
131
+ bps: 3000,
132
+ chainId: 42220,
133
+ addr: recipient.address,
134
+ transferType: 0
135
+ }
136
+ ]
137
+ );
138
+
139
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
140
+ const dr = await distHelper.distributionRecipients(0);
141
+ expect(dr.addr).to.equal(recipient.address);
142
+ expect(dr.chainId).to.equal(42220);
143
+ expect(dr.bps).to.equal(3000);
144
+ expect(dr.transferType).to.equal(0);
145
+ });
146
+
147
+ it("should allow to update recipient by avatar", async () => {
148
+ const { distHelper } = await loadFixture(fixture);
149
+
150
+ const recipient = signers[0];
151
+
152
+ let encodedCall = distHelper.interface.encodeFunctionData(
153
+ "addOrUpdateRecipient",
154
+ [
155
+ {
156
+ bps: 1000,
157
+ chainId: 4447,
158
+ addr: recipient.address,
159
+ transferType: 1
160
+ }
161
+ ]
162
+ );
163
+
164
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
165
+
166
+ encodedCall = distHelper.interface.encodeFunctionData(
167
+ "addOrUpdateRecipient",
168
+ [
169
+ {
170
+ bps: 1500,
171
+ chainId: 45,
172
+ addr: recipient.address,
173
+ transferType: 0
174
+ }
175
+ ]
176
+ );
177
+
178
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
179
+
180
+ const updEvents = await distHelper.queryFilter(
181
+ distHelper.filters.RecipientUpdated()
182
+ );
183
+ const addEvents = await distHelper.queryFilter(
184
+ distHelper.filters.RecipientAdded()
185
+ );
186
+
187
+ const dr = await distHelper.distributionRecipients(0);
188
+ expect(dr.addr).to.equal(recipient.address);
189
+ expect(dr.chainId).to.equal(45);
190
+ expect(dr.bps).to.equal(1500);
191
+ expect(dr.transferType).to.equal(0);
192
+ });
193
+
194
+ it("should distribute via layerzero bridge", async () => {
195
+ const { distHelper, bridge } = await loadFixture(fixture);
196
+
197
+ const recipient = signers[0];
198
+
199
+ let encodedCall = distHelper.interface.encodeFunctionData(
200
+ "addOrUpdateRecipient",
201
+ [
202
+ {
203
+ bps: 2000,
204
+ chainId: 42220,
205
+ addr: recipient.address,
206
+ transferType: 0
207
+ }
208
+ ]
209
+ );
210
+
211
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
212
+
213
+ await goodDollar.mint(distHelper.address, "100000000000");
214
+ await founder.sendTransaction({
215
+ to: distHelper.address,
216
+ value: ethers.constants.WeiPerEther
217
+ });
218
+ await distHelper.onDistribution("100000000000");
219
+ expect(
220
+ await goodDollar.allowance(distHelper.address, bridge.address)
221
+ ).to.equal((100000000000 * 2000) / 10000);
222
+
223
+ const events = await bridge.queryFilter(bridge.filters.BridgeLz());
224
+ expect(events[0].args.recipient).to.equal(recipient.address);
225
+ expect(events[0].args.amount).to.equal((100000000000 * 2000) / 10000);
226
+ expect(events[0].args.chainId).to.equal(42220);
227
+ expect(events[0].args.fee).to.equal(5e14);
228
+ });
229
+
230
+ it("should distribute via transferAndCall", async () => {
231
+ const { distHelper, bridge } = await loadFixture(fixture);
232
+
233
+ const recipient = signers[0];
234
+
235
+ let encodedCall = distHelper.interface.encodeFunctionData(
236
+ "addOrUpdateRecipient",
237
+ [
238
+ {
239
+ bps: 2555,
240
+ chainId: 4447,
241
+ addr: signers[0].address,
242
+ transferType: 2
243
+ }
244
+ ]
245
+ );
246
+
247
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
248
+
249
+ await goodDollar.mint(distHelper.address, "100000000000");
250
+ await distHelper.onDistribution("100000000000");
251
+ expect(await goodDollar.balanceOf(signers[0].address)).to.equal(
252
+ (100000000000 * 2555) / 10000
253
+ );
254
+ });
255
+
256
+ it("should distribute to multiple recipients", async () => {
257
+ const { distHelper, bridge } = await loadFixture(fixture);
258
+
259
+ const recipient = signers[0];
260
+
261
+ let encodedCall = distHelper.interface.encodeFunctionData(
262
+ "addOrUpdateRecipient",
263
+ [
264
+ {
265
+ bps: 2555,
266
+ chainId: 4447,
267
+ addr: signers[0].address,
268
+ transferType: 1
269
+ }
270
+ ]
271
+ );
272
+
273
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
274
+
275
+ encodedCall = distHelper.interface.encodeFunctionData(
276
+ "addOrUpdateRecipient",
277
+ [
278
+ {
279
+ bps: 1000,
280
+ chainId: 4447,
281
+ addr: signers[1].address,
282
+ transferType: 1
283
+ }
284
+ ]
285
+ );
286
+
287
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
288
+
289
+ encodedCall = distHelper.interface.encodeFunctionData(
290
+ "addOrUpdateRecipient",
291
+ [
292
+ {
293
+ bps: 5,
294
+ chainId: 4447,
295
+ addr: signers[2].address,
296
+ transferType: 2
297
+ }
298
+ ]
299
+ );
300
+
301
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
302
+
303
+ await goodDollar.mint(distHelper.address, "100000000000");
304
+ await distHelper.onDistribution("100000000000");
305
+ expect(await goodDollar.balanceOf(signers[0].address)).to.equal(
306
+ (100000000000 * 2555) / 10000
307
+ );
308
+ expect(await goodDollar.balanceOf(signers[1].address)).to.equal(
309
+ (100000000000 * 1000) / 10000
310
+ );
311
+ expect(await goodDollar.balanceOf(signers[2].address)).to.equal(
312
+ (100000000000 * 5) / 10000
313
+ );
314
+ });
315
+
316
+ it("should emit distribution event for multiple recipients", async () => {
317
+ const { distHelper, bridge } = await loadFixture(fixture);
318
+
319
+ let encodedCall = distHelper.interface.encodeFunctionData(
320
+ "addOrUpdateRecipient",
321
+ [
322
+ {
323
+ bps: 2555,
324
+ chainId: 122,
325
+ addr: signers[0].address,
326
+ transferType: 0
327
+ }
328
+ ]
329
+ );
330
+
331
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
332
+
333
+ encodedCall = distHelper.interface.encodeFunctionData(
334
+ "addOrUpdateRecipient",
335
+ [
336
+ {
337
+ bps: 1000,
338
+ chainId: 4447,
339
+ addr: signers[1].address,
340
+ transferType: 1
341
+ }
342
+ ]
343
+ );
344
+
345
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
346
+
347
+ encodedCall = distHelper.interface.encodeFunctionData(
348
+ "addOrUpdateRecipient",
349
+ [
350
+ {
351
+ bps: 5,
352
+ chainId: 4447,
353
+ addr: signers[2].address,
354
+ transferType: 2
355
+ }
356
+ ]
357
+ );
358
+
359
+ await genericCall(distHelper.address, encodedCall, avatar.address, 0);
360
+
361
+ await goodDollar.mint(distHelper.address, "100000000000");
362
+ await distHelper.onDistribution("100000000000");
363
+
364
+ const DistributionEvents = await distHelper.queryFilter(
365
+ distHelper.filters.Distribution()
366
+ );
367
+ expect(DistributionEvents[0].args.distributionRecipients[0].addr).eq(
368
+ signers[0].address
369
+ );
370
+ expect(DistributionEvents[0].args.distributionRecipients[1].addr).eq(
371
+ signers[1].address
372
+ );
373
+ expect(DistributionEvents[0].args.distributionRecipients[2].addr).eq(
374
+ signers[2].address
375
+ );
376
+ });
377
+ });
@@ -189,24 +189,22 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
189
189
  it("should be able to calculate and update bonding curve gd balance based on oncoming cDAI and the price stays the same", async () => {
190
190
  let priceBefore = await marketMaker.currentPrice(cdai);
191
191
  await marketMaker.mintInterest(cdai, BN.from(1e8));
192
- let priceAfter = await marketMaker.currentPrice(cdai)
193
-
194
- expect(priceAfter).gt(0)
195
- expect(priceBefore).gt(0)
196
- expect(
197
- Math.floor(
198
- (priceAfter.toNumber() / 100)).toString()
199
- ).to.be.equal(Math.floor(priceBefore.toNumber() / 100).toString());
192
+ let priceAfter = await marketMaker.currentPrice(cdai);
200
193
 
194
+ expect(priceAfter).gt(0);
195
+ expect(priceBefore).gt(0);
196
+ expect(Math.floor(priceAfter.toNumber() / 100).toString()).to.be.equal(
197
+ Math.floor(priceBefore.toNumber() / 100).toString()
198
+ );
201
199
 
202
200
  // very large amount of cdai
203
201
  priceBefore = await marketMaker.currentPrice(cdai);
204
202
  await marketMaker.mintInterest(cdai, ethers.utils.parseEther("1"));
205
- priceAfter = await marketMaker.currentPrice(cdai)
203
+ priceAfter = await marketMaker.currentPrice(cdai);
206
204
 
207
- console.log({ priceAfter, priceBefore })
208
- expect(priceAfter).gt(0)
209
- expect(priceBefore).gt(0)
205
+ console.log({ priceAfter, priceBefore });
206
+ expect(priceAfter).gt(0);
207
+ expect(priceBefore).gt(0);
210
208
  expect(priceAfter).to.eq(priceBefore);
211
209
  });
212
210
 
@@ -316,15 +314,18 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
316
314
  let reserveToken = await marketMaker.reserveTokens(dai);
317
315
 
318
316
  //we expect price to stay the same p = reserve/supply*RR
319
- const newPrice = reserveToken.reserveSupply.add(ethers.utils.parseEther("1")).mul(1e8).div(reserveToken.gdSupply.add(toMint).mul(reserveToken.reserveRatio))
320
- expect(newPrice).equal(gdPrice)
317
+ const newPrice = reserveToken.reserveSupply
318
+ .add(ethers.utils.parseEther("1"))
319
+ .mul(1e8)
320
+ .div(reserveToken.gdSupply.add(toMint).mul(reserveToken.reserveRatio));
321
+ expect(newPrice).equal(gdPrice);
321
322
 
322
323
  // the formula is amountToMint = reserveInterest * tokenSupply / reserveBalance
323
- const expectedTotalMinted = 10 ** 18 * reserveToken.gdSupply.toNumber() / reserveToken.reserveSupply.toNumber()
324
+ const expectedTotalMinted =
325
+ (10 ** 18 * reserveToken.gdSupply.toNumber()) /
326
+ reserveToken.reserveSupply.toNumber();
324
327
  expect(expectedTotalMinted).to.be.equal(1000000);
325
- expect(toMint.toString()).to.be.equal(
326
- (expectedTotalMinted).toString()
327
- );
328
+ expect(toMint.toString()).to.be.equal(expectedTotalMinted.toString());
328
329
  });
329
330
 
330
331
  it("should calculate sell return with cDAI", async () => {
@@ -436,7 +437,7 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
436
437
  .toString()
437
438
  ).to.be.equal(reserveBalanceBefore.toString());
438
439
  expect(supplyBefore.sub(supplyAfter)).to.be.equal(BN.from(amount));
439
- expect(rrAfter.toString()).to.be.equal(rrBefore.toString());
440
+ expect(rrAfter).gte(rrBefore); //with sell contribution G$ are burned and increase RR
440
441
  });
441
442
 
442
443
  it("should not be able to calculate the buy return in gd and update the bonding curve params by a non-owner account", async () => {
@@ -547,34 +548,24 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
547
548
  });
548
549
 
549
550
  it("should calculate amount of gd to mint based on incoming cDAI without effecting bonding curve price", async () => {
550
- await initializeToken(
551
- dai,
552
- 6e11,
553
- ethers.utils.parseEther("600000"),
554
- 5e5
555
- );
551
+ await initializeToken(dai, 6e11, ethers.utils.parseEther("600000"), 5e5);
556
552
 
557
553
  const priceBefore = await marketMaker.currentPrice(dai);
558
554
 
559
- await marketMaker.mintInterest(dai, ethers.utils.parseEther("100"))
555
+ await marketMaker.mintInterest(dai, ethers.utils.parseEther("100"));
560
556
  const priceAfter = await marketMaker.currentPrice(dai);
561
557
  expect(priceBefore.toString()).to.be.equal(priceAfter.toString());
562
558
  });
563
559
 
564
560
  it("should calculate amount of gd to mint based on incoming cDAI with small precision issue effecting bonding curve price in very low amounts", async () => {
565
- await initializeToken(
566
- dai,
567
- 600,
568
- 600000000,
569
- 5e5
570
- );
561
+ await initializeToken(dai, 600, 600000000, 5e5);
571
562
 
572
563
  const priceBefore = await marketMaker.currentPrice(dai);
573
564
 
574
- await marketMaker.mintInterest(dai, 60000)
565
+ await marketMaker.mintInterest(dai, 60000);
575
566
  const priceAfter = await marketMaker.currentPrice(dai);
576
- expect(priceBefore).equal(200000000)
577
- expect(priceAfter).equal(200020000)
567
+ expect(priceBefore).equal(200000000);
568
+ expect(priceAfter).equal(200020000);
578
569
  });
579
570
 
580
571
  it("should not change the reserve ratio when calculate how much decrease it for the reservetoken", async () => {
@@ -624,6 +615,7 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
624
615
  expect(gdPriceAfter.lt(gdPriceBefore));
625
616
  expect(reserveRatioAfter).to.be.equal(reserveRatioBefore);
626
617
  });
618
+
627
619
  it("should price increase after buy gd when RR is not %100", async () => {
628
620
  let reserveTokenBefore = await marketMaker.reserveTokens(cdai);
629
621
  let gdPriceBefore = await marketMaker.currentPrice(cdai);
@@ -658,4 +650,75 @@ describe("GoodMarketMaker - calculate gd value at reserve", () => {
658
650
  )
659
651
  ).to.be.revertedWith(/Invalid nom or denom value/);
660
652
  });
653
+
654
+ it("should return same amount when splitting sell into two when exit fee is 0", async () => {
655
+ let reserveTokenBefore = await marketMaker.reserveTokens(cdai);
656
+ console.log({ reserveTokenBefore });
657
+ const res = await (
658
+ await marketMaker.sellWithContribution(cdai, "100000000", "0")
659
+ ).wait();
660
+ let reserveTokenAfterSale = await marketMaker.reserveTokens(cdai);
661
+ console.log({ reserveTokenAfterSale });
662
+ await marketMaker.initializeToken(
663
+ cdai,
664
+ reserveTokenBefore.gdSupply,
665
+ reserveTokenBefore.reserveSupply,
666
+ reserveTokenBefore.reserveRatio,
667
+ 0
668
+ );
669
+ const split1 = await (
670
+ await marketMaker.sellWithContribution(cdai, "50000000", "0")
671
+ ).wait();
672
+ const split2 = await (
673
+ await marketMaker.sellWithContribution(cdai, "50000000", "0")
674
+ ).wait();
675
+ let reserveTokenAfterSplitSale = await marketMaker.reserveTokens(cdai);
676
+
677
+ expect(reserveTokenAfterSale.gdSupply).eq(
678
+ reserveTokenAfterSplitSale.gdSupply
679
+ );
680
+ expect(reserveTokenAfterSale.reserveSupply).eq(
681
+ reserveTokenAfterSplitSale.reserveSupply
682
+ );
683
+ });
684
+
685
+ it("should have minimal effect on return value when splitting sell into two txs when exit fee is non 0", async () => {
686
+ let reserveTokenBefore = await marketMaker.reserveTokens(cdai);
687
+ await marketMaker.initializeToken(
688
+ cdai,
689
+ reserveTokenBefore.gdSupply,
690
+ reserveTokenBefore.reserveSupply,
691
+ 200000,
692
+ 0
693
+ );
694
+ console.log({ reserveTokenBefore });
695
+ const res = await (
696
+ await marketMaker.sellWithContribution(cdai, "500000000", "50000000")
697
+ ).wait();
698
+ let reserveTokenAfterSale = await marketMaker.reserveTokens(cdai);
699
+ console.log({ reserveTokenAfterSale });
700
+ await marketMaker.initializeToken(
701
+ cdai,
702
+ reserveTokenBefore.gdSupply,
703
+ reserveTokenBefore.reserveSupply,
704
+ 200000,
705
+ 0
706
+ );
707
+ const split1 = await (
708
+ await marketMaker.sellWithContribution(cdai, "250000000", "25000000")
709
+ ).wait();
710
+ const split2 = await (
711
+ await marketMaker.sellWithContribution(cdai, "250000000", "25000000")
712
+ ).wait();
713
+ let reserveTokenAfterSplitSale = await marketMaker.reserveTokens(cdai);
714
+
715
+ console.log({ reserveTokenAfterSplitSale });
716
+ expect(reserveTokenAfterSale.gdSupply).eq(
717
+ reserveTokenAfterSplitSale.gdSupply
718
+ );
719
+ expect(
720
+ Number(reserveTokenAfterSplitSale.reserveSupply) /
721
+ Number(reserveTokenAfterSale.reserveSupply)
722
+ ).gte(0.981);
723
+ });
661
724
  });