@gooddollar/goodprotocol 2.0.21 → 2.0.22-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/abis/ISuperToken.min.json +1 -1
- package/artifacts/abis/SuperGoodDollar.min.json +1 -1
- package/artifacts/abis/SuperToken.min.json +1 -1
- 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/IIdentityV2.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IMultichainRouter.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/fuseFaucet/Faucet.sol/Faucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucet.sol/FuseFaucet.dbg.json +1 -1
- package/artifacts/contracts/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- 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/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/IGovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/IStakingUpgrade.dbg.json +1 -1
- package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +1 -1
- package/artifacts/contracts/governance/GovernanceStaking.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/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
- package/artifacts/contracts/identity/IdentityV2.sol/IdentityV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesFuseV2.sol/InvitesFuseV2.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV1.sol/InvitesV1.dbg.json +1 -1
- package/artifacts/contracts/invite/InvitesV2.sol/InvitesV2.dbg.json +1 -1
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionBridgeMock.sol/DistributionBridgeMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/DistributionHelperTest.sol/DistributionHelperTestHelper.dbg.json +1 -1
- package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/FeesFormularMock.sol/FeesFormulaMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodDollarStakingMock.sol/GoodDollarStakingMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/IdentityMock.sol/IdentityMock.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/MultichainRouterMock.sol/IWrapper.dbg.json +1 -1
- package/artifacts/contracts/mocks/MultichainRouterMock.sol/MultichainRouterMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/IGoodDollarStakingTest.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/PayableMock.sol/PayableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/StakingMockFixedAPY.sol/StakingMockFixedAPY.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/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.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/DistributionHelper.sol/DistributionHelper.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 +1 -1
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/FuseStakingV3.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/IConsensus.dbg.json +1 -1
- package/artifacts/contracts/staking/FuseStakingV3.sol/PegSwap.dbg.json +1 -1
- 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 +1 -1
- 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/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +1 -1
- package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +1 -1
- package/artifacts/contracts/token/ERC20PresetMinterPauserUpgradeable.sol/ERC20PresetMinterPauserUpgradeable.dbg.json +1 -1
- package/artifacts/contracts/token/ERC677.sol/ERC677.dbg.json +1 -1
- package/artifacts/contracts/token/ERC677.sol/ERC677Receiver.dbg.json +1 -1
- package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/IFeesFormula.sol/IFeesFormula.dbg.json +1 -1
- package/artifacts/contracts/token/MultichainFeeFormula.sol/MultichainFeeFormula.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ERC20Permit.sol/ERC20Permit.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ERC20Permit.sol/SelfApprove.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/IGoodDollarCustom.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperGoodDollar.sol/ISuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/ISuperToken.sol/ISuperToken.json +5 -0
- package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +25 -2
- package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.json +7 -2
- package/artifacts/contracts/token/superfluid/SuperfluidToken.sol/SuperfluidToken.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxiable.sol/UUPSProxiable.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/Proxy.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSProxy.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/UUPSProxy.sol/UUPSUtils.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBISchemeV2.sol/UBISchemeV2.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWallet.sol/AdminWallet.dbg.json +1 -1
- package/artifacts/contracts/utils/AdminWalletFuse.sol/AdminWalletFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
- package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyAndBridgeHelper.sol/BuyAndBridgeHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/BuyGDCloneFactory.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/DonateGDClone.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/IQuoterV2.dbg.json +1 -1
- package/artifacts/contracts/utils/BuyGDClone.sol/ISwapRouter.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/GDFaucet.sol/GDFaucet.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +1 -1
- package/artifacts/contracts/utils/IdentityFix.sol/IdentityFix.dbg.json +1 -1
- package/artifacts/contracts/utils/MultiCall.sol/Multicall.dbg.json +1 -1
- package/artifacts/contracts/utils/MultichainBridgeHelper.sol/MultichainBridgeHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePayments.sol/OneTimePayments.dbg.json +1 -1
- package/artifacts/contracts/utils/OneTimePaymentsV2.sol/OneTimePaymentsV2.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/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
- package/contracts/token/superfluid/ISuperToken.sol +1 -0
- package/contracts/token/superfluid/SuperGoodDollar.sol +11 -2
- package/contracts/token/superfluid/SuperToken.sol +8 -0
- package/dist/artifacts/contracts/token/superfluid/SuperGoodDollar.sol/SuperGoodDollar.json +25 -2
- package/hardhat.config.ts +1 -1
- package/package.json +4 -3
- package/scripts/blockchainTestSetup.sh +1 -1
- package/test/faucet/Faucet.test.ts +63 -19
- package/test/faucet/FuseFaucet.test.ts +43 -14
- package/test/governance/ClaimersDistribution.test.ts +3 -3
- package/test/governance/CompoundVotingMachine.castvote.test.ts +3 -6
- package/test/governance/CompoundVotingMachine.crossblockchain.ts +2 -2
- package/test/governance/CompoundVotingMachine.daoscheme.ts +1 -1
- package/test/governance/CompoundVotingMachine.guardian.test.ts +4 -4
- package/test/governance/CompoundVotingMachine.propose.test.ts +8 -8
- package/test/governance/CompoundVotingMachine.state.test.ts +4 -4
- package/test/governance/GReputation.test.ts +6 -6
- package/test/governance/GoodDollarStaking.gd.test.ts +44 -71
- package/test/governance/GoodDollarStaking.good.test.ts +52 -73
- package/test/governance/GovernanceStaking.test.ts +1 -1
- package/test/governance/Reputation.test.ts +2 -2
- package/test/helpers.ts +1 -1
- package/test/identity/IdentityV2.test.ts +12 -12
- package/test/invite/InvitesV1.test.ts +6 -6
- package/test/invite/InvitesV2.test.ts +272 -81
- package/test/reserve/DistributionHelper.test.ts +232 -139
- package/test/reserve/GoodMarketMaker.test.ts +17 -17
- package/test/reserve/GoodReserveCDai.cap.test.ts +4 -4
- package/test/reserve/GoodReserveCDai.distribution.test.ts +64 -42
- package/test/reserve/GoodReserveCDai.gdx.test.ts +1 -1
- package/test/reserve/GoodReserveCDai.pause.test.ts +8 -8
- package/test/reserve/GoodReserveCDai.test.ts +307 -101
- package/test/reserve/GoodReserveCDai.uniswap.test.ts +1 -1
- package/test/staking/DonationsStaking.test.ts +2 -2
- package/test/staking/FuseStaking.test.ts +3 -3
- package/test/staking/GoodAaveStakingFactory.test.ts +2 -2
- package/test/staking/StakingRewards.test.ts +913 -320
- package/test/staking/StakingRewardsFixedAPY.test.ts +62 -66
- package/test/token/CeloGasToken.test.ts +2 -2
- package/test/token/GoodDollar.test.ts +5 -5
- package/test/token/SuperGoodDollar.test.ts +17 -13
- package/test/ubi/UBIScheme.test.ts +1 -1
- package/test/utils/AdminWallet.test.ts +10 -10
- package/test/utils/BuyAndBridgeHelper.test.ts +33 -9
- package/test/utils/GoodDollarMintBurnWrapper.test.ts +265 -113
- package/test/utils/NameService.test.ts +1 -1
- package/test/utils/ProxyFactory.test.ts +2 -2
- package/types/contracts/token/superfluid/SuperGoodDollar.ts +26 -0
- package/types/factories/contracts/token/superfluid/ISuperToken__factory.ts +5 -0
- package/types/factories/contracts/token/superfluid/SuperGoodDollar__factory.ts +24 -1
- package/types/factories/contracts/token/superfluid/SuperToken__factory.ts +6 -1
- package/yarn.lock +635 -253
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { default as hre, ethers, upgrades
|
|
1
|
+
import { default as hre, ethers, upgrades } from "hardhat";
|
|
2
2
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
|
3
3
|
import { Contract, Signer } from "ethers";
|
|
4
4
|
import { expect } from "chai";
|
|
@@ -104,10 +104,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
const fixture_staked1year = async (wallets, provider) => {
|
|
107
|
-
const { staking, goodDollarMintBurnWrapper } = await fixture_ready(
|
|
108
|
-
wallets,
|
|
109
|
-
provider
|
|
110
|
-
);
|
|
107
|
+
const { staking, goodDollarMintBurnWrapper } = await fixture_ready();
|
|
111
108
|
|
|
112
109
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
113
110
|
await advanceBlocks(BLOCKS_ONE_YEAR);
|
|
@@ -115,20 +112,13 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
115
112
|
return { staking, goodDollarMintBurnWrapper };
|
|
116
113
|
};
|
|
117
114
|
|
|
118
|
-
const fixture_ready = async (
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
abi: JSON.parse(
|
|
126
|
-
f.interface.format(FormatTypes.json) as string
|
|
127
|
-
) as any[],
|
|
128
|
-
bytecode: f.bytecode
|
|
129
|
-
},
|
|
130
|
-
[nameService.address, BN.from("1000000007735630000"), 518400 * 12, 30]
|
|
131
|
-
)) as GoodDollarStaking;
|
|
115
|
+
const fixture_ready = async () => {
|
|
116
|
+
const staking = (await ethers.deployContract("GoodDollarStakingMock", [
|
|
117
|
+
nameService.address,
|
|
118
|
+
BN.from("1000000007735630000"),
|
|
119
|
+
518400 * 12,
|
|
120
|
+
30
|
|
121
|
+
])) as GoodDollarStaking;
|
|
132
122
|
|
|
133
123
|
await staking.upgrade();
|
|
134
124
|
|
|
@@ -168,32 +158,17 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
168
158
|
return { staking: staking.connect(staker1), goodDollarMintBurnWrapper };
|
|
169
159
|
};
|
|
170
160
|
|
|
171
|
-
const fixture_upgradeTest = async (
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
bytecode: f.bytecode
|
|
183
|
-
},
|
|
184
|
-
[nameService.address, BN.from("1000000007735630000"), 518400 * 12, 30]
|
|
185
|
-
)) as GoodDollarStaking;
|
|
186
|
-
|
|
187
|
-
const govStaking = (await waffle.deployContract(
|
|
188
|
-
wallets[0],
|
|
189
|
-
{
|
|
190
|
-
abi: JSON.parse(
|
|
191
|
-
gf.interface.format(FormatTypes.json) as string
|
|
192
|
-
) as any[],
|
|
193
|
-
bytecode: gf.bytecode
|
|
194
|
-
},
|
|
195
|
-
[nameService.address]
|
|
196
|
-
)) as GovernanceStaking;
|
|
161
|
+
const fixture_upgradeTest = async () => {
|
|
162
|
+
const staking = (await ethers.deployContract("GoodDollarStaking", [
|
|
163
|
+
nameService.address,
|
|
164
|
+
BN.from("1000000007735630000"),
|
|
165
|
+
518400 * 12,
|
|
166
|
+
30
|
|
167
|
+
])) as GoodDollarStaking;
|
|
168
|
+
|
|
169
|
+
const govStaking = (await ethers.deployContract("GovernanceStaking", [
|
|
170
|
+
nameService.address
|
|
171
|
+
])) as GovernanceStaking;
|
|
197
172
|
|
|
198
173
|
await setDAOAddress("GDAO_STAKING", govStaking.address);
|
|
199
174
|
|
|
@@ -203,7 +178,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
203
178
|
};
|
|
204
179
|
|
|
205
180
|
it("should update stakingrewardsfixedapy staker info and global stats when staking", async () => {
|
|
206
|
-
const { staking } = await
|
|
181
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
207
182
|
const statsBefore = await staking.stats();
|
|
208
183
|
const PRECISION = await staking.PRECISION();
|
|
209
184
|
|
|
@@ -229,7 +204,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
229
204
|
});
|
|
230
205
|
|
|
231
206
|
it("should withdraw only rewards when calling withdrawRewards", async () => {
|
|
232
|
-
const { staking } = await
|
|
207
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
233
208
|
|
|
234
209
|
// collect 350 earned rewards: 10,000 * 5%APY = 500 total rewards, minus 30% donation
|
|
235
210
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
@@ -252,7 +227,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
252
227
|
});
|
|
253
228
|
|
|
254
229
|
it("should withdraw from deposit and undo rewards if unable to mint rewards", async () => {
|
|
255
|
-
const { staking, goodDollarMintBurnWrapper } = await
|
|
230
|
+
const { staking, goodDollarMintBurnWrapper } = await loadFixture(
|
|
256
231
|
fixture_ready
|
|
257
232
|
);
|
|
258
233
|
const PAUSE_ALL_ROLE = await goodDollarMintBurnWrapper.PAUSE_ALL_ROLE();
|
|
@@ -287,7 +262,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
287
262
|
});
|
|
288
263
|
|
|
289
264
|
it("should withdraw rewards after mint rewards is enabled again", async () => {
|
|
290
|
-
const { staking, goodDollarMintBurnWrapper } = await
|
|
265
|
+
const { staking, goodDollarMintBurnWrapper } = await loadFixture(
|
|
291
266
|
fixture_ready
|
|
292
267
|
);
|
|
293
268
|
const PAUSE_ALL_ROLE = await goodDollarMintBurnWrapper.PAUSE_ALL_ROLE();
|
|
@@ -326,18 +301,16 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
326
301
|
518400 * 12,
|
|
327
302
|
61
|
|
328
303
|
)
|
|
329
|
-
).revertedWith(
|
|
304
|
+
).revertedWith(/max two/);
|
|
330
305
|
});
|
|
331
306
|
|
|
332
307
|
it("should not perform upgrade when not deadline", async () => {
|
|
333
|
-
const { staking } = await
|
|
334
|
-
await expect(staking.upgrade()).to.revertedWith(
|
|
308
|
+
const { staking } = await loadFixture(fixture_upgradeTest);
|
|
309
|
+
await expect(staking.upgrade()).to.revertedWith(/deadline/);
|
|
335
310
|
});
|
|
336
311
|
|
|
337
312
|
it("should perform upgrade after deadline", async () => {
|
|
338
|
-
const { staking, govStaking } = await
|
|
339
|
-
fixture_upgradeTest
|
|
340
|
-
);
|
|
313
|
+
const { staking, govStaking } = await loadFixture(fixture_upgradeTest);
|
|
341
314
|
|
|
342
315
|
const gdaoStakingBefore = await nameService.getAddress("GDAO_STAKING");
|
|
343
316
|
|
|
@@ -362,7 +335,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
362
335
|
});
|
|
363
336
|
|
|
364
337
|
it("should set APY and change getRewardsPerBlock only by avatar", async () => {
|
|
365
|
-
const { staking } = await
|
|
338
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
366
339
|
|
|
367
340
|
const [, gdRewardsPerBlockBeforeSet] = await staking.getRewardsPerBlock();
|
|
368
341
|
expect(gdRewardsPerBlockBeforeSet.add(1)).to.equal(INTEREST_RATE_5APY_X64);
|
|
@@ -383,7 +356,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
383
356
|
});
|
|
384
357
|
|
|
385
358
|
it("should be pausable by avatar", async () => {
|
|
386
|
-
const { staking } = await
|
|
359
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
387
360
|
|
|
388
361
|
await runAsAvatarOnly(staking, "pause(bool,uint128)", true, "0");
|
|
389
362
|
expect(await staking.paused()).to.equal(true);
|
|
@@ -402,14 +375,14 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
402
375
|
});
|
|
403
376
|
|
|
404
377
|
it("should not be able to stake when paused", async () => {
|
|
405
|
-
const { staking } = await
|
|
378
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
406
379
|
|
|
407
380
|
await runAsAvatarOnly(staking, "pause(bool,uint128)", true, "0");
|
|
408
|
-
await expect(stake(staker2, "1000", staking)).to.revertedWith(
|
|
381
|
+
await expect(stake(staker2, "1000", staking)).to.revertedWith(/pause/);
|
|
409
382
|
});
|
|
410
383
|
|
|
411
384
|
it("should have max yearly apy of 20%", async () => {
|
|
412
|
-
const { staking } = await
|
|
385
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
413
386
|
|
|
414
387
|
await runAsAvatarOnly(staking, "setGdApy(uint128)", "1000000029000000000");
|
|
415
388
|
|
|
@@ -424,7 +397,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
424
397
|
});
|
|
425
398
|
|
|
426
399
|
it("should handle stakingrewardsfixed apy correctly when transfering staking tokens to new staker", async () => {
|
|
427
|
-
const { staking } = await
|
|
400
|
+
const { staking } = await loadFixture(fixture_staked1year);
|
|
428
401
|
|
|
429
402
|
const RECEIVER_STAKE = 10000;
|
|
430
403
|
const receiver = staker2;
|
|
@@ -480,7 +453,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
480
453
|
});
|
|
481
454
|
|
|
482
455
|
it("should be able to stake using onTokenTransfer", async () => {
|
|
483
|
-
const { staking, goodDollarMintBurnWrapper } = await
|
|
456
|
+
const { staking, goodDollarMintBurnWrapper } = await loadFixture(
|
|
484
457
|
fixture_ready
|
|
485
458
|
);
|
|
486
459
|
|
|
@@ -499,7 +472,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
499
472
|
});
|
|
500
473
|
|
|
501
474
|
it("should asure getStaked returns correct value", async () => {
|
|
502
|
-
const { staking } = await
|
|
475
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
503
476
|
|
|
504
477
|
// correct after stake
|
|
505
478
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
@@ -522,7 +495,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
522
495
|
});
|
|
523
496
|
|
|
524
497
|
it("it should return getUserPendingReward G$ value equal to earned() rewards after donation", async () => {
|
|
525
|
-
const { staking } = await
|
|
498
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
526
499
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
527
500
|
await advanceBlocks(BLOCKS_ONE_YEAR);
|
|
528
501
|
|
|
@@ -537,7 +510,7 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
537
510
|
});
|
|
538
511
|
|
|
539
512
|
it("should return G$ totalRewardsPerShare equal sharePrice()", async () => {
|
|
540
|
-
const { staking } = await
|
|
513
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
541
514
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
542
515
|
await advanceBlocks(BLOCKS_ONE_YEAR);
|
|
543
516
|
const stats = await staking.stats();
|
|
@@ -559,18 +532,18 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
559
532
|
});
|
|
560
533
|
|
|
561
534
|
it("it should not upgrade if no balance or target is not approved by dao", async () => {
|
|
562
|
-
const { staking } = await
|
|
535
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
563
536
|
await expect(
|
|
564
537
|
staking.connect(staker1).upgradeTo(signers[10].address)
|
|
565
|
-
).revertedWith(
|
|
538
|
+
).revertedWith(/no balance/);
|
|
566
539
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
567
540
|
await expect(
|
|
568
541
|
staking.connect(staker1).upgradeTo(signers[10].address)
|
|
569
|
-
).revertedWith(
|
|
542
|
+
).revertedWith(/not DAO approved/);
|
|
570
543
|
});
|
|
571
544
|
|
|
572
545
|
it("it should not upgrade if cant mint rewards", async () => {
|
|
573
|
-
const { staking, goodDollarMintBurnWrapper } = await
|
|
546
|
+
const { staking, goodDollarMintBurnWrapper } = await loadFixture(
|
|
574
547
|
fixture_ready
|
|
575
548
|
);
|
|
576
549
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
@@ -600,11 +573,11 @@ describe("GoodDollarStaking - check fixed APY G$ rewards", () => {
|
|
|
600
573
|
|
|
601
574
|
await expect(
|
|
602
575
|
staking.connect(staker1).upgradeTo(signers[10].address)
|
|
603
|
-
).revertedWith(
|
|
576
|
+
).revertedWith(/unable to mint rewards/);
|
|
604
577
|
});
|
|
605
578
|
|
|
606
579
|
it("it should upgrade and transfer funds to new staking contract", async () => {
|
|
607
|
-
const { staking, goodDollarMintBurnWrapper } = await
|
|
580
|
+
const { staking, goodDollarMintBurnWrapper } = await loadFixture(
|
|
608
581
|
fixture_ready
|
|
609
582
|
);
|
|
610
583
|
await stake(staker1, STAKE_AMOUNT, staking);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { default as hre, ethers
|
|
1
|
+
import { default as hre, ethers } from "hardhat";
|
|
2
2
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
|
3
3
|
import { BigNumber, Contract, Signer } from "ethers";
|
|
4
4
|
import { expect } from "chai";
|
|
@@ -70,40 +70,26 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
70
70
|
// await goodReserve.setAddresses();
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
-
const fixture = async (
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
abi: JSON.parse(
|
|
81
|
-
f.interface.format(FormatTypes.json) as string
|
|
82
|
-
) as any[],
|
|
83
|
-
bytecode: f.bytecode
|
|
84
|
-
},
|
|
85
|
-
[nameService.address, BN.from("1000000007735630000"), 518400 * 12, 30]
|
|
86
|
-
)) as GoodDollarStaking;
|
|
73
|
+
const fixture = async () => {
|
|
74
|
+
const staking = (await ethers.deployContract("GoodDollarStakingMock", [
|
|
75
|
+
nameService.address,
|
|
76
|
+
BN.from("1000000007735630000"),
|
|
77
|
+
518400 * 12,
|
|
78
|
+
30
|
|
79
|
+
])) as GoodDollarStaking;
|
|
87
80
|
|
|
88
81
|
await staking.upgrade();
|
|
89
82
|
|
|
90
83
|
return { staking };
|
|
91
84
|
};
|
|
92
85
|
|
|
93
|
-
const fixture_ready = async (
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
abi: JSON.parse(
|
|
101
|
-
f.interface.format(FormatTypes.json) as string
|
|
102
|
-
) as any[],
|
|
103
|
-
bytecode: f.bytecode
|
|
104
|
-
},
|
|
105
|
-
[nameService.address, BN.from("1000000007735630000"), 518400 * 12, 30]
|
|
106
|
-
)) as GoodDollarStaking;
|
|
86
|
+
const fixture_ready = async () => {
|
|
87
|
+
const staking = (await ethers.deployContract("GoodDollarStakingMock", [
|
|
88
|
+
nameService.address,
|
|
89
|
+
BN.from("1000000007735630000"),
|
|
90
|
+
518400 * 12,
|
|
91
|
+
30
|
|
92
|
+
])) as GoodDollarStaking;
|
|
107
93
|
|
|
108
94
|
await staking.upgrade();
|
|
109
95
|
|
|
@@ -112,20 +98,13 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
112
98
|
return { staking };
|
|
113
99
|
};
|
|
114
100
|
|
|
115
|
-
const fixture_upgradeTest = async (
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
abi: JSON.parse(
|
|
123
|
-
f.interface.format(FormatTypes.json) as string
|
|
124
|
-
) as any[],
|
|
125
|
-
bytecode: f.bytecode
|
|
126
|
-
},
|
|
127
|
-
[nameService.address, BN.from("1000000007735630000"), 518400 * 12, 30]
|
|
128
|
-
)) as GoodDollarStaking;
|
|
101
|
+
const fixture_upgradeTest = async () => {
|
|
102
|
+
const staking = (await ethers.deployContract("GoodDollarStaking", [
|
|
103
|
+
nameService.address,
|
|
104
|
+
BN.from("1000000007735630000"),
|
|
105
|
+
518400 * 12,
|
|
106
|
+
30
|
|
107
|
+
])) as GoodDollarStaking;
|
|
129
108
|
|
|
130
109
|
//TODO: register as scheme here
|
|
131
110
|
|
|
@@ -133,7 +112,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
133
112
|
};
|
|
134
113
|
|
|
135
114
|
it("Should not revert withdraw but also not mint GOOD reward when staking contract is not minter", async () => {
|
|
136
|
-
const { staking } = await
|
|
115
|
+
const { staking } = await loadFixture(fixture);
|
|
137
116
|
await goodDollar.mint(founder.address, "100");
|
|
138
117
|
await goodDollar.approve(staking.address, "100");
|
|
139
118
|
await staking.stake("100");
|
|
@@ -145,7 +124,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
145
124
|
});
|
|
146
125
|
|
|
147
126
|
it("Should be able to mint rewards after set GDAO staking contract", async () => {
|
|
148
|
-
const { staking } = await
|
|
127
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
149
128
|
|
|
150
129
|
await goodDollar.mint(founder.address, "100");
|
|
151
130
|
await goodDollar.approve(staking.address, "100");
|
|
@@ -162,7 +141,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
162
141
|
});
|
|
163
142
|
|
|
164
143
|
it("Avatar should be able to change rewards per block", async () => {
|
|
165
|
-
const { staking } = await
|
|
144
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
166
145
|
|
|
167
146
|
const ictrl = await ethers.getContractAt(
|
|
168
147
|
"Controller",
|
|
@@ -198,7 +177,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
198
177
|
});
|
|
199
178
|
|
|
200
179
|
it("Should be able to withdraw rewards without withdraw stake", async () => {
|
|
201
|
-
const { staking } = await
|
|
180
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
202
181
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
203
182
|
await goodDollar.mint(founder.address, "100");
|
|
204
183
|
await goodDollar.approve(staking.address, "100");
|
|
@@ -221,7 +200,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
221
200
|
});
|
|
222
201
|
|
|
223
202
|
it("Should be able to withdraw transferred stakes", async () => {
|
|
224
|
-
const { staking } = await
|
|
203
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
225
204
|
|
|
226
205
|
await goodDollar.mint(staker.address, "100");
|
|
227
206
|
await goodDollar.connect(staker).approve(staking.address, "100");
|
|
@@ -240,7 +219,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
240
219
|
});
|
|
241
220
|
|
|
242
221
|
it("should not be able to withdraw after they send their stake to somebody else", async () => {
|
|
243
|
-
const { staking } = await
|
|
222
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
244
223
|
|
|
245
224
|
await goodDollar.mint(staker.address, "100");
|
|
246
225
|
await goodDollar.connect(staker).approve(staking.address, "100");
|
|
@@ -251,12 +230,12 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
251
230
|
.transfer(founder.address, await staking.balanceOf(staker.address));
|
|
252
231
|
|
|
253
232
|
await expect(staking.connect(staker).withdrawStake(1)).revertedWith(
|
|
254
|
-
|
|
233
|
+
/no balance/
|
|
255
234
|
);
|
|
256
235
|
});
|
|
257
236
|
|
|
258
237
|
it("it should distribute reward with correct precision", async () => {
|
|
259
|
-
const { staking } = await
|
|
238
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
260
239
|
|
|
261
240
|
const ictrl = await ethers.getContractAt(
|
|
262
241
|
"Controller",
|
|
@@ -290,7 +269,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
290
269
|
});
|
|
291
270
|
|
|
292
271
|
it("it should not generate rewards when rewards per block set to 0", async () => {
|
|
293
|
-
const { staking } = await
|
|
272
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
294
273
|
|
|
295
274
|
const ictrl = await ethers.getContractAt(
|
|
296
275
|
"Controller",
|
|
@@ -321,7 +300,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
321
300
|
});
|
|
322
301
|
|
|
323
302
|
it("it should return productivity values correctly", async () => {
|
|
324
|
-
const { staking } = await
|
|
303
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
325
304
|
await goodDollar.mint(founder.address, "100");
|
|
326
305
|
await goodDollar.approve(staking.address, "100");
|
|
327
306
|
await staking.stake("100");
|
|
@@ -336,7 +315,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
336
315
|
});
|
|
337
316
|
|
|
338
317
|
it("it should return earned rewards with pending ones properly for a short period", async () => {
|
|
339
|
-
const { staking } = await
|
|
318
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
340
319
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
341
320
|
await goodDollar.mint(founder.address, "100");
|
|
342
321
|
await goodDollar.approve(staking.address, "100");
|
|
@@ -354,7 +333,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
354
333
|
});
|
|
355
334
|
|
|
356
335
|
it("Accumulated per share has enough precision when reward << totalproductivity", async () => {
|
|
357
|
-
const { staking } = await
|
|
336
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
358
337
|
|
|
359
338
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
360
339
|
await goodDollar.mint(founder.address, "100000000000000"); // 1 trillion gd stake
|
|
@@ -376,7 +355,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
376
355
|
});
|
|
377
356
|
|
|
378
357
|
it("user receive fractional gdao properly when his stake << totalProductivity", async () => {
|
|
379
|
-
const { staking } = await
|
|
358
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
380
359
|
|
|
381
360
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
382
361
|
await goodDollar.mint(founder.address, "800"); // 8gd
|
|
@@ -426,7 +405,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
426
405
|
});
|
|
427
406
|
|
|
428
407
|
it("it should be able to tranfer tokens when user approve", async () => {
|
|
429
|
-
const { staking } = await
|
|
408
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
430
409
|
|
|
431
410
|
await goodDollar.mint(founder.address, "100");
|
|
432
411
|
await goodDollar.approve(staking.address, "100");
|
|
@@ -453,7 +432,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
453
432
|
});
|
|
454
433
|
|
|
455
434
|
it("it should return staker data", async () => {
|
|
456
|
-
const { staking } = await
|
|
435
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
457
436
|
|
|
458
437
|
await goodDollar.mint(staker2.address, "200");
|
|
459
438
|
await goodDollar.connect(staker2).approve(staking.address, "200");
|
|
@@ -498,7 +477,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
498
477
|
});
|
|
499
478
|
|
|
500
479
|
it("it should return pendingRewards equal zero after withdraw", async () => {
|
|
501
|
-
const { staking } = await
|
|
480
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
502
481
|
|
|
503
482
|
await goodDollar.mint(staker.address, "200");
|
|
504
483
|
await goodDollar.connect(staker).approve(staking.address, "200");
|
|
@@ -530,7 +509,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
530
509
|
});
|
|
531
510
|
|
|
532
511
|
it("it should calculate accumulated rewards per share correctly", async () => {
|
|
533
|
-
const { staking } = await
|
|
512
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
534
513
|
|
|
535
514
|
await goodDollar.mint(founder.address, "200");
|
|
536
515
|
await goodDollar.mint(staker.address, "200");
|
|
@@ -602,33 +581,33 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
602
581
|
});
|
|
603
582
|
|
|
604
583
|
it("Staking tokens should be 18 decimals", async () => {
|
|
605
|
-
const { staking } = await
|
|
584
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
606
585
|
|
|
607
586
|
const decimals = await staking.decimals();
|
|
608
587
|
expect(decimals.toString()).to.be.equal("18");
|
|
609
588
|
});
|
|
610
589
|
|
|
611
590
|
it("Stake amount should be positive", async () => {
|
|
612
|
-
const { staking } = await
|
|
591
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
613
592
|
|
|
614
|
-
await expect(staking.stake("0")).revertedWith(
|
|
593
|
+
await expect(staking.stake("0")).revertedWith(/Cannot stake 0/);
|
|
615
594
|
});
|
|
616
595
|
|
|
617
596
|
it("It should approve stake amount in order to stake", async () => {
|
|
618
|
-
const { staking } = await
|
|
597
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
619
598
|
|
|
620
599
|
await expect(staking.stake(ethers.utils.parseEther("10000000"))).to
|
|
621
600
|
.reverted;
|
|
622
601
|
});
|
|
623
602
|
|
|
624
603
|
it("Withdraw 0 should succeed", async () => {
|
|
625
|
-
const { staking } = await
|
|
604
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
626
605
|
|
|
627
606
|
await expect(staking.withdrawStake("0")).to.not.reverted;
|
|
628
607
|
});
|
|
629
608
|
|
|
630
609
|
it("Withdraw uint max should withdraw everything", async () => {
|
|
631
|
-
const { staking } = await
|
|
610
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
632
611
|
|
|
633
612
|
await goodDollar.mint(staker2.address, "200");
|
|
634
613
|
await goodDollar.connect(staker2).approve(staking.address, "200");
|
|
@@ -645,7 +624,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
645
624
|
});
|
|
646
625
|
|
|
647
626
|
it("Should use overriden _transfer that handles productivity when using transferFrom which is defined in super erc20 contract", async () => {
|
|
648
|
-
const { staking } = await
|
|
627
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
649
628
|
await expect(
|
|
650
629
|
staking.transferFrom(
|
|
651
630
|
founder.address,
|
|
@@ -656,7 +635,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
656
635
|
});
|
|
657
636
|
|
|
658
637
|
it("it should get rewards for previous stakes when stake new amount of tokens", async () => {
|
|
659
|
-
const { staking } = await
|
|
638
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
660
639
|
|
|
661
640
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
662
641
|
await goodDollar.mint(founder.address, "200");
|
|
@@ -681,7 +660,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
681
660
|
});
|
|
682
661
|
|
|
683
662
|
it("it should distribute rewards properly when there are multiple stakers", async () => {
|
|
684
|
-
const { staking } = await
|
|
663
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
685
664
|
|
|
686
665
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
687
666
|
const stakingAmount = BN.from("100");
|
|
@@ -832,7 +811,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
832
811
|
});
|
|
833
812
|
|
|
834
813
|
it("it should get staking reward even when stake amount is low", async () => {
|
|
835
|
-
const { staking } = await
|
|
814
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
836
815
|
|
|
837
816
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
838
817
|
const stakingAmount = BN.from("10000");
|
|
@@ -891,7 +870,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
891
870
|
});
|
|
892
871
|
|
|
893
872
|
it("it should mint rewards properly when withdrawRewards", async () => {
|
|
894
|
-
const { staking } = await
|
|
873
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
895
874
|
await goodDollar.mint(founder.address, "200");
|
|
896
875
|
const rewardsPerBlock = (await staking.getRewardsPerBlock())[0];
|
|
897
876
|
await goodDollar.approve(staking.address, "200");
|
|
@@ -912,7 +891,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
912
891
|
});
|
|
913
892
|
|
|
914
893
|
it("it should not overmint rewards when staker withdraw their rewards", async () => {
|
|
915
|
-
const { staking } = await
|
|
894
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
916
895
|
|
|
917
896
|
const overmintTesterFactory = await ethers.getContractFactory(
|
|
918
897
|
"OverMintTester"
|
|
@@ -962,7 +941,7 @@ describe("GoodDollarStaking - check GOOD rewards based on GovernanceStaking.test
|
|
|
962
941
|
});
|
|
963
942
|
|
|
964
943
|
it("it should accrue previous rewards based on previous monthly rate on monthly rewards rate change to 0", async () => {
|
|
965
|
-
const { staking } = await
|
|
944
|
+
const { staking } = await loadFixture(fixture_ready);
|
|
966
945
|
|
|
967
946
|
const ictrl = await ethers.getContractAt(
|
|
968
947
|
"Controller",
|
|
@@ -588,7 +588,7 @@ describe("GovernanceStaking - staking with GD and get Rewards in GDAO", () => {
|
|
|
588
588
|
|
|
589
589
|
it("Withdraw 0 should withdraw everything", async () => {
|
|
590
590
|
await expect(governanceStaking.withdrawStake("0")).to.revertedWith(
|
|
591
|
-
|
|
591
|
+
/positive amount/
|
|
592
592
|
);
|
|
593
593
|
});
|
|
594
594
|
|
|
@@ -48,8 +48,8 @@ describe("Reputation", () => {
|
|
|
48
48
|
await reputation.mint(signers[1].address, 1000);
|
|
49
49
|
|
|
50
50
|
// only the owner can call mint
|
|
51
|
-
await expect(reputation.connect(signers[2]).mint(signers[2], 1000))
|
|
52
|
-
.reverted;
|
|
51
|
+
await expect(reputation.connect(signers[2]).mint(signers[2].address, 1000))
|
|
52
|
+
.to.reverted;
|
|
53
53
|
|
|
54
54
|
let account0Rep = await reputation.balanceOfLocal(signers[0].address);
|
|
55
55
|
let account1Rep = await reputation.balanceOfLocal(signers[1].address);
|
package/test/helpers.ts
CHANGED
|
@@ -357,7 +357,7 @@ export const createDAO = async (tokenType: "super" | "regular" = "super") => {
|
|
|
357
357
|
const functionName = functionAbi.substring(0, funcNameEnd);
|
|
358
358
|
|
|
359
359
|
await expect(contract[functionAbi](...parameters)).to.revertedWith(
|
|
360
|
-
|
|
360
|
+
/avatar/
|
|
361
361
|
);
|
|
362
362
|
const encoded = contract.interface.encodeFunctionData(functionName, [
|
|
363
363
|
...parameters
|