@gooddollar/goodprotocol 1.0.3-beta.2 → 1.0.4-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 (99) hide show
  1. package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
  2. package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
  3. package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
  4. package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
  5. package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
  6. package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
  7. package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
  8. package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
  9. package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
  10. package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
  11. package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
  12. package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
  13. package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
  14. package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
  15. package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
  16. package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
  17. package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
  18. package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
  19. package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
  20. package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
  21. package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
  22. package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
  23. package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
  24. package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
  25. package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
  26. package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
  27. package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
  28. package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
  29. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  30. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +14 -2
  31. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  32. package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  33. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  34. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  35. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  36. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  37. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  38. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  39. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  40. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  41. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  42. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  43. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  44. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  45. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  46. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  47. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  48. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  49. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  50. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  51. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  58. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  59. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  60. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  61. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  62. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  63. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  64. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  65. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  66. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  67. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  68. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  69. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  70. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  71. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  72. package/artifacts/contracts/unaudited-foundation/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  73. package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  74. package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.json +2 -2
  75. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  76. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  77. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  78. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  79. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  80. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  81. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  82. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  83. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  84. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  85. package/contracts/governance/CompoundVotingMachine.sol +8 -2
  86. package/contracts/unaudited-foundation/InvitesV1.sol +29 -24
  87. package/hardhat.config.ts +6 -3
  88. package/package.json +2 -1
  89. package/releases/deployment.json +24 -24
  90. package/scripts/deployFullDAO.ts +239 -162
  91. package/scripts/keeper/fishInactive.ts +57 -0
  92. package/scripts/upgradeToV2/upgradeToV2.ts +58 -36
  93. package/test/governance/CompoundVotingMachine.delegate.test.ts +0 -4
  94. package/test/governance/CompoundVotingMachine.guardian.test.ts +2 -2
  95. package/test/helpers.ts +3 -10
  96. package/test/reserve/GoodReserveCDai.cap.test.ts +1 -1
  97. package/test/reserve/GoodReserveCDai.test.ts +11 -109
  98. package/test/utils/ProtocolUpgrade.test.ts +8 -0
  99. package/yarn.lock +14 -0
@@ -134,13 +134,12 @@ contract InvitesV1 is Initializable {
134
134
  }
135
135
 
