@gooddollar/goodprotocol 1.0.29-beta.0 → 1.0.29-beta.2

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 (406) hide show
  1. package/artifacts/abis/AdminWallet.min.json +1 -1
  2. package/artifacts/abis/BulkProof.min.json +1 -1
  3. package/artifacts/abis/DistributionBridgeMock.min.json +1 -0
  4. package/artifacts/abis/DistributionHelper.min.json +1 -0
  5. package/artifacts/abis/DistributionHelperTest.min.json +1 -0
  6. package/artifacts/abis/DistributionHelperTestHelper.min.json +1 -0
  7. package/artifacts/abis/ERC20.min.json +1 -1
  8. package/artifacts/abis/Faucet.min.json +1 -0
  9. package/artifacts/abis/GoodDollarMintBurnWrapper.min.json +1 -0
  10. package/artifacts/abis/GoodDollarStaking.min.json +1 -0
  11. package/artifacts/abis/GoodDollarStakingMock.min.json +1 -0
  12. package/artifacts/abis/GoodReserveCDai.min.json +1 -1
  13. package/artifacts/abis/IERC2917.min.json +1 -1
  14. package/artifacts/abis/IGoodDollar.min.json +1 -1
  15. package/artifacts/abis/IGoodDollarStakingTest.min.json +1 -0
  16. package/artifacts/abis/IGovernanceStaking.min.json +1 -0
  17. package/artifacts/abis/IIdentity.min.json +1 -1
  18. package/artifacts/abis/IIdentityV2.min.json +1 -0
  19. package/artifacts/abis/IMultichainRouter.min.json +1 -0
  20. package/artifacts/abis/IRouter.min.json +1 -0
  21. package/artifacts/abis/IWrapper.min.json +1 -0
  22. package/artifacts/abis/IdentityV2.min.json +1 -0
  23. package/artifacts/abis/InvitesV2.min.json +1 -0
  24. package/artifacts/abis/Math64x64.min.json +1 -0
  25. package/artifacts/abis/MultichainBridgeHelper.min.json +1 -0
  26. package/artifacts/abis/MultichainRouterMock.min.json +1 -0
  27. package/artifacts/abis/OverMintTester.min.json +1 -1
  28. package/artifacts/abis/PausableControl.min.json +1 -0
  29. package/artifacts/abis/RewardsMinter.min.json +1 -0
  30. package/artifacts/abis/StakingMockFixedAPY.min.json +1 -0
  31. package/artifacts/abis/StakingRewardsFixedAPY.min.json +1 -0
  32. package/artifacts/abis/TokenOperation.min.json +1 -0
  33. package/artifacts/abis/UBIScheme.min.json +1 -1
  34. package/artifacts/abis/cERC20.min.json +1 -1
  35. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  36. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  37. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  38. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  39. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  40. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  43. package/artifacts/contracts/Interfaces.sol/ERC20.json +13 -0
  44. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  45. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  46. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  47. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  48. package/artifacts/contracts/Interfaces.sol/IERC2917.json +13 -0
  49. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  50. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  51. package/artifacts/contracts/Interfaces.sol/IGoodDollar.json +39 -0
  52. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  53. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  54. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  55. package/artifacts/contracts/Interfaces.sol/IIdentity.json +51 -0
  56. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +4 -0
  57. package/artifacts/contracts/Interfaces.sol/IIdentityV2.json +281 -0
  58. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  59. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +4 -0
  60. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.json +67 -0
  61. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  62. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  63. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  64. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  65. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  66. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  67. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  68. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  69. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  70. package/artifacts/contracts/Interfaces.sol/cERC20.json +13 -0
  71. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +4 -0
  72. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +684 -0
  73. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  74. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +2 -2
  75. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  76. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  77. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  78. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +2 -2
  79. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  80. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
  81. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +4 -0
  82. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.json +1335 -0
  83. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +4 -0
  84. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.json +24 -0
  85. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +4 -0
  86. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.json +35 -0
  87. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  88. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
  89. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  90. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  91. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
  92. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  93. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  94. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +4 -0
  95. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +1000 -0
  96. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  97. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
  98. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +4 -0
  99. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.json +586 -0
  100. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  101. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  102. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  103. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +4 -0
  104. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.json +152 -0
  105. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +4 -0
  106. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.json +662 -0
  107. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +4 -0
  108. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +680 -0
  109. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  110. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  111. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +4 -0
  112. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +1335 -0
  113. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  114. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
  115. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  116. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  117. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +4 -0
  118. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.json +59 -0
  119. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +4 -0
  120. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.json +81 -0
  121. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +4 -0
  122. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.json +49 -0
  123. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  124. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +4 -4
  125. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  126. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  127. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  128. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +4 -0
  129. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.json +682 -0
  130. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  131. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
  132. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  133. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  134. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
  135. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  136. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
  137. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  138. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
  139. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  140. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
  141. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  142. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  143. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  144. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  145. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  146. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  147. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  148. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  149. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +4 -0
  150. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +662 -0
  151. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  152. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  153. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  154. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
  155. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  156. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  157. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +75 -35
  158. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  159. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
  160. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  161. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
  162. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  163. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  164. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  165. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +2 -2
  166. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  167. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  168. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  169. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +2 -2
  170. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  171. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  172. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  173. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  174. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  175. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  176. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  177. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  178. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  179. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  180. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  181. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  182. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  183. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  184. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  185. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  186. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +4 -0
  187. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.json +10 -0
  188. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +4 -0
  189. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.json +268 -0
  190. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  191. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +15 -22
  192. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  193. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +76 -56
  194. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  195. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  196. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +3 -34
  197. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  198. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
  199. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  200. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
  201. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  202. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  203. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +4 -0
  204. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +1263 -0
  205. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +4 -0
  206. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.json +59 -0
  207. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +4 -0
  208. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.json +69 -0
  209. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +4 -0
  210. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.json +10 -0
  211. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +4 -0
  212. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.json +79 -0
  213. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  214. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  215. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  216. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
  217. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  218. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
  219. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  220. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
  221. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  222. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
  223. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  224. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  225. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  226. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  227. package/contracts/Interfaces.sol +46 -0
  228. package/contracts/fuseFaucet/Faucet.sol +245 -0
  229. package/contracts/governance/GoodDollarStaking.sol +524 -0
  230. package/contracts/governance/MultiBaseGovernanceShareField.sol +1 -0
  231. package/contracts/identity/IdentityV2.sol +434 -0
  232. package/contracts/invite/InvitesV2.sol +316 -0
  233. package/contracts/mocks/DistributionBridgeMock.sol +50 -0
  234. package/contracts/mocks/DistributionHelperTest.sol +22 -0
  235. package/contracts/mocks/GoodDollarStakingMock.sol +24 -0
  236. package/contracts/mocks/MultichainRouterMock.sol +38 -0
  237. package/contracts/mocks/OverMintTester.sol +39 -25
  238. package/contracts/mocks/StakingMockFixedAPY.sol +78 -0
  239. package/contracts/reserve/DistributionHelper.sol +142 -0
  240. package/contracts/reserve/GoodReserveCDai.sol +95 -41
  241. package/contracts/staking/utils/Math64X64.sol +268 -0
  242. package/contracts/staking/utils/StakingRewardsFixedAPY.sol +336 -0
  243. package/contracts/ubi/UBIScheme.sol +45 -40
  244. package/contracts/utils/AdminWallet.sol +42 -11
  245. package/contracts/utils/BulkProof.sol +10 -10
  246. package/contracts/utils/GoodDollarMintBurnWrapper.sol +638 -0
  247. package/contracts/utils/MultichainBridgeHelper.sol +39 -0
  248. package/hardhat.config.ts +21 -5
  249. package/package.json +9 -5
  250. package/patches/@openzeppelin+hardhat-upgrades+1.7.0.patch.depracate +67 -0
  251. package/releases/deploy-settings.json +36 -1
  252. package/releases/deployment.json +103 -55
  253. package/releases/olddao.json +1 -1
  254. package/scripts/analytics/activeUsersCount.ts +65 -0
  255. package/scripts/analytics/activeWalletsStats.ts +150 -0
  256. package/scripts/analytics/claimIncidentStats.ts +117 -0
  257. package/scripts/analytics/faucetStats.ts +103 -0
  258. package/scripts/analytics/goodHolders.ts +50 -0
  259. package/scripts/{misc → analytics}/goodgiveback.ts +0 -0
  260. package/scripts/governance/airdropCalculation.ts +1 -0
  261. package/scripts/multichain-deploy/0_proxyFactory-deploy.ts +45 -0
  262. package/scripts/multichain-deploy/{basicdao-deploy.ts → 1_basicdao-deploy.ts} +75 -56
  263. package/scripts/multichain-deploy/2_helpers-deploy.ts +143 -0
  264. package/scripts/multichain-deploy/3_gdSavings-deploy.ts +246 -0
  265. package/scripts/multichain-deploy/4_ubi-deploy.ts +121 -0
  266. package/scripts/multichain-deploy/5_gov-deploy.ts +123 -0
  267. package/scripts/multichain-deploy/helpers.ts +72 -8
  268. package/scripts/multichain-deploy/multichainWrapper-deploy.ts +56 -0
  269. package/scripts/multichain-deploy/verifyEtherscan.ts +84 -0
  270. package/scripts/test/localOldDaoDeploy.ts +10 -3
  271. package/scripts/upgrades/identity-upgrade.ts +153 -0
  272. package/scripts/upgrades/nonubiDistribution-deploy.ts +167 -0
  273. package/scripts/voltageswaps.ts +47 -0
  274. package/test/governance/ClaimersDistribution.test.ts +1 -1
  275. package/test/governance/GoodDollarStaking.gd.test.ts +559 -0
  276. package/test/governance/GoodDollarStaking.good.test.ts +998 -0
  277. package/test/governance/GovernanceStaking.test.ts +43 -0
  278. package/test/helpers.ts +21 -20
  279. package/test/reserve/DistributionHelper.test.ts +394 -0
  280. package/test/reserve/GoodReserveCDai.distribution.test.ts +296 -0
  281. package/test/reserve/GoodReserveCDai.gdx.test.ts +21 -16
  282. package/test/reserve/GoodReserveCDai.pause.test.ts +116 -0
  283. package/test/staking/StakingRewardsFixedAPY.test.ts +900 -0
  284. package/test/ubi/UBIScheme.test.ts +30 -30
  285. package/test/ubi/UBISchemeCycle.test.ts +9 -7
  286. package/test/utils/AdminWallet.test.ts +40 -13
  287. package/test/utils/GoodDollarMintBurnWrapper.test.ts +796 -0
  288. package/tsconfig.json +4 -9
  289. package/types/AccessControl.ts +361 -0
  290. package/types/AdminWallet.ts +124 -113
  291. package/types/CERC20.ts +25 -0
  292. package/types/DistributionBridgeMock.ts +251 -0
  293. package/types/DistributionHelper.ts +908 -0
  294. package/types/DistributionHelperTest.ts +909 -0
  295. package/types/DistributionHelperTestHelper.ts +945 -0
  296. package/types/ERC165.ts +104 -0
  297. package/types/ERC20.ts +101 -49
  298. package/types/Faucet.ts +1014 -0
  299. package/types/GoodDollarMintBurnWrapper.ts +1806 -0
  300. package/types/GoodDollarStaking.ts +1889 -0
  301. package/types/GoodDollarStakingMock.ts +1889 -0
  302. package/types/GoodReserveCDai.ts +90 -55
  303. package/types/IAccessControl.ts +306 -0
  304. package/types/IERC1271.ts +109 -0
  305. package/types/IERC165.ts +104 -0
  306. package/types/IERC20.ts +300 -0
  307. package/types/IERC20Metadata.ts +339 -0
  308. package/types/IERC2917.ts +25 -0
  309. package/types/IGoodDollar.ts +54 -0
  310. package/types/IGoodDollarStakingTest.ts +160 -0
  311. package/types/{BulkProof.ts → IGovernanceStaking.ts} +15 -28
  312. package/types/IIdentity.ts +75 -0
  313. package/types/IIdentityV2.ts +526 -0
  314. package/types/IMultichainRouter.ts +166 -0
  315. package/types/IRouter.ts +143 -0
  316. package/types/IWrapper.ts +143 -0
  317. package/types/IdentityV2.ts +1612 -0
  318. package/types/InvitesV2.ts +933 -0
  319. package/types/MultichainBridgeHelper.ts +170 -0
  320. package/types/MultichainRouterMock.ts +141 -0
  321. package/types/Pausable.ts +103 -0
  322. package/types/PausableControl.ts +125 -0
  323. package/types/RewardsMinter.ts +107 -0
  324. package/types/StakingMockFixedAPY.ts +995 -0
  325. package/types/StakingRewardsFixedAPY.ts +428 -0
  326. package/types/UBIScheme.ts +19 -40
  327. package/types/factories/AaveStakingFactory__factory.ts +1 -1
  328. package/types/factories/AccessControl__factory.ts +227 -0
  329. package/types/factories/AdminWallet__factory.ts +75 -55
  330. package/types/factories/BaseShareFieldV2__factory.ts +1 -1
  331. package/types/factories/BaseShareField__factory.ts +1 -1
  332. package/types/factories/CERC20__factory.ts +13 -0
  333. package/types/factories/ClaimersDistribution__factory.ts +1 -1
  334. package/types/factories/CompoundStakingFactory__factory.ts +1 -1
  335. package/types/factories/CompoundVotingMachine__factory.ts +1 -1
  336. package/types/factories/DAOContract__factory.ts +1 -1
  337. package/types/factories/DAOUpgradeableContract__factory.ts +1 -1
  338. package/types/factories/DistributionBridgeMock__factory.ts +207 -0
  339. package/types/factories/DistributionHelperTestHelper__factory.ts +737 -0
  340. package/types/factories/DistributionHelperTest__factory.ts +717 -0
  341. package/types/factories/DistributionHelper__factory.ts +713 -0
  342. package/types/factories/DonationsStaking__factory.ts +1 -1
  343. package/types/factories/ERC165__factory.ts +39 -0
  344. package/types/factories/ERC20__factory.ts +13 -0
  345. package/types/factories/ExchangeHelper__factory.ts +1 -1
  346. package/types/factories/Faucet__factory.ts +729 -0
  347. package/types/factories/FuseFaucet__factory.ts +1 -1
  348. package/types/factories/FuseStakingV3__factory.ts +1 -1
  349. package/types/factories/GReputation__factory.ts +1 -1
  350. package/types/factories/GoodAaveStakingV2__factory.ts +1 -1
  351. package/types/factories/GoodAaveStaking__factory.ts +1 -1
  352. package/types/factories/GoodCompoundStakingTest__factory.ts +1 -1
  353. package/types/factories/GoodCompoundStakingV2__factory.ts +1 -1
  354. package/types/factories/GoodCompoundStaking__factory.ts +1 -1
  355. package/types/factories/GoodDollarMintBurnWrapper__factory.ts +1318 -0
  356. package/types/factories/GoodDollarStakingMock__factory.ts +1417 -0
  357. package/types/factories/GoodDollarStaking__factory.ts +1413 -0
  358. package/types/factories/GoodFundManagerTest__factory.ts +1 -1
  359. package/types/factories/GoodFundManager__factory.ts +1 -1
  360. package/types/factories/GoodMarketMaker__factory.ts +1 -1
  361. package/types/factories/GoodReserveCDai__factory.ts +74 -34
  362. package/types/factories/GovernanceStaking__factory.ts +1 -1
  363. package/types/factories/IAccessControl__factory.ts +198 -0
  364. package/types/factories/IERC1271__factory.ts +47 -0
  365. package/types/factories/IERC165__factory.ts +42 -0
  366. package/types/factories/IERC20Metadata__factory.ts +248 -0
  367. package/types/factories/IERC20__factory.ts +203 -0
  368. package/types/factories/IERC2917__factory.ts +13 -0
  369. package/types/factories/IGoodDollarStakingTest__factory.ts +68 -0
  370. package/types/factories/IGoodDollar__factory.ts +39 -0
  371. package/types/factories/IGovernanceStaking__factory.ts +39 -0
  372. package/types/factories/IIdentityV2__factory.ts +293 -0
  373. package/types/factories/IIdentity__factory.ts +51 -0
  374. package/types/factories/IMultichainRouter__factory.ts +82 -0
  375. package/types/factories/IRouter__factory.ts +71 -0
  376. package/types/factories/IWrapper__factory.ts +71 -0
  377. package/types/factories/IdentityV2__factory.ts +1048 -0
  378. package/types/factories/InvitesV1__factory.ts +1 -1
  379. package/types/factories/InvitesV2__factory.ts +634 -0
  380. package/types/factories/MultichainBridgeHelper__factory.ts +134 -0
  381. package/types/factories/MultichainRouterMock__factory.ts +141 -0
  382. package/types/factories/OverMintTesterRegularStake__factory.ts +1 -1
  383. package/types/factories/OverMintTester__factory.ts +3 -3
  384. package/types/factories/PausableControl__factory.ts +84 -0
  385. package/types/factories/Pausable__factory.ts +62 -0
  386. package/types/factories/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  387. package/types/factories/ProtocolUpgradeFuse__factory.ts +1 -1
  388. package/types/factories/ProtocolUpgradeRecover__factory.ts +1 -1
  389. package/types/factories/ProtocolUpgrade__factory.ts +1 -1
  390. package/types/factories/ReputationTestHelper__factory.ts +1 -1
  391. package/types/factories/Reputation__factory.ts +1 -1
  392. package/types/factories/RewardsMinter__factory.ts +47 -0
  393. package/types/factories/StakersDistribution__factory.ts +1 -1
  394. package/types/factories/StakingMockFixedAPY__factory.ts +745 -0
  395. package/types/factories/StakingRewardsFixedAPY__factory.ts +287 -0
  396. package/types/factories/SwapHelperTest__factory.ts +1 -1
  397. package/types/factories/UBIScheme__factory.ts +14 -21
  398. package/types/factories/UniswapV2SwapHelper__factory.ts +1 -1
  399. package/types/factories/UpgradableMock2__factory.ts +1 -1
  400. package/types/factories/UpgradableMock3__factory.ts +1 -1
  401. package/types/factories/UpgradableMock4__factory.ts +1 -1
  402. package/types/factories/UpgradableMock__factory.ts +1 -1
  403. package/types/hardhat.d.ts +279 -9
  404. package/types/index.ts +62 -4
  405. package/yarn.lock +184 -108
  406. package/types/factories/BulkProof__factory.ts +0 -89
