@gooddollar/goodprotocol 1.0.8 → 1.0.11

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 (123) 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/GReputation.sol/GReputation.dbg.json +1 -1
  31. package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
  32. package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
  33. package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
  34. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
  35. package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
  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/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +6 -6
  41. package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
  42. package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
  43. package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
  44. package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
  45. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
  46. package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
  47. package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
  48. package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
  49. package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
  50. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
  51. package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
  52. package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
  53. package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
  54. package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
  55. package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
  56. package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
  57. package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
  58. package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
  59. package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
  60. package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
  61. package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
  62. package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
  63. package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
  64. package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
  65. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +4 -0
  66. package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +200 -0
  67. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
  68. package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
  69. package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
  70. package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
  71. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +4 -0
  72. package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.json +958 -0
  73. package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
  74. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
  75. package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +65 -12
  76. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
  77. package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +4 -4
  78. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +4 -0
  79. package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +1149 -0
  80. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
  81. package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +57 -14
  82. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
  83. package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +6 -6
  84. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +4 -0
  85. package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +1092 -0
  86. package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
  87. package/artifacts/contracts/unaudited-foundation/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
  88. package/artifacts/contracts/unaudited-foundation/InvitesV1.sol/InvitesV1.dbg.json +1 -1
  89. package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
  90. package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
  91. package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
  92. package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
  93. package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
  94. package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
  95. package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
  96. package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
  97. package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
  98. package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
  99. package/contracts/staking/BaseShareFieldV2.sol +343 -0
  100. package/contracts/staking/SimpleStaking.sol +0 -7
  101. package/contracts/staking/SimpleStakingV2.sol +488 -0
  102. package/contracts/staking/aave/AaveStakingFactory.sol +45 -19
  103. package/contracts/staking/aave/GoodAaveStaking.sol +1 -1
  104. package/contracts/staking/aave/GoodAaveStakingV2.sol +263 -0
  105. package/contracts/staking/compound/CompoundStakingFactory.sol +41 -18
  106. package/contracts/staking/compound/GoodCompoundStaking.sol +1 -1
  107. package/contracts/staking/compound/GoodCompoundStakingV2.sol +315 -0
  108. package/package.json +1 -1
  109. package/releases/deployment.json +55 -47
  110. package/scripts/deployFullDAO.ts +1 -1
  111. package/scripts/upgradeToV2/upgradeToV2.ts +7 -3
  112. package/test/governance/StakersDistribution.test.ts +43 -14
  113. package/test/helpers.ts +6 -1
  114. package/test/staking/CompoundStakingFactory.test.ts +24 -21
  115. package/test/staking/DifferentStakingTokens.test.ts +3 -1
  116. package/test/staking/DonationsStaking.test.ts +3 -1
  117. package/test/staking/GoodAaveStakingFactory.test.ts +26 -23
  118. package/test/staking/SimpleDAIStaking.test.ts +3 -11
  119. package/test/staking/StakingRewards.test.ts +20 -14
  120. package/test/staking/SwapHelper.test.ts +4 -1
  121. package/test/staking/UsdcAaveStaking.test.ts +22 -3
  122. package/test/ubi/UBIScheme.e2e.test.ts +1 -1
  123. package/test/utils/ProtocolUpgrade.test.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  import { ethers, upgrades } from "hardhat";
2
2
  import { BigNumber, Contract } from "ethers";
3
3
  import { expect } from "chai";
