@gooddollar/goodprotocol 1.0.7-beta.2 → 1.0.9-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 (131) 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/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
  30. package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
  31. package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
  32. package/artifacts/contracts/governance/GReputation.sol/GReputation.json +62 -4
  33. package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  34. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  35. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  36. package/artifacts/contracts/governance/Reputation.sol/Reputation.json +17 -17
  37. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  38. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  39. package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
  40. package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
  41. package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
  42. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
  43. package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +6 -6
  44. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  45. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  46. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  47. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  48. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  49. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  50. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  51. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  58. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  59. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  60. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  61. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  62. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  63. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  64. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  65. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  66. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  67. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  68. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +4 -0
  69. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +256 -0
  70. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  71. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  72. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  73. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  74. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +4 -0
  75. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.json +1033 -0
  76. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  77. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  78. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +3 -3
  79. package/artifacts/contracts/staking/aave/AaveStakingFactoryV2.sol/AaveStakingFactoryV2.dbg.json +4 -0
  80. package/artifacts/contracts/staking/aave/AaveStakingFactoryV2.sol/AaveStakingFactoryV2.json +148 -0
  81. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  82. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +4 -4
  83. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +4 -0
  84. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +1224 -0
  85. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  86. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
  87. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  88. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +4 -4
  89. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  90. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
  91. package/artifacts/contracts/unaudited-foundation/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  92. package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  93. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  94. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  95. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  96. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  97. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  98. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  99. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  100. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  101. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  102. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  103. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
  104. package/contracts/governance/GReputation.sol +53 -14
  105. package/contracts/governance/Reputation.sol +13 -25
  106. package/contracts/staking/BaseShareFieldV2.sol +319 -0
  107. package/contracts/staking/SimpleStakingV2.sol +522 -0
  108. package/contracts/staking/aave/AaveStakingFactoryV2.sol +93 -0
  109. package/contracts/staking/aave/GoodAaveStaking.sol +4 -3
  110. package/contracts/staking/aave/GoodAaveStakingV2.sol +263 -0
  111. package/contracts/staking/compound/GoodCompoundStaking.sol +4 -3
  112. package/contracts/ubi/UBIScheme.sol +2 -2
  113. package/package.json +1 -1
  114. package/releases/deployment.json +108 -97
  115. package/releases/olddao.json +1 -406
  116. package/scripts/deployFullDAO.ts +7 -7
  117. package/scripts/misc/goodgiveback.ts +64 -0
  118. package/scripts/verify.ts +60 -47
  119. package/test/governance/ClaimersDistribution.test.ts +5 -5
  120. package/test/governance/CompoundVotingMachine.castvote.test.ts +1 -1
  121. package/test/governance/CompoundVotingMachine.daoscheme.ts +1 -1
  122. package/test/governance/CompoundVotingMachine.guardian.test.ts +1 -1
  123. package/test/governance/GReputation.test.ts +49 -18
  124. package/test/governance/GovernanceStaking.test.ts +71 -47
  125. package/test/governance/Reputation.test.ts +52 -51
  126. package/test/governance/StakersDistribution.test.ts +12 -8
  127. package/test/helpers.ts +5 -1
  128. package/test/staking/GoodAaveStakingFactoryV2.test.ts +122 -0
  129. package/test/staking/UsdcAaveStaking.test.ts +5 -1
  130. package/test/staking/UsdcAaveStakingV2.test.ts +291 -0
  131. package/truffle-config.js +12 -0
