@gooddollar/goodprotocol 1.0.26 → 1.0.29-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/artifacts/abis/AdminWallet.min.json +1 -0
  2. package/artifacts/abis/FuseFaucet.min.json +1 -1
  3. package/artifacts/abis/IIdentity.min.json +1 -1
  4. package/artifacts/abis/ProxyAdmin.min.json +1 -1
  5. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  6. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  7. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  8. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  9. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  10. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  11. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  12. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  13. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  14. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  15. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  16. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  17. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  18. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  19. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  20. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  21. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  22. package/artifacts/contracts/Interfaces.sol/IIdentity.json +45 -0
  23. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.json +23 -0
  28. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  29. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  30. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  31. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  32. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  33. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  34. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  35. package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.json +4 -4
  36. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  37. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  38. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  39. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +2 -2
  40. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  41. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
  42. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  43. package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
  44. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  45. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  46. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
  47. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  48. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  49. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  50. package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.json +2 -2
  51. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  58. package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
  59. package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
  60. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  61. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
  62. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  63. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
  64. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  65. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  66. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  67. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +2 -2
  68. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  69. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  70. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  71. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  72. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
  73. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  74. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  75. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
  76. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  77. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
  78. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
  79. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
  80. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
  81. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
  82. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  83. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  84. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  85. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  86. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  87. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  88. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  89. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  90. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  91. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
  92. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  93. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
  94. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  95. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  96. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +2 -2
  97. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  98. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
  99. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
  100. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
  101. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  102. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  103. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
  104. package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.json +2 -2
  105. package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
  106. package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
  107. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  108. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +2 -2
  109. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  110. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
  111. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  112. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
  113. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  114. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
  115. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  116. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
  117. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
  118. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
  119. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  120. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  121. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  122. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
  123. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
  124. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
  125. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  126. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  127. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +4 -0
  128. package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.json +732 -0
  129. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  130. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
  131. package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +2 -2
  132. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  133. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
  134. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  135. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
  136. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  137. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  138. package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
  139. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  140. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  141. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  142. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
  143. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  144. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
  145. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
  146. package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
  147. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
  148. package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
  149. package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
  150. package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
  151. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  152. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  153. package/contracts/Interfaces.sol +12 -0
  154. package/contracts/fuseFaucet/FuseFaucet.sol +19 -10
  155. package/contracts/utils/AdminWallet.sol +242 -0
  156. package/hardhat.config.ts +11 -1
  157. package/package.json +8 -8
  158. package/releases/deployment.json +9 -6
  159. package/scripts/bulkProof.ts +0 -5
  160. package/scripts/deployFullDAO.ts +17 -9
  161. package/scripts/multichain-deploy/basicdao-deploy.ts +0 -11
  162. package/scripts/test/localOldDaoDeploy.ts +4 -10
  163. package/scripts/upgradeScheme.ts +7 -12
  164. package/scripts/upgradeToV2/upgradeToV2.ts +0 -8
  165. package/scripts/upgradeToV2/upgradeToV2Recover.ts +0 -8
  166. package/test/FuseFaucet.test.ts +8 -12
  167. package/test/utils/AdminWallet.test.ts +278 -0
  168. package/test/utils/ProtocolUpgrade.test.ts +1 -4
  169. package/types/AdminWallet.ts +1136 -0
  170. package/types/FuseFaucet.ts +3 -3
  171. package/types/IIdentity.ts +87 -0
  172. package/types/ProxyAdmin.ts +44 -0
  173. package/types/factories/AaveStakingFactory__factory.ts +1 -1
  174. package/types/factories/AdminWallet__factory.ts +780 -0
  175. package/types/factories/BaseShareFieldV2__factory.ts +1 -1
  176. package/types/factories/BaseShareField__factory.ts +1 -1
  177. package/types/factories/BulkProof__factory.ts +1 -1
  178. package/types/factories/ClaimersDistribution__factory.ts +1 -1
  179. package/types/factories/CompoundStakingFactory__factory.ts +1 -1
  180. package/types/factories/CompoundVotingMachine__factory.ts +1 -1
  181. package/types/factories/DAOContract__factory.ts +1 -1
  182. package/types/factories/DAOUpgradeableContract__factory.ts +1 -1
  183. package/types/factories/DonationsStaking__factory.ts +1 -1
  184. package/types/factories/ExchangeHelper__factory.ts +1 -1
  185. package/types/factories/FuseFaucet__factory.ts +3 -3
  186. package/types/factories/FuseStakingV3__factory.ts +1 -1
  187. package/types/factories/GReputation__factory.ts +1 -1
  188. package/types/factories/GoodAaveStakingV2__factory.ts +1 -1
  189. package/types/factories/GoodAaveStaking__factory.ts +1 -1
  190. package/types/factories/GoodCompoundStakingTest__factory.ts +1 -1
  191. package/types/factories/GoodCompoundStakingV2__factory.ts +1 -1
  192. package/types/factories/GoodCompoundStaking__factory.ts +1 -1
  193. package/types/factories/GoodFundManagerTest__factory.ts +1 -1
  194. package/types/factories/GoodFundManager__factory.ts +1 -1
  195. package/types/factories/GoodMarketMaker__factory.ts +1 -1
  196. package/types/factories/GoodReserveCDai__factory.ts +1 -1
  197. package/types/factories/GovernanceStaking__factory.ts +1 -1
  198. package/types/factories/IIdentity__factory.ts +45 -0
  199. package/types/factories/InvitesV1__factory.ts +1 -1
  200. package/types/factories/OverMintTesterRegularStake__factory.ts +1 -1
  201. package/types/factories/OverMintTester__factory.ts +1 -1
  202. package/types/factories/ProtocolUpgradeFuseRecover__factory.ts +1 -1
  203. package/types/factories/ProtocolUpgradeFuse__factory.ts +1 -1
  204. package/types/factories/ProtocolUpgradeRecover__factory.ts +1 -1
  205. package/types/factories/ProtocolUpgrade__factory.ts +1 -1
  206. package/types/factories/ProxyAdmin__factory.ts +23 -0
  207. package/types/factories/ReputationTestHelper__factory.ts +1 -1
  208. package/types/factories/Reputation__factory.ts +1 -1
  209. package/types/factories/StakersDistribution__factory.ts +1 -1
  210. package/types/factories/SwapHelperTest__factory.ts +1 -1
  211. package/types/factories/UBIScheme__factory.ts +1 -1
  212. package/types/factories/UniswapV2SwapHelper__factory.ts +1 -1
  213. package/types/factories/UpgradableMock2__factory.ts +1 -1
  214. package/types/factories/UpgradableMock3__factory.ts +1 -1
  215. package/types/factories/UpgradableMock4__factory.ts +1 -1
  216. package/types/factories/UpgradableMock__factory.ts +1 -1
  217. package/types/hardhat.d.ts +9 -0
  218. package/types/index.ts +2 -0
  219. package/yarn.lock +320 -217
  220. package/patches/@nomiclabs+hardhat-etherscan+3.0.3.patch +0 -41
  221. package/patches/@openzeppelin+hardhat-upgrades+1.7.0.patch +0 -67
  222. package/patches/@openzeppelin+upgrades-core+1.4.2.patch +0 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddollar/goodprotocol",
