@gooddollar/goodprotocol 2.0.25-beta.1 → 2.0.25-beta.10

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 (441) hide show
  1. package/artifacts/abis/BulkWhitelist.min.json +1 -0
  2. package/artifacts/abis/CompoundVotingMachine.min.json +1 -1
  3. package/artifacts/abis/DistributionHelper.min.json +1 -1
  4. package/artifacts/abis/DistributionHelperTest.min.json +1 -1
  5. package/artifacts/abis/DistributionHelperTestHelper.min.json +1 -1
  6. package/artifacts/abis/EternalStorage.min.json +1 -0
  7. package/artifacts/abis/FuseOldBridgeKill.min.json +1 -0
  8. package/artifacts/abis/FuseStakingV3.min.json +1 -1
  9. package/artifacts/abis/GoodFundManager.min.json +1 -1
  10. package/artifacts/abis/GoodFundManagerTest.min.json +1 -1
  11. package/artifacts/abis/GoodMarketMaker.min.json +1 -1
  12. package/artifacts/abis/GoodReserveCDai.min.json +1 -1
  13. package/artifacts/abis/IQuoterV2.min.json +1 -1
  14. package/artifacts/abis/ISwapRouter.min.json +1 -1
  15. package/artifacts/abis/IUpgradeabilityOwnerStorage.min.json +1 -0
  16. package/artifacts/abis/Initializable.min.json +1 -0
  17. package/artifacts/abis/InvitesV2.min.json +1 -1
  18. package/artifacts/abis/LastauthReduction.min.json +1 -0
  19. package/artifacts/abis/OneTimeReward.min.json +1 -0
  20. package/artifacts/abis/Ownable.min.json +1 -0
  21. package/artifacts/abis/ReserveRestore.min.json +1 -0
  22. package/artifacts/abis/Upgradeable.min.json +1 -0
  23. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  24. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  25. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  26. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  27. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  28. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  34. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  35. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  36. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  37. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  38. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  39. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  40. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
  43. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  44. package/artifacts/contracts/Interfaces.sol/IQuoterV2.dbg.json +4 -0
  45. package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.json +1 -1
  46. package/artifacts/contracts/Interfaces.sol/ISwapRouter.dbg.json +4 -0
  47. package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.json +1 -1
  48. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  49. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  50. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  51. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  52. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  53. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  54. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  55. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  56. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
  57. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +2 -2
  58. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  59. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +2 -2
  60. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
  61. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +2 -2
  62. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  63. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  64. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  65. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +20 -2
  66. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  67. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
  68. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
  69. package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.json +2 -2
  70. package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
  71. package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
  72. package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
  73. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  74. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
  75. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  76. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  77. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
  78. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  79. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  80. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
  81. package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  82. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
  83. package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.json +2 -2
  84. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  85. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
  86. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
  87. package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.json +15 -2
  88. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.dbg.json +4 -0
  89. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.json +291 -0
  90. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  91. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
  92. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
  93. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
  94. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  95. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
  96. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  97. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
  98. package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.json +2 -2
  99. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
  100. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.json +21 -2
  101. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
  102. package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.json +21 -2
  103. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
  104. package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
  105. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
  106. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  107. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  108. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
  109. package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.json +2 -2
  110. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  111. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +21 -2
  112. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.dbg.json +1 -1
  113. package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.json +2 -2
  114. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  115. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  116. package/artifacts/contracts/mocks/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
  117. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
  118. package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.json +2 -2
  119. package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.dbg.json +1 -1
  120. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  121. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +2 -2
  122. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  123. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  124. package/artifacts/contracts/mocks/PayableMock.sol/PayableMock.dbg.json +1 -1
  125. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  126. package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.dbg.json +1 -1
  127. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  128. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
  129. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  130. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  131. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
  132. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  133. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
  134. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  135. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
  136. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  137. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
  138. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  139. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  140. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  141. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  142. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  143. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  144. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  145. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  146. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +1 -1
  147. package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +21 -2
  148. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  149. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  150. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  151. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +6 -6
  152. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  153. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  154. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +3 -3
  155. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  156. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
  157. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  158. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
  159. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  160. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  161. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  162. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +7 -2
  163. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  164. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  165. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  166. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +21 -2
  167. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  168. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  169. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  170. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  171. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  172. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  173. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  174. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  175. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  176. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  177. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  178. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  179. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  180. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  181. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  182. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  183. package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
  184. package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
  185. package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
  186. package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
  187. package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
  188. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
  189. package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.json +2 -2
  190. package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +1 -1
  191. package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +1 -1
  192. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
  193. package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
  194. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
  195. package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
  196. package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +1 -1
  197. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
  198. package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
  199. package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
  200. package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
  201. package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
  202. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
  203. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
  204. package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
  205. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  206. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  207. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
  208. package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.json +2 -2
  209. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
  210. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +2 -2
  211. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
  212. package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.json +2 -2
  213. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  214. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  215. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +2 -2
  216. package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.dbg.json +4 -0
  217. package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.json +67 -0
  218. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
  219. package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.json +2 -2
  220. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
  221. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.json +2 -2
  222. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
  223. package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.json +2 -2
  224. package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
  225. package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.json +2 -2
  226. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  227. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
  228. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  229. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
  230. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  231. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  232. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.dbg.json +4 -0
  233. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/EternalStorage.json +10 -0
  234. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.dbg.json +4 -0
  235. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.json +31 -0
  236. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.dbg.json +4 -0
  237. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.json +24 -0
  238. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.dbg.json +4 -0
  239. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Initializable.json +24 -0
  240. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.dbg.json +4 -0
  241. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Ownable.json +56 -0
  242. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.dbg.json +4 -0
  243. package/artifacts/contracts/utils/FuseOldBridgeKill.sol/Upgradeable.json +10 -0
  244. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.dbg.json +1 -1
  245. package/artifacts/contracts/utils/GDFaucet.sol/GDFaucet.json +2 -2
  246. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
  247. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +2 -2
  248. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
  249. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
  250. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
  251. package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.json +2 -2
  252. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
  253. package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.json +2 -2
  254. package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.dbg.json +4 -0
  255. package/artifacts/contracts/utils/LastauthReduction.sol/LastauthReduction.json +81 -0
  256. package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
  257. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
  258. package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.json +2 -2
  259. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  260. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
  261. package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.json +2 -2
  262. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.dbg.json +1 -1
  263. package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.json +2 -2
  264. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  265. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  266. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
  267. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  268. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
  269. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  270. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
  271. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  272. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
  273. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  274. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  275. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  276. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  277. package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.dbg.json +4 -0
  278. package/artifacts/contracts/utils/ReserveRestore.sol/ReserveRestore.json +91 -0
  279. package/contracts/Interfaces.sol +122 -0
  280. package/contracts/governance/CompoundVotingMachine.sol +26 -11
  281. package/contracts/governance/StakersDistribution.sol +13 -13
  282. package/contracts/invite/InvitesV2.sol +60 -43
  283. package/contracts/invite/OneTimeReward.sol +87 -0
  284. package/contracts/reserve/DistributionHelper.sol +29 -10
  285. package/contracts/reserve/ExchangeHelper.sol +16 -7
  286. package/contracts/reserve/GoodMarketMaker.sol +43 -53
  287. package/contracts/reserve/GoodReserveCDai.sol +44 -16
  288. package/contracts/staking/FuseStakingV3.sol +4 -2
  289. package/contracts/staking/GoodFundManager.sol +44 -4
  290. package/contracts/utils/BulkWhitelist.sol +51 -0
  291. package/contracts/utils/BuyGDClone.sol +0 -122
  292. package/contracts/utils/FuseOldBridgeKill.sol +123 -0
  293. package/contracts/utils/LastauthReduction.sol +92 -0
  294. package/contracts/utils/ReserveRestore.sol +157 -0
  295. package/dist/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  296. package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
  297. package/dist/test-sdk/deploySuperGoodDollar.js +1 -1
  298. package/package.json +19 -20
  299. package/releases/deployment.json +612 -599
  300. package/scripts/analytics/activeStakers.ts +25 -0
  301. package/scripts/analytics/activeUsersCount.ts +80 -26
  302. package/scripts/analytics/activeWalletsStats.ts +155 -22
  303. package/scripts/analytics/checkBridgeBalances.ts +442 -0
  304. package/scripts/deployFullDAO.ts +6 -4
  305. package/scripts/fv.ts +148 -35
  306. package/scripts/multichain-deploy/helpers.ts +6 -3
  307. package/scripts/proposals/identityAuthPeriod.ts +229 -0
  308. package/scripts/proposals/reserveRestore.ts +429 -0
  309. package/scripts/test/localOldDaoDeploy.ts +2 -1
  310. package/scripts/utils.ts +28 -16
  311. package/test/governance/CompoundVotingMachine.daoscheme.ts +3 -0
  312. package/test/governance/CompoundVotingMachine.guardian.test.ts +76 -21
  313. package/test/governance/CompoundVotingMachine.state.test.ts +31 -28
  314. package/test/governance/StakersDistribution.test.ts +79 -5
  315. package/test/helpers.ts +9 -0
  316. package/test/invite/InvitesV2.test.ts +165 -271
  317. package/test/reserve/DistributionHelper.test.ts +10 -10
  318. package/test/reserve/GoodMarketMaker.test.ts +75 -26
  319. package/test/reserve/GoodReserveCDai.test.ts +2 -1
  320. package/test/staking/FuseStaking.test.ts +23 -54
  321. package/test/staking/StakingRewards.test.ts +106 -29
  322. package/test/utils/ProtocolUpgrade.test.ts +1 -0
  323. package/tsconfig.json +1 -1
  324. package/types/@openzeppelin/contracts/access/Ownable.ts +175 -0
  325. package/types/@openzeppelin/contracts/access/index.ts +1 -0
  326. package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.ts +1 -1
  327. package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.ts +1 -1
  328. package/types/contracts/Interfaces.sol/index.ts +2 -0
  329. package/types/contracts/governance/CompoundVotingMachine.ts +44 -3
  330. package/types/contracts/invite/InvitesV2.ts +32 -0
  331. package/types/contracts/invite/OneTimeReward.ts +521 -0
  332. package/types/contracts/invite/index.ts +1 -0
  333. package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.ts +35 -0
  334. package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.ts +35 -0
  335. package/types/contracts/mocks/GoodFundManagerTest.ts +35 -0
  336. package/types/contracts/reserve/DistributionHelper.ts +35 -0
  337. package/types/contracts/reserve/GoodMarketMaker.ts +3 -3
  338. package/types/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.ts +5 -5
  339. package/types/contracts/staking/FuseStakingV3.sol/FuseStakingV3.ts +7 -2
  340. package/types/contracts/staking/GoodFundManager.ts +35 -0
  341. package/types/contracts/utils/BulkWhitelist.ts +153 -0
  342. package/types/contracts/utils/BuyGDClone.sol/index.ts +0 -2
  343. package/types/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.ts +108 -0
  344. package/types/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.ts +89 -0
  345. package/types/contracts/utils/FuseOldBridgeKill.sol/Initializable.ts +87 -0
  346. package/types/contracts/utils/FuseOldBridgeKill.sol/Ownable.ts +148 -0
  347. package/types/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
  348. package/types/contracts/utils/LastauthReduction.ts +168 -0
  349. package/types/contracts/utils/ReserveRestore.ts +201 -0
  350. package/types/contracts/utils/index.ts +5 -0
  351. package/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +78 -0
  352. package/types/factories/@openzeppelin/contracts/access/index.ts +1 -0
  353. package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2__factory.ts +1 -1
  354. package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter__factory.ts +1 -1
  355. package/types/factories/contracts/Interfaces.sol/index.ts +2 -0
  356. package/types/factories/contracts/fuseFaucet/Faucet__factory.ts +1 -1
  357. package/types/factories/contracts/fuseFaucet/FuseFaucetV2__factory.ts +1 -1
  358. package/types/factories/contracts/fuseFaucet/FuseFaucet__factory.ts +1 -1
  359. package/types/factories/contracts/governance/ClaimersDistribution__factory.ts +1 -1
  360. package/types/factories/contracts/governance/CompoundVotingMachine__factory.ts +19 -1
  361. package/types/factories/contracts/governance/GReputation__factory.ts +1 -1
  362. package/types/factories/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking__factory.ts +1 -1
  363. package/types/factories/contracts/governance/GovernanceStaking__factory.ts +1 -1
  364. package/types/factories/contracts/governance/Reputation__factory.ts +1 -1
  365. package/types/factories/contracts/governance/StakersDistribution__factory.ts +1 -1
  366. package/types/factories/contracts/identity/IdentityV2__factory.ts +1 -1
  367. package/types/factories/contracts/invite/InvitesFuseV2__factory.ts +1 -1
  368. package/types/factories/contracts/invite/InvitesV1__factory.ts +1 -1
  369. package/types/factories/contracts/invite/InvitesV2__factory.ts +14 -1
  370. package/types/factories/contracts/invite/OneTimeReward__factory.ts +361 -0
  371. package/types/factories/contracts/invite/index.ts +1 -0
  372. package/types/factories/contracts/mocks/DistributionBridgeMock__factory.ts +1 -1
  373. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +20 -1
  374. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest__factory.ts +20 -1
  375. package/types/factories/contracts/mocks/GoodCompoundStakingTest__factory.ts +1 -1
  376. package/types/factories/contracts/mocks/GoodDollarStakingMock__factory.ts +1 -1
  377. package/types/factories/contracts/mocks/GoodFundManagerTest__factory.ts +20 -1
  378. package/types/factories/contracts/mocks/IdentityMock__factory.ts +1 -1
  379. package/types/factories/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock__factory.ts +1 -1
  380. package/types/factories/contracts/mocks/OverMintTester.sol/OverMintTester__factory.ts +1 -1
  381. package/types/factories/contracts/mocks/OverMintTesterRegularStake__factory.ts +1 -1
  382. package/types/factories/contracts/mocks/SwapHelperTest__factory.ts +1 -1
  383. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock2__factory.ts +1 -1
  384. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock3__factory.ts +1 -1
  385. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock4__factory.ts +1 -1
  386. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock__factory.ts +1 -1
  387. package/types/factories/contracts/reserve/DistributionHelper__factory.ts +20 -1
  388. package/types/factories/contracts/reserve/ExchangeHelper__factory.ts +1 -1
  389. package/types/factories/contracts/reserve/GoodMarketMaker__factory.ts +5 -5
  390. package/types/factories/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai__factory.ts +2 -2
  391. package/types/factories/contracts/staking/BaseShareFieldV2__factory.ts +1 -1
  392. package/types/factories/contracts/staking/BaseShareField__factory.ts +1 -1
  393. package/types/factories/contracts/staking/DonationsStaking__factory.ts +1 -1
  394. package/types/factories/contracts/staking/FuseStakingV3.sol/FuseStakingV3__factory.ts +6 -1
  395. package/types/factories/contracts/staking/GoodFundManager__factory.ts +20 -1
  396. package/types/factories/contracts/staking/UniswapV2SwapHelper__factory.ts +1 -1
  397. package/types/factories/contracts/staking/aave/AaveStakingFactory__factory.ts +1 -1
  398. package/types/factories/contracts/staking/aave/GoodAaveStakingV2__factory.ts +1 -1
  399. package/types/factories/contracts/staking/aave/GoodAaveStaking__factory.ts +1 -1
  400. package/types/factories/contracts/staking/compound/CompoundStakingFactory__factory.ts +1 -1
  401. package/types/factories/contracts/staking/compound/GoodCompoundStakingV2__factory.ts +1 -1
  402. package/types/factories/contracts/staking/compound/GoodCompoundStaking__factory.ts +1 -1
  403. package/types/factories/contracts/token/GoodDollar__factory.ts +1 -1
  404. package/types/factories/contracts/token/superfluid/SuperGoodDollar__factory.ts +1 -1
  405. package/types/factories/contracts/ubi/UBISchemeV2__factory.ts +1 -1
  406. package/types/factories/contracts/ubi/UBIScheme__factory.ts +1 -1
  407. package/types/factories/contracts/utils/AdminWalletFuse__factory.ts +1 -1
  408. package/types/factories/contracts/utils/AdminWallet__factory.ts +1 -1
  409. package/types/factories/contracts/utils/BulkWhitelist__factory.ts +123 -0
  410. package/types/factories/contracts/utils/BuyAndBridgeHelper__factory.ts +1 -1
  411. package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory__factory.ts +1 -1
  412. package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDClone__factory.ts +1 -1
  413. package/types/factories/contracts/utils/BuyGDClone.sol/DonateGDClone__factory.ts +1 -1
  414. package/types/factories/contracts/utils/BuyGDClone.sol/index.ts +0 -2
  415. package/types/factories/contracts/utils/DAOContract__factory.ts +1 -1
  416. package/types/factories/contracts/utils/DAOUpgradeableContract__factory.ts +1 -1
  417. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill__factory.ts +82 -0
  418. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage__factory.ts +43 -0
  419. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Initializable__factory.ts +75 -0
  420. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Ownable__factory.ts +105 -0
  421. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
  422. package/types/factories/contracts/utils/GDFaucet__factory.ts +1 -1
  423. package/types/factories/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper__factory.ts +1 -1
  424. package/types/factories/contracts/utils/IdentityFix__factory.ts +1 -1
  425. package/types/factories/contracts/utils/LastauthReduction__factory.ts +134 -0
  426. package/types/factories/contracts/utils/MultichainBridgeHelper__factory.ts +1 -1
  427. package/types/factories/contracts/utils/OneTimePaymentsV2__factory.ts +1 -1
  428. package/types/factories/contracts/utils/OneTimePayments__factory.ts +1 -1
  429. package/types/factories/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade__factory.ts +1 -1
  430. package/types/factories/contracts/utils/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  431. package/types/factories/contracts/utils/ProtocolUpgradeFuse__factory.ts +1 -1
  432. package/types/factories/contracts/utils/ProtocolUpgradeRecover__factory.ts +1 -1
  433. package/types/factories/contracts/utils/ReputationTestHelper__factory.ts +1 -1
  434. package/types/factories/contracts/utils/ReserveRestore__factory.ts +144 -0
  435. package/types/factories/contracts/utils/index.ts +4 -0
  436. package/types/hardhat.d.ts +97 -16
  437. package/types/index.ts +18 -4
  438. package/artifacts/contracts/utils/BuyGDClone.sol/IQuoterV2.dbg.json +0 -4
  439. package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.dbg.json +0 -4
  440. package/contracts/utils/.DS_Store +0 -0
  441. package/yarn.lock +0 -23715