@@ -0,0 +1,263 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity >=0.8.0;
4
+ import "../SimpleStakingV2.sol";
5
+ import "../../Interfaces.sol";
6
+ import "../../utils/DataTypes.sol";
7
+ import "../UniswapV2SwapHelper.sol";
8
+
9
+ /**
10
+ * @title Staking contract that donates earned interest to the DAO
11
+ * allowing stakers to deposit Token
12
+ * or withdraw their stake in Token
13
+ * the contracts buy cToken and can transfer the daily interest to the DAO
14
+ */
15
+ contract GoodAaveStakingV2 is SimpleStakingV2 {
16
+ using UniswapV2SwapHelper for IHasRouter;
17
+
18
+ // Address of the TOKEN/USD oracle from chainlink
19
+ address public tokenUsdOracle;
20
+
21
+ //LendingPool of aave
22
+ ILendingPool public lendingPool;
23
+
24
+ //Address of the AaveIncentivesController
25
+ IAaveIncentivesController public incentiveController;
26
+
27
+ //address of the AAVE/USD oracle
28
+ address public aaveUSDOracle;
29
+ // Gas cost to collect interest from this staking contract
30
+ uint32 public collectInterestGasCost;
31
+ // Gas cost to claim stkAave rewards
32
+ uint32 public stkAaveClaimGasCost;
33
+
34
+ address[] public tokenToDaiSwapPath;
35
+
36
+ /**
37
+ * @param _token Token to swap DEFI token
38
+ * @param _lendingPool LendingPool address
39
+ * @param _ns Address of the NameService
40
+ * @param _tokenName Name of the staking token which will be provided to staker for their staking share
41
+ * @param _tokenSymbol Symbol of the staking token which will be provided to staker for their staking share
42
+ * @param _tokenSymbol Determines blocks to pass for 1x Multiplier
43
+ * @param _tokenUsdOracle address of the TOKEN/USD oracle
44
+ * @param _incentiveController Aave incentive controller which provides AAVE rewards
45
+ * @param _aaveUSDOracle address of the AAVE/USD oracle
46
+ */
47
+ function init(
48
+ address _token,
49
+ address _lendingPool,
50
+ INameService _ns,
51
+ string memory _tokenName,
52
+ string memory _tokenSymbol,
53
+ uint64 _maxRewardThreshold,
54
+ address _tokenUsdOracle,
55
+ IAaveIncentivesController _incentiveController,
56
+ address _aaveUSDOracle,
57
+ address[] memory _tokenToDaiSwapPath
58
+ ) public {
59
+ lendingPool = ILendingPool(_lendingPool);
60
+ DataTypes.ReserveData memory reserve = lendingPool.getReserveData(_token);
61
+ initialize(
62
+ _token,
63
+ reserve.aTokenAddress,
64
+ _ns,
65
+ _tokenName,
66
+ _tokenSymbol,
67
+ _maxRewardThreshold
68
+ );
69
+ require(
70
+ _tokenToDaiSwapPath[0] == _token &&
71
+ _tokenToDaiSwapPath[_tokenToDaiSwapPath.length - 1] ==
72
+ nameService.getAddress("DAI"),
73
+ "invalid _tokenToDaiSwapPath"
74
+ );
75
+ tokenToDaiSwapPath = _tokenToDaiSwapPath;
76
+
77
+ //above initialize going to revert on second call, so this is safe
78
+ tokenUsdOracle = _tokenUsdOracle;
79
+ incentiveController = _incentiveController;
80
+ aaveUSDOracle = _aaveUSDOracle;
81
+ collectInterestGasCost = 250000;
82
+ stkAaveClaimGasCost = 50000;
83
+ _approveTokens();
84
+ }
85
+
86
+ /**
87
+ * @dev stake some Token
88
+ * @param _amount of Token to stake
89
+ */
90
+ function mintInterestToken(uint256 _amount) internal override {
91
+ lendingPool.deposit(address(token), _amount, address(this), 0);
92
+ }
93
+
94
+ /**
95
+ * @dev redeem Token from aave
96
+ * @param _amount of token to redeem in Token
97
+ */
98
+ function redeem(uint256 _amount) internal override {
99
+ uint256 withdrawnAmount = lendingPool.withdraw(
100
+ address(token),
101
+ _amount,
102
+ address(this)
103
+ );
104
+ require(withdrawnAmount > 0, "Withdrawn amount should be bigger than zero");
105
+ }
106
+
107
+ /**
108
+ * @dev Function to redeem aToken for DAI, so reserve knows how to handle it. (reserve can handle dai or cdai)
109
+ * also transfers stkaave to reserve
110
+ * @dev _amount of token in iToken
111
+ * @dev _recipient recipient of the DAI
112
+ * @return actualTokenGains amount of token redeemed for dai,
113
+ actualRewardTokenGains amount of reward token earned,
114
+ daiAmount total dai received
115
+ */
116
+ function redeemUnderlyingToDAI(uint256 _amount, address _recipient)
117
+ internal
118
+ override
119
+ returns (
120
+ uint256 actualTokenGains,
121
+ uint256 actualRewardTokenGains,
122
+ uint256 daiAmount
123
+ )
124
+ {
125
+ //out of requested interests to withdraw how much is it safe to swap
126
+ actualTokenGains = IHasRouter(this).maxSafeTokenAmount(
127
+ address(token),
128
+ tokenToDaiSwapPath[1],
129
+ _amount,
130
+ maxLiquidityPercentageSwap
131
+ );
132
+
133
+ lendingPool.withdraw(address(token), actualTokenGains, address(this));
134
+ actualTokenGains = token.balanceOf(address(this));
135
+
136
+ address[] memory tokenAddress = new address[](1);
137
+ tokenAddress[0] = address(iToken);
138
+
139
+ actualRewardTokenGains = incentiveController.claimRewards(
140
+ tokenAddress,
141
+ type(uint256).max,
142
+ avatar
143
+ );
144
+
145
+ if (actualTokenGains > 0) {
146
+ daiAmount = IHasRouter(this).swap(
147
+ tokenToDaiSwapPath,
148
+ actualTokenGains,
149
+ 0,
150
+ _recipient
151
+ );
152
+ }
153
+ }
154
+
155
+ /**
156
+ * @dev returns decimals of token.
157
+ */
158
+ function tokenDecimal() internal view override returns (uint256) {
159
+ ERC20 token = ERC20(address(token));
160
+ return uint256(token.decimals());
161
+ }
162
+
163
+ /**
164
+ * @dev returns decimals of interest token.
165
+ */
166
+ function iTokenDecimal() internal view override returns (uint256) {
167
+ ERC20 aToken = ERC20(address(iToken));
168
+ return uint256(aToken.decimals());
169
+ }
170
+
171
+ /**
172
+ * @dev Function that calculates current interest gains of this staking contract
173
+ * @param _returnTokenBalanceInUSD determine return token balance of staking contract in USD
174
+ * @param _returnTokenGainsInUSD determine return token gains of staking contract in USD
175
+ * @return iTokenGains gains in iToken, tokenGains gains in token, tokenBalance current balance , balanceInUSD, tokenGainsInUSD
176
+ */
177
+ function currentGains(
178
+ bool _returnTokenBalanceInUSD,
179
+ bool _returnTokenGainsInUSD
180
+ )
181
+ public
182
+ view
183
+ override
184
+ returns (
185
+ uint256 iTokenGains,
186
+ uint256 tokenGains,
187
+ uint256 tokenBalance,
188
+ uint256 balanceInUSD,
189
+ uint256 tokenGainsInUSD
190
+ )
191
+ {
192
+ ERC20 aToken = ERC20(address(iToken));
193
+ tokenBalance = aToken.balanceOf(address(this));
194
+ balanceInUSD = _returnTokenBalanceInUSD
195
+ ? getTokenValueInUSD(tokenUsdOracle, tokenBalance, token.decimals())
196
+ : 0;
197
+ address[] memory tokenAddress = new address[](1);
198
+ tokenAddress[0] = address(token);
199
+ if (tokenBalance <= totalProductivity) {
200
+ return (0, 0, tokenBalance, balanceInUSD, 0);
201
+ }
202
+ iTokenGains = tokenGains = tokenBalance - totalProductivity;
203
+
204
+ tokenGainsInUSD = _returnTokenGainsInUSD
205
+ ? getTokenValueInUSD(tokenUsdOracle, tokenGains, token.decimals())
206
+ : 0;
207
+ }
208
+
209
+ /**
210
+ * @dev Function to get interest transfer cost for this particular staking contract
211
+ */
212
+ function getGasCostForInterestTransfer()
213
+ external
214
+ view
215
+ override
216
+ returns (uint32)
217
+ {
218
+ address[] memory tokenAddress = new address[](1);
219
+ tokenAddress[0] = address(iToken);
220
+ uint256 stkAaaveBalance = incentiveController.getRewardsBalance(
221
+ tokenAddress,
222
+ address(this)
223
+ );
224
+ if (stkAaaveBalance > 0)
225
+ return collectInterestGasCost + stkAaveClaimGasCost;
226
+
227
+ return collectInterestGasCost;
228
+ }
229
+
230
+ /**
231
+ * @dev Set Gas cost to interest collection for this contract
232
+ * @param _collectInterestGasCost Gas cost to collect interest
233
+ * @param _rewardTokenCollectCost gas cost to collect reward tokens
234
+ */
235
+ function setcollectInterestGasCostParams(
236
+ uint32 _collectInterestGasCost,
237
+ uint32 _rewardTokenCollectCost
238
+ ) external {
239
+ _onlyAvatar();
240
+ collectInterestGasCost = _collectInterestGasCost;
241
+ stkAaveClaimGasCost = _rewardTokenCollectCost;
242
+ }
243
+
244
+ /**
245
+ * @dev Calculates worth of given amount of iToken in Token
246
+ * @param _amount Amount of token to calculate worth in Token
247
+ * @return Worth of given amount of token in Token
248
+ */
249
+ function iTokenWorthInToken(uint256 _amount)
250
+ public
251
+ view
252
+ override
253
+ returns (uint256)
254
+ {
255
+ return _amount; // since aToken is peg to Token 1:1 return exact amount
256
+ }
257
+
258
+ function _approveTokens() internal override {
259
+ address uniswapRouter = nameService.getAddress("UNISWAP_ROUTER");
260
+ token.approve(uniswapRouter, type(uint256).max);
261
+ token.approve(address(lendingPool), type(uint256).max); // approve the transfers to defi protocol as much as possible in order to save gas
262
+ }
263
+ }
@@ -20,9 +20,9 @@ contract GoodCompoundStaking is SimpleStaking {
20
20
  address public compUsdOracle;
21
21
 
22
22
  // Gas cost to collect interest from this staking contract
23
- uint32 public collectInterestGasCost = 250000;
23
+ uint32 public collectInterestGasCost;
24
24
  // Gas cost to collect COMP rewards
25
- uint32 public compCollectGasCost = 150000;
25
+ uint32 public compCollectGasCost;
26
26
 
27
27
  address[] public tokenToDaiSwapPath;
28
28
 
@@ -75,7 +75,8 @@ contract GoodCompoundStaking is SimpleStaking {
75
75
  tokenToDaiSwapPath = _tokenToDaiSwapPath;
76
76
  comp = ERC20(nameService.getAddress("COMP"));
77
77
  uniswapContract = Uniswap(nameService.getAddress("UNISWAP_ROUTER"));
78
-
78
+ collectInterestGasCost = 250000;
79
+ compCollectGasCost = 150000;
79
80
  _approveTokens();
80
81
  }
81
82
 
@@ -362,12 +362,12 @@ contract UBIScheme is DAOUpgradeableContract {
362
362
  claimDay[currentDay].claimAmount += awardAmount;
363
363
  emit UBIClaimed(_account, awardAmount);
364
364
  } else {
365
- IGoodDollar token = nativeToken();
366
- require(token.transfer(_account, _amount), "claim transfer failed");
367
365
  if (_isClaimed) {
368
366
  claimDay[currentDay].claimAmount += _amount;
369
367
  emit UBIClaimed(_account, _amount);
370
368
  }
369
+ IGoodDollar token = nativeToken();
370
+ require(token.transfer(_account, _amount), "claim transfer failed");
371
371
  }
372
372
  }