4
- import { GoodMarketMaker, GoodCompoundStaking } from "../../types";
4
+ import { GoodMarketMaker } from "../../types";
5
5
  import {
6
6
  createDAO,
7
7
  increaseTime,
@@ -56,7 +56,9 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
56
56
  const goodFundManagerFactory = await ethers.getContractFactory(
57
57
  "GoodFundManager"
58
58
  );
59
- goodCompoundStakingFactory = await getStakingFactory("GoodCompoundStaking");
59
+ goodCompoundStakingFactory = await getStakingFactory(
60
+ "GoodCompoundStakingV2"
61
+ );
60
62
  goodCompoundStakingTestFactory = await getStakingFactory(
61
63
  "GoodCompoundStakingTest"
62
64
  );
@@ -307,11 +309,13 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
307
309
  await dai
308
310
  .connect(staker)
309
311
  .approve(goodCompoundStaking.address, stakingAmount);
310
- const totalEffectiveStakesBeforeStake =
311
- await goodCompoundStaking.totalEffectiveStakes();
312
+ const totalEffectiveStakesBeforeStake = await goodCompoundStaking
313
+ .getStats()
314
+ .then(_ => _[3]);
312
315
  await goodCompoundStaking.connect(staker).stake(stakingAmount, 100, false);
313
- const totalEffectiveStakesAfterStake =
314
- await goodCompoundStaking.totalEffectiveStakes();
316
+ const totalEffectiveStakesAfterStake = await goodCompoundStaking
317
+ .getStats()
318
+ .then(_ => _[3]);
315
319
  await goodCompoundStaking
316
320
  .connect(staker)
317
321
  .withdrawStake(stakingAmount, false);
@@ -326,11 +330,13 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
326
330
  await dai
327
331
  .connect(staker)
328
332
  .approve(goodCompoundStaking.address, stakingAmount);
329
- const totalEffectiveStakesBeforeStake =
330
- await goodCompoundStaking.totalEffectiveStakes();
333
+ const totalEffectiveStakesBeforeStake = await goodCompoundStaking
334
+ .getStats()
335
+ .then(_ => _[3]);
331
336
  await goodCompoundStaking.connect(staker).stake(stakingAmount, 0, false);
332
- const totalEffectiveStakesAfterStake =
333
- await goodCompoundStaking.totalEffectiveStakes();
337
+ const totalEffectiveStakesAfterStake = await goodCompoundStaking
338
+ .getStats()
339
+ .then(_ => _[3]);
334
340
  await goodCompoundStaking
335
341
  .connect(staker)
336
342
  .withdrawStake(stakingAmount, false);
@@ -1452,7 +1458,7 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
1452
1458
  expect(activeContractsCount).to.be.equal(activeContractsCountAfterRemoved);
1453
1459
  });