@@ -193,6 +193,10 @@ export const executeViaGuardian = async (
193
193
  const results = [];
194
194
  for (let i = 0; i < contracts.length; i++) {
195
195
  const contract = contracts[i];
196
+ if (!contract) {
197
+ console.warn("skipping executing missing contract", i, contracts[i], functionSigs[i], functionInputs[i])
198
+ continue;
199
+ }
196
200
  console.log("executing:", contracts[i], functionSigs[i], functionInputs[i]);
197
201
  const sigHash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(functionSigs[i])).slice(0, 10);
198
202
  const encoded = ethers.utils.solidityPack(["bytes4", "bytes"], [sigHash, functionInputs[i]]);
@@ -404,9 +408,8 @@ export const verifyContract = async (
404
408
  networkProvider = networkProvider === "mainnet" ? "ethereum" : networkProvider;
405
409
  console.log("truffle compile...");
406
410
  await exec("npx truffle compile");
407
- const cmd = `npx truffle run verify ${proxyName ? "--custom-proxy " + proxyName : ""} ${contractName}@${address} ${
408
- forcedConstructorArguments ? "--forceConstructorArgs string:" + forcedConstructorArguments.slice(2) : ""
409
- } --network ${networkProvider}`;
411
+ const cmd = `npx truffle run verify ${proxyName ? "--custom-proxy " + proxyName : ""} ${contractName}@${address} ${forcedConstructorArguments ? "--forceConstructorArgs string:" + forcedConstructorArguments.slice(2) : ""
412
+ } --network ${networkProvider}`;
410
413
  console.log("running...:", cmd);
411
414
  await exec(cmd).then(({ stdout, stderr }) => {
412
415
  console.log("Result for:", cmd);
@@ -0,0 +1,229 @@
1
+ /***
2
+ * Bring UBI distribution to a temporary working state
3
+ * Celo:
4
+ * - upgrade bridge to be able to prevent UBI bridge transfers as result of the hack
5
+ * - mark unexecuted bridge transfers as executed
6
+ * - set UBI with new cycle params
7
+ * - unpause ubi contract
8
+ * Fuse:
9
+ * - withdraw ubi to avatar and bridge ubi to contract on celo
10
+ * - burn excess UBI tokens
11
+ * - set UBI with new cycle params
12
+ * - unpause ubi contract
13
+ * Mainnet:
14
+ * - withdraw excess UBI from bridge to avatar
15
+ * - burn excess UBI from bridge
16
+ *
17
+ */
18
+
19
+ import { network, ethers } from "hardhat";
20
+ import { defaultsDeep, last } from "lodash";
21
+ import prompt from "prompt";
22
+
23
+ import { executeViaGuardian, executeViaSafe, verifyProductionSigner } from "../multichain-deploy/helpers";
24
+
25
+ import ProtocolSettings from "../../releases/deploy-settings.json";
26
+
27
+ import dao from "../../releases/deployment.json";
28
+ let { name: networkName } = network;
29
+
30
+ export const upgradeCelo = async () => {
31
+ const isProduction = networkName.includes("production");
32
+ let [root, ...signers] = await ethers.getSigners();
33
+
34
+ if (isProduction) verifyProductionSigner(root);
35
+
36
+ let guardian = root;
37
+
38
+ //simulate produciton on fork
39
+ if (network.name === "hardhat" || network.name === "fork" || network.name === "localhost") {
40
+ networkName = "production-celo";
41
+ }
42
+
43
+ let release: { [key: string]: any } = dao[networkName];
44
+ let protocolSettings = defaultsDeep({}, ProtocolSettings[networkName], ProtocolSettings["default"]);
45
+
46
+ //simulate on fork, make sure safe has enough eth to simulate txs
47
+ if (network.name === "hardhat" || network.name === "fork" || network.name === "localhost") {
48
+ guardian = await ethers.getImpersonatedSigner(protocolSettings.guardiansSafe);
49
+
50
+ await root.sendTransaction({
51
+ value: ethers.constants.WeiPerEther.mul(3),
52
+ to: protocolSettings.guardiansSafe
53
+ });
54
+ }
55
+
56
+ const rootBalance = await ethers.provider.getBalance(root.address).then(_ => _.toString());
57
+ const guardianBalance = await ethers.provider.getBalance(guardian.address).then(_ => _.toString());
58
+
59
+
60
+ console.log("got signers:", {
61
+ networkName,
62
+ root: root.address,
63
+ guardian: guardian.address,
64
+ balance: rootBalance,
65
+ guardianBalance: guardianBalance
66
+ });
67
+
68
+ const reducerContract = await ethers.deployContract("LastauthReduction", [release.NameService])
69
+ console.log("executing proposals");
70
+
71
+ const proposalContracts = [
72
+ release.Controller,
73
+ ];
74
+
75
+ const proposalEthValues = proposalContracts.map(_ => 0);
76
+
77
+ const proposalFunctionSignatures = [
78
+ "registerScheme(address,bytes32,bytes4,address)", //make sure mpb is a registered scheme so it can mint G$ tokens
79
+ ];
80
+
81
+ const proposalFunctionInputs = [
82
+ ethers.utils.defaultAbiCoder.encode(["address", "bytes32", "bytes4", "address"], [reducerContract.address, ethers.constants.HashZero, "0x0000001f", release.Avatar]),
83
+ ];
84
+
85
+ if (isProduction) {
86
+ await executeViaSafe(
87
+ proposalContracts,
88
+ proposalEthValues,
89
+ proposalFunctionSignatures,
90
+ proposalFunctionInputs,
91
+ protocolSettings.guardiansSafe,
92
+ "celo"
93
+ );
94
+ } else {
95
+ //simulation or dev envs
96
+ await executeViaGuardian(
97
+ proposalContracts,
98
+ proposalEthValues,
99
+ proposalFunctionSignatures,
100
+ proposalFunctionInputs,
101
+ guardian,
102
+ networkName
103
+ );
104
+ }
105
+
106
+ //perform sanity checks on fork, for production we need to wait until everything executed
107
+ if (!isProduction) {
108
+ try {
109
+ while (true) {
110
+ await reducerContract.reduce()
111
+ let id = await ethers.getContractAt("IdentityV2", release.Identity);
112
+ console.log("authperiod", await id.authenticationPeriod());
113
+ }
114
+ } catch (error) {
115
+ console.log("reduce reverted:", error)
116
+ }
117
+
118
+ }
119
+ };
120
+
121
+ export const upgradeFuse = async () => {
122
+ const isProduction = networkName.includes("production");
123
+
124
+ let [root] = await ethers.getSigners();
125
+
126
+ //simulate produciton on fork
127
+ if (network.name === "hardhat" || network.name === "fork" || network.name === "localhost") {
128
+ networkName = "production";
129
+ }
130
+
131
+ let networkEnv = networkName.split("-")[0];
132
+
133
+
134
+ if (networkEnv === "fuse") networkEnv = "development";
135
+
136
+ let release: { [key: string]: any } = dao[networkEnv];
137
+
138
+ let guardian = root;
139
+ console.log({ networkEnv })
140
+ //simulate on fork, make sure safe has enough eth to simulate txs
141
+ if (network.name === "hardhat" || network.name === "localhost" || network.name === "fork") {
142
+ guardian = await ethers.getImpersonatedSigner(release.GuardiansSafe);
143
+
144
+ await root.sendTransaction({
145
+ value: ethers.constants.WeiPerEther.mul(3),
146
+ to: guardian.address
147
+ });
148
+ }
149
+
150
+
151
+ console.log({
152
+ networkEnv,
153
+ guardian: guardian.address,
154
+ isProduction,
155
+ avatarBalance: await ethers.provider.getBalance(root.address).then(_ => _.toString())
156
+ });
157
+
158
+ const reducerContract = await ethers.deployContract("LastauthReduction", [release.NameService])
159
+
160
+ const proposalContracts = [
161
+ release.Controller,
162
+ ];
163
+
164
+ const proposalEthValues = proposalContracts.map(_ => 0);
165
+
166
+ const proposalFunctionSignatures = [
167
+ "registerScheme(address,bytes32,bytes4,address)", //make sure mpb is a registered scheme so it can mint G$ tokens
168
+ ];
169
+
170
+ const proposalFunctionInputs = [
171
+ ethers.utils.defaultAbiCoder.encode(["address", "bytes32", "bytes4", "address"], [reducerContract.address, ethers.constants.HashZero, "0x0000001f", release.Avatar]),
172
+ ];
173
+
174
+ if (isProduction) {
175
+ await executeViaSafe(
176
+ proposalContracts,
177
+ proposalEthValues,
178
+ proposalFunctionSignatures,
179
+ proposalFunctionInputs,
180
+ release.GuardiansSafe,
181
+ "fuse"
182
+ );
183
+ } else {
184
+ //simulation or dev envs
185
+ await executeViaGuardian(
186
+ proposalContracts,
187
+ proposalEthValues,
188
+ proposalFunctionSignatures,
189
+ proposalFunctionInputs,
190
+ guardian,
191
+ networkName
192
+ );
193
+ }
194
+
195
+ //perform sanity checks on fork, for production we need to wait until everything executed
196
+ if (!isProduction) {
197
+ try {
198
+ while (true) {
199
+ await reducerContract.reduce()
200
+ let id = await ethers.getContractAt("IdentityV2", release.Identity);
201
+ let idOld = await ethers.getContractAt("IdentityV2", release.IdentityOld);
202
+
203
+ console.log("authperiod", await id.authenticationPeriod(), await idOld.authenticationPeriod());
204
+ }
205
+ } catch (error) {
206
+ console.log("reduce reverted:", error)
207
+ }
208
+ }
209
+
210
+
211
+ };
212
+
213
+
214
+ export const main = async () => {
215
+ prompt.start();
216
+ const { network } = await prompt.get(["network"]);
217
+
218
+ console.log("running step:", { network });
219
+ switch (network) {
220
+ case "celo":
221
+ await upgradeCelo();
222
+ break;
223
+ case "fuse":
224
+ await upgradeFuse();
225
+ break;
226
+ }
227
+ };
228
+
229
+ main().catch(console.log);
@@ -0,0 +1,429 @@
1
+ /***
2
+ * Mainnet:
3
+ * FIXES:
4
+ * - prevent hacked funds burnFrom
5
+ * - set GOOD rewards to 0
6
+ * - prevent untrusted contracts in goodfundmanager
7
+ * - use bonding curve for actual cDAI balance (prevent the "buy" instead of "transferTo" used in hack to trick reserve into minting UBI from interest)
8
+ * - set exit contribution to 10%
9
+ * - disable gdx
10
+ * - fix reserve calculations of expansion/currentprice
11
+ * - add requirement of guardians to approve on-chain proposals
12
+ * - reserve should not trust exchange helper
13
+ * - resere should not trust fundmanager for its starting balance
14
+ *
15
+ * PLAN:
16
+ * - pause staking
17
+ * - prevent fusebridge usage
18
+ * - set GOOD rewards to 0
19
+ * - blacklist hacked accounts to prevent burn (transfer already blocked done via tax)
20
+ * - withdraw funds from fuse
21
+ * - transfer to MPB bridge
22
+ * - upgrade reserve
23
+ * - set new reserve ratio, supply(minus hacked funds) and reserve
24
+ * - set contribution to 10%
25
+ * - unpause reserve
26
+ * - upgrade exchangeHelper
27
+ * - upgrade goodfundmanager
28
+ * - upgrade governance
29
+ * - unpause reserve
30
+ * - unpause goodfundmanager
31
+ * - switch fuse distribution to use lz bridge insted of deprecated fuse bridge
32
+ *
33
+ *
34
+ * Fuse:
35
+ * PLAN:
36
+ * - prevent old fuse bridge usage
37
+ * - upgrade governance
38
+ *
39
+ **/
40
+
41
+ import { network, ethers } from "hardhat";
42
+ import { reset, time } from "@nomicfoundation/hardhat-network-helpers";
43
+ import { defaultsDeep, last } from "lodash";
44
+ import prompt from "prompt";
45
+ // import mpbDeployments from "@gooddollar/bridge-contracts/release/mpb.json"
46
+
47
+ import { executeViaGuardian, executeViaSafe, verifyProductionSigner } from "../multichain-deploy/helpers";
48
+
49
+ import ProtocolSettings from "../../releases/deploy-settings.json";
50
+
51
+ import dao from "../../releases/deployment.json";
52
+ import { ExchangeHelper, FuseOldBridgeKill, GoodFundManager, GoodMarketMaker, GoodReserveCDai, IGoodDollar, ReserveRestore } from "../../types";
53
+ let { name: networkName } = network;
54
+
55
+
56
+ const isSimulation = network.name === "hardhat" || network.name === "fork" || network.name === "localhost";
57
+
58
+ // hacker and hacked multichain bridge accounts
59
+ const LOCKED_ACCOUNTS = ["0xeC577447D314cf1e443e9f4488216651450DBE7c", "0xD17652350Cfd2A37bA2f947C910987a3B1A1c60d", "0x6738fA889fF31F82d9Fe8862ec025dbE318f3Fde"]
60
+ const INITIAL_DAI = ethers.utils.parseEther("100000") // 100k
61
+ // reserve funder (goodlabs safe)
62
+ const funder = "0xF0652a820dd39EC956659E0018Da022132f2f40a"
63
+
64
+ export const upgradeMainnet = async network => {
65
+ const isProduction = networkName.includes("production");
66
+ let [root, ...signers] = await ethers.getSigners();
67
+
68
+ if (isProduction) verifyProductionSigner(root);
69
+
70
+ let guardian = root;
71
+
72
+ //simulate produciton on fork
73
+ if (isSimulation) {
74
+ networkName = "production-mainnet";
75
+ }
76
+
77
+ let release: { [key: string]: any } = dao[networkName];
78
+ let protocolSettings = defaultsDeep({}, ProtocolSettings[networkName], ProtocolSettings["default"]);
79
+
80
+ //simulate on fork, make sure safe has enough eth to simulate txs
81
+ if (isSimulation) {
82
+ await reset("https://eth.drpc.org");
83
+ guardian = await ethers.getImpersonatedSigner(protocolSettings.guardiansSafe);
84
+
85
+ await root.sendTransaction({
86
+ value: ethers.utils.parseEther("1"),
87
+ to: protocolSettings.guardiansSafe
88
+ });
89
+ }
90
+
91
+ const rootBalance = await ethers.provider.getBalance(root.address).then(_ => _.toString());
92
+ const guardianBalance = await ethers.provider.getBalance(guardian.address).then(_ => _.toString());
93
+
94
+ console.log("got signers:", {
95
+ networkName,
96
+ root: root.address,
97
+ guardian: guardian.address,
98
+ balance: rootBalance,
99
+ guardianBalance: guardianBalance
100
+ });
101
+
102
+ const reserveImpl = await ethers.deployContract("GoodReserveCDai");
103
+ const goodFundManagerImpl = await ethers.deployContract("GoodFundManager");
104
+ const exchangeHelperImpl = await ethers.deployContract("ExchangeHelper");
105
+ const stakersDistImpl = await ethers.deployContract("StakersDistribution");
106
+ const govImpl = await ethers.deployContract("CompoundVotingMachine");
107
+ const distHelperImplt = await ethers.deployContract("DistributionHelper");
108
+ const marketMakerImpl = await ethers.deployContract("GoodMarketMaker");
109
+ const upgradeImpl = await ethers.deployContract("ReserveRestore", [release.NameService]) as ReserveRestore;
110
+
111
+ const gd = (await ethers.getContractAt("IGoodDollar", release.GoodDollar)) as IGoodDollar;
112
+
113
+
114
+ // test blacklisting to prevent burn by hacker
115
+ if (isSimulation) {
116
+
117
+ const locked = await ethers.getImpersonatedSigner(LOCKED_ACCOUNTS[0]);
118
+ const tx = await gd
119
+ .connect(locked)
120
+ .burn("10")
121
+ .then(_ => _.wait())
122
+ .then(_ => _.status)
123
+ .catch(e => e);
124
+
125
+ console.log("Burn tx before:", tx);
126
+
127
+ const funderSigner = await ethers.getImpersonatedSigner(funder)
128
+ const dai = await ethers.getContractAt("IGoodDollar", release.DAI)
129
+ await dai.connect(funderSigner).approve(upgradeImpl.address, ethers.utils.parseEther("200000"))
130
+ const whale = await ethers.getImpersonatedSigner("0xa359Fc83C48277EedF375a5b6DC9Ec7D093aD3f2")
131
+ await dai.connect(whale).transfer(root.address, ethers.utils.parseEther("100000"))
132
+
133
+ const lockedFunds = await Promise.all(LOCKED_ACCOUNTS.map(_ => gd.balanceOf(_)))
134
+ const totalLocked = lockedFunds.reduce((acc, cur) => acc.add(cur), ethers.constants.Zero)
135
+ console.log({ totalLocked })
136
+
137
+ }
138
+
139
+ const startSupply = await gd.totalSupply();
140
+
141
+
142
+ console.log("executing proposals");
143
+
144
+ const proposalContracts = [
145
+ release.StakingContractsV3[0][0], // pause staking
146
+ release.StakingContractsV3[1][0], // pause staking
147
+ release.StakersDistribution, //set GOOD rewards to 0
148
+ release.GoodReserveCDai, //expansion ratio
149
+ release.ForeignBridge, // prevent from using
150
+ release.Identity, // set locked G$ accounts as blacklisted so cant do burn from
151
+ release.Identity, // set locked G$ accounts as blacklisted so cant do burn from
152
+ release.Identity, // set locked G$ accounts as blacklisted so cant do burnfrom
153
+ release.ForeignBridge, // claim bridge tokens to mpb bridge
154
+ release.GoodReserveCDai, //upgrade reserve
155
+ release.GoodFundManager, //upgrade fundmanager
156
+ release.ExchangeHelper, //upgrade exchangehelper
157
+ release.DistributionHelper, //upgrade disthelper
158
+ release.StakersDistribution, //upgrade stakers dist
159
+ release.GoodMarketMaker, //upgrade mm
160
+ release.CompoundVotingMachine, // upgrade gov
161
+ release.DistributionHelper, // switch to lz bridge for fuse
162
+ release.ExchangeHelper, // activate upgrade changes
163
+ release.Controller,
164
+ // upgradeImpl.address,
165
+ release.GuardiansSafe + "_" + release.GoodReserveCDai
166
+ ];
167
+
168
+ const proposalEthValues = proposalContracts.map(_ => 0);
169
+
170
+ const proposalFunctionSignatures = [
171
+ "pause(bool)",
172
+ "pause(bool)",
173
+ "setMonthlyReputationDistribution(uint256)",
174
+ "setReserveRatioDailyExpansion(uint256,uint256)",
175
+ "setExecutionDailyLimit(uint256)", // set limit to 0 so old bridge cant be used
176
+ "addBlacklisted(address)",
177
+ "addBlacklisted(address)",
178
+ "addBlacklisted(address)",
179
+ "claimTokens(address,address)",
180
+ "upgradeTo(address)",
181
+ "upgradeTo(address)",
182
+ "upgradeTo(address)",
183
+ "upgradeTo(address)",
184
+ "upgradeTo(address)",
185
+ "upgradeTo(address)",
186
+ "upgradeTo(address)",
187
+ "addOrUpdateRecipient((uint32,uint32,address,uint8))",
188
+ "setAddresses()",
189
+ "registerScheme(address,bytes32,bytes4,address)", // give upgrade contract permissions
190
+ // "upgrade(address, uint256)",
191
+ "unpause()"
192
+ ];
193
+
194
+ const proposalFunctionInputs = [
195
+ ethers.utils.defaultAbiCoder.encode(["bool"], [true]),
196
+ ethers.utils.defaultAbiCoder.encode(["bool"], [true]),
197
+ ethers.utils.defaultAbiCoder.encode(["uint256"], [0]),
198
+ ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [999711382710978, 1e15]),
199
+ ethers.utils.defaultAbiCoder.encode(["uint256"], [0]),
200
+ ethers.utils.defaultAbiCoder.encode(["address"], [LOCKED_ACCOUNTS[0]]),
201
+ ethers.utils.defaultAbiCoder.encode(["address"], [LOCKED_ACCOUNTS[1]]),
202
+ ethers.utils.defaultAbiCoder.encode(["address"], [LOCKED_ACCOUNTS[2]]),
203
+ ethers.utils.defaultAbiCoder.encode(["address", "address"], [release.GoodDollar, release.MpbBridge]),
204
+ ethers.utils.defaultAbiCoder.encode(["address"], [reserveImpl.address]),
205
+ ethers.utils.defaultAbiCoder.encode(["address"], [goodFundManagerImpl.address]),
206
+ ethers.utils.defaultAbiCoder.encode(["address"], [exchangeHelperImpl.address]),
207
+ ethers.utils.defaultAbiCoder.encode(["address"], [distHelperImplt.address]),
208
+ ethers.utils.defaultAbiCoder.encode(["address"], [stakersDistImpl.address]),
209
+ ethers.utils.defaultAbiCoder.encode(["address"], [marketMakerImpl.address]),
210
+ ethers.utils.defaultAbiCoder.encode(["address"], [govImpl.address]),
211
+ ethers.utils.defaultAbiCoder.encode(
212
+ ["uint32", "uint32", "address", "uint8"],
213
+ [1000, 122, dao["production"].UBIScheme, 1] //10% chainId 122 ubischeme 1-lz bridge
214
+ ),
215
+ "0x", //setAddresses
216
+ ethers.utils.defaultAbiCoder.encode(
217
+ ["address", "bytes32", "bytes4", "address"],
218
+ [
219
+ upgradeImpl.address, //scheme
220
+ ethers.constants.HashZero, //paramshash
221
+ "0x000000f1", //permissions - minimal
222
+ release.Avatar
223
+ ]
224
+ ),
225
+ "0x"
226
+ ];
227
+
228
+ if (isProduction) {
229
+ await executeViaSafe(
230
+ proposalContracts,
231
+ proposalEthValues,
232
+ proposalFunctionSignatures,
233
+ proposalFunctionInputs,
234
+ protocolSettings.guardiansSafe,
235
+ "mainnet"
236
+ );
237
+ } else {
238
+ //simulation or dev envs
239
+ await executeViaGuardian(
240
+ proposalContracts,
241
+ proposalEthValues,
242
+ proposalFunctionSignatures,
243
+ proposalFunctionInputs,
244
+ guardian,
245
+ networkName
246
+ );
247
+ }
248
+
249
+ if (isSimulation) {
250
+ await mainnetPostChecks(upgradeImpl)
251
+ }
252
+ };
253
+
254
+ const mainnetPostChecks = async (upgradeImpl: ReserveRestore) => {
255
+ networkName = "production-mainnet";
256
+ let release: { [key: string]: any } = dao[networkName];
257
+
258
+ let [root, ...signers] = await ethers.getSigners();
259
+ const gd = await ethers.getContractAt("IGoodDollar", release.GoodDollar);
260
+
261
+ //execute the reserve initialization
262
+ (await upgradeImpl.upgrade(funder, INITIAL_DAI)).wait()
263
+
264
+
265
+ const locked = await ethers.getImpersonatedSigner(LOCKED_ACCOUNTS[0]);
266
+ const tx = await gd
267
+ .connect(locked)
268
+ .burn("10", { maxFeePerGas: 30e9, maxPriorityFeePerGas: 1e9, gasLimit: 200000 })
269
+ .then(_ => _.wait())
270
+ .then(_ => _.status)
271
+ .catch(e => e);
272
+ console.log("Burn tx after should fail:", tx);
273
+
274
+ const dai = await ethers.getContractAt("IGoodDollar", release.DAI);
275
+ const cdai = await ethers.getContractAt("IGoodDollar", release.cDAI);
276
+ const reserve = await ethers.getContractAt("GoodReserveCDai", release.GoodReserveCDai) as GoodReserveCDai
277
+ const mm = await ethers.getContractAt("GoodMarketMaker", release.GoodMarketMaker) as GoodMarketMaker
278
+ const newExpansion = await mm.reserveRatioDailyExpansion()
279
+ console.log("new expansion set:", newExpansion, newExpansion.mul(1e15).div(ethers.utils.parseEther("1000000000")).toNumber() / 1e15 === 0.999711382710978)
280
+ console.log("discount should be disabled:", await reserve.discountDisabled(), " gdx should be disabled:", await reserve.gdxDisabled());
281
+ const resereState = await mm.reserveTokens(release.cDAI)
282
+ console.log({ resereState })
283
+ const finalSupply = await gd.totalSupply();
284
+ const distHelper = await ethers.getContractAt("DistributionHelper", release.DistributionHelper)
285
+ const result = await distHelper.calcGDToSell(1e9)
286
+ console.log("how much G$ to sell to cover distribution fees out of 1M:", result.toNumber() / 100)
287
+ const [cdaiPriceBefore, daiPriceBefore] = await (await Promise.all([reserve.currentPrice(), reserve.currentPriceDAI()])).map(_ => _.toNumber())
288
+ console.log({ cdaiPriceBefore, daiPriceBefore })
289
+ const dex = await ethers.getContractAt("ExchangeHelper", release.ExchangeHelper) as ExchangeHelper
290
+ await dai.approve(dex.address, ethers.utils.parseEther("10000"))
291
+ await dex.buy([release.DAI], ethers.utils.parseEther("10000"), 0, 0, root.address);
292
+ // check g$ prices
293
+ const [cdaiPriceAfter, daiPriceAfter] = await (await Promise.all([reserve.currentPrice(), reserve.currentPriceDAI()])).map(_ => _.toNumber())
294
+ console.log("prices after buying form reserve with 10k DAI", { cdaiPriceAfter, daiPriceAfter })
295
+ await gd.approve(dex.address, await gd.balanceOf(root.address))
296
+ await dex.sell([release.DAI], await gd.balanceOf(root.address), 0, 0, root.address);
297
+ const daiBalanceAfterSell = await dai.balanceOf(root.address)
298
+ // expect a 10% sell fee
299
+ console.log("expect 10% sell fee (selling 10K gets only 9K of dai, balance should be ~99K):", { daiBalanceAfterSell })
300
+ const cdaiReserveBalance = await cdai.balanceOf(reserve.address)
301
+ console.log({ cdaiReserveBalance })
302
+
303
+ const [mpbBalance, fuseBalance] = await Promise.all([gd.balanceOf(release.MpbBridge), gd.balanceOf(release.ForeignBridge)])
304
+ console.log("fuse bridge should have 0 balance and Mpb should be >6B", { mpbBalance, fuseBalance })
305
+ const gfm = await ethers.getContractAt("GoodFundManager", release.GoodFundManager) as GoodFundManager
306
+ const stakingContracts = await gfm.callStatic.calcSortedContracts()
307
+ console.log({ stakingContracts })
308
+ const interesTX = await (await gfm.collectInterest(stakingContracts.map(_ => _[0]), false)).wait()
309
+ const ubiEvents = last(await reserve.queryFilter(reserve.filters.UBIMinted(), -1))
310
+ console.log("collectinterest gfm events:", interesTX.events?.find(_ => _.event === 'FundsTransferred'))
311
+ console.log("ubiEvents after collect interest:", ubiEvents)
312
+ // check expansion after some time
313
+ await time.increase(365 * 60 * 60 * 24)
314
+ const gdSupplyBeforeExpansion = await gd.totalSupply();
315
+ const reserveStateBeforeYearExpansion = await mm.reserveTokens(release.cDAI)
316
+
317
+ const expansionTX = await (await gfm.collectInterest([], false)).wait()
318
+ const ubiExpansionEvents = last(await reserve.queryFilter(reserve.filters.UBIMinted(), -1))
319
+ console.log("gfm events after 1 year expansion:", expansionTX.events?.filter(_ => _.event === 'FundsTransferred'))
320
+ console.log("ubiEvents after 1 year expansion:", ubiExpansionEvents)
321
+ const reserveStateAfterYearExpansion = await mm.reserveTokens(release.cDAI)
322
+ const gdSupplyAfterExpansion = await gd.totalSupply();
323
+ console.log({ reserveStateAfterYearExpansion, gdSupplyAfterExpansion, gdSupplyBeforeExpansion, reserveStateBeforeYearExpansion })
324
+
325
+ //execute the reserve initialization
326
+ await (await upgradeImpl.donate(funder, INITIAL_DAI)).wait()
327
+ const [cdaiPriceAfterDonation, daiPriceAfterDonation] = await (await Promise.all([reserve.currentPrice(), reserve.currentPriceDAI()])).map(_ => _.toNumber())
328
+ console.log("price after dai donation:", { cdaiPriceAfterDonation, daiPriceAfterDonation })
329
+ const reserveStateAfterDonation = await mm.reserveTokens(release.cDAI)
330
+ console.log({ reserveStateAfterDonation })
331
+
332
+ await (await upgradeImpl.end()).wait()
333
+ }
334
+ export const upgradeFuse = async network => {
335
+ let [root] = await ethers.getSigners();
336
+
337
+ const isProduction = networkName.includes("production");
338
+
339
+ let networkEnv = networkName.split("-")[0];
340
+ if (isSimulation) networkEnv = "production";
341
+
342
+ let release: { [key: string]: any } = dao[networkEnv];
343
+
344
+ let guardian = root;
345
+ //simulate on fork, make sure safe has enough eth to simulate txs
346
+ if (isSimulation) {
347
+ await reset("https://fuse.liquify.com");
348
+ guardian = await ethers.getImpersonatedSigner(release.GuardiansSafe);
349
+
350
+ await root.sendTransaction({ value: ethers.constants.WeiPerEther.mul(3), to: guardian.address });
351
+ }
352
+
353
+
354
+
355
+ const gd = (await ethers.getContractAt("IGoodDollar", release.GoodDollar)) as IGoodDollar;
356
+
357
+ const isMinter = await gd.isMinter(release.HomeBridge);
358
+
359
+ console.log({ networkEnv, guardian: guardian.address, isSimulation, isProduction, isMinter });
360
+
361
+ const govImpl = await ethers.deployContract("CompoundVotingMachine");
362
+ const killBridge = await ethers.deployContract("FuseOldBridgeKill") as FuseOldBridgeKill
363
+
364
+ const proposalContracts = [
365
+ release.HomeBridge, // prevent from using by upgrading to empty contract and removing minting rights
366
+ release.CompoundVotingMachine, //upgrade gov
367
+ ];
368
+
369
+ const proposalEthValues = proposalContracts.map(_ => 0);
370
+
371
+ const proposalFunctionSignatures = [
372
+ "upgradeToAndCall(uint256,address,bytes)", // upgrade and call end
373
+ "upgradeTo(address)"
374
+ ];
375
+
376
+
377
+ const proposalFunctionInputs = [
378
+ ethers.utils.defaultAbiCoder.encode(["uint256", "address", "bytes"], [2, killBridge.address, killBridge.interface.encodeFunctionData("end")]),
379
+ ethers.utils.defaultAbiCoder.encode(["address"], [govImpl.address]),
380
+
381
+ ];
382
+
383
+ if (isProduction) {
384
+ await executeViaSafe(
385
+ proposalContracts,
386
+ proposalEthValues,
387
+ proposalFunctionSignatures,
388
+ proposalFunctionInputs,
389
+ release.GuardiansSafe,
390
+ "fuse"
391
+ );
392
+ } else {
393
+ await executeViaGuardian(
394
+ proposalContracts,
395
+ proposalEthValues,
396
+ proposalFunctionSignatures,
397
+ proposalFunctionInputs,
398
+ guardian,
399
+ networkEnv
400
+ );
401
+ }
402
+
403
+ if (isSimulation) {
404
+
405
+ const isMinter = await gd.isMinter(release.HomeBridge);
406
+ console.log("Fuse bridge scheme registration check:", isMinter ? "Failed" : "Success");
407
+ }
408
+ };
409
+
410
+ export const main = async () => {
411
+ prompt.start();
412
+ const { network } = await prompt.get(["network"]);
413
+
414
+ console.log("running step:", { network });
415
+ const chain = last(network.split("-"));
416
+ switch (chain) {
417
+ case "mainnet":
418
+ // await mainnetPostChecks()
419
+ await upgradeMainnet(network);
420
+
421
+ break;
422
+ case "fuse":
423
+ await upgradeFuse(network);
424
+
425
+ break;
426
+ }
427
+ };
428
+
429
+ main().catch(console.log);