373
373
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddollar/goodprotocol",
3
- "version": "1.0.7-beta.2",
3
+ "version": "1.0.9-beta.0",
4
4
  "description": "GoodDollar Protocol",
5
5
  "scripts": {
6
6
  "build": "scripts/build.sh deploy",
@@ -132,7 +132,7 @@
132
132
  "GoodDollar": "0x79BeecC4b165Ccf547662cB4f7C0e83b3796E5b3",
133
133
  "Controller": "0xb453024495525908E6cC1e3C115f4B6B30cc56b9",
134
134
  "Avatar": "0x71ddE7b8362724bd65D88Fe29d42636a9F8f9064",
135
- "HomeBridge": "0xb0aD96B62567Ebcb1660e2Af5755A11B42b3Ade5",
135
+ "HomeBridge": "0x2a84f4E41c1f0E245A7278e32150Ecf1a179b7B2",
136
136
  "FuseFaucet": "0x09Ad3430D146aa662eA8c20cBEBceBC0bbB3FB0a",
137
137
  "Invites": "0x187fc9fB37DF0fbf75149913a97B17c968Fc90d0",
138
138
  "OneTimePayments": "0x184C1F83b3eB75a2dac483D4a6b9FBD59Df961f8",
@@ -166,7 +166,7 @@
166
166
  "Contribution": "0x2250c5131bf9DdCbD55F9bEFc999D691c419ad93",
167
167
  "DAI": "0xB5E5D0F8C0cbA267CD3D7035d6AdC8eBA7Df7Cdd",
168
168
  "cDAI": "0x6ce27497a64fffb5517aa4aee908b1e7eb63b9ff",
169
- "ForeignBridge": "0x18F2a22Aa6420D06C079e70838a21a3c75322834",
169
+ "ForeignBridge": "0x292c17365D729d367f4556F1Bd17eB8434ebF6d1",
170
170
  "GoodDollar": "0x22A4720e32e3419e809731E7114042D6C3055845",
171
171
  "Reputation": "0x5925F6Bf62147D2b14B85e6dCB979e3D1A81Dbb1",
172
172
  "Identity": "0x4D347bda25BEf041BfCB5205deECD1A33ab46db9",
@@ -184,63 +184,74 @@
184
184
  "FeeFormula": "0x416B5A5e12235De6838D62Fd053e7Ce59E944426"
185
185
  },