3
- "version": "1.0.26",
3
+ "version": "1.0.29-beta.0",
4
4
  "description": "GoodDollar Protocol",
5
5
  "scripts": {
6
6
  "build": "scripts/build.sh deploy",
@@ -59,7 +59,7 @@
59
59
  "@jsier/retrier": "^1.2.4",
60
60
  "@openzeppelin/contracts": "^4.5.0",
61
61
  "@openzeppelin/contracts-upgradeable": "^4.3.2",
62
- "@typechain/hardhat": "^2.2.0",
62
+ "@typechain/hardhat": "^6.1.2",
63
63
  "async-promise-pool": "^1.0.4",
64
64
  "ethers-multicall": "^0.2.1",
65
65
  "openzeppelin-solidity": "^4.3.2",
@@ -73,10 +73,10 @@
73
73
  "@babel/polyfill": "*",
74
74
  "@babel/preset-env": "*",
75
75
  "@babel/register": "*",
76
- "@nomiclabs/hardhat-ethers": "^2.0.5",
77
- "@nomiclabs/hardhat-etherscan": "^3.0.3",
76
+ "@nomiclabs/hardhat-ethers": "^2.1.1",
77
+ "@nomiclabs/hardhat-etherscan": "^3.1.0",
78
78
  "@nomiclabs/hardhat-waffle": "^2.0.3",
79
- "@openzeppelin/hardhat-upgrades": "1.7.0",
79
+ "@openzeppelin/hardhat-upgrades": "^1.20.0",
80
80
  "@typechain/ethers-v5": "^8.0.2",
81
81
  "@types/mocha": "*",
82
82
  "@types/node": "*",
@@ -93,9 +93,9 @@
93
93
  "fs-extra": "9.0.0",
94
94
  "graphql": "^15.5.0",
95
95
  "graphql-request": "^3.4.0",
96
- "hardhat": "^2.9.3",
97
- "hardhat-contract-sizer": "^2.0.3",
98
- "hardhat-gas-reporter": "^1.0.4",
96
+ "hardhat": "^2.10.2",
97
+ "hardhat-contract-sizer": "^2.6.1",
98
+ "hardhat-gas-reporter": "^1.0.8",
99
99
  "lodash": "^4.17.21",
100
100
  "merkle-tree-solidity": "*",
101
101
  "mocha": "^9.1.2",
@@ -146,14 +146,16 @@
146
146
  "FuseFaucet": "0x09Ad3430D146aa662eA8c20cBEBceBC0bbB3FB0a",
147
147
  "Invites": "0x187fc9fB37DF0fbf75149913a97B17c968Fc90d0",
148
148
  "OneTimePayments": "0x184C1F83b3eB75a2dac483D4a6b9FBD59Df961f8",
149
- "AdminWallet": "0x14204288286823042263156146334B1a4d61227c",
149
+ "AdminWallet": "0xC1526892198796d30D33355cfF9Af10EED5B86A0",
150
+ "AdminWalletOld": "0x14204288286823042263156146334B1a4d61227c",
150
151
  "network": "fuse",
151
152
  "networkId": 122,
152
153
  "ProxyFactory": "0x4136dfD47F47792fC820E2354e9F0ce8e9c586A6",
153
154
  "BancorFormula": "0x88e111b2A42457655A34896E5B929a75E7B82F88",
154
155
  "DAI": "0x0000000000000000000000000000000000000000",
155
156
  "cDAI": "0x0000000000000000000000000000000000000000",
156
- "COMP": "0x0000000000000000000000000000000000000000"
157
+ "COMP": "0x0000000000000000000000000000000000000000",
158
+ "ProxyAdmin": "0x0dd5e1869DA5C9C7D7c49364687534bda7fB7020"
157
159
  },
