@gooddollar/goodprotocol 2.0.25-beta.8 → 2.0.25

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 (430) hide show
  1. package/artifacts/abis/AdminWallet.min.json +1 -1
  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/GoodFundManager.min.json +1 -1
  9. package/artifacts/abis/GoodFundManagerTest.min.json +1 -1
  10. package/artifacts/abis/GoodMarketMaker.min.json +1 -1
  11. package/artifacts/abis/GoodReserveCDai.min.json +1 -1
  12. package/artifacts/abis/IQuoterV2.min.json +1 -1
  13. package/artifacts/abis/ISwapRouter.min.json +1 -1
  14. package/artifacts/abis/IUpgradeabilityOwnerStorage.min.json +1 -0
  15. package/artifacts/abis/Initializable.min.json +1 -0
  16. package/artifacts/abis/LastauthReduction.min.json +1 -0
  17. package/artifacts/abis/Ownable.min.json +1 -0
  18. package/artifacts/abis/ReserveRestore.min.json +1 -0
  19. package/artifacts/abis/SuperfluidFaucet.min.json +1 -0
  20. package/artifacts/abis/Upgradeable.min.json +1 -0
  21. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  22. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  23. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  24. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  25. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  26. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  28. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  34. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  35. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  36. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  37. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  38. package/artifacts/contracts/Interfaces.sol/IIdentityV2.dbg.json +1 -1
  39. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  40. package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +1 -1
  41. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  42. package/artifacts/contracts/Interfaces.sol/IQuoterV2.dbg.json +4 -0
  43. package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.json +1 -1
  44. package/artifacts/contracts/Interfaces.sol/ISwapRouter.dbg.json +4 -0
  45. package/artifacts/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.json +1 -1
  46. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  47. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  48. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  49. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  50. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  51. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  52. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  53. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  54. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
  55. package/artifacts/contracts/fuseFaucet/Faucet.sol/Faucet.json +2 -2
  56. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  57. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +2 -2
  58. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
  59. package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +2 -2
  60. package/artifacts/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.dbg.json +4 -0
  61. package/artifacts/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.json +531 -0
  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 +2 -2
  88. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.dbg.json +1 -1
  89. package/artifacts/contracts/invite/OneTimeReward.sol/OneTimeReward.json +2 -2
  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 +2 -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 -22
  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 +1 -1
  217. package/artifacts/contracts/utils/BulkWhitelist.sol/BulkWhitelist.json +2 -2
  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/fuseFaucet/SuperfluidFacuet.sol +127 -0
  281. package/contracts/governance/CompoundVotingMachine.sol +26 -11
  282. package/contracts/governance/StakersDistribution.sol +13 -13
  283. package/contracts/reserve/DistributionHelper.sol +29 -10
  284. package/contracts/reserve/ExchangeHelper.sol +16 -7
  285. package/contracts/reserve/GoodMarketMaker.sol +43 -53
  286. package/contracts/reserve/GoodReserveCDai.sol +44 -16
  287. package/contracts/staking/GoodFundManager.sol +44 -4
  288. package/contracts/utils/AdminWallet.sol +4 -6
  289. package/contracts/utils/BuyGDClone.sol +0 -122
  290. package/contracts/utils/FuseOldBridgeKill.sol +123 -0
  291. package/contracts/utils/LastauthReduction.sol +92 -0
  292. package/contracts/utils/ReserveRestore.sol +157 -0
  293. package/dist/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.json +2 -2
  294. package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +2 -2
  295. package/hardhat.config.ts +21 -39
  296. package/package.json +17 -19
  297. package/releases/deployment.json +78 -7
  298. package/scripts/analytics/activeStakers.ts +25 -0
  299. package/scripts/analytics/activeUsersCount.ts +80 -26
  300. package/scripts/analytics/activeWalletsStats.ts +138 -18
  301. package/scripts/fv.ts +7 -5
  302. package/scripts/multichain-deploy/0_proxyFactory-deploy.ts +20 -15
  303. package/scripts/multichain-deploy/7_superfluidfaucet-deploy.ts +96 -0
  304. package/scripts/multichain-deploy/helpers.ts +8 -8
  305. package/scripts/proposals/identityAuthPeriod.ts +229 -0
  306. package/scripts/proposals/reserveRestore.ts +429 -0
  307. package/scripts/test/localOldDaoDeploy.ts +2 -1
  308. package/scripts/utils.ts +14 -1
  309. package/test/governance/CompoundVotingMachine.daoscheme.ts +3 -0
  310. package/test/governance/CompoundVotingMachine.guardian.test.ts +76 -21
  311. package/test/governance/CompoundVotingMachine.state.test.ts +31 -28
  312. package/test/governance/StakersDistribution.test.ts +79 -5
  313. package/test/helpers.ts +7 -0
  314. package/test/reserve/DistributionHelper.test.ts +10 -10
  315. package/test/reserve/GoodMarketMaker.test.ts +75 -26
  316. package/test/staking/StakingRewards.test.ts +106 -29
  317. package/test/utils/ProtocolUpgrade.test.ts +1 -0
  318. package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2.ts +1 -1
  319. package/types/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter.ts +1 -1
  320. package/types/contracts/Interfaces.sol/index.ts +2 -0
  321. package/types/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet.ts +862 -0
  322. package/types/contracts/fuseFaucet/SuperfluidFacuet.sol/index.ts +4 -0
  323. package/types/contracts/fuseFaucet/index.ts +2 -0
  324. package/types/contracts/governance/CompoundVotingMachine.ts +44 -3
  325. package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.ts +35 -0
  326. package/types/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.ts +35 -0
  327. package/types/contracts/mocks/GoodFundManagerTest.ts +35 -0
  328. package/types/contracts/reserve/DistributionHelper.ts +35 -0
  329. package/types/contracts/reserve/GoodMarketMaker.ts +3 -3
  330. package/types/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.ts +5 -5
  331. package/types/contracts/staking/GoodFundManager.ts +35 -0
  332. package/types/contracts/utils/AdminWallet.ts +0 -34
  333. package/types/contracts/utils/BuyGDClone.sol/index.ts +0 -2
  334. package/types/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill.ts +108 -0
  335. package/types/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage.ts +89 -0
  336. package/types/contracts/utils/FuseOldBridgeKill.sol/Initializable.ts +87 -0
  337. package/types/contracts/utils/FuseOldBridgeKill.sol/Ownable.ts +148 -0
  338. package/types/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
  339. package/types/contracts/utils/LastauthReduction.ts +168 -0
  340. package/types/contracts/utils/ReserveRestore.ts +201 -0
  341. package/types/contracts/utils/index.ts +4 -0
  342. package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/IQuoterV2__factory.ts +1 -1
  343. package/types/factories/contracts/{utils/BuyGDClone.sol → Interfaces.sol}/ISwapRouter__factory.ts +1 -1
  344. package/types/factories/contracts/Interfaces.sol/index.ts +2 -0
  345. package/types/factories/contracts/fuseFaucet/Faucet__factory.ts +1 -1
  346. package/types/factories/contracts/fuseFaucet/FuseFaucetV2__factory.ts +1 -1
  347. package/types/factories/contracts/fuseFaucet/FuseFaucet__factory.ts +1 -1
  348. package/types/factories/contracts/fuseFaucet/SuperfluidFacuet.sol/SuperfluidFaucet__factory.ts +582 -0
  349. package/types/factories/contracts/fuseFaucet/SuperfluidFacuet.sol/index.ts +4 -0
  350. package/types/factories/contracts/fuseFaucet/index.ts +1 -0
  351. package/types/factories/contracts/governance/ClaimersDistribution__factory.ts +1 -1
  352. package/types/factories/contracts/governance/CompoundVotingMachine__factory.ts +19 -1
  353. package/types/factories/contracts/governance/GReputation__factory.ts +1 -1
  354. package/types/factories/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking__factory.ts +1 -1
  355. package/types/factories/contracts/governance/GovernanceStaking__factory.ts +1 -1
  356. package/types/factories/contracts/governance/Reputation__factory.ts +1 -1
  357. package/types/factories/contracts/governance/StakersDistribution__factory.ts +1 -1
  358. package/types/factories/contracts/identity/IdentityV2__factory.ts +1 -1
  359. package/types/factories/contracts/invite/InvitesFuseV2__factory.ts +1 -1
  360. package/types/factories/contracts/invite/InvitesV1__factory.ts +1 -1
  361. package/types/factories/contracts/invite/InvitesV2__factory.ts +1 -1
  362. package/types/factories/contracts/invite/OneTimeReward__factory.ts +1 -1
  363. package/types/factories/contracts/mocks/DistributionBridgeMock__factory.ts +1 -1
  364. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper__factory.ts +20 -1
  365. package/types/factories/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest__factory.ts +20 -1
  366. package/types/factories/contracts/mocks/GoodCompoundStakingTest__factory.ts +1 -1
  367. package/types/factories/contracts/mocks/GoodDollarStakingMock__factory.ts +1 -1
  368. package/types/factories/contracts/mocks/GoodFundManagerTest__factory.ts +20 -1
  369. package/types/factories/contracts/mocks/IdentityMock__factory.ts +1 -1
  370. package/types/factories/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock__factory.ts +1 -1
  371. package/types/factories/contracts/mocks/OverMintTester.sol/OverMintTester__factory.ts +1 -1
  372. package/types/factories/contracts/mocks/OverMintTesterRegularStake__factory.ts +1 -1
  373. package/types/factories/contracts/mocks/SwapHelperTest__factory.ts +1 -1
  374. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock2__factory.ts +1 -1
  375. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock3__factory.ts +1 -1
  376. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock4__factory.ts +1 -1
  377. package/types/factories/contracts/mocks/UpgradableMocks.sol/UpgradableMock__factory.ts +1 -1
  378. package/types/factories/contracts/reserve/DistributionHelper__factory.ts +20 -1
  379. package/types/factories/contracts/reserve/ExchangeHelper__factory.ts +1 -1
  380. package/types/factories/contracts/reserve/GoodMarketMaker__factory.ts +5 -5
  381. package/types/factories/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai__factory.ts +2 -2
  382. package/types/factories/contracts/staking/BaseShareFieldV2__factory.ts +1 -1
  383. package/types/factories/contracts/staking/BaseShareField__factory.ts +1 -1
  384. package/types/factories/contracts/staking/DonationsStaking__factory.ts +1 -1
  385. package/types/factories/contracts/staking/FuseStakingV3.sol/FuseStakingV3__factory.ts +1 -1
  386. package/types/factories/contracts/staking/GoodFundManager__factory.ts +20 -1
  387. package/types/factories/contracts/staking/UniswapV2SwapHelper__factory.ts +1 -1
  388. package/types/factories/contracts/staking/aave/AaveStakingFactory__factory.ts +1 -1
  389. package/types/factories/contracts/staking/aave/GoodAaveStakingV2__factory.ts +1 -1
  390. package/types/factories/contracts/staking/aave/GoodAaveStaking__factory.ts +1 -1
  391. package/types/factories/contracts/staking/compound/CompoundStakingFactory__factory.ts +1 -1
  392. package/types/factories/contracts/staking/compound/GoodCompoundStakingV2__factory.ts +1 -1
  393. package/types/factories/contracts/staking/compound/GoodCompoundStaking__factory.ts +1 -1
  394. package/types/factories/contracts/token/GoodDollar__factory.ts +1 -1
  395. package/types/factories/contracts/token/superfluid/SuperGoodDollar__factory.ts +1 -1
  396. package/types/factories/contracts/ubi/UBISchemeV2__factory.ts +1 -1
  397. package/types/factories/contracts/ubi/UBIScheme__factory.ts +1 -1
  398. package/types/factories/contracts/utils/AdminWalletFuse__factory.ts +1 -1
  399. package/types/factories/contracts/utils/AdminWallet__factory.ts +1 -21
  400. package/types/factories/contracts/utils/BulkWhitelist__factory.ts +1 -1
  401. package/types/factories/contracts/utils/BuyAndBridgeHelper__factory.ts +1 -1
  402. package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory__factory.ts +1 -1
  403. package/types/factories/contracts/utils/BuyGDClone.sol/BuyGDClone__factory.ts +1 -1
  404. package/types/factories/contracts/utils/BuyGDClone.sol/DonateGDClone__factory.ts +1 -1
  405. package/types/factories/contracts/utils/BuyGDClone.sol/index.ts +0 -2
  406. package/types/factories/contracts/utils/DAOContract__factory.ts +1 -1
  407. package/types/factories/contracts/utils/DAOUpgradeableContract__factory.ts +1 -1
  408. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/FuseOldBridgeKill__factory.ts +82 -0
  409. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/IUpgradeabilityOwnerStorage__factory.ts +43 -0
  410. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Initializable__factory.ts +75 -0
  411. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/Ownable__factory.ts +105 -0
  412. package/types/factories/contracts/utils/FuseOldBridgeKill.sol/index.ts +7 -0
  413. package/types/factories/contracts/utils/GDFaucet__factory.ts +1 -1
  414. package/types/factories/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper__factory.ts +1 -1
  415. package/types/factories/contracts/utils/IdentityFix__factory.ts +1 -1
  416. package/types/factories/contracts/utils/LastauthReduction__factory.ts +134 -0
  417. package/types/factories/contracts/utils/MultichainBridgeHelper__factory.ts +1 -1
  418. package/types/factories/contracts/utils/OneTimePaymentsV2__factory.ts +1 -1
  419. package/types/factories/contracts/utils/OneTimePayments__factory.ts +1 -1
  420. package/types/factories/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade__factory.ts +1 -1
  421. package/types/factories/contracts/utils/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  422. package/types/factories/contracts/utils/ProtocolUpgradeFuse__factory.ts +1 -1
  423. package/types/factories/contracts/utils/ProtocolUpgradeRecover__factory.ts +1 -1
  424. package/types/factories/contracts/utils/ReputationTestHelper__factory.ts +1 -1
  425. package/types/factories/contracts/utils/ReserveRestore__factory.ts +144 -0
  426. package/types/factories/contracts/utils/index.ts +3 -0
  427. package/types/hardhat.d.ts +79 -16
  428. package/types/index.ts +14 -4
  429. package/artifacts/contracts/utils/BuyGDClone.sol/IQuoterV2.dbg.json +0 -4
  430. package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.dbg.json +0 -4