186
186
  "dapptest": {
187
- "NameService": "0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc",
188
- "GReputation": "0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07",
189
- "CompoundVotingMachine": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe",
190
- "ClaimersDistribution": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d",
191
- "GovernanceStaking": "0xdbC43Ba45381e02825b14322cDdd15eC4B3164E6",
192
- "UBIScheme": "0x4C4a2f8c81640e47606d3fd77B353E87Ba015584",
193
- "ProtocolUpgradeFuse": "0x21dF544947ba3E8b3c32561399E88B52Dc8b2823",
194
- "HomeBridge": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
195
- "AdminWallet": "0x998abeb3E57409262aE5b751f60747921B33613E",
196
- "Identity": "0x0165878A594ca255338adfa4d48449f69242Eb8F",
197
- "GoodDollar": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5",
198
- "Controller": "0x23dB4a08f2272df049a4932a4Cc3A6Dc1002B33E",
199
- "Avatar": "0x61c36a8d610163660E21a8b7359e1Cac0C9133e1",
200
- "FirstClaimPool": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933",
201
- "BancorFormula": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9",
202
- "DAI": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
203
- "cDAI": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
204
- "COMP": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
187
+ "NameService": "0x9059f66843F564f7870f7135fB039EB2034a23a3",
188
+ "GReputation": "0x90dE2F86DBdB2110a798326e880c83bc8779d149",
189
+ "CompoundVotingMachine": "0x2EF9f88EEB737655FF01F9b5017f1e3399726AF1",
190
+ "ClaimersDistribution": "0x035A59F228e776Cc396a8F5E1cEF989E235B0035",
191
+ "GovernanceStaking": "0xC65cCB966873969179B6b0bA53D67D14Bbf1204C",
192
+ "UBIScheme": "0xBb02F06762FBc51aD222915e6855f7482a93F9Cd",
193
+ "ProtocolUpgradeFuse": "0xBb976201B607f16dc76586dB8Ca5EF6C50C41c22",
194
+ "HomeBridge": "0x180FAF09AdD6a27554b11a131DCe6f6A3ddF4cBf",
195
+ "AdminWallet": "0xB8357F7f41125d4b24AD052c1b7288BeF5C43446",
196
+ "Identity": "0x63766F0efAa46a86E9055bB46e41ff7bc64CBEA2",
197
+ "GoodDollar": "0x94a9D2532DA2d9153336159907604A01c3E91C11",
198
+ "Controller": "0x0B57Fd12F7A95c322aD176D23765507ce09892Cb",
199
+ "Avatar": "0xf6Ee31185AC05C2b558fF2a561C600AF3E9486dd",
200
+ "FirstClaimPool": "0xC20654dB7F9483f10c91dc94924dC8F04F79bfd5",
201
+ "BancorFormula": "0x6852Adb5Fce1D73c08A9b3Aa7edE9A03437ac2fE",
202
+ "DAI": "0x0000000000000000000000000000000000000000",
203
+ "cDAI": "0x0000000000000000000000000000000000000000",
204
+ "COMP": "0x0000000000000000000000000000000000000000",
205
205
  "networkId": 4447,
206
- "network": "dapptest"
206
+ "network": "dapptest",
207
+ "FeeFormula": "0x24ef01de6baE76eE73Da210940A296F739d87952",
208
+ "OneTimePayments": "0xB10982193B39Eda3428d6AaeBbd7986f2A2Baa1a",
209
+ "Invites": "0x74156A1F9736307b7AD34e3691f3A5B54A0B3Eb8",
210
+ "FuseFaucet": "0x0Db32f0b116773fDD78C2e1b5E6609CC502e6784",
211
+ "ProxyFactory": "0xCD8a1C3ba11CF5ECfa6267617243239504a98d90"
207
212
  },