158
160
  "fuse-mainnet": {
159
161
  "NameService": "0x3baeEff20Cb02a5b8eF413C611c015E69221663e",
@@ -300,9 +302,8 @@
300
302
  },
301
303
  "staging": {
302
304
  "FuseFaucet": "0x70f361EDB97B245E8A68573637A31886A427fe2a",
303
- "ProxyAdmin": "0x2Ea4aAA8351CfE63B537E81Cd4a13c435B945C1D",
305
+ "ProxyAdmin": "0x83EEE673ba91ff49b7e608E761e7Bda93bBB5900",
304
306
  "Invites": "0x763b49F901DC894F2dEc1c7d19e46250B4452679",
305
- "ProxyAdmin2": "0x23D8492444DA663fcb2bDa8cA9A0e84989D1f59e",
306
307
  "GoodDollar": "0xe39236a9Cf13f65DB8adD06BD4b834C65c523d2b",
307
308
  "NameService": "0xE63402A7dc11AB4D03c477cc92209463a55A5134",
308
309
  "GReputation": "0x80312bad9dd71d3a159e794B7fb1B2386F82F07F",
@@ -316,7 +317,8 @@
316
317
  "Controller": "0xb6808120fB648c0bdc483Ec423d933a7eBf6BB0a",
317
318
  "AbsoluteVote": "0x7b58A5737440Bc05ca3972fDeFf8ac3bA984536B",
318
319
  "SchemeRegistrar": "0x0E79f80809180aB8FAE189D4e76fC814672d9a40",
319
- "AdminWallet": "0x2961a6C2Fe39F0FFC4f4b1D9E037CD95f4e9C993",
320
+ "AdminWallet": "0x11C9dBcA722770E8802F0C3d65C38768E91Ac53C",
321
+ "AdminWalletOld": "0x2961a6C2Fe39F0FFC4f4b1D9E037CD95f4e9C993",
320
322
  "UpgradeScheme": "0xfC9F6F5E3ff7BAAB3fEf82e66f56917D625ba38B",
321
323
  "OneTimePayments": "0x7912636D68E5d92708862b38698f764BF1EC297C",
322
324
  "network": "staging",
@@ -532,7 +534,8 @@
532
534
  "SignupBonus": "0x0000000000000000000000000000000000000000",
533
535
  "OneTimePayments": "0xd9Aa86e0Ddb932bD78ab8c71C1B98F83cF610Bd4",
534
536
  "Invites": "0xCa2F09c3ccFD7aD5cB9276918Bd1868f2b922ea0",
535
- "AdminWallet": "0x9F75dAcB77419b87f568d417eBc84346e134144E",
537
+ "AdminWallet": "0x9A34822112BC73BDc941C62dCc311Ca905Aef2a3",
538
+ "AdminWalletOld": "0x9F75dAcB77419b87f568d417eBc84346e134144E",
536
539
  "Identity": "0xFa8d865A962ca8456dF331D78806152d3aC5B84F",
537
540
  "GoodDollar": "0x495d133B938596C9984d462F007B676bDc57eCEC",
538
541
  "Controller": "0xBcE053b99e22158f8B62f4DBFbEdE1f936b2D4e4",
@@ -1,7 +1,6 @@
1
1
  import fs from "fs";
2
2
  import { chunk } from "lodash";
3
3
  import { ethers, upgrades, network } from "hardhat";
4
- import { networkNames } from "@openzeppelin/upgrades-core";
5
4
  import GReputationABI from "../artifacts/contracts/governance/GReputation.sol/GReputation.json";
6
5
  import BulkProofABI from "../artifacts/contracts/utils/BulkProof.sol/BulkProof.json";
7
6
 
@@ -12,14 +11,10 @@ import MerkleTree, {
12
11
  import { BigNumber } from "ethers";
13
12
 
14
13
  console.log({
15
- networkNames,
16
14
  network: network.name,
17
15
  upgrade: process.env.UPGRADE
18
16
  });
19
17
  const { name: networkName } = network;
20
- networkNames[1] = networkName;
21
- networkNames[122] = networkName;
22
- networkNames[3] = networkName;
23
18
 
24
19
  export const bulkProof = async () => {
25
20
  console.log("signer", await ethers.getSigners());
@@ -509,19 +509,27 @@ const deployAdminWallet = async identity => {
509
509
  hdNode.derivePath(`m/44'/60'/0'/0/${i}`)
510
510
  );
511
511
 
512
- const adminWallet = (await new ethers.ContractFactory(
513
- AdminWalletABI.abi,
514
- AdminWalletABI.bytecode,
515
- root
516
- )
517
- .deploy(
512
+ const adminWallet = (await upgrades
513
+ .deployProxy(await ethers.getContractFactory("AdminWallet"), [
518
514
  admins.slice(0, 20).map(_ => _.address),
519
- ethers.utils.parseUnits("1000000", "gwei"),
520
- 4,
515
+ root.address,
521
516
  identity
522
- )
517
+ ])
523
518
  .then(printDeploy)) as Contract;
524
519
 
520
+ // const adminWallet = (await new ethers.ContractFactory(
521
+ // AdminWalletABI.abi,
522
+ // AdminWalletABI.bytecode,
523
+ // root
524
+ // )
525
+ // .deploy(
526
+ // admins.slice(0, 20).map(_ => _.address),
527
+ // ethers.utils.parseUnits("1000000", "gwei"),
528
+ // 4,
529
+ // identity
530
+ // )
531
+ // .then(printDeploy)) as Contract;
532
+
525
533
  const id = await ethers.getContractAt("IIdentity", identity);
526
534
  await id.addIdentityAdmin(adminWallet.address).then(printDeploy);
527
535
  await root
@@ -1,10 +1,6 @@
1
1
  import { network, ethers, upgrades, run } from "hardhat";
2
- import { networkNames } from "@openzeppelin/upgrades-core";
3
- import { isFunction, get, omitBy } from "lodash";
4
- import { getImplementationAddress } from "@openzeppelin/upgrades-core";
5
2
  import pressAnyKey from "press-any-key";
6
3
  import { Contract } from "ethers";
7
- import { range } from "lodash";
8
4
  // import DAOCreatorABI from "@gooddollar/goodcontracts/build/contracts/DaoCreatorGoodDollar.json";
9
5
  import DAOCreatorABI from "../../../GoodBootstrap/packages/contracts/build/contracts/DaoCreatorGoodDollarWithRep.json";
10
6
  // import IdentityABI from "@gooddollar/goodcontracts/build/contracts/Identity.json";
@@ -12,13 +8,6 @@ import IdentityABI from "../../../GoodBootstrap/packages/contracts/build/contrac
12
8
  import FeeFormulaABI from "@gooddollar/goodcontracts/build/contracts/FeeFormula.json";
13
9
  // import AddFoundersABI from "@gooddollar/goodcontracts/build/contracts/AddFoundersGoodDollar.json";
14
10
  import AddFoundersABI from "../../../GoodBootstrap/packages/contracts/build/contracts/AddFoundersGoodDollarWithRep.json";
15
- import ContributionCalculation from "@gooddollar/goodcontracts/stakingModel/build/contracts/ContributionCalculation.json";
16
- import FirstClaimPool from "@gooddollar/goodcontracts/stakingModel/build/contracts/FirstClaimPool.json";
17
- import BridgeMock from "@gooddollar/goodcontracts/stakingModel/build/contracts/BridgeMock.json";
18
- import AdminWalletABI from "@gooddollar/goodcontracts/build/contracts/AdminWallet.json";
19
- import OTPABI from "@gooddollar/goodcontracts/build/contracts/OneTimePayments.json";
20
- import HomeBridgeABI from "@gooddollar/goodcontracts/build/contracts/DeployHomeBridge.json";
21
- import ForeignBridgeABI from "@gooddollar/goodcontracts/build/contracts/DeployForeignBridge.json";
22
11
 
23
12
  import { deployDeterministic } from "./helpers";
24
13
  import releaser from "../../scripts/releaser";
@@ -23,7 +23,6 @@ import FundManager from "@gooddollar/goodcontracts/stakingModel/build/contracts/
23
23
  import SimpleDAIStaking from "@gooddollar/goodcontracts/stakingModel/build/contracts/SimpleDAIStaking.json";
24
24
  import BridgeMock from "@gooddollar/goodcontracts/stakingModel/build/contracts/BridgeMock.json";
25
25
  import DonationsStaking from "@gooddollar/goodcontracts/upgradables/build/contracts/DonationsStaking.json";
26
- import AdminWalletABI from "@gooddollar/goodcontracts/build/contracts/AdminWallet.json";
27
26
  import OTPABI from "@gooddollar/goodcontracts/build/contracts/OneTimePayments.json";
28
27
 
29
28
  import releaser from "../releaser";
@@ -107,16 +106,11 @@ export const deploy = async (networkName = name, single = false) => {
107
106
 
108
107
  const deployAdminWallet = async dao => {
109
108
  const signers = await ethers.getSigners();
110
- const adminWallet = await new ethers.ContractFactory(
111
- AdminWalletABI.abi,
112
- AdminWalletABI.bytecode,
113
- signers[0]
114
- ).deploy(
115
- signers.slice(0, 10).map(_ => _.address),
116
- ethers.utils.parseUnits("1000000", "gwei"),
117
- 4,
118
- dao.identity
109
+ const adminWallet = await upgrades.deployProxy(
110
+ await ethers.getContractFactory("AdminWallet"),
111
+ [signers.slice(0, 20).map(_ => _.address), signers[0].address, dao.identity]
119
112
  );
113
+
120
114
  const id = await ethers.getContractAt("IIdentity", dao.identity);
121
115
  await id.addIdentityAdmin(adminWallet.address);
122
116
  await signers[0].sendTransaction({
@@ -1,14 +1,10 @@
1
1
  import { ethers, upgrades, network } from "hardhat";
2
- import { networkNames } from "@openzeppelin/upgrades-core";
3
2
  import { getSettings, releaser } from "../../scripts/getMigrationSettings";
4
3
  import { SchemeRegistrar } from "../types";
5
4
  import { getFounders } from "./getFounders";
6
5
 
7
- console.log({ networkNames, network: network.name, upgrade: process.env.UPGRADE });
6
+ console.log({ network: network.name, upgrade: process.env.UPGRADE });
8
7
  const { name: networkName } = network;
9
- networkNames[1] = networkName;
10
- networkNames[122] = networkName;
11
- networkNames[3] = networkName;
12
8
 
13
9
  export const proposeUpgradeScheme = async (daoAddresses, schemeAddress) => {
14
10
  console.log("proposing conntract upgrade to DAO", {
@@ -47,7 +43,10 @@ export const voteUpgradeScheme = async (network, daoAddresses, proposalId) => {
47
43
  );
48
44
 
49
45
  const founders = await getFounders(network);
50
- console.log("voteUpgradeScheme", { absoluteVote: absoluteVote.address, founders });
46
+ console.log("voteUpgradeScheme", {
47
+ absoluteVote: absoluteVote.address,
48
+ founders
49
+ });
51
50
  await Promise.all(
52
51
  founders.slice(0, Math.ceil(founders.length / 2)).map(f =>
53
52
  absoluteVote
@@ -59,12 +58,8 @@ export const voteUpgradeScheme = async (network, daoAddresses, proposalId) => {
59
58
  };
60
59
 
61
60
  const main = async () => {
62
- const {
63
- daoAddresses,
64
- modelAddresses,
65
- upgradableAddresses,
66
- founders
67
- } = await getSettings(networkName);
61
+ const { daoAddresses, modelAddresses, upgradableAddresses, founders } =
62
+ await getSettings(networkName);
68
63
 
69
64
  // const implementation = "0x7fca2b3e1047291f65c2c914083d970c027f4290";
70
65
  // const deployedProxy = upgradableAddresses.FuseStaking;
@@ -8,7 +8,6 @@
8
8
  */
9
9
 
10
10
  import { network, ethers, upgrades, run } from "hardhat";
11
- import { networkNames } from "@openzeppelin/upgrades-core";
12
11
  import { isFunction, get, omitBy } from "lodash";
13
12
  import { getImplementationAddress } from "@openzeppelin/upgrades-core";
14
13
  import pressAnyKey from "press-any-key";
@@ -53,7 +52,6 @@ const countTotalGas = async (tx, name) => {
53
52
  };
54
53
 
55
54
  console.log({
56
- networkNames,
57
55
  network: network.name,
58
56
  upgrade: process.env.UPGRADE
59
57
  });
@@ -64,12 +62,6 @@ export const main = async (
64
62
  isPerformUpgrade = true,
65
63
  olddao?
66
64
  ): Promise<{ [key: string]: any }> => {
67
- if (networkName.startsWith("dapptest") === false) {
68
- networkNames[1] = networkName;
69
- networkNames[122] = networkName;
70
- networkNames[3] = networkName;
71
- }
72
-
73
65
  const isProduction = networkName.startsWith("production");
74
66
  if (isProduction && networkName.includes("mainnet")) {
75
67
  GAS_SETTINGS.gasLimit = 6000000;
@@ -8,7 +8,6 @@
8
8
  */
9
9
 
10
10
  import { network, ethers, upgrades, run } from "hardhat";
11
- import { networkNames } from "@openzeppelin/upgrades-core";
12
11
  import { isFunction, get, omitBy } from "lodash";
13
12
  import { getImplementationAddress } from "@openzeppelin/upgrades-core";
14
13
 
@@ -53,7 +52,6 @@ const countTotalGas = async (tx, name) => {
53
52
  };
54
53
 
55
54
  console.log({
56
- networkNames,
57
55
  network: network.name,
58
56
  upgrade: process.env.UPGRADE
59
57
  });
@@ -64,12 +62,6 @@ export const main = async (
64
62
  isPerformUpgrade = true,
65
63
  olddao?
66
64
  ): Promise<{ [key: string]: any }> => {
67
- if (networkName.startsWith("dapptest") === false) {
68
- networkNames[1] = networkName;
69
- networkNames[122] = networkName;
70
- networkNames[3] = networkName;
71
- }
72
-
73
65
  const isProduction = networkName.startsWith("production");
74
66
  if (isProduction && networkName.includes("mainnet")) {
75
67
  GAS_SETTINGS.gasLimit = 6000000;
@@ -128,30 +128,26 @@ describe("FuseFaucet", () => {
128
128
  // });
129
129
 
130
130
  it("should not let user top over weekly limit", async () => {
131
- for (let i = 0; i < 3; i++) {
131
+ for (let i = 0; i < 5; i++) {
132
132
  await ethers.provider.send("evm_increaseTime", [60 * 60 * 24]);
133
133
  await (await faucet.topWallet(user1.address)).wait();
134
134
  await user1.sendTransaction({
135
135
  to: ethers.constants.AddressZero,
136
- value: ethers.utils.parseUnits("500000", "gwei")
136
+ value: ethers.utils.parseUnits("5000000", "gwei")
137
137
  });
138
- // await (await faucet.topWallet(user1.address)).wait();
139
- // await user1.sendTransaction({
140
- // to: ethers.constants.AddressZero,
141
- // value: ethers.utils.parseUnits("500000", "gwei"),
142
- // });
143
138
  }
144
- // await (await faucet.topWallet(user1.address)).wait();
145
- // await user1.sendTransaction({
146
- // to: ethers.constants.AddressZero,
147
- // value: ethers.utils.parseUnits("500000", "gwei"),
148
- // });
149
139
  await ethers.provider.send("evm_increaseTime", [60 * 60 * 24]);
150
140
 
151
141
  expect(await faucet.canTop(user1.address)).to.false;
152
142
  await expect(faucet.topWallet(user1.address)).to.revertedWith(
153
143
  "User wallet has been topped too many times this week"
154
144
  );
145
+
146
+ //should be able to top again after some days passed
147
+ await ethers.provider.send("evm_increaseTime", [60 * 60 * 24 * 3]);
148
+ await ethers.provider.send("evm_mine", []);
149
+
150
+ expect(await faucet.canTop(user1.address)).to.true;
155
151
  });
156
152
 
157
153
  it("should reimburse gas costs", async () => {
@@ -0,0 +1,278 @@
1
+ import { expect } from "chai";
2
+ import { ethers, upgrades, network } from "hardhat";
3
+ import { createDAO } from "../helpers";
4
+ import { Contract } from "ethers";
5
+ import { AdminWallet } from "../../types";
6
+
7
+ const BN = ethers.BigNumber;
8
+ export const NULL_ADDRESS = ethers.constants.AddressZero;
9
+ export const BLOCK_INTERVAL = 1;
10
+
11
+ describe("AdminWallet", () => {
12
+ let signers,
13
+ adminWallet: AdminWallet,
14
+ newUser,
15
+ newUser2,
16
+ admin,
17
+ admin2,
18
+ toWhitelist,
19
+ toppingTimes,
20
+ toppingAmount,
21
+ founder,
22
+ whitelisted,
23
+ stranger,
24
+ stranger2,
25
+ blacklisted,
26
+ identity;
27
+
28
+ before(async () => {
29
+ signers = await ethers.getSigners();
30
+ [
31
+ founder,
32
+ whitelisted,
33
+ stranger,
34
+ stranger2,
35
+ blacklisted,
36
+ newUser,
37
+ newUser2,
38
+ admin,
39
+ admin2,
40
+ toWhitelist
41
+ ] = signers;
42
+ let { identity: id } = await createDAO();
43
+ identity = await ethers.getContractAt("IIdentity", id);
44
+
45
+ adminWallet = (await upgrades.deployProxy(
46
+ await ethers.getContractFactory("AdminWallet"),
47
+ [[], signers[0].address, id],
48
+ { kind: "uups" }
49
+ )) as AdminWallet;
50
+
51
+ identity.addIdentityAdmin(adminWallet.address);
52
+
53
+ toppingTimes = await adminWallet.toppingTimes();
54
+ toppingAmount = await adminWallet.toppingAmount();
55
+ const startBalance = await ethers.provider.getBalance(newUser.address);
56
+ await Promise.all(
57
+ [newUser, newUser2, admin, admin2, toWhitelist].map(acc =>
58
+ acc.sendTransaction({
59
+ to: ethers.constants.AddressZero,
60
+ value: startBalance.sub(ethers.BigNumber.from("21000000000000")),
61
+ gasLimit: 21000,
62
+ gasPrice: 1e9
63
+ })
64
+ )
65
+ );
66
+ });
67
+
68
+ it("should have zero balance for test accouts", async () => {
69
+ await Promise.all(
70
+ [newUser, newUser2, admin, admin2, toWhitelist].map(async acc => {
71
+ expect(await ethers.provider.getBalance(acc.address)).eq(0);
72
+ })
73
+ );
74
+ });
75
+
76
+ it("should transfer to admins", async () => {
77
+ await signers[0].sendTransaction({
78
+ to: admin.address,
79
+ value: toppingAmount / 4
80
+ });
81
+ });
82
+
83
+ it("should fill wallet", async () => {
84
+ await signers[0].sendTransaction({
85
+ to: adminWallet.address,
86
+ value: ethers.utils.parseUnits("50", "ether")
87
+ });
88
+ });
89
+
90
+ it("should not top admin list when empty", async () => {
91
+ await expect(adminWallet["topAdmins(uint256)"](0)).revertedWith(
92
+ "Admin list is empty"
93
+ );
94
+ });
95
+
96
+ it("should add admins", async () => {
97
+ await adminWallet.addAdmins(
98
+ [whitelisted, admin, admin2].map(_ => _.address)
99
+ );
100
+ expect(await adminWallet.isAdmin(whitelisted.address)).true;
101
+ expect(await adminWallet.isAdmin(admin.address)).to.true;
102
+ expect(await adminWallet.isAdmin(admin2.address)).to.true;
103
+ });
104
+
105
+ it("should top admins", async () => {
106
+ const oldBalance = await ethers.provider.getBalance(admin2.address);
107
+ expect(oldBalance).to.be.equal("0");
108
+
109
+ await adminWallet["topAdmins(uint256,uint256)"](0, 1); //test topping with indexes
110
+ await adminWallet["topAdmins(uint256,uint256)"](1, 2);
111
+ expect(await ethers.provider.getBalance(whitelisted.address)).gt(0);
112
+ expect(await ethers.provider.getBalance(admin.address)).gt(0);
113
+ expect(await ethers.provider.getBalance(admin2.address)).eq(0);
114
+ await adminWallet["topAdmins(uint256)"](0);
115
+ const newBalance = await ethers.provider.getBalance(admin2.address);
116
+ const adminTopAmount = await adminWallet
117
+ .adminToppingAmount()
118
+ .then(_ => _.toString());
119
+ expect(newBalance).to.be.equal(adminTopAmount);
120
+ });
121
+
122
+ it("should reimburse gas for admins", async () => {
123
+ const expectedTopping = await adminWallet
124
+ .adminToppingAmount()
125
+ .then(_ => _.toString());
126
+ const adminWalletBalance = await ethers.provider.getBalance(
127
+ adminWallet.address
128
+ );
129
+ expect(expectedTopping).to.be.equal(
130
+ ethers.utils.parseUnits("90000000", "gwei")
131
+ );
132
+ expect(adminWalletBalance).gt(1);
133
+ let oldBalance = await ethers.provider.getBalance(admin2.address);
134
+ let toTransfer = oldBalance.div(2);
135
+ if (toTransfer.gt(0))
136
+ await admin2.sendTransaction({
137
+ to: founder.address,
138
+ value: toTransfer
139
+ });
140
+ oldBalance = await ethers.provider.getBalance(admin2.address);
141
+ expect(oldBalance).to.be.lte(toTransfer);
142
+
143
+ await adminWallet
144
+ .connect(admin2)
145
+ .whitelist(toWhitelist.address, "did:test" + Math.random());
146
+ const newBalance = await ethers.provider.getBalance(admin2.address);
147
+ expect(newBalance).to.be.gte(expectedTopping);
148
+ });
149
+
150
+ it("should remove single admin", async () => {
151
+ await adminWallet.removeAdmins([whitelisted.address]);
152
+ expect(await adminWallet.isAdmin(whitelisted.address)).to.false;
153
+ });
154
+
155
+ it("should allow admin to whitelist and remove whitelist", async () => {
156
+ expect(await identity.isWhitelisted(whitelisted.address)).to.false;
157
+ await adminWallet.connect(admin).whitelist(whitelisted.address, "did:test");
158
+
159
+ expect(await identity.isWhitelisted(whitelisted.address)).to.true;
160
+ await adminWallet.connect(admin).removeWhitelist(whitelisted.address);
161
+ expect(await identity.isWhitelisted(whitelisted.address)).to.false;
162
+ });
163
+
164
+ it("should not allow non-admin to whitelist and remove whitelist", async () => {
165
+ expect(await identity.isWhitelisted(whitelisted.address)).to.false;
166
+ await expect(
167
+ adminWallet.connect(stranger).whitelist(whitelisted.address, "did:test")
168
+ ).revertedWith("Caller is not admin");
169
+ expect(await identity.isWhitelisted(whitelisted.address)).to.false;
170
+ await adminWallet.connect(admin).whitelist(whitelisted.address, "did:test");
171
+ expect(await identity.isWhitelisted(whitelisted.address)).to.true;
172
+ await expect(
173
+ adminWallet.connect(stranger).removeWhitelist(whitelisted.address)
174
+ ).revertedWith("Caller is not admin");
175
+ expect(await identity.isWhitelisted(whitelisted.address)).to.true;
176
+ });
177
+
178
+ it("should allow admin to blacklist and remove blacklist", async () => {
179
+ expect(await identity.isBlacklisted(blacklisted.address)).to.false;
180
+ await adminWallet.connect(admin).blacklist(blacklisted.address);
181
+
182
+ expect(await identity.isBlacklisted(blacklisted.address)).to.true;
183
+ await adminWallet.connect(admin).removeBlacklist(blacklisted.address);
184
+ expect(await identity.isBlacklisted(blacklisted.address)).to.false;
185
+ });
186
+
187
+ it("should not allow non-admin to blacklist and remove blacklist", async () => {
188
+ expect(await identity.isBlacklisted(blacklisted.address)).to.false;
189
+ await expect(
190
+ adminWallet.connect(stranger).blacklist(blacklisted.address)
191
+ ).revertedWith("Caller is not admin");
192
+ expect(await identity.isBlacklisted(blacklisted.address)).to.false;
193
+ await adminWallet.connect(admin).blacklist(blacklisted.address);
194
+ expect(await identity.isBlacklisted(blacklisted.address)).to.true;
195
+ await expect(
196
+ adminWallet.connect(stranger).removeBlacklist(blacklisted.address)
197
+ ).revertedWith("Caller is not admin");
198
+ expect(await identity.isBlacklisted(blacklisted.address)).to.true;
199
+ await adminWallet.connect(admin).removeBlacklist(blacklisted.address);
200
+ expect(await identity.isBlacklisted(blacklisted.address)).to.false;
201
+ });
202
+
203
+ it("should not allow to top wallet if user balance is too high", async () => {
204
+ const walletBalance = await ethers.provider.getBalance(adminWallet.address);
205
+ const tx = await (
206
+ await adminWallet.connect(admin).topWallet(whitelisted.address)
207
+ ).wait();
208
+ const walletBalanceAfter = await ethers.provider.getBalance(
209
+ adminWallet.address
210
+ );
211
+ expect(walletBalance).eq(walletBalanceAfter);
212
+ expect(tx.logs.length).eq(0);
213
+ });
214
+
215
+ it("should allow to top wallet", async () => {
216
+ expect(await ethers.provider.getBalance(newUser.address)).eq(0);
217
+ await adminWallet.connect(admin).topWallet(newUser.address);
218
+ expect(await ethers.provider.getBalance(newUser.address)).gt(0);
219
+ await newUser.sendTransaction({
220
+ to: adminWallet.address,
221
+ value: toppingAmount * 0.9
222
+ });
223
+ });
224
+
225
+ it("should not allow to top wallet more than three times", async () => {
226
+ await adminWallet.connect(admin).topWallet(newUser.address);
227
+ await newUser.sendTransaction({
228
+ to: adminWallet.address,
229
+ value: toppingAmount * 0.9
230
+ });
231
+ await founder.sendTransaction({
232
+ to: admin2.address,
233
+ value: toppingAmount / 5
234
+ });
235
+ await adminWallet.connect(admin).topWallet(newUser.address);
236
+ await newUser.sendTransaction({
237
+ to: adminWallet.address,
238
+ value: toppingAmount * 0.9
239
+ });
240
+
241
+ await expect(
242
+ adminWallet.connect(admin).topWallet(newUser.address)
243
+ ).revertedWith("User wallet has been topped too many times today");
244
+ });
245
+
246
+ it("should whitelist user", async () => {
247
+ expect(await identity.isWhitelisted(stranger2.address)).to.false;
248
+ await adminWallet.connect(admin2).whitelist(stranger2.address, "did:test3");
249
+ expect(await identity.isWhitelisted(stranger2.address)).to.true;
250
+ });
251
+
252
+ it("should not allow whitelisting with existing did", async () => {
253
+ await expect(
254
+ adminWallet.connect(admin2).whitelist(stranger.address, "did:test")
255
+ ).revertedWith("DID already registered");
256
+ });
257
+
258
+ it("should not allow anyone to upgrade", async () => {
259
+ await expect(
260
+ adminWallet.connect(admin2).upgradeTo(adminWallet.address)
261
+ ).revertedWith("Ownable: caller is not the owner");
262
+ });
263
+
264
+ it("should allow owner to upgrade", async () => {
265
+ const newver = await (
266
+ await ethers.getContractFactory("AdminWallet")
267
+ ).deploy();
268
+ await expect(adminWallet.connect(founder).upgradeTo(newver.address)).not
269
+ .reverted;
270
+
271
+ await expect(
272
+ upgrades.upgradeProxy(
273
+ adminWallet.address,
274
+ await ethers.getContractFactory("AdminWallet")
275
+ )
276
+ ).not.throws;
277
+ });
278
+ });
@@ -2,7 +2,6 @@ import { default as hre, ethers, upgrades, network } from "hardhat";
2
2
  import { BigNumber, Contract, Signer } from "ethers";
3
3
  import { deployMockContract, MockContract } from "ethereum-waffle";
4
4
  import { expect } from "chai";
5
- import { networkNames } from "@openzeppelin/upgrades-core";
6
5
  import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address";
7
6
  import { deploy } from "../../scripts/test/localOldDaoDeploy";
8
7
  import deploySettings from "../../releases/deploy-settings.json";
@@ -66,9 +65,7 @@ describe("ProtocolUpgrade - Upgrade old protocol contracts to new ones", () => {
66
65
  fuseController,
67
66
  goodReserve;
68
67
  const { name: networkName } = network;
69
- networkNames[1] = networkName;
70
- networkNames[122] = networkName;
71
- networkNames[3] = networkName;
68
+
72
69
  before(async () => {
73
70
  [founder, ...signers] = await ethers.getSigners();
74
71
  schemeMock = signers.pop();