@@ -0,0 +1,524 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity >=0.8.0;
4
+
5
+ import { ERC20 as ERC20_OZ } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
6
+ import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
7
+ import "@openzeppelin/contracts/security/Pausable.sol";
8
+ import "@openzeppelin/contracts/access/AccessControl.sol";
9
+ import "../utils/DAOContract.sol";
10
+ import "../utils/NameService.sol";
11
+ import "../Interfaces.sol";
12
+ import "../DAOStackInterfaces.sol";
13
+ import "./MultiBaseGovernanceShareField.sol";
14
+ import "../staking/utils/StakingRewardsFixedAPY.sol";
15
+
16
+ interface RewardsMinter {
17
+ function sendOrMint(address to, uint256 amount) external returns (uint256);
18
+ }
19
+
20
+ interface IGovernanceStaking {
21
+ function withdrawRewards() external returns (uint256);
22
+ }
23
+
24
+ /**
25
+ * @title Staking contract that allows citizens to stake G$ to get GOOD + G$ rewards
26
+ * it implements
27
+ */
28
+ contract GoodDollarStaking is
29
+ ERC20_OZ,
30
+ MultiBaseGovernanceShareField,
31
+ DAOContract,
32
+ ReentrancyGuard,
33
+ Pausable,
34
+ StakingRewardsFixedAPY
35
+ {
36
+ // Token address
37
+ ERC20 public token;
38
+
39
+ uint128 public numberOfBlocksPerYear; //required for getChainBlocksPerMonth for GOOD rewards calculations
40
+
41
+ uint128 public createdAt; //required for upgrade process
42
+ uint32 public daysUntilUpgrade; //required for upgrade process
43
+
44
+ /**
45
+ * @dev Emitted when `staker` earns an `amount` of GOOD tokens
46
+ */
47
+ event ReputationEarned(address indexed staker, uint256 amount);
48
+
49
+ /**
50
+ * @dev Emitted when `staker` stakes an `amount` of GoodDollars
51
+ */
52
+ event Staked(address indexed staker, uint256 amount);
53
+
54
+ /**
55
+ * @dev Emitted when `staker` withdraws an `amount` of staked GoodDollars
56
+ */
57
+ event StakeWithdraw(
58
+ address indexed staker,
59
+ uint256 actualSharesRedeemed, //shares withdrawn , if not all rewards minted then this can be lower than sharesRequested
60
+ uint256 amount, //amount withdrawn including actualRewardsSent
61
+ uint256 sharesRequested, //shares requested to redeem
62
+ uint256 goodRewards,
63
+ uint256 gdRewards,
64
+ uint256 actualRewardsSent //maybe rewards could not be minted
65
+ );
66
+
67
+ /**
68
+ * @dev Emitted when `staker` withdraws but MintBurnWrapper could not allocate/mint the rewards
69
+ */
70
+ event RewardsNotSent(
71
+ address indexed staker,
72
+ uint256 gdRewards,
73
+ uint256 actualRewardsSent //rewards not minted
74
+ );
75
+
76
+ event APYSet(uint128 newAPY);
77
+
78
+ event GOODRewardsSet(uint256 newMonthlyRewards);
79
+
80
+ /**
81
+ * @dev Constructor
82
+ * @param _ns The address of the INameService contract
83
+ * @param _interestRatePerBlock G$ rewards fixed APY in 1e18 precision
84
+ * @param _numberOfBlocksPerYear blockchain approx blocks per year for GOOD rewards
85
+ * @param _daysUntilUpgrade when it is allowed to upgrade from older GovernanceStaking
86
+ */
87
+ constructor(
88
+ INameService _ns,
89
+ uint128 _interestRatePerBlock,
90
+ uint128 _numberOfBlocksPerYear,
91
+ uint32 _daysUntilUpgrade
92
+ ) ERC20_OZ("G$ Savings", "svG$") {
93
+ require(_daysUntilUpgrade <= 60, "max two months until upgrade");
94
+ _setAPY(_interestRatePerBlock);
95
+ setDAO(_ns);
96
+ numberOfBlocksPerYear = _numberOfBlocksPerYear;
97
+ token = ERC20(nameService.getAddress("GOODDOLLAR"));
98
+ rewardsPerBlock[address(this)] = 0;
99
+ createdAt = uint128(block.timestamp);
100
+ daysUntilUpgrade = _daysUntilUpgrade;
101
+ }
102
+
103
+ /**
104
+ * @notice return approx chain blocks per month
105
+ * @return blocksPerMonth approx blocks per month
106
+ */
107
+ function getChainBlocksPerMonth()
108
+ public
109
+ view
110
+ override
111
+ returns (uint256 blocksPerMonth)
112
+ {
113
+ return numberOfBlocksPerYear / 12;
114
+ }
115
+
116
+ /**
117
+ * @dev Allows a staker to deposit Tokens. Notice that `approve` is
118
+ * needed to be executed before the execution of this method.
119
+ * Can be executed only when the contract is not paused.
120
+ * @param _amount The amount of GD to stake
121
+ */
122
+ function stake(uint256 _amount) external {
123
+ require(
124
+ token.transferFrom(msg.sender, address(this), _amount),
125
+ "transferFrom failed, make sure you approved token transfer"
126
+ );
127
+ _stakeFrom(msg.sender, _amount);
128
+ }
129
+
130
+ /**
131
+ * @dev helper for staking
132
+ * @param _from address of staker
133
+ * @param _amount The amount of GD to stake
134
+ */
135
+ function _stakeFrom(address _from, uint256 _amount) internal whenNotPaused {
136
+ /* G$ rewards updates */
137
+ uint256 shares = _stake(_from, _amount); //this will validate _amount
138
+ _mint(_from, shares); // mint Staking token for staker
139
+
140
+ /* GOOD rewards Updates */
141
+ _increaseProductivity(address(this), _from, shares, 0, block.number);
142
+ _mintGOODRewards(_from);
143
+ /* end GOOD rewards Updates */
144
+
145
+ emit Staked(_from, _amount);
146
+ }
147
+
148
+ /**
149
+ * @notice helper for staking through G$ transferAndCall without approve
150
+ * @param _from address of sender
151
+ * @param _amount The amount of GD to stake
152
+ */
153
+ function onTokenTransfer(
154
+ address _from,
155
+ uint256 _amount,
156
+ bytes calldata
157
+ ) external returns (bool success) {
158
+ require(msg.sender == address(token), "unsupported token");
159
+
160
+ _stakeFrom(_from, _amount);
161
+ return true;
162
+ }
163
+
164
+ /**
165
+ * @notice Withdraws _amount from the staker principle
166
+ * in _withdraw we use getPrinciple and not getProductivity because the user can have more G$ to withdraw than he staked
167
+ * @param _shares amount to withdraw
168
+ * @return goodRewards how much GOOD rewards were transfered to staker
169
+ * @return gdRewards out of withdrawn amount how much was taken from earned interest (amount-gdRewards = taken from deposit)
170
+ */
171
+ function withdrawStake(uint256 _shares)
172
+ public
173
+ nonReentrant
174
+ returns (uint256 goodRewards, uint256 gdRewards)
175
+ {
176
+ uint256 depositComponent;
177
+
178
+ //in case amount is 0 this will just withdraw the GOOD rewards, this is required for withdrawRewards
179
+ uint256 originalBalance = sharesOf(msg.sender);
180
+ if (_shares > 0) {
181
+ /* G$ rewards update */
182
+ //we get the relative part user is withdrawing from his original deposit, his principle is composed of deposit+earned interest
183
+ (depositComponent, gdRewards) = _withdraw(msg.sender, _shares);
184
+ /* Good rewards update */
185
+ _decreaseProductivity(
186
+ address(this),
187
+ msg.sender,
188
+ _shares,
189
+ 0,
190
+ block.number
191
+ );
192
+ _burn(msg.sender, _shares); // burn their staking tokens
193
+ }
194
+
195
+ // console.log(
196
+ // "withdraStake: fromDeposit: %s, fromRewards: %s",
197
+ // depositComponent,
198
+ // gdRewards
199
+ // );
200
+
201
+ goodRewards = _mintGOODRewards(msg.sender);
202
+
203
+ //rewards are paid via the rewards distribution contract
204
+ uint256 actualRewardsSent;
205
+ if (gdRewards > 0) {
206
+ actualRewardsSent = _mintGDRewards(msg.sender, gdRewards);
207
+ }
208
+
209
+ uint256 actualSharesRedeemed = originalBalance - sharesOf(msg.sender);
210
+
211
+ //stake is withdrawn from original deposit sent to this contract
212
+ if (depositComponent > 0) {
213
+ require(
214
+ token.transfer(msg.sender, depositComponent),
215
+ "withdraw transfer failed"
216
+ );
217
+ }
218
+ emit StakeWithdraw(
219
+ msg.sender,
220
+ actualSharesRedeemed,
221
+ depositComponent + actualRewardsSent,
222
+ _shares,
223
+ goodRewards,
224
+ gdRewards,
225
+ actualRewardsSent
226
+ );
227
+ }
228
+
229
+ /**
230
+ * @notice helper to mint/send G$ rewards from fixed APY
231
+ * @param _to address of recipient
232
+ * @param _amount how much to mint/send
233
+ * @return actualSent how much rewards were actually minted/sent. If RewardsMinter is passed its limit it could be that not all requested amount was awarded.
234
+ */
235
+ function _mintGDRewards(address _to, uint256 _amount)
236
+ internal
237
+ returns (uint256 actualSent)
238
+ {
239
+ //make sure RewardsMinter failure doesnt prevent withdrawl of stake
240
+ //console.log("_mintGDRewards: sending amount: %s to: %s", _amount, _to);
241
+ address minter = nameService.getAddress("MINTBURN_WRAPPER");
242
+ if (minter != address(0)) {
243
+ try
244
+ RewardsMinter(nameService.getAddress("MINTBURN_WRAPPER")).sendOrMint(
245
+ _to,
246
+ _amount
247
+ )
248
+ returns (uint256 _res) {
249
+ //console.log("sendOrMint result: %s", _res);
250
+ actualSent = _res;
251
+ } catch {
252
+ //console.log("sendOrMint threw an error");
253
+ actualSent = 0;
254
+ }
255
+ }
256
+
257
+ //it could be that rewards minter doesnt have enough or passed cap
258
+ //so we keep track of debt to user
259
+ if (actualSent < _amount) {
260
+ // console.log(
261
+ // "Actually sent: %s, will undo %s",
262
+ // actualSent,
263
+ // _amount - actualSent
264
+ // );
265
+ uint256 shares = _undoReward(_to, _amount - actualSent);
266
+ _increaseProductivity(address(this), _to, shares, 0, block.number); //increase productivity back for GOOD rewards
267
+ _mint(_to, shares); //mint shares worth of undone rewards
268
+ emit RewardsNotSent(_to, _amount, actualSent);
269
+ }
270
+ }
271
+
272
+ /**
273
+ * @dev Stakers can withdraw their rewards without withdrawing their stake
274
+ * @return goodRewards recieved GOOD rewards
275
+ * @return gdRewards recieved G$ rewards
276
+ */
277
+ function withdrawRewards()
278
+ external
279
+ returns (uint256 goodRewards, uint256 gdRewards)
280
+ {
281
+ uint256 gdRewardsShares = amountToShares(earned(msg.sender));
282
+
283
+ //this will trigger a withdraw only of rewards part
284
+ return withdrawStake(gdRewardsShares);
285
+ }
286
+
287
+ /**
288
+ * @dev Mint GOOD rewards of the staker
289
+ * @param user Receipent address of the rewards
290
+ * @return amount of the minted rewards
291
+ * emits 'ReputationEarned' event for staker earned GOOD amount
292
+ */
293
+ function _mintGOODRewards(address user) internal returns (uint256 amount) {
294
+ //try to mint only if have minter permission, so user can always withdraw his funds without this reverting
295
+ if (
296
+ nameService.getAddress("GDAO_STAKING") == address(this) ||
297
+ AccessControl(nameService.getAddress("REPUTATION")).hasRole(
298
+ keccak256("MINTER_ROLE"),
299
+ address(this)
300
+ )
301
+ ) {
302
+ amount = _issueEarnedRewards(address(this), user, 0, block.number);
303
+ if (amount > 0) {
304
+ ERC20(nameService.getAddress("REPUTATION")).mint(user, amount);
305
+ emit ReputationEarned(msg.sender, amount);
306
+ }
307
+ }
308
+ return amount;
309
+ }
310
+
311
+ /**
312
+ * @dev Returns the number of decimals used for the staking reciept token precision
313
+ */
314
+ function decimals() public view virtual override returns (uint8) {
315
+ return 18; //SHARE_PERCISION
316
+ }
317
+
318
+ function sharesOf(address _account)
319
+ public
320
+ view
321
+ virtual
322
+ override
323
+ returns (uint256)
324
+ {
325
+ return balanceOf(_account);
326
+ }
327
+
328
+ function sharesSupply() public view virtual override returns (uint256) {
329
+ return totalSupply();
330
+ }
331
+
332
+ /**
333
+ * @dev override _transfer to handle rewards calculations when transfer the stake
334
+ * @notice transfer may fail if value < sharePrice()
335
+ */
336
+ function _transfer(
337
+ address from,
338
+ address to,
339
+ uint256 shares
340
+ ) internal override {
341
+ _decreaseProductivity(address(this), from, shares, 0, block.number);
342
+ //the recipient sent G$ are considered like he is staking them, so they will also earn GOOD rewards
343
+ _increaseProductivity(address(this), to, shares, 0, block.number);
344
+
345
+ //recipient inherits the rewards part also, this is important so deposit part is sent from contract balance and rewards from rewards contract
346
+ uint256 recipientShares = balanceOf(to);
347
+ stakersInfo[to].lastSharePrice = uint128(
348
+ ((stakersInfo[to].lastSharePrice * recipientShares) +
349
+ (stakersInfo[from].lastSharePrice * shares)) /
350
+ (recipientShares + shares)
351
+ );
352
+
353
+ //mint GOOD rewards
354
+ _mintGOODRewards(from);
355
+ _mintGOODRewards(to);
356
+
357
+ super._transfer(from, to, shares);
358
+ }
359
+
360
+ /**
361
+ * @dev Calculate rewards per block from monthly amount of rewards and set it
362
+ * @param _monthlyAmount total rewards which will distribute monthly
363
+ */
364
+ function setMonthlyGOODRewards(uint256 _monthlyAmount) external {
365
+ _onlyAvatar();
366
+ _setMonthlyRewards(address(this), _monthlyAmount);
367
+ emit GOODRewardsSet(_monthlyAmount);
368
+ }
369
+
370
+ function setBlockPerYear(uint128 _blocksPerYear) external {
371
+ _onlyAvatar();
372
+ numberOfBlocksPerYear = _blocksPerYear;
373
+ }
374
+
375
+ /**
376
+ * @dev interest rate per one block in 1e18 precision.
377
+ * for example APY=5% then per block = nroot(1+0.05,numberOfBlocksPerYear)
378
+ * nroot(1.05,6000000) = 1.000000008131694
379
+ * in 1e18 = 1000000008131694000
380
+ * @param _interestRatePerBlock nth blocks per year root of APY - nroot(1+0.05,numberOfBlocksPerYear)
381
+ */
382
+ function setGdApy(uint128 _interestRatePerBlock) public {
383
+ _onlyAvatar();
384
+ _setAPY(_interestRatePerBlock);
385
+ require(
386
+ Math64x64.mulu(
387
+ Math64x64.pow(interestRatePerBlockX64, numberOfBlocksPerYear),
388
+ 1e4
389
+ ) < 12000
390
+ );
391
+
392
+ emit APYSet(_interestRatePerBlock);
393
+ }
394
+
395
+ /**
396
+ * @dev returns both GOOD and G$ rewards rate
397
+ * @return _goodRewardPerBlock GOOD nominal reward rate per block
398
+ * @return _gdInterestRatePerBlock the G$ interest rate per block in 1e18 precision
399
+ */
400
+ function getRewardsPerBlock()
401
+ external
402
+ view
403
+ returns (uint256 _goodRewardPerBlock, uint256 _gdInterestRatePerBlock)
404
+ {
405
+ _goodRewardPerBlock = rewardsPerBlock[address(this)];
406
+ _gdInterestRatePerBlock = Math64x64.mulu(interestRatePerBlockX64, 1e18);
407
+ }
408
+
409
+ /**
410
+ * @dev returns the user original deposit amount as registered in MultiBaseShare. should equal stakersInfo.deposit
411
+ * @return userStake user deposit amount
412
+ * @return totalStaked total deposits
413
+ */
414
+ function getStaked(address _user)
415
+ external
416
+ view
417
+ returns (uint256 userStake, uint256 totalStaked)
418
+ {
419
+ return getProductivity(address(this), _user);
420
+ }
421
+
422
+ /**
423
+ * @dev returns user pending GOOD and G$ rewards
424
+ * @return goodReward GOOD nominal rewards pending
425
+ * @return gdReward the G$ nominal rewards earned from interest rate
426
+ */
427
+ function getUserPendingReward(address _user)
428
+ external
429
+ view
430
+ returns (uint256 goodReward, uint256 gdReward)
431
+ {
432
+ // GOOD rewards
433
+ goodReward = getUserPendingReward(address(this), 0, block.number, _user);
434
+
435
+ gdReward = earned(_user);
436
+ }
437
+
438
+ /**
439
+ * @dev returns accumulated rewards per share
440
+ * @return _goodRewardPerShare GOOD accumulated rewards
441
+ * @return _gdRewardPerShare G$ accumulated rewards
442
+ */
443
+ function totalRewardsPerShare()
444
+ external
445
+ view
446
+ returns (uint256 _goodRewardPerShare, uint256 _gdRewardPerShare)
447
+ {
448
+ _goodRewardPerShare = super.totalRewardsPerShare(address(this));
449
+
450
+ _gdRewardPerShare = totalSupply() == 0
451
+ ? 0
452
+ : ((_compound() - stats.totalStaked * PRECISION) * SHARE_PRECISION) /
453
+ (totalSupply() * PRECISION);
454
+ }
455
+
456
+ /// @dev helper function for multibase
457
+ /// @return userInfo staker info related to GOOD rewards
458
+ function goodStakerInfo(address _user)
459
+ external
460
+ view
461
+ returns (UserInfo memory userInfo)
462
+ {
463
+ return contractToUsers[address(this)][_user];
464
+ }
465
+
466
+ /// @notice after 1 month move GOOD permissions minting to this contract from previous GovernanceStaking
467
+ function upgrade() external virtual {
468
+ require(
469
+ block.timestamp > createdAt + (daysUntilUpgrade * 1 days) &&
470
+ dao.isSchemeRegistered(address(this), avatar),
471
+ "not deadline or not scheme"
472
+ );
473
+ _setMonthlyRewards(address(this), 2 ether * 1e6); //2M monthly GOOD
474
+ emit GOODRewardsSet(2 ether * 1e6);
475
+
476
+ //this will make sure rewards are set at 0, so no withdraw issue will happen.
477
+ address curStaking = nameService.getAddress("GDAO_STAKING");
478
+ bool ok;
479
+ if (curStaking != address(0)) {
480
+ //this will trigger updating of accumulated rewards, so everyone's rewards are updated to this point
481
+ IGovernanceStaking(curStaking).withdrawRewards();
482
+ (ok, ) = dao.genericCall(
483
+ curStaking,
484
+ abi.encodeWithSignature("setMonthlyRewards(uint256)", 0),
485
+ avatar,
486
+ 0
487
+ );
488
+ require(ok, "calling setMonthlyRewards failed");
489
+ }
490
+
491
+ //this will set this contract as the GDAO_STAKING contract and give us minting rights on the reputation token
492
+ (ok, ) = dao.genericCall(
493
+ address(nameService),
494
+ abi.encodeWithSignature(
495
+ "setAddress(string,address)",
496
+ "GDAO_STAKING",
497
+ address(this)
498
+ ),
499
+ avatar,
500
+ 0
501
+ );
502
+ require(ok, "calling setAddress failed");
503
+ dao.unregisterSelf(avatar); // make sure we cant call this again;
504
+ }
505
+
506
+ /**
507
+ * @dev Pause staking and also set APY, usually when paused we want the APY to be 0
508
+ * updateReward is called to accrue interest until pause event
509
+ * @param _paused whether to pause on unpause
510
+ * @param _interestRatePerBlock the interest rate to set when pausing/unpausing (see setGdApy)
511
+ */
512
+ function pause(bool _paused, uint128 _interestRatePerBlock)
513
+ external
514
+ updateReward
515
+ {
516
+ _onlyAvatar();
517
+ if (_paused) {
518
+ _pause();
519
+ } else {
520
+ _unpause();
521
+ }
522
+ setGdApy(_interestRatePerBlock);
523
+ }
524
+ }
@@ -39,6 +39,7 @@ abstract contract MultiBaseGovernanceShareField is DSMath {
39
39
  function _setMonthlyRewards(address _contract, uint256 _monthlyAmount)
40
40
  internal
41
41
  {
42
+ _update(_contract, 0, block.number); //we need to accrue rewards before we change the rewards rate
42
43
  rewardsPerBlock[_contract] = _monthlyAmount / getChainBlocksPerMonth();
43
44
  }
44
45