208
213
  "dapptest-mainnet": {
209
- "NameService": "0x51A1ceB83B83F1985a81C295d1fF28Afef186E02",
210
- "GReputation": "0x36b58F5C1969B7b6591D752ea6F5486D069010AB",
211
- "CompoundVotingMachine": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7",
212
- "GoodMarketMaker": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB",
213
- "GoodReserveCDai": "0x172076E0166D1F9Cc711C77Adf8488051744980C",
214
- "ExchangeHelper": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25",
215
- "GoodFundManager": "0x2B0d36FACD61B71CC05ab8F3D2355ec3631C0dd5",
216
- "StakersDistribution": "0x46b142DD1E924FAb83eCc3c08e4D46E82f005e0E",
217
- "ProtocolUpgrade": "0xC9a43158891282A2B1475592D5719c001986Aaec",
218
- "CompoundStakingFactory": "0x1c85638e118b37167e9298c2268758e058DdfDA0",
219
- "AaveStakingFactory": "0x367761085BF3C12e5DA2Df99AC6E1a824612b8fb",
220
- "ForeignBridge": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9",
221
- "Contribution": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0",
214
+ "NameService": "0xe528aaCA8E7cD3ce503bB4a2dEadFD4088229E1F",
215
+ "GReputation": "0x77423AE3ce64482ef3BB601a2EA42cf30349735A",
216
+ "CompoundVotingMachine": "0x6804DB9596c651A1CA24bBB821712A8899932d76",
217
+ "GoodMarketMaker": "0xa36ADAE77B1f6f87eD60aafEF9c080c38Ca30D0F",
218
+ "GoodReserveCDai": "0x411CEb987F801CdEa5a301a0CCfa4a5Df37f3f7F",
219
+ "ExchangeHelper": "0x1333788523bEA7C7cBdd0684Bd1ee75E940fF0Eb",
220
+ "GoodFundManager": "0x50589243cb1d8eEF751f4BAb253Aabef6e434c0d",
221
+ "StakersDistribution": "0x214c3C71191AB9bD868a5f408A61c540c787662F",
222
+ "ProtocolUpgrade": "0x1Fb0D426927Dab092Def63b73E1397b3F29E7b33",
223
+ "CompoundStakingFactory": "0xe4FEed16F54b4244C174b408Ba3B5F1f19DD1E4D",
224
+ "AaveStakingFactory": "0xe7213b68DC25bf30bC7f1DE9BAead075c66979F9",
225
+ "ForeignBridge": "0x570ADc5880D778aE5935f199aa590091586CDf75",
226
+ "Contribution": "0x24F2D7c50357C7B1156Ca85945D3A901c88651cB",
222
227
  "StakingContracts": [
223
228
  [
224
- "0x7c3c0A0EC38ad2DDaF9e89FE82B7a85D21366fA1",
229
+ "0xc782Ee4B0d6204Ff77471884bB95d2D2f8D60fE6",
225
230
  13888
226
- ],
227
- [
228
- "0xdc43741637B4Dd5f7f6A3201b6d00A49812Fc4D3",
229
- "6944"
230
231
  ]
231
232
  ],
232
- "DonationsStaking": "0x4631BCAbD6dF18D94796344963cB60d44a4136b6",
233
- "Identity": "0x0165878A594ca255338adfa4d48449f69242Eb8F",
234
- "GoodDollar": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5",
235
- "Controller": "0x23dB4a08f2272df049a4932a4Cc3A6Dc1002B33E",
236
- "Avatar": "0x61c36a8d610163660E21a8b7359e1Cac0C9133e1",
237
- "FirstClaimPool": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933",
238
- "BancorFormula": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9",
239
- "DAI": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
240
- "cDAI": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
241
- "COMP": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
233
+ "DonationsStaking": "0x4bfd12E943f25621d4FA368Ca7a5c0E7F6488000",
234
+ "Identity": "0xb2377aAE57F2072F52FBc38696BE573af2ce5bd9",
235
+ "GoodDollar": "0x5Bbaf48c102373B55079F941c40822C96E715d62",
236
+ "Controller": "0x67d49FAF26CA6A34D483B6BDFA45824EdA64D509",
237
+ "Avatar": "0xE9ED26a450aC15ea88b5801E5940B58F2f778b03",
238
+ "FirstClaimPool": "0xe3963EF7CC3044B64842d0AAe7F2Bf1543D341Ec",
239
+ "BancorFormula": "0x30474Ce2DE03045B8D0AE76F8a30DbfC8f000cea",
240
+ "DAI": "0xadf7b0f46EB35C748438F3e215F064E01cc7f5dF",
241
+ "cDAI": "0x0037272a7048132b10Dd8970AC964Bab2fDB3F62",
242
+ "COMP": "0xE8E9B139c6477D4EaD599bE5f2bB9335533D14f7",
242
243
  "networkId": 4447,
243
- "network": "dapptest-mainnet"
244
+ "network": "dapptest-mainnet",
245
+ "FeeFormula": "0x8B87065fdfe4A130108E50f74ae7F85cD20A5967",
246
+ "ProxyFactory": "0xF47e3B0A1952A81F1afc41172762CB7CE8700133",
247
+ "UniswapV2SwapHelper": "0xB4059a6808Af368A69d12FBbD104Bb6B9c37e629",
248
+ "ETHUsdOracle": "0x79613D7834Ad35EE8dC3F9298030eaADc2A8c250",
249
+ "DAIEthOracle": "0x6397866132887b206EEA19f910730443E71a8CfB",
250
+ "DAIUsdOracle": "0xC2E1FC63cE06C279c5De18D7119C7cA123B42C1c",
251
+ "COMPUsdOracle": "0x9301981F27950e6546033EADD046C86754263f2D",
252
+ "USDCUsdOracle": "0x89Be7D874a17cD0295B2d86436a920593b5f4480",
253
+ "AAVEUsdOracle": "0xDFF3455E08AB33B1599D1c5B5A1D65de63d3FCd0",
254
+ "GasPriceOracle": "0xFAE6fA2097792Edfd7429A282F21ec2D955279D9"
244
255
  },