136
136
  function canCollectBountyFor(address _invitee) public view returns (bool) {
137
- User memory user = users[_invitee];
138
- User memory inviter = users[user.invitedBy];
139
- Level memory level = levels[inviter.level];
137
+ User storage user = users[_invitee];
138
+ User storage inviter = users[user.invitedBy];
139
+ uint256 daysToComplete = levels[inviter.level].daysToComplete;
140
140
  bool isLevelExpired = levelExpirationEnabled == true &&
141
- level.daysToComplete > 0 &&
142
- level.daysToComplete <
143
- user.joinedAt.sub(inviter.levelStarted).div(1 days);
141
+ daysToComplete > 0 &&
142
+ daysToComplete < user.joinedAt.sub(inviter.levelStarted).div(1 days);
144
143
 
145
144
  return
146
145
  !user.bountyPaid &&
@@ -201,41 +200,44 @@ contract InvitesV1 is Initializable {
201
200
  */
202
201
  function bountyFor(address _invitee) public isActive {
203
202
  require(canCollectBountyFor(_invitee), "user not elligble for bounty yet");
203
+ return _bountyFor(_invitee);
204
+ }
204
205
 
205
- User storage user = users[_invitee];
206
- User storage inviter = users[user.invitedBy];
207
- Level memory level = levels[inviter.level];
206
+ function _bountyFor(address _invitee) internal {
207
+ address invitedBy = users[_invitee].invitedBy;
208
+ uint256 joinedAt = users[_invitee].joinedAt;
209
+ Level memory level = levels[users[invitedBy].level];
208
210
 
209
211
  bool isLevelExpired = level.daysToComplete > 0 &&
210
- user.joinedAt > inviter.levelStarted && //prevent overflow in subtraction
212
+ joinedAt > users[invitedBy].levelStarted && //prevent overflow in subtraction
211
213
  level.daysToComplete <
212
- user.joinedAt.sub(inviter.levelStarted).div(1 days); //how long after level started did invitee join
214
+ joinedAt.sub(users[invitedBy].levelStarted).div(1 days); //how long after level started did invitee join
213
215
 
214
- user.bountyPaid = true;
215
- inviter.totalApprovedInvites += 1;
216
- inviter.totalEarned += level.bounty;
216
+ users[_invitee].bountyPaid = true;
217
+ users[invitedBy].totalApprovedInvites += 1;
218
+ users[invitedBy].totalEarned += level.bounty;
217
219
  stats.totalApprovedInvites += 1;
218
220
  stats.totalBountiesPaid += level.bounty;
219
221
 
220
222
  bool earnedLevel = false;
221
223
  if (
222
224
  level.toNext > 0 &&
223
- inviter.totalApprovedInvites >= level.toNext &&
225
+ users[invitedBy].totalApprovedInvites >= level.toNext &&
224
226
  isLevelExpired == false
225
227
  ) {
226
- inviter.level += 1;
227
- inviter.levelStarted = block.timestamp;
228
+ users[invitedBy].level += 1;
229
+ users[invitedBy].levelStarted = block.timestamp;
228
230
  earnedLevel = true;
229
231
  }
230
232
 
231
- goodDollar.transfer(user.invitedBy, level.bounty);
233
+ goodDollar.transfer(invitedBy, level.bounty);
232
234
  goodDollar.transfer(_invitee, level.bounty.div(2)); //pay invitee half the bounty
233
235
 
234
236
  emit InviterBounty(
235
- user.invitedBy,
237
+ invitedBy,
236
238
  _invitee,
237
239
  level.bounty,
238
- inviter.level,
240
+ users[invitedBy].level,
239
241
  earnedLevel
240
242
  );
241
243
  }
@@ -247,10 +249,12 @@ contract InvitesV1 is Initializable {
247
249
  User storage inviter = users[msg.sender];
248
250
 
249
251
  for (uint256 i = 0; i < inviter.pending.length; i++) {
250
- if (canCollectBountyFor(inviter.pending[i])) {
251
- bountyFor(inviter.pending[i]);
252
+ if (gasleft() < 340000) return;
253
+ address pending = inviter.pending[i];
254
+ if (canCollectBountyFor(pending)) {
255
+ _bountyFor(pending);
252
256
  }
253
- if (users[inviter.pending[i]].bountyPaid) {
257
+ if (users[pending].bountyPaid) {
254
258
  //if still elements in array move last item to current position
255
259
  if (inviter.pending.length - 1 > i) {
256
260
  inviter.pending[i] = inviter.pending[inviter.pending.length - 1];
@@ -292,8 +296,9 @@ contract InvitesV1 is Initializable {
292
296
  * @dev
293
297
  * 1.2.0 - final changes before release
294
298
  * 1.3.0 - allow to set inviter later
299
+ * 1.4.0 - improve gas for bounty collection
295
300
  */
296
301
  function version() public pure returns (string memory) {
297
- return "1.3.0";
302
+ return "1.4.0";
298
303
  }
299
304
  }
package/hardhat.config.ts CHANGED
@@ -103,7 +103,9 @@ const hhconfig: HardhatUserConfig = {
103
103
  fuse: {
104
104
  accounts: { mnemonic },
105
105
  url: "https://rpc.fuse.io/",
106
- chainId: 122
106
+ chainId: 122,
107
+ gas: 6000000,
108
+ gasPrice: 1000000000
107
109
  },
108
110
  fusespark: {
109
111
  accounts: { mnemonic },
@@ -115,7 +117,8 @@ const hhconfig: HardhatUserConfig = {
115
117
  "fuse-mainnet": {
116
118
  accounts: { mnemonic },
117
119
  url: "https://ropsten.infura.io/v3/" + infura_api,
118
-
120
+ gasPrice: 20000000000,
121
+ gas: 5000000,
119
122
  chainId: 3
120
123
  },
121
124
  staging: {
@@ -141,7 +144,7 @@ const hhconfig: HardhatUserConfig = {
141
144
  accounts: [deployerPrivateKey],
142
145
  url: "https://mainnet.infura.io/v3/" + infura_api,
143
146
  gas: 3000000,
144
- gasPrice: 25000000000,
147
+ gasPrice: 50000000000,
145
148
  chainId: 1
146
149
  }
147
150
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddollar/goodprotocol",
3
- "version": "1.0.3-beta.2",
3
+ "version": "1.0.4-beta.0",
4
4
  "description": "GoodDollar Protocol",
5
5
  "scripts": {
6
6
  "build": "scripts/build.sh deploy",
@@ -60,6 +60,7 @@
60
60
  "ethers-multicall": "^0.2.1",
61
61
  "openzeppelin-solidity": "^4.3.2",
62
62
  "patch-package": "latest",
63
+ "press-any-key": "^0.1.1",
63
64
  "truffle-plugin-verify": "^0.5.11",
64
65
  "truffle-source-verify": "^0.0.6"
65
66
  },
@@ -120,30 +120,30 @@
120
120
  "UniswapV2SwapHelper": "0x7D7200b2b049BB3d91bCbdf95eC0EE6c2b5f8b7E"
121
121
  },
122
122
  "fuse": {
123
- "NameService": "0xE2CeeFB08f6729D8Ef764658750ce412B391a900",
124
- "GReputation": "0x9F4362beB6e6a464192154926Dd7CeA0F2780277",
125
- "FirstClaimPool": "0x6CF223eE3c5f95CF97065de35757247E04EaaAe3",
126
- "CompoundVotingMachine": "0x7783c57c7ECa8571733Ae5b8484c756cB0CCD883",
127
- "ClaimersDistribution": "0xe0f7A939cDc8750b6ebf94526396e3b62BEF2634",
128
- "GovernanceStaking": "0x9b1d581bdC3491979B185dA8ee98Fc29Be3c64fd",
129
- "UBIScheme": "0xec97ee6d70C626044224998192B96fEF05949De1",
130
- "ProtocolUpgradeFuse": "0xd47F223FfB6a3c08ECf01158C5D5696420F6c293",
131
- "Identity": "0x30e1403C075dB97fD9FE02b114cEbea5acce38b7",
132
- "GoodDollar": "0xeE724540706296ebad65aeA2515Efe0949F97Ae6",
133
- "Controller": "0x903a6Ba8b5A43FBd34a511fB5Cf193CE8dc8907B",
134
- "Avatar": "0x07B41192DD74172576a443C7B28DDC3dC2CE3074",
135
- "HomeBridge": "0x628980264f86b20BbF4181f55a35602fEe6B4E6F",
136
- "FuseFaucet": "0xEEcc2620fb1EaC08Af5923B4D1D54d4703FBb29B",
137
- "ProxyAdmin": "0xA74F8Ca91bA870608A909A9685e4a984Bbc068b5",
138
- "Invites": "0x4218263062854C3953EF61699a85231b524A896a",
139
- "ProxyAdmin2": "0x97429324686d39B424bC2d3228478280B46080Ed",
140
- "UBI": "0xCC9B1382b0Ae9D80E81eCB1863DcE8685a044603",
141
- "SignupBonus": "0xcdC704D3dEA0FcFD1Cae95dfdCB7883632E171b2",
142
- "OneTimePayments": "0x94079dF920115c5296Cc06AE6D8F29E077906246",
143
- "AdminWallet": "0xf61e08a98B446856eE3fbD6597D3698a1a138565",
123
+ "NameService": "0x27E3B64C671a25c191535743d63Bd06CB9B93E37",
124
+ "GReputation": "0xdFF4cE07253b2c3fa9dCEC8B918f91d150AC26a4",
125
+ "FirstClaimPool": "0x5E8732889f2d84c3D834223c38361B38D7D4B9bc",
126
+ "CompoundVotingMachine": "0xb9978C071f2F64016A2f8515BC03bd25684201aF",
127
+ "ClaimersDistribution": "0xEaDa76013C87C22843b907Ce0110ea55C8E7E2a0",
128
+ "GovernanceStaking": "0xe3E75Ee6895F8b30d8eC3260dAa20ec1aba6DA77",
129
+ "UBIScheme": "0x3bdeB796950301FfC9568fAF89B7370f8B217321",
130
+ "ProtocolUpgradeFuse": "0x4dB8602482576321F829baa593150393f7595439",
131
+ "Identity": "0x7ccF1011610138b484fCc921858e7971342d213c",
132
+ "GoodDollar": "0x79BeecC4b165Ccf547662cB4f7C0e83b3796E5b3",
133
+ "Controller": "0xb453024495525908E6cC1e3C115f4B6B30cc56b9",
134
+ "Avatar": "0x71ddE7b8362724bd65D88Fe29d42636a9F8f9064",
135
+ "HomeBridge": "0xb0aD96B62567Ebcb1660e2Af5755A11B42b3Ade5",
136
+ "FuseFaucet": "0x09Ad3430D146aa662eA8c20cBEBceBC0bbB3FB0a",
137
+ "Invites": "0x187fc9fB37DF0fbf75149913a97B17c968Fc90d0",
138
+ "OneTimePayments": "0x184C1F83b3eB75a2dac483D4a6b9FBD59Df961f8",
139
+ "AdminWallet": "0x14204288286823042263156146334B1a4d61227c",
144
140
  "network": "fuse",
145
141
  "networkId": 122,
146
- "ProxyFactory": "0x86119f44AEbA334eDef64cc23D8b34188088D977"
142
+ "ProxyFactory": "0x4136dfD47F47792fC820E2354e9F0ce8e9c586A6",
143
+ "BancorFormula": "0x88e111b2A42457655A34896E5B929a75E7B82F88",
144
+ "DAI": "0x0000000000000000000000000000000000000000",
145
+ "cDAI": "0x0000000000000000000000000000000000000000",
146
+ "COMP": "0x0000000000000000000000000000000000000000"
147
147
  },
148
148
  "fuse-mainnet": {
149
149
  "NameService": "0x5e8bF25c75787e9fa17e2321266b0cbE95c830d0",
@@ -365,7 +365,7 @@
365
365
  "ProxyFactory": "0x4659176E962763e7C8A4eF965ecfD0fdf9f52057",
366
366
  "NameService": "0xe26867DDd22F9342d9F0D566D182f2c960683971",
367
367
  "GReputation": "0x3A9299BE789ac3730e4E4c49d6d2Ad1b8BC34DFf",
368
- "CompoundVotingMachine": "0xd356358f2da1018a3733a304E9bb39CF7ED51059",
368
+ "CompoundVotingMachine": "0xc2Ff55b896e3c42f9e1c2f7467C51b93F1C23dFD",
369
369
  "ClaimersDistribution": "0xF34552F1583c0B981dbB09611128c3375b47182e",
370
370
  "GovernanceStaking": "0xFAF457Fb4A978Be059506F6CD41f9B30fCa753b0",
371
371
  "UBIScheme": "0x87d77A30a6819860eB8332D293810ed7b510035A",
@@ -390,7 +390,7 @@
390
390
  "ProxyFactory": "0x4659176E962763e7C8A4eF965ecfD0fdf9f52057",
391
391
  "NameService": "0xe26867DDd22F9342d9F0D566D182f2c960683971",
392
392
  "GReputation": "0x3A9299BE789ac3730e4E4c49d6d2Ad1b8BC34DFf",
393
- "CompoundVotingMachine": "0xd356358f2da1018a3733a304E9bb39CF7ED51059",
393
+ "CompoundVotingMachine": "0xc2Ff55b896e3c42f9e1c2f7467C51b93F1C23dFD",
394
394
  "GoodMarketMaker": "0x30D37B05cF73Edd8c59ce8450F093f6C06dA9272",
395
395
  "GoodReserveCDai": "0x6C35677206ae7FF1bf753877649cF57cC30D1c42",
396
396
  "ExchangeHelper": "0x0a8c6bB832801454F6CC21761D0A293Caa003296",