@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.
- package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.json +62 -4
- package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.json +17 -17
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +6 -6
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
- package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +4 -0
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +256 -0
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +4 -0
- package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.json +1033 -0
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +3 -3
- package/artifacts/contracts/staking/aave/AaveStakingFactoryV2.sol/AaveStakingFactoryV2.dbg.json +4 -0
- package/artifacts/contracts/staking/aave/AaveStakingFactoryV2.sol/AaveStakingFactoryV2.json +148 -0
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +4 -4
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +4 -0
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +1224 -0
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +4 -4
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
- package/artifacts/contracts/unaudited-foundation/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
- package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.dbg.json +1 -1
- package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
- package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
- package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
- package/contracts/governance/GReputation.sol +53 -14
- package/contracts/governance/Reputation.sol +13 -25
- package/contracts/staking/BaseShareFieldV2.sol +319 -0
- package/contracts/staking/SimpleStakingV2.sol +522 -0
- package/contracts/staking/aave/AaveStakingFactoryV2.sol +93 -0
- package/contracts/staking/aave/GoodAaveStaking.sol +4 -3
- package/contracts/staking/aave/GoodAaveStakingV2.sol +263 -0
- package/contracts/staking/compound/GoodCompoundStaking.sol +4 -3
- package/contracts/ubi/UBIScheme.sol +2 -2
- package/package.json +1 -1
- package/releases/deployment.json +108 -97
- package/releases/olddao.json +1 -406
- package/scripts/deployFullDAO.ts +7 -7
- package/scripts/misc/goodgiveback.ts +64 -0
- package/scripts/verify.ts +60 -47
- package/test/governance/ClaimersDistribution.test.ts +5 -5
- package/test/governance/CompoundVotingMachine.castvote.test.ts +1 -1
- package/test/governance/CompoundVotingMachine.daoscheme.ts +1 -1
- package/test/governance/CompoundVotingMachine.guardian.test.ts +1 -1
- package/test/governance/GReputation.test.ts +49 -18
- package/test/governance/GovernanceStaking.test.ts +71 -47
- package/test/governance/Reputation.test.ts +52 -51
- package/test/governance/StakersDistribution.test.ts +12 -8
- package/test/helpers.ts +5 -1
- package/test/staking/GoodAaveStakingFactoryV2.test.ts +122 -0
- package/test/staking/UsdcAaveStaking.test.ts +5 -1
- package/test/staking/UsdcAaveStakingV2.test.ts +291 -0
- 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
|
|
23
|
+
uint32 public collectInterestGasCost;
|
|
24
24
|
// Gas cost to collect COMP rewards
|
|
25
|
-
uint32 public compCollectGasCost
|
|
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
package/releases/deployment.json
CHANGED
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"GoodDollar": "0x79BeecC4b165Ccf547662cB4f7C0e83b3796E5b3",
|
|
133
133
|
"Controller": "0xb453024495525908E6cC1e3C115f4B6B30cc56b9",
|
|
134
134
|
"Avatar": "0x71ddE7b8362724bd65D88Fe29d42636a9F8f9064",
|
|
135
|
-
"HomeBridge": "
|
|
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": "
|
|
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": "
|
|
188
|
-
"GReputation": "
|
|
189
|
-
"CompoundVotingMachine": "
|
|
190
|
-
"ClaimersDistribution": "
|
|
191
|
-
"GovernanceStaking": "
|
|
192
|
-
"UBIScheme": "
|
|
193
|
-
"ProtocolUpgradeFuse": "
|
|
194
|
-
"HomeBridge": "
|
|
195
|
-
"AdminWallet": "
|
|
196
|
-
"Identity": "
|
|
197
|
-
"GoodDollar": "
|
|
198
|
-
"Controller": "
|
|
199
|
-
"Avatar": "
|
|
200
|
-
"FirstClaimPool": "
|
|
201
|
-
"BancorFormula": "
|
|
202
|
-
"DAI": "
|
|
203
|
-
"cDAI": "
|
|
204
|
-
"COMP": "
|
|
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": "
|
|
210
|
-
"GReputation": "
|
|
211
|
-
"CompoundVotingMachine": "
|
|
212
|
-
"GoodMarketMaker": "
|
|
213
|
-
"GoodReserveCDai": "
|
|
214
|
-
"ExchangeHelper": "
|
|
215
|
-
"GoodFundManager": "
|
|
216
|
-
"StakersDistribution": "
|
|
217
|
-
"ProtocolUpgrade": "
|
|
218
|
-
"CompoundStakingFactory": "
|
|
219
|
-
"AaveStakingFactory": "
|
|
220
|
-
"ForeignBridge": "
|
|
221
|
-
"Contribution": "
|
|
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
|
-
"
|
|
229
|
+
"0xc782Ee4B0d6204Ff77471884bB95d2D2f8D60fE6",
|
|
225
230
|
13888
|
|
226
|
-
],
|
|
227
|
-
[
|
|
228
|
-
"0xdc43741637B4Dd5f7f6A3201b6d00A49812Fc4D3",
|
|
229
|
-
"6944"
|
|
230
231
|
]
|
|
231
232
|
],
|
|
232
|
-
"DonationsStaking": "
|
|
233
|
-
"Identity": "
|
|
234
|
-
"GoodDollar": "
|
|
235
|
-
"Controller": "
|
|
236
|
-
"Avatar": "
|
|
237
|
-
"FirstClaimPool": "
|
|
238
|
-
"BancorFormula": "
|
|
239
|
-
"DAI": "
|
|
240
|
-
"cDAI": "
|
|
241
|
-
"COMP": "
|
|
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": "
|
|
272
|
+
"ForeignBridge": "0xF629c80BfCaA9080e229b555924D5c72B47F5C22",
|
|
262
273
|
"Contribution": "0x27816e32270a413AF676A2E3a25dB93C7F565a80",
|
|
263
274
|
"StakingContracts": [
|
|
264
275
|
[
|
|
265
|
-
"
|
|
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": "
|
|
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": "
|
|
314
|
-
"GReputation": "
|
|
315
|
-
"CompoundVotingMachine": "
|
|
316
|
-
"ClaimersDistribution": "
|
|
317
|
-
"GovernanceStaking": "
|
|
318
|
-
"UBIScheme": "
|
|
319
|
-
"ProtocolUpgradeFuse": "
|
|
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": "
|
|
323
|
-
"OneTimePayments": "
|
|
324
|
-
"AdminWallet": "
|
|
325
|
-
"Identity": "
|
|
326
|
-
"GoodDollar": "
|
|
327
|
-
"Controller": "
|
|
328
|
-
"Avatar": "
|
|
329
|
-
"FirstClaimPool": "
|
|
330
|
-
"BancorFormula": "
|
|
331
|
-
"DAI": "
|
|
332
|
-
"cDAI": "
|
|
333
|
-
"COMP": "
|
|
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": "
|
|
338
|
-
"GReputation": "
|
|
339
|
-
"CompoundVotingMachine": "
|
|
340
|
-
"GoodMarketMaker": "
|
|
341
|
-
"GoodReserveCDai": "
|
|
342
|
-
"ExchangeHelper": "
|
|
343
|
-
"GoodFundManager": "
|
|
344
|
-
"StakersDistribution": "
|
|
345
|
-
"ProtocolUpgrade": "
|
|
346
|
-
"UniswapV2SwapHelper": "
|
|
347
|
-
"CompoundStakingFactory": "
|
|
348
|
-
"AaveStakingFactory": "
|
|
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": "
|
|
352
|
-
"Contribution": "
|
|
362
|
+
"ForeignBridge": "0x9F95c870a4104603630CBEDBbbd56c6465Cc8A58",
|
|
363
|
+
"Contribution": "0x770ace66dd84B035F71FfC977448032EE688604d",
|
|
353
364
|
"StakingContracts": [
|
|
354
365
|
[
|
|
355
|
-
"
|
|
366
|
+
"0xb440419193c65B52e68a819BBe11Bd770Bf93B33",
|
|
356
367
|
13888
|
|
357
368
|
]
|
|
358
369
|
],
|
|
359
|
-
"DonationsStaking": "
|
|
360
|
-
"Identity": "
|
|
361
|
-
"GoodDollar": "
|
|
362
|
-
"Controller": "
|
|
363
|
-
"Avatar": "
|
|
364
|
-
"FirstClaimPool": "
|
|
365
|
-
"BancorFormula": "
|
|
366
|
-
"DAI": "
|
|
367
|
-
"cDAI": "
|
|
368
|
-
"COMP": "
|
|
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",
|