245
256
  "staging-mainnet": {
246
257
  "NameService": "0xC87FAb8A8CDD346079ca6177e47408Ba18066104",
@@ -258,11 +269,11 @@
258
269
  "DonationsStaking": "0x66Fb63cB6c4E2800db9d1691B3d00361Ada9dE61",
259
270
  "network": "staging-mainnet",
260
271
  "networkId": 3,
261
- "ForeignBridge": "0xDaAc9A734242C2D99dD1cb3680770ACA26A25CeB",
272
+ "ForeignBridge": "0xF629c80BfCaA9080e229b555924D5c72B47F5C22",
262
273
  "Contribution": "0x27816e32270a413AF676A2E3a25dB93C7F565a80",
263
274
  "StakingContracts": [
264
275
  [
265
- "0x61b36EcaEd25c4EE3017905B5Dd006129a4dfb0B",
276
+ "0x1189c2227bAa8f0749e842B366b0912d29A5A04E",
266
277
  13888
267
278
  ]
268
279
  ],
@@ -301,7 +312,7 @@
301
312
  "network": "staging",
302
313
  "networkId": 122,
303
314
  "ProxyFactory": "0x240d844AdA767bE0AB08F9BcCcB6D8a04aE370EC",
304
- "HomeBridge": "0x3B25860174ECb3a0962bA3A5065b1f4063253419",
315
+ "HomeBridge": "0xc116Be98ad4574EE771553a0977fA9591d48C383",
305
316
  "FirstClaimPool": "0x5D007A7633D05b0dDD068B71E8448CD1fcdbd823",
306
317
  "FeeFormula": "0x05eb1C46bd539Fd2A098b06D83a5bB81E5a58e63",
307
318
  "DAI": "0x0000000000000000000000000000000000000000",
@@ -310,62 +321,62 @@
310
321
  },