@@ -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);
@@ -650,7 +650,6 @@ export const deployUBI = async deployedDAO => {
650
650
  const lastBlock = await ethers.provider.getBlock("latest");
651
651
  const periodStart = await ubiScheme.periodStart().then(_ => _.toNumber());
652
652
  const diff = periodStart - lastBlock.timestamp;
653
- await increaseTime(diff); //make sure period start has reached
654
653
  console.log("ubischeme start:", {
655
654
  now: now.timestamp,
656
655
  blockTime: lastBlock.timestamp,
@@ -658,6 +657,8 @@ export const deployUBI = async deployedDAO => {
658
657
  periodEnd: await ubiScheme.periodEnd().then(_ => _.toString()),
659
658
  diff
660
659
  });
660
+ if (diff > 0 && diff < 2 ** 64)
661
+ await increaseTime(diff); //make sure period start has reached
661
662
  const tx = await firstClaim.start();
662
663
  console.log("firstclaim started");
663
664
  await ubiScheme.start();
package/scripts/utils.ts CHANGED
@@ -33,5 +33,18 @@ export const bulkLastAuth = async (accounts: Array<String>) => {
33
33
  const identityContract = new Contract("0x2F9C28de9e6d44b71B91b8BA337A5D82e308E7BE", Identity.abi);
34
34
  const calls = accounts.map(d => identityContract.lastAuthenticated(d));
35
35
  const result = await ethcallProvider.all(calls);
36
- return Object.fromEntries(accounts.map((v, i) => [v, parseInt(result[i])]));
36
+ // console.log({ result });
37
+ const whitelisted = accounts.filter((v, i) => parseInt(result[i]));
38
+ return whitelisted;
39
+ };
40
+
41
+ export const bulkGetLastAuth = async (accounts: Array<String>) => {
42
+ setMulticallAddress(122, "0x3CE6158b7278Bf6792e014FA7B4f3c6c46fe9410");
43
+ setMulticallAddress(42220, "0x75F59534dd892c1f8a7B172D639FA854D529ada3");
44
+ const celoProvider = new ethers.providers.JsonRpcProvider("https://forno.celo.org");
45
+ const ethcallProvider = new Provider(celoProvider, 42220);
46
+ const identityContract = new Contract("0xC361A6E67822a0EDc17D899227dd9FC50BD62F42", Identity.abi);
47
+ const calls = accounts.map(d => identityContract.lastAuthenticated(d));
48
+ const result = await ethcallProvider.all(calls);
49
+ return result;
37
50
  };
@@ -89,6 +89,9 @@ describe("CompoundVotingMachine#DAOScheme", () => {
89
89
  await grep.mint(acct.address, ethers.BigNumber.from("500000"));
90
90
 
91
91
  queuePeriod = await gov.queuePeriod().then(_ => _.toNumber());
92
+
93
+ //disable guardian
94
+ await gov.renounceGuardian()
92
95
  });
93
96
 
94
97
  ///cell 0 - votingPeriod blocks, 1 - quoromPercentage, 2 - proposalPercentage,3 - proposalMaxOperations, 4 - voting delay blocks, 5 - queuePeriod time
@@ -185,13 +185,13 @@ describe("CompoundVotingMachine#Guardian", () => {
185
185
 
186
186
  await gov
187
187
  .connect(signers[4])
188
- ["propose(address[],uint256[],string[],bytes[],string)"](
189
- targets,
190
- values,
191
- signatures,
192
- callDatas,
193
- "do nothing"
194
- );
188
+ ["propose(address[],uint256[],string[],bytes[],string)"](
189
+ targets,
190
+ values,
191
+ signatures,
192
+ callDatas,
193
+ "do nothing"
194
+ );
195
195
  let proposalId = await gov.latestProposalIds(signers[4].address);
196
196
  await advanceBlocks(1);
197
197
 
@@ -204,34 +204,89 @@ describe("CompoundVotingMachine#Guardian", () => {
204
204
  await grep.delegateTo(root.address); //delegate back our votes
205
205
  });
206
206
 
207
+ it("Should not be able to pass proposal without guardian approval", async () => {
208
+ let targets = [gov.address];
209
+ let values = ["0"];
210
+ let signatures = ["setGuardian(address)"];
211
+ let callDatas = [encodeParameters(["address"], [signers[1].address])];
212
+
213
+ await gov
214
+ .connect(root)
215
+ ["propose(address[],uint256[],string[],bytes[],string)"](
216
+ targets,
217
+ values,
218
+ signatures,
219
+ callDatas,
220
+ "set guardian"
221
+ );
222
+ let proposalBlock = +(await ethers.provider.getBlockNumber());
223
+ let proposalId = await gov.latestProposalIds(root.address);
224
+ await advanceBlocks(1);
225
+ await gov.connect(root).castVote(proposalId, true);
226
+ await increaseTime(queuePeriod);
227
+ expect(states[await gov.state(proposalId)]).to.equal("Succeeded");
228
+
229
+ await expect(gov.execute(proposalId)).revertedWith(/not approved/);
230
+
231
+ })
232
+
207
233
  it("Should be able to pass proposal to change guardian", async () => {
208
- console.log(
209
- grep.address,
210
- await grep.totalSupply().then(_ => _.toString()),
211
- await (await grep.getVotes(root.address)).toString(),
212
- await (await grep.balanceOfLocal(root.address)).toString(),
213
- await gov.rep()
234
+ let targets = [gov.address];
235
+ let values = ["0"];
236
+ let signatures = ["setGuardian(address)"];
237
+ let callDatas = [encodeParameters(["address"], [signers[2].address])];
238
+
239
+ await gov
240
+ .connect(root)
241
+ ["propose(address[],uint256[],string[],bytes[],string)"](
242
+ targets,
243
+ values,
244
+ signatures,
245
+ callDatas,
246
+ "set guardian"
214
247
  );
248
+ let proposalBlock = +(await ethers.provider.getBlockNumber());
249
+ let proposalId = await gov.latestProposalIds(root.address);
250
+ await advanceBlocks(1);
251
+ await gov.connect(root).castVote(proposalId, true);
252
+ await increaseTime(queuePeriod);
253
+ expect(states[await gov.state(proposalId)]).to.equal("Succeeded");
254
+
255
+ await gov.connect(signers[1]).approveProposal(proposalId)
256
+
257
+ await gov.execute(proposalId);
258
+ expect(states[await gov.state(proposalId)]).to.equal("Executed");
259
+
260
+ //acct should now have 1M after proposal minted rep
261
+ expect(await gov.guardian()).to.equal(signers[2].address);
262
+ });
263
+
264
+ it("Should be able to pass proposal without approval if no guardian set", async () => {
215
265
  let targets = [gov.address];
216
266
  let values = ["0"];
217
267
  let signatures = ["setGuardian(address)"];
218
268
  let callDatas = [encodeParameters(["address"], [signers[1].address])];
219
269
 
270
+ await gov.connect(signers[2]).renounceGuardian()
271
+
272
+ expect(await gov.guardian()).equal(ethers.constants.AddressZero)
273
+
220
274
  await gov
221
275
  .connect(root)
222
- ["propose(address[],uint256[],string[],bytes[],string)"](
223
- targets,
224
- values,
225
- signatures,
226
- callDatas,
227
- "set guardian"
228
- );
229
- let proposalBlock = +(await ethers.provider.getBlockNumber());
276
+ ["propose(address[],uint256[],string[],bytes[],string)"](
277
+ targets,
278
+ values,
279
+ signatures,
280
+ callDatas,
281
+ "set guardian"
282
+ );
283
+
230
284
  let proposalId = await gov.latestProposalIds(root.address);
231
285
  await advanceBlocks(1);
232
286
  await gov.connect(root).castVote(proposalId, true);
233
287
  await increaseTime(queuePeriod);
234
288
  expect(states[await gov.state(proposalId)]).to.equal("Succeeded");
289
+
235
290
  await gov.execute(proposalId);
236
291
  expect(states[await gov.state(proposalId)]).to.equal("Executed");
237
292