1454
1460
  it("it should distribute rewards correctly when there is multiple stakers", async () => {
1455
- const simpleStaking1 = (await goodCompoundStakingTestFactory.deploy(
1461
+ const simpleStaking1 = await goodCompoundStakingTestFactory.deploy(
1456
1462
  bat.address,
1457
1463
  cBat.address,
1458
1464
  nameService.address,
@@ -1462,7 +1468,7 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
1462
1468
  batUsdOracle.address,
1463
1469
  compUsdOracle.address,
1464
1470
  [bat.address, dai.address]
1465
- )) as GoodCompoundStaking;
1471
+ );
1466
1472
  const currentBlock = await ethers.provider.getBlockNumber();
1467
1473
  const rewardsPerBlock = BN.from("1000");
1468
1474
  let encodedData = goodFundManager.interface.encodeFunctionData(
@@ -1624,7 +1630,7 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
1624
1630
  await genericCall(goodFundManager.address, encodedData, avatar, 0);
1625
1631
  });
1626
1632
  it("it should get staking reward even reward amount is too low", async () => {
1627
- const simpleStaking1 = (await goodCompoundStakingTestFactory.deploy(
1633
+ const simpleStaking1 = await goodCompoundStakingTestFactory.deploy(
1628
1634
  bat.address,
1629
1635
  cBat.address,
1630
1636
  nameService.address,
@@ -1634,7 +1640,7 @@ describe("StakingRewards - staking with cDAI mocks and get Rewards in GoodDollar
1634
1640
  batUsdOracle.address,
1635
1641
  compUsdOracle.address,
1636
1642
  [bat.address, dai.address]
1637
- )) as GoodCompoundStaking;
1643
+ );
1638
1644
 
1639
1645
  const currentBlock = await ethers.provider.getBlockNumber();
1640
1646
  const rewardsPerBlock = BN.from("100");
@@ -46,7 +46,9 @@ describe("SwapHelper - Helper library for swap on the Uniswap", () => {
46
46
  const swapHelperTestFactory = await ethers.getContractFactory(
47
47
  "SwapHelperTest"
48
48
  );
49
- goodCompoundStakingFactory = await getStakingFactory("GoodCompoundStaking");
49
+ goodCompoundStakingFactory = await getStakingFactory(
50
+ "GoodCompoundStakingV2"
51
+ );
50
52
  goodCompoundStakingTestFactory = await getStakingFactory(
51
53
  "GoodCompoundStakingTest"
52
54
  );
@@ -210,6 +212,7 @@ describe("SwapHelper - Helper library for swap on the Uniswap", () => {
210
212
  ["100", simpleStaking.address, 0, 10000, true]
211
213
  );
212
214
  await genericCall(goodFundManager.address, encodedData, avatar, 0);
215
+ console.log({ redeemedAmount, safeAmount });
213
216
  expect(reserve[0].sub(currentReserve[0])).to.be.lt(currentGains[1]);
214
217
  expect(currentReserve[0].sub(reserve[0])).to.be.equal(redeemedAmount);
215
218
  });
@@ -8,7 +8,7 @@ import { createDAO, deployUniswap, getStakingFactory } from "../helpers";
8
8
  const BN = ethers.BigNumber;
9
9
  export const NULL_ADDRESS = ethers.constants.AddressZero;
10
10
 
11
- describe("UsdcAaveStaking - staking with USDC mocks to AAVE interface", () => {
11
+ describe("UsdcAaveStakingV2 - staking with USDC mocks to AAVE interface", () => {
12
12
  let dai: Contract;
13
13
  let usdc: Contract;
14
14
  let pair: Contract, uniswapRouter: Contract;
@@ -38,7 +38,7 @@ describe("UsdcAaveStaking - staking with USDC mocks to AAVE interface", () => {
38
38
  const goodFundManagerFactory = await ethers.getContractFactory(
39
39
  "GoodFundManager"
40
40
  );
41
- goodAaveStakingFactory = await getStakingFactory("GoodAaveStaking");
41
+ goodAaveStakingFactory = await getStakingFactory("GoodAaveStakingV2");
42
42
 
43
43
  const lendingPoolFactory = await ethers.getContractFactory(
44
44
  "LendingPoolMock"
@@ -237,8 +237,9 @@ describe("UsdcAaveStaking - staking with USDC mocks to AAVE interface", () => {
237
237
  expect(gdBalanceAfterCollectInterest.gt(gdBalanceBeforeCollectInterest));
238
238
  });
239
239
 
240
- it("it should collectRewards while collecting interest from aToken if there some earned reward as stkAAVE", async () => {
240
+ it("it should collect stkAAVE to Avatar when collecting interest", async () => {
241
241
  const stakingAmount = ethers.utils.parseUnits("100", 6);
242
+ const avatarBalance = await aave.balanceOf(avatar);
242
243
  await goodAaveStaking.stake(stakingAmount, "0", false);
243
244
  const currentGainsAfterStake = await goodAaveStaking.currentGains(
244
245
  false,
@@ -275,6 +276,24 @@ describe("UsdcAaveStaking - staking with USDC mocks to AAVE interface", () => {
275
276
  );
276
277
  expect(currentGainsAfterEarnRewards[4]).to.be.equal(0); // stkAAVE rewards shouldnt count as gain
277
278
  expect(currentGainsAfterCollectInterest[4]).to.be.equal("0");
279
+ expect(await aave.balanceOf(avatar)).gt(avatarBalance);
280
+ });
281
+
282
+ it("should be able to transfer staked tokens", async () => {
283
+ const stakingAmount = ethers.utils.parseUnits("100", 6);
284
+
285
+ await goodAaveStaking.connect(staker).stake(stakingAmount, 0, false);
286
+
287
+ await lendingPool.giveInterestToUser("1500", goodAaveStaking.address); // increase interest by calling giveInterestToUser
288
+
289
+ await expect(
290
+ goodAaveStaking
291
+ .connect(staker)
292
+ .transfer(signers[0].address, stakingAmount)
293
+ ).not.reverted;
294
+ expect(await goodAaveStaking.balanceOf(signers[0].address)).to.eq(
295
+ stakingAmount
296
+ );
278
297
  });
279
298
  async function addLiquidity(
280
299
  token0: Contract,
@@ -83,7 +83,7 @@ describe("UBIScheme - network e2e tests", () => {
83
83
  "GoodFundManager"
84
84
  );
85
85
  const goodCompoundStakingFactory = await getStakingFactory(
86
- "GoodCompoundStaking"
86
+ "GoodCompoundStakingV2"
87
87
  );
88
88
  const deployedDAO = await createDAO();
89
89
  let {
@@ -197,7 +197,7 @@ describe("ProtocolUpgrade - Upgrade old protocol contracts to new ones", () => {
197
197
  deployment["test-mainnet"].GoodReserveCDai
198
198
  );
199
199
  newStakingContract = await ethers.getContractAt(
200
- "GoodCompoundStaking",
200
+ "GoodCompoundStakingV2",
201
201
  deployment["test-mainnet"].StakingContracts[0][0]
202
202
  );
203
203
  stakingAmountOfNewDonationStaking =