311
322
  "test": {
312
323
  "ProxyFactory": "0x36dE29DB57062A583436Ae071e141404dFE2311C",
313
- "NameService": "0x9771321265cAD7049903EaF4a574Eab51fD97378",
314
- "GReputation": "0x8E02433C31B51ABe3Ac65908d59eF82ddB52714F",
315
- "CompoundVotingMachine": "0x289A06513a4C4d9bF7DBD201c01BA2492fe6e03C",
316
- "ClaimersDistribution": "0x426dcD4fa088D7b33797Da0002bF36a669B398D5",
317
- "GovernanceStaking": "0x48D662D1D10505f9bf25c993f30c40118A37E7a2",
318
- "UBIScheme": "0x53E447841DD116a640b1983873601Ade94388702",
319
- "ProtocolUpgradeFuse": "0x81B2b28442e743954C8678b0d2e4be396976F561",
324
+ "NameService": "0xAd8C024cE4E90D0bf00eD29f441581F6FDE54C34",
325
+ "GReputation": "0x80073051B408D4011221634c7fe464d16Eef4eb5",
326
+ "CompoundVotingMachine": "0xFA18ab3DD023DAFB2cEB6cb0507557b26362180E",
327
+ "ClaimersDistribution": "0x065A4F59bEE2Eaca8a73Ca4eD84CA0aB288b5BdD",
328
+ "GovernanceStaking": "0xcFa693a6B5d8399b771582afF07B5a8f55D75d40",
329
+ "UBIScheme": "0x4dd4301DB4461EbD0ac859fFFCc90531EBaC5D75",
330
+ "ProtocolUpgradeFuse": "0xAf49e224e71AF966D5367E6c8DED0CF7FcD110d0",
320
331
  "network": "test",
321
332
  "networkId": 4447,
322
- "HomeBridge": "0x8B8776BEDB1eD89Ab6BD2388bCbef3C579ca53b9",
323
- "OneTimePayments": "0x2Cd63cc1Ff41E263c5E1493C078E2cEDd6c8f018",
324
- "AdminWallet": "0xd3aF095DE5D1419ADabE47a48d6110e37236A97F",
325
- "Identity": "0xFE0730c6426b87BEBE9bf73474B1310F93617822",
326
- "GoodDollar": "0xa3c6564C8f95fb3Fee1F753C93505cD5E4529EDC",
327
- "Controller": "0x0354A1E121ce60B9f7d4754D250a85adb974a1BC",
328
- "Avatar": "0xa128F2383D46E06b248640848D4FD10ab372A6A0",
329
- "FirstClaimPool": "0x50D0F8Fe8b59878706A7bC0288c960255d55867b",
330
- "BancorFormula": "0x570ADc5880D778aE5935f199aa590091586CDf75",
331
- "DAI": "0x79613D7834Ad35EE8dC3F9298030eaADc2A8c250",
332
- "cDAI": "0x743F3Ae880D7357690b5ff6C5f16110d9294F352",
333
- "COMP": "0x6f3203B069cfb6e408ddFa6040d3FD1f26C22F48"
333
+ "HomeBridge": "0xc90C13734D20e27904dF248FB850f50C81CE3642",
334
+ "OneTimePayments": "0x4D5D3FaE9b08a4FA2aEB9Bc0d86E3dB3b3126438",
335
+ "AdminWallet": "0x65E001B67f1aD28FF337C4F6e1cA52F31F5Eb9Fd",
336
+ "Identity": "0x473A31861aB89d5D7a78E7efc57ad31d84ED5343",
337
+ "GoodDollar": "0x040F0292f908c83BdEcCAE7600344503F2a20691",
338
+ "Controller": "0x75B282FdEaEce36C6E9363F30010058c284D9199",
339
+ "Avatar": "0xB3cbA81d4ce278661E26E2107936A014efc31343",
340
+ "FirstClaimPool": "0xd3aF095DE5D1419ADabE47a48d6110e37236A97F",
341
+ "BancorFormula": "0x0d6e43d4d7944408d9a5A10BC57B4348d61cD764",
342
+ "DAI": "0xB3a1e45D60f9394bC4327f5Dc46dB56D8a3c3688",
343
+ "cDAI": "0x1f720E7952650ED8Ca142feBD52aCBe8b7A21741",
344
+ "COMP": "0xD83C9f1B0DaFb1992eF92ac62D6509e54AD4eD48"
334
345
  },
335
346
  "test-mainnet": {
336
347
  "ProxyFactory": "0xce17442a9e26bcFDFAb2e9028e3A655d046f1654",
337
- "NameService": "0xBcA21A2e4c0b2Dc1279a282E6e6d8FaC8d88adAd",
338
- "GReputation": "0x607c2d79E406a5DC2D1E01b6820dd5a72FbA58C7",
339
- "CompoundVotingMachine": "0x35BDA1D4f4E4D397d5b81a8cdc7fE183b98F537C",
340
- "GoodMarketMaker": "0xfC3035f60A3d862E0753eA3D2Eec7679227E8B37",
341
- "GoodReserveCDai": "0x25e67aedBA8aCe016Dd4573df46c50E4F8a97497",
342
- "ExchangeHelper": "0x8a5592b0E95767886642269AEb0B7A80dAa22c8f",
343
- "GoodFundManager": "0xD7F61C5979BBc9d50B30e7459945726670FFdeA3",
344
- "StakersDistribution": "0xA3BfB8850644482cFdBB5eF8a7Fcc666f71565fb",
345
- "ProtocolUpgrade": "0xcFa693a6B5d8399b771582afF07B5a8f55D75d40",
346
- "UniswapV2SwapHelper": "0x5200ff0ce8965Ac565DA4dE9D56CCAdAd995136c",
347
- "CompoundStakingFactory": "0x9D76393e381FE089950c5bFbDD603f033BfB08c2",
348
- "AaveStakingFactory": "0xAf49e224e71AF966D5367E6c8DED0CF7FcD110d0",
348
+ "NameService": "0x55125Ed5fa29594A8DbD7D0fB186888537B9c140",
349
+ "GReputation": "0x7235eC3c7b450eE36De0141b205d89D08C5de5fE",
350
+ "CompoundVotingMachine": "0xE8A10EA2E8764EB25684A2974913dDAbFefA4494",
351
+ "GoodMarketMaker": "0xF4eD16cBD64f07230C5bc9667357cE1D161DF894",
352
+ "GoodReserveCDai": "0x1bEA43626e0b6Afe157FBD1398093359261bB53e",
353
+ "ExchangeHelper": "0x6fad49b578CbF1d8F21b6dF17ccBB5d409Fb6BC8",
354
+ "GoodFundManager": "0x7963849A738719BE64c669c8Ce5613A6331C8caC",
355
+ "StakersDistribution": "0x5c73Ed454acB4467C0a35264D7a455C607FcE1bA",
356
+ "ProtocolUpgrade": "0x9c15162c1f7f01C64c0e068f2E48D39Cd7b18f86",
357
+ "UniswapV2SwapHelper": "0x39683C5c01B4a875FA7d4f5766D2Df521Fc0b4AD",
358
+ "CompoundStakingFactory": "0x712e1b726F6149C768fff8572CeA0Bdba23a561B",
359
+ "AaveStakingFactory": "0x36c7b0946e701EA6cE8e101B4C959FF15D0DeE15",
349
360
  "network": "test-mainnet",
350
361
  "networkId": 4447,
351
- "ForeignBridge": "0x0018b7506e118c97E54d4FFebcef808ca785bA01",
352
- "Contribution": "0x24ef01de6baE76eE73Da210940A296F739d87952",
362
+ "ForeignBridge": "0x9F95c870a4104603630CBEDBbbd56c6465Cc8A58",
363
+ "Contribution": "0x770ace66dd84B035F71FfC977448032EE688604d",
353
364
  "StakingContracts": [
354
365
  [
355
- "0x34ae8025E7123bee3d17033417CabFfD2d04282A",
366
+ "0xb440419193c65B52e68a819BBe11Bd770Bf93B33",
356
367
  13888
357
368
  ]
358
369
  ],
359
- "DonationsStaking": "0xd060c65cA125d9209Ea703136526d6fc3805c833",
360
- "Identity": "0xc47EF4D1d3C2e18c02B2163A8dAB2F5B5099C3Ff",
361
- "GoodDollar": "0x89abe81E6FC0eFc94FADdDCc17BBD67EF6F175Bc",
362
- "Controller": "0xf0c16789aB60928725E9c723b3a268288aBF85dc",
363
- "Avatar": "0xF101E14Dcabe2898D4E2e3e1e86481dC36a22580",
364
- "FirstClaimPool": "0x16B293F3E1C995b4ea9938c41006021D9810878B",
365
- "BancorFormula": "0x0b943500AA8A8BbB8992654e57511f1CEfb2BB9f",
366
- "DAI": "0xaF15B6Db0b6220391007701228883BA2f04D04F9",
367
- "cDAI": "0x8DcC7438Ccc3006165783e0fD1C6261CaFC0AA69",
368
- "COMP": "0xb0fA41E2DF531C26dBA0E16D514381A816Aa2554"
370
+ "DonationsStaking": "0x4e21A8F1d5C27C3A99b2781E1aB215f6a75A0122",
371
+ "Identity": "0x66a2BECe75FCE45ddFe2C06216CE9350a4c46498",
372
+ "GoodDollar": "0x53DE0F59992D932020ad00CF4ABEe89051F8961d",
373
+ "Controller": "0x86851c91c15A49Ba4a9Cc9859f2d84C47b7aD91d",
374
+ "Avatar": "0xB8FC6cFAb3E190e648aac2d7aB69d466f3674bDB",
375
+ "FirstClaimPool": "0x59E0b0C67a8f14BE8C5855C95CdD2ba95a7f2BbB",
376
+ "BancorFormula": "0x1aaaD333A7d363a8576779B71BF589580cC9D82E",
377
+ "DAI": "0x63766F0efAa46a86E9055bB46e41ff7bc64CBEA2",
378
+ "cDAI": "0x24ef01de6baE76eE73Da210940A296F739d87952",
379
+ "COMP": "0x3C3297C2Be0F0C51b604dC0A798cF610d7406De2"
369
380
  },
370
381
  "production": {
371
382
  "ProxyFactory": "0x4659176E962763e7C8A4eF965ecfD0fdf9f52057",