@gooddollar/goodprotocol 2.0.3-beta.0 → 2.0.3
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/Faucet.min.json +1 -1
- package/artifacts/abis/FuseFaucetV2.min.json +1 -1
- package/artifacts/abis/GoodDollarMintBurnWrapper.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/Faucet.sol/Faucet.json +43 -17
- 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/fuseFaucet/FuseFaucetV2.sol/FuseFaucetV2.json +37 -17
- 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/DAIMock.sol/DAIMock.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/FeesFormularMock.sol/FeesFormulaMock.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/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/FuseStakingV3.json +2 -2
- 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/FeesFormula.sol/IFeesFormula.dbg.json +1 -1
- package/artifacts/contracts/token/GoodDollar.sol/GoodDollar.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/SuperGoodDollar.sol/SuperGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/token/superfluid/SuperToken.sol/SuperToken.dbg.json +1 -1
- 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/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
- 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/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/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +2 -9
- 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/GoodDollarMintBurnWrapper.sol/TokenOperation.json +2 -2
- 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/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/fuseFaucet/Faucet.sol +19 -10
- package/contracts/fuseFaucet/FuseFaucetV2.sol +28 -16
- package/contracts/ubi/UBIScheme.sol +1 -1
- package/contracts/utils/GoodDollarMintBurnWrapper.sol +1 -19
- package/package.json +1 -1
- package/releases/deployment.json +11 -3
- package/scripts/multichain-deploy/2_helpers-deploy.ts +46 -21
- package/scripts/multichain-deploy/4_ubi-deploy.ts +19 -35
- package/scripts/multichain-deploy/helpers.ts +2 -2
- package/scripts/multichain-deploy/multichainWrapper-deploy.ts +7 -4
- package/scripts/upgradeToV3/v3-fuse-multichain.ts +117 -0
- package/scripts/upgrades/celo-defi-ubi-deploy.ts +1 -1
- package/scripts/upgrades/identity-upgrade.ts +20 -12
- package/test/faucet/Faucet.test.ts +4 -3
- package/test/faucet/FuseFaucet.test.ts +1 -1
- package/test/ubi/UBISchemeCycle.test.ts +20 -58
- package/test/utils/GoodDollarMintBurnWrapper.test.ts +66 -224
- package/types/Faucet.ts +61 -32
- package/types/FuseFaucetV2.ts +69 -32
- package/types/GoodDollarMintBurnWrapper.ts +0 -27
- package/types/factories/Faucet__factory.ts +42 -16
- package/types/factories/FuseFaucetV2__factory.ts +36 -16
- package/types/factories/FuseStakingV3__factory.ts +1 -1
- package/types/factories/GoodDollarMintBurnWrapper__factory.ts +1 -8
- package/types/factories/UBIScheme__factory.ts +1 -1
- package/scripts/multichain-deploy/v3-fix.ts +0 -120
- package/scripts/multichain-deploy/v3-upgrade.ts +0 -219
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { ethers, waffle, upgrades } from "hardhat";
|
|
2
2
|
import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
|
|
3
3
|
import { expect } from "chai";
|
|
4
|
-
import {
|
|
5
|
-
GoodReserveCDai,
|
|
6
|
-
GoodDollarMintBurnWrapper,
|
|
7
|
-
ERC20,
|
|
8
|
-
IGoodDollar,
|
|
9
|
-
MultichainRouterMock
|
|
10
|
-
} from "../../types";
|
|
4
|
+
import { GoodReserveCDai, GoodDollarMintBurnWrapper, ERC20, IGoodDollar, MultichainRouterMock } from "../../types";
|
|
11
5
|
import { createDAO, increaseTime } from "../helpers";
|
|
12
6
|
import { FormatTypes } from "@ethersproject/abi";
|
|
13
7
|
|
|
@@ -38,16 +32,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
38
32
|
controller;
|
|
39
33
|
|
|
40
34
|
before(async () => {
|
|
41
|
-
[
|
|
42
|
-
founder,
|
|
43
|
-
wrapperAdmin,
|
|
44
|
-
minter,
|
|
45
|
-
rewarder,
|
|
46
|
-
guardian,
|
|
47
|
-
minterUncapped,
|
|
48
|
-
router,
|
|
49
|
-
...signers
|
|
50
|
-
] = await ethers.getSigners();
|
|
35
|
+
[founder, wrapperAdmin, minter, rewarder, guardian, minterUncapped, router, ...signers] = await ethers.getSigners();
|
|
51
36
|
|
|
52
37
|
let {
|
|
53
38
|
controller: ctrl,
|
|
@@ -103,47 +88,20 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
103
88
|
}
|
|
104
89
|
)) as GoodDollarMintBurnWrapper;
|
|
105
90
|
|
|
106
|
-
await wrapper
|
|
107
|
-
.connect(wrapperAdmin)
|
|
108
|
-
.grantRole(await wrapper.GUARDIAN_ROLE(), guardian.address);
|
|
91
|
+
await wrapper.connect(wrapperAdmin).grantRole(await wrapper.GUARDIAN_ROLE(), guardian.address);
|
|
109
92
|
|
|
110
93
|
await goodDollar.mint(controller, 10000000); //so bps limit is significant
|
|
111
94
|
|
|
112
95
|
await wrapper
|
|
113
96
|
.connect(wrapperAdmin)
|
|
114
|
-
.addMinter(
|
|
115
|
-
router.address,
|
|
116
|
-
MINTER_CAP,
|
|
117
|
-
MINTER_TX_MAX,
|
|
118
|
-
REWARD_BPS,
|
|
119
|
-
MINTER_CAP,
|
|
120
|
-
MINTER_TX_MAX,
|
|
121
|
-
REWARD_BPS,
|
|
122
|
-
false
|
|
123
|
-
);
|
|
97
|
+
.addMinter(router.address, MINTER_CAP, MINTER_TX_MAX, REWARD_BPS, MINTER_CAP, MINTER_TX_MAX, REWARD_BPS, false);
|
|
124
98
|
|
|
125
99
|
await wrapper
|
|
126
100
|
.connect(wrapperAdmin)
|
|
127
|
-
.addMinter(
|
|
128
|
-
|
|
129
|
-
MINTER_CAP,
|
|
130
|
-
MINTER_TX_MAX,
|
|
131
|
-
REWARD_BPS,
|
|
132
|
-
MINTER_CAP,
|
|
133
|
-
MINTER_TX_MAX,
|
|
134
|
-
REWARD_BPS,
|
|
135
|
-
false
|
|
136
|
-
);
|
|
137
|
-
await wrapper
|
|
138
|
-
.connect(wrapperAdmin)
|
|
139
|
-
.addMinter(rewarder.address, 0, 0, REWARD_BPS, 0, 0, 0, true);
|
|
101
|
+
.addMinter(minter.address, MINTER_CAP, MINTER_TX_MAX, REWARD_BPS, MINTER_CAP, MINTER_TX_MAX, REWARD_BPS, false);
|
|
102
|
+
await wrapper.connect(wrapperAdmin).addMinter(rewarder.address, 0, 0, REWARD_BPS, 0, 0, 0, true);
|
|
140
103
|
|
|
141
|
-
await ictrl.registerScheme(
|
|
142
|
-
wrapper.address,
|
|
143
|
-
ethers.constants.HashZero,
|
|
144
|
-
"0x00000001",
|
|
145
|
-
avatar
|
|
146
|
-
);
|
|
104
|
+
await ictrl.registerScheme(wrapper.address, ethers.constants.HashZero, "0x00000001", avatar);
|
|
147
105
|
return { wrapper };
|
|
148
106
|
};
|
|
149
107
|
|
|
@@ -167,9 +125,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
167
125
|
}
|
|
168
126
|
)) as GoodDollarMintBurnWrapper;
|
|
169
127
|
|
|
170
|
-
const multiChainRouter = (await rf.deploy(
|
|
171
|
-
wrapper.address
|
|
172
|
-
)) as MultichainRouterMock;
|
|
128
|
+
const multiChainRouter = (await rf.deploy(wrapper.address)) as MultichainRouterMock;
|
|
173
129
|
|
|
174
130
|
await wrapper
|
|
175
131
|
.connect(wrapperAdmin)
|
|
@@ -207,19 +163,13 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
207
163
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
208
164
|
|
|
209
165
|
expect(await wrapper.owner()).to.equal(avatar);
|
|
210
|
-
expect(await wrapper.hasRole(await wrapper.DEFAULT_ADMIN_ROLE(), avatar)).to
|
|
211
|
-
.be.true;
|
|
166
|
+
expect(await wrapper.hasRole(await wrapper.DEFAULT_ADMIN_ROLE(), avatar)).to.be.true;
|
|
212
167
|
});
|
|
213
168
|
|
|
214
169
|
it("should have admin from params as default admin ", async () => {
|
|
215
170
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
216
171
|
|
|
217
|
-
expect(
|
|
218
|
-
await wrapper.hasRole(
|
|
219
|
-
await wrapper.DEFAULT_ADMIN_ROLE(),
|
|
220
|
-
wrapperAdmin.address
|
|
221
|
-
)
|
|
222
|
-
).to.be.true;
|
|
172
|
+
expect(await wrapper.hasRole(await wrapper.DEFAULT_ADMIN_ROLE(), wrapperAdmin.address)).to.be.true;
|
|
223
173
|
});
|
|
224
174
|
|
|
225
175
|
it("should have erc20 token info", async () => {
|
|
@@ -233,87 +183,58 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
233
183
|
it("should update updateFrequency only by admin or guardian role", async () => {
|
|
234
184
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
235
185
|
|
|
236
|
-
expect(await wrapper.updateFrequency()).to.equal(60 * 60 * 24 *
|
|
186
|
+
expect(await wrapper.updateFrequency()).to.equal(60 * 60 * 24 * 7); //default 90 days;
|
|
237
187
|
|
|
238
188
|
await expect(wrapper.setUpdateFrequency(0)).to.be.revertedWith("role");
|
|
239
|
-
await expect(wrapper.connect(wrapperAdmin).setUpdateFrequency(0)).to.not
|
|
240
|
-
.reverted;
|
|
189
|
+
await expect(wrapper.connect(wrapperAdmin).setUpdateFrequency(0)).to.not.reverted;
|
|
241
190
|
expect(await wrapper.updateFrequency()).to.equal(0);
|
|
242
|
-
await expect(wrapper.connect(guardian).setUpdateFrequency(1)).to.not
|
|
243
|
-
.reverted;
|
|
191
|
+
await expect(wrapper.connect(guardian).setUpdateFrequency(1)).to.not.reverted;
|
|
244
192
|
expect(await wrapper.updateFrequency()).to.equal(1);
|
|
245
193
|
});
|
|
246
194
|
|
|
247
195
|
it("should be able to pause roles only by admin or guardian role", async () => {
|
|
248
196
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
249
197
|
|
|
250
|
-
await expect(
|
|
251
|
-
wrapper.unpause(await wrapper.PAUSE_ALL_ROLE())
|
|
252
|
-
).to.be.revertedWith("role");
|
|
198
|
+
await expect(wrapper.unpause(await wrapper.PAUSE_ALL_ROLE())).to.be.revertedWith("role");
|
|
253
199
|
|
|
254
|
-
await expect(
|
|
255
|
-
|
|
256
|
-
).to.not.reverted;
|
|
257
|
-
await expect(
|
|
258
|
-
wrapper.connect(guardian).pause(await wrapper.PAUSE_ALL_ROLE())
|
|
259
|
-
).to.not.reverted;
|
|
200
|
+
await expect(wrapper.connect(wrapperAdmin).pause(await wrapper.PAUSE_BURN_ROLE())).to.not.reverted;
|
|
201
|
+
await expect(wrapper.connect(guardian).pause(await wrapper.PAUSE_ALL_ROLE())).to.not.reverted;
|
|
260
202
|
|
|
261
|
-
expect(await wrapper.paused(await wrapper.PAUSE_BURN_ROLE())).to.equal(
|
|
262
|
-
true
|
|
263
|
-
);
|
|
203
|
+
expect(await wrapper.paused(await wrapper.PAUSE_BURN_ROLE())).to.equal(true);
|
|
264
204
|
expect(await wrapper.paused(await wrapper.PAUSE_ALL_ROLE())).to.equal(true);
|
|
265
205
|
});
|
|
266
206
|
|
|
267
207
|
it("should be able to unpause roles only by admin or guardian role", async () => {
|
|
268
208
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
269
209
|
|
|
270
|
-
await expect(
|
|
271
|
-
wrapper.unpause(await wrapper.PAUSE_ALL_ROLE())
|
|
272
|
-
).to.be.revertedWith("role");
|
|
210
|
+
await expect(wrapper.unpause(await wrapper.PAUSE_ALL_ROLE())).to.be.revertedWith("role");
|
|
273
211
|
|
|
274
|
-
await expect(
|
|
275
|
-
wrapper.connect(wrapperAdmin).pause(await wrapper.PAUSE_BURN_ROLE())
|
|
276
|
-
).to.not.reverted;
|
|
212
|
+
await expect(wrapper.connect(wrapperAdmin).pause(await wrapper.PAUSE_BURN_ROLE())).to.not.reverted;
|
|
277
213
|
|
|
278
|
-
await expect(
|
|
279
|
-
wrapper.connect(wrapperAdmin).pause(await wrapper.PAUSE_ALL_ROLE())
|
|
280
|
-
).to.not.reverted;
|
|
214
|
+
await expect(wrapper.connect(wrapperAdmin).pause(await wrapper.PAUSE_ALL_ROLE())).to.not.reverted;
|
|
281
215
|
|
|
282
|
-
await expect(
|
|
283
|
-
wrapper.connect(guardian).unpause(await wrapper.PAUSE_ALL_ROLE())
|
|
284
|
-
).to.not.reverted;
|
|
216
|
+
await expect(wrapper.connect(guardian).unpause(await wrapper.PAUSE_ALL_ROLE())).to.not.reverted;
|
|
285
217
|
|
|
286
|
-
await expect(
|
|
287
|
-
wrapper.connect(wrapperAdmin).unpause(await wrapper.PAUSE_BURN_ROLE())
|
|
288
|
-
).to.not.reverted;
|
|
218
|
+
await expect(wrapper.connect(wrapperAdmin).unpause(await wrapper.PAUSE_BURN_ROLE())).to.not.reverted;
|
|
289
219
|
|
|
290
|
-
expect(await wrapper.paused(await wrapper.PAUSE_BURN_ROLE())).to.equal(
|
|
291
|
-
|
|
292
|
-
);
|
|
293
|
-
expect(await wrapper.paused(await wrapper.PAUSE_ALL_ROLE())).to.equal(
|
|
294
|
-
false
|
|
295
|
-
);
|
|
220
|
+
expect(await wrapper.paused(await wrapper.PAUSE_BURN_ROLE())).to.equal(false);
|
|
221
|
+
expect(await wrapper.paused(await wrapper.PAUSE_ALL_ROLE())).to.equal(false);
|
|
296
222
|
});
|
|
297
223
|
|
|
298
224
|
it("should be able to mint only by minter role", async () => {
|
|
299
225
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
300
226
|
|
|
301
227
|
await expect(wrapper.mint(founder.address, 1000)).to.revertedWith("role");
|
|
302
|
-
await expect(wrapper.connect(minter).mint(signers[0].address, 1000)).to.not
|
|
303
|
-
.reverted;
|
|
228
|
+
await expect(wrapper.connect(minter).mint(signers[0].address, 1000)).to.not.reverted;
|
|
304
229
|
expect(await goodDollar.balanceOf(signers[0].address)).to.equal(1000);
|
|
305
230
|
});
|
|
306
231
|
|
|
307
232
|
it("should not be able to mint when minter is paused", async () => {
|
|
308
233
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
309
234
|
|
|
310
|
-
await expect(
|
|
311
|
-
wrapper.connect(guardian).pause(await wrapper.PAUSE_MINT_ROLE())
|
|
312
|
-
).to.not.reverted;
|
|
235
|
+
await expect(wrapper.connect(guardian).pause(await wrapper.PAUSE_MINT_ROLE())).to.not.reverted;
|
|
313
236
|
|
|
314
|
-
await expect(
|
|
315
|
-
wrapper.connect(minter).mint(signers[0].address, 1000)
|
|
316
|
-
).revertedWith("pause");
|
|
237
|
+
await expect(wrapper.connect(minter).mint(signers[0].address, 1000)).revertedWith("pause");
|
|
317
238
|
});
|
|
318
239
|
|
|
319
240
|
it("should not be able to mint when passed daily cap", async () => {
|
|
@@ -331,9 +252,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
331
252
|
it("should not be able to mint when passed tx cap", async () => {
|
|
332
253
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
333
254
|
|
|
334
|
-
await expect(
|
|
335
|
-
wrapper.connect(minter).mint(signers[0].address, MINTER_TX_MAX + 1)
|
|
336
|
-
).revertedWith("max");
|
|
255
|
+
await expect(wrapper.connect(minter).mint(signers[0].address, MINTER_TX_MAX + 1)).revertedWith("max");
|
|
337
256
|
});
|
|
338
257
|
|
|
339
258
|
it("should not be able to mint when passed minter cap", async () => {
|
|
@@ -346,26 +265,18 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
346
265
|
await wrapper.connect(minter).mint(signers[0].address, MINTER_TX_MAX);
|
|
347
266
|
}
|
|
348
267
|
|
|
349
|
-
await expect(
|
|
350
|
-
wrapper.connect(minter).mint(signers[0].address, MINTER_TX_MAX)
|
|
351
|
-
).revertedWith("minter cap");
|
|
268
|
+
await expect(wrapper.connect(minter).mint(signers[0].address, MINTER_TX_MAX)).revertedWith("minter cap");
|
|
352
269
|
});
|
|
353
270
|
|
|
354
271
|
xit("should not be able to mint when passed global cap", async () => {
|
|
355
272
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
356
273
|
|
|
357
|
-
await wrapper
|
|
358
|
-
.connect(wrapperAdmin)
|
|
359
|
-
.addMinter(minterUncapped.address, 0, 10000000000, 0, 0, 0, 0, false);
|
|
274
|
+
await wrapper.connect(wrapperAdmin).addMinter(minterUncapped.address, 0, 10000000000, 0, 0, 0, 0, false);
|
|
360
275
|
|
|
361
276
|
for (let i = 0; i < 100000000000 / 10000000000; i++)
|
|
362
|
-
await wrapper
|
|
363
|
-
.connect(minterUncapped)
|
|
364
|
-
.mint(signers[0].address, 10000000000);
|
|
277
|
+
await wrapper.connect(minterUncapped).mint(signers[0].address, 10000000000);
|
|
365
278
|
|
|
366
|
-
await expect(
|
|
367
|
-
wrapper.connect(minterUncapped).mint(signers[0].address, 10000000000)
|
|
368
|
-
).revertedWith("total mint");
|
|
279
|
+
await expect(wrapper.connect(minterUncapped).mint(signers[0].address, 10000000000)).revertedWith("total mint");
|
|
369
280
|
});
|
|
370
281
|
|
|
371
282
|
it("should not be able to burn when passed daily cap", async () => {
|
|
@@ -386,9 +297,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
386
297
|
|
|
387
298
|
await goodDollar.mint(signers[0].address, 100000000);
|
|
388
299
|
await goodDollar.connect(signers[0]).approve(wrapper.address, 100000000);
|
|
389
|
-
await expect(
|
|
390
|
-
wrapper.connect(router).burn(signers[0].address, MINTER_TX_MAX + 1)
|
|
391
|
-
).revertedWith("max");
|
|
300
|
+
await expect(wrapper.connect(router).burn(signers[0].address, MINTER_TX_MAX + 1)).revertedWith("max");
|
|
392
301
|
});
|
|
393
302
|
|
|
394
303
|
it("should not be able to burn when passed minter cap", async () => {
|
|
@@ -403,9 +312,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
403
312
|
await wrapper.connect(router).burn(signers[0].address, MINTER_TX_MAX);
|
|
404
313
|
}
|
|
405
314
|
|
|
406
|
-
await expect(
|
|
407
|
-
wrapper.connect(router).burn(signers[0].address, MINTER_TX_MAX)
|
|
408
|
-
).revertedWith("minter cap");
|
|
315
|
+
await expect(wrapper.connect(router).burn(signers[0].address, MINTER_TX_MAX)).revertedWith("minter cap");
|
|
409
316
|
});
|
|
410
317
|
|
|
411
318
|
it("should update stats after mint", async () => {
|
|
@@ -429,11 +336,8 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
429
336
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
430
337
|
await goodDollar.mint(founder.address, 1000);
|
|
431
338
|
await goodDollar.connect(founder).approve(wrapper.address, 1000);
|
|
432
|
-
await expect(
|
|
433
|
-
|
|
434
|
-
).to.revertedWith("role");
|
|
435
|
-
await expect(wrapper.connect(router).burn(founder.address, 1000)).to.not
|
|
436
|
-
.reverted;
|
|
339
|
+
await expect(wrapper.connect(guardian).burn(founder.address, 1000)).to.revertedWith("role");
|
|
340
|
+
await expect(wrapper.connect(router).burn(founder.address, 1000)).to.not.reverted;
|
|
437
341
|
|
|
438
342
|
expect(await goodDollar.balanceOf(founder.address)).to.equal(0);
|
|
439
343
|
});
|
|
@@ -441,16 +345,12 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
441
345
|
it("should not be able to burn when router is paused", async () => {
|
|
442
346
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
443
347
|
|
|
444
|
-
await expect(
|
|
445
|
-
wrapper.connect(guardian).pause(await wrapper.PAUSE_ROUTER_ROLE())
|
|
446
|
-
).to.not.reverted;
|
|
348
|
+
await expect(wrapper.connect(guardian).pause(await wrapper.PAUSE_ROUTER_ROLE())).to.not.reverted;
|
|
447
349
|
|
|
448
350
|
await goodDollar.mint(founder.address, 1000);
|
|
449
351
|
await goodDollar.connect(founder).approve(wrapper.address, 1000);
|
|
450
352
|
|
|
451
|
-
await expect(
|
|
452
|
-
wrapper.connect(router).burn(founder.address, 1000)
|
|
453
|
-
).revertedWith("pause");
|
|
353
|
+
await expect(wrapper.connect(router).burn(founder.address, 1000)).revertedWith("pause");
|
|
454
354
|
});
|
|
455
355
|
|
|
456
356
|
it("should not update stats after burn when not minted yet", async () => {
|
|
@@ -458,8 +358,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
458
358
|
|
|
459
359
|
await goodDollar.mint(founder.address, 1000);
|
|
460
360
|
await goodDollar.connect(founder).approve(wrapper.address, 1000);
|
|
461
|
-
await expect(wrapper.connect(router).burn(founder.address, 1000)).to.not
|
|
462
|
-
.reverted;
|
|
361
|
+
await expect(wrapper.connect(router).burn(founder.address, 1000)).to.not.reverted;
|
|
463
362
|
|
|
464
363
|
expect(await wrapper.totalMinted()).eq(0);
|
|
465
364
|
|
|
@@ -474,8 +373,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
474
373
|
|
|
475
374
|
await goodDollar.mint(founder.address, 500);
|
|
476
375
|
await goodDollar.connect(founder).approve(wrapper.address, 500);
|
|
477
|
-
await expect(wrapper.connect(router).burn(founder.address, 500)).to.not
|
|
478
|
-
.reverted;
|
|
376
|
+
await expect(wrapper.connect(router).burn(founder.address, 500)).to.not.reverted;
|
|
479
377
|
|
|
480
378
|
expect(await wrapper.totalMinted()).eq(500);
|
|
481
379
|
|
|
@@ -486,15 +384,12 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
486
384
|
it("should update both global and minter stats when minter==burner after burn when already minted", async () => {
|
|
487
385
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
488
386
|
|
|
489
|
-
await wrapper
|
|
490
|
-
.connect(wrapperAdmin)
|
|
491
|
-
.grantRole(await wrapper.ROUTER_ROLE(), minter.address);
|
|
387
|
+
await wrapper.connect(wrapperAdmin).grantRole(await wrapper.ROUTER_ROLE(), minter.address);
|
|
492
388
|
await wrapper.connect(minter).mint(signers[0].address, 1000);
|
|
493
389
|
|
|
494
390
|
await goodDollar.mint(founder.address, 500);
|
|
495
391
|
await goodDollar.connect(founder).approve(wrapper.address, 500);
|
|
496
|
-
await expect(wrapper.connect(minter).burn(founder.address, 500)).to.not
|
|
497
|
-
.reverted;
|
|
392
|
+
await expect(wrapper.connect(minter).burn(founder.address, 500)).to.not.reverted;
|
|
498
393
|
|
|
499
394
|
expect(await wrapper.totalMinted()).eq(500);
|
|
500
395
|
|
|
@@ -505,15 +400,12 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
505
400
|
it("should reset minter total when burn amount > total", async () => {
|
|
506
401
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
507
402
|
|
|
508
|
-
await wrapper
|
|
509
|
-
.connect(wrapperAdmin)
|
|
510
|
-
.grantRole(await wrapper.ROUTER_ROLE(), minter.address);
|
|
403
|
+
await wrapper.connect(wrapperAdmin).grantRole(await wrapper.ROUTER_ROLE(), minter.address);
|
|
511
404
|
await wrapper.connect(minter).mint(signers[0].address, 1000);
|
|
512
405
|
|
|
513
406
|
await goodDollar.mint(founder.address, 2000);
|
|
514
407
|
await goodDollar.connect(founder).approve(wrapper.address, 2000);
|
|
515
|
-
await expect(wrapper.connect(minter).burn(founder.address, 2000)).to.not
|
|
516
|
-
.reverted;
|
|
408
|
+
await expect(wrapper.connect(minter).burn(founder.address, 2000)).to.not.reverted;
|
|
517
409
|
|
|
518
410
|
expect(await wrapper.totalMinted()).eq(0);
|
|
519
411
|
|
|
@@ -596,15 +488,11 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
596
488
|
|
|
597
489
|
let minterInfo = await wrapper.minterSupply(rewarder.address);
|
|
598
490
|
|
|
599
|
-
await wrapper
|
|
600
|
-
.connect(rewarder)
|
|
601
|
-
.sendOrMint(signers[0].address, minterInfo.dailyCapIn.add(1000));
|
|
491
|
+
await wrapper.connect(rewarder).sendOrMint(signers[0].address, minterInfo.dailyCapIn.add(1000));
|
|
602
492
|
|
|
603
493
|
minterInfo = await wrapper.minterSupply(rewarder.address);
|
|
604
494
|
|
|
605
|
-
expect(await goodDollar.balanceOf(signers[0].address)).to.eq(
|
|
606
|
-
minterInfo.dailyCapIn
|
|
607
|
-
);
|
|
495
|
+
expect(await goodDollar.balanceOf(signers[0].address)).to.eq(minterInfo.dailyCapIn);
|
|
608
496
|
expect(minterInfo.totalIn).eq(minterInfo.dailyCapIn);
|
|
609
497
|
expect(minterInfo.totalRewards).eq(minterInfo.dailyCapIn);
|
|
610
498
|
expect(minterInfo.mintedToday).eq(minterInfo.dailyCapIn);
|
|
@@ -622,12 +510,9 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
622
510
|
|
|
623
511
|
await increaseTime(60 * 60 * 24);
|
|
624
512
|
|
|
625
|
-
await expect(
|
|
626
|
-
wrapper.connect(rewarder).sendOrMint(signers[0].address, "1001")
|
|
627
|
-
).to.not.reverted;
|
|
513
|
+
await expect(wrapper.connect(rewarder).sendOrMint(signers[0].address, "1001")).to.not.reverted;
|
|
628
514
|
|
|
629
|
-
await expect(wrapper.connect(minter).mint(signers[0].address, "1001")).to
|
|
630
|
-
.not.reverted;
|
|
515
|
+
await expect(wrapper.connect(minter).mint(signers[0].address, "1001")).to.not.reverted;
|
|
631
516
|
|
|
632
517
|
expect(await goodDollar.balanceOf(signers[0].address)).to.eq("4002");
|
|
633
518
|
const minterInfo = await wrapper.minterSupply(rewarder.address);
|
|
@@ -645,31 +530,21 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
645
530
|
const frequency = await wrapper.updateFrequency();
|
|
646
531
|
await increaseTime(frequency.toNumber());
|
|
647
532
|
|
|
648
|
-
await wrapper
|
|
649
|
-
.connect(rewarder)
|
|
650
|
-
.sendOrMint(signers[0].address, minterInfo.dailyCapIn.add(1000));
|
|
533
|
+
await wrapper.connect(rewarder).sendOrMint(signers[0].address, minterInfo.dailyCapIn.add(1000));
|
|
651
534
|
|
|
652
535
|
let minterInfoAfter = await wrapper.minterSupply(rewarder.address);
|
|
653
536
|
|
|
654
537
|
expect(minterInfoAfter.dailyCapIn).gt(minterInfo.dailyCapIn);
|
|
655
|
-
expect(minterInfoAfter.dailyCapIn).eq(
|
|
656
|
-
totalSupplyBeforeMint.mul(REWARD_BPS).div(10000)
|
|
657
|
-
); //we doubled the G$ supply so bps relative to supply should be double now
|
|
538
|
+
expect(minterInfoAfter.dailyCapIn).eq(totalSupplyBeforeMint.mul(REWARD_BPS).div(10000)); //we doubled the G$ supply so bps relative to supply should be double now
|
|
658
539
|
});
|
|
659
540
|
|
|
660
541
|
it("should not mint but not revert when rewarder passes daily limit", async () => {
|
|
661
542
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
662
543
|
|
|
663
544
|
const minterInfo = await wrapper.minterSupply(rewarder.address);
|
|
664
|
-
await wrapper
|
|
665
|
-
.connect(rewarder)
|
|
666
|
-
.sendOrMint(signers[0].address, minterInfo.dailyCapIn);
|
|
545
|
+
await wrapper.connect(rewarder).sendOrMint(signers[0].address, minterInfo.dailyCapIn);
|
|
667
546
|
|
|
668
|
-
const tx = await (
|
|
669
|
-
await wrapper
|
|
670
|
-
.connect(rewarder)
|
|
671
|
-
.sendOrMint(signers[1].address, minterInfo.dailyCapIn)
|
|
672
|
-
).wait();
|
|
547
|
+
const tx = await (await wrapper.connect(rewarder).sendOrMint(signers[1].address, minterInfo.dailyCapIn)).wait();
|
|
673
548
|
|
|
674
549
|
const sendOrMintEvent = tx.events.find(_ => _.event === "SendOrMint");
|
|
675
550
|
|
|
@@ -681,15 +556,9 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
681
556
|
it("should allow guardian to update minter limits and rewarder daily limit", async () => {
|
|
682
557
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
683
558
|
|
|
684
|
-
await expect(
|
|
685
|
-
wrapper.setMinterCaps(minter.address, 0, 0, 0, 0, 0, 0)
|
|
686
|
-
).to.be.revertedWith("role");
|
|
559
|
+
await expect(wrapper.setMinterCaps(minter.address, 0, 0, 0, 0, 0, 0)).to.be.revertedWith("role");
|
|
687
560
|
|
|
688
|
-
await expect(
|
|
689
|
-
wrapper
|
|
690
|
-
.connect(guardian)
|
|
691
|
-
.setMinterCaps(minter.address, 0, 0, 50, 0, 0, 60)
|
|
692
|
-
).to.not.reverted;
|
|
561
|
+
await expect(wrapper.connect(guardian).setMinterCaps(minter.address, 0, 0, 50, 0, 0, 60)).to.not.reverted;
|
|
693
562
|
|
|
694
563
|
const minterInfo = await wrapper.minterSupply(minter.address);
|
|
695
564
|
const minterOutLimits = await wrapper.minterOutLimits(minter.address);
|
|
@@ -700,12 +569,8 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
700
569
|
expect(minterOutLimits.capOut).to.eq(0);
|
|
701
570
|
expect(minterOutLimits.maxOut).to.eq(0);
|
|
702
571
|
expect(minterOutLimits.bpsPerDayOut).to.eq(60);
|
|
703
|
-
expect(minterInfo.dailyCapIn).eq(
|
|
704
|
-
|
|
705
|
-
);
|
|
706
|
-
expect(minterOutLimits.dailyCapOut).eq(
|
|
707
|
-
(await goodDollar.totalSupply()).mul(60).div(10000)
|
|
708
|
-
);
|
|
572
|
+
expect(minterInfo.dailyCapIn).eq((await goodDollar.totalSupply()).mul(50).div(10000));
|
|
573
|
+
expect(minterOutLimits.dailyCapOut).eq((await goodDollar.totalSupply()).mul(60).div(10000));
|
|
709
574
|
});
|
|
710
575
|
|
|
711
576
|
xit("should allow guardian to update totalMintCap", async () => {
|
|
@@ -719,67 +584,48 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
719
584
|
});
|
|
720
585
|
|
|
721
586
|
it("should support transferAndCall for multichain bridge transfer", async () => {
|
|
722
|
-
const { wrapper, multiChainRouter } = await waffle.loadFixture(
|
|
723
|
-
fixture_withMultichain
|
|
724
|
-
);
|
|
587
|
+
const { wrapper, multiChainRouter } = await waffle.loadFixture(fixture_withMultichain);
|
|
725
588
|
|
|
726
589
|
await goodDollar.mint(founder.address, 100000);
|
|
727
590
|
await goodDollar.transferAndCall(
|
|
728
591
|
wrapper.address,
|
|
729
592
|
100000,
|
|
730
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
731
|
-
["address", "uint256"],
|
|
732
|
-
[minter.address, "4220"]
|
|
733
|
-
)
|
|
593
|
+
ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [minter.address, "4220"])
|
|
734
594
|
);
|
|
735
595
|
|
|
736
596
|
expect(await goodDollar.balanceOf(founder.address)).to.eq(0); //verify burn happened
|
|
737
597
|
expect(await goodDollar.balanceOf(wrapper.address)).to.eq(0); //verify burn happened
|
|
738
|
-
const events = await multiChainRouter.queryFilter(
|
|
739
|
-
multiChainRouter.filters.AnySwap()
|
|
740
|
-
);
|
|
598
|
+
const events = await multiChainRouter.queryFilter(multiChainRouter.filters.AnySwap());
|
|
741
599
|
expect(events[0].args.recipient).to.equal(minter.address);
|
|
742
600
|
expect(events[0].args.chainId).to.equal(4220);
|
|
743
601
|
});
|
|
744
602
|
|
|
745
603
|
it("should default to sender as recipient on transferAndCall if recipient=0", async () => {
|
|
746
|
-
const { wrapper, multiChainRouter } = await waffle.loadFixture(
|
|
747
|
-
fixture_withMultichain
|
|
748
|
-
);
|
|
604
|
+
const { wrapper, multiChainRouter } = await waffle.loadFixture(fixture_withMultichain);
|
|
749
605
|
|
|
750
606
|
await goodDollar.mint(founder.address, 100000);
|
|
751
607
|
await goodDollar.transferAndCall(
|
|
752
608
|
wrapper.address,
|
|
753
609
|
100000,
|
|
754
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
755
|
-
["address", "uint256"],
|
|
756
|
-
[ethers.constants.AddressZero, "4220"]
|
|
757
|
-
)
|
|
610
|
+
ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [ethers.constants.AddressZero, "4220"])
|
|
758
611
|
);
|
|
759
612
|
|
|
760
613
|
expect(await goodDollar.balanceOf(founder.address)).to.eq(0); //verify burn happened
|
|
761
614
|
expect(await goodDollar.balanceOf(wrapper.address)).to.eq(0); //verify burn happened
|
|
762
|
-
const events = await multiChainRouter.queryFilter(
|
|
763
|
-
multiChainRouter.filters.AnySwap()
|
|
764
|
-
);
|
|
615
|
+
const events = await multiChainRouter.queryFilter(multiChainRouter.filters.AnySwap());
|
|
765
616
|
expect(events[0].args.recipient).to.equal(founder.address);
|
|
766
617
|
expect(events[0].args.chainId).to.equal(4220);
|
|
767
618
|
});
|
|
768
619
|
|
|
769
620
|
it("should fail transferAndCall for multichain if no chainid", async () => {
|
|
770
|
-
const { wrapper, multiChainRouter } = await waffle.loadFixture(
|
|
771
|
-
fixture_withMultichain
|
|
772
|
-
);
|
|
621
|
+
const { wrapper, multiChainRouter } = await waffle.loadFixture(fixture_withMultichain);
|
|
773
622
|
|
|
774
623
|
await goodDollar.mint(founder.address, 100000);
|
|
775
624
|
await expect(
|
|
776
625
|
goodDollar.transferAndCall(
|
|
777
626
|
wrapper.address,
|
|
778
627
|
100000,
|
|
779
|
-
ethers.utils.defaultAbiCoder.encode(
|
|
780
|
-
["address", "uint"],
|
|
781
|
-
[minter.address, 0]
|
|
782
|
-
)
|
|
628
|
+
ethers.utils.defaultAbiCoder.encode(["address", "uint"], [minter.address, 0])
|
|
783
629
|
)
|
|
784
630
|
).revertedWith("chainId");
|
|
785
631
|
});
|
|
@@ -787,11 +633,7 @@ describe("GoodDollarMintBurnWrapper", () => {
|
|
|
787
633
|
it("should not mint or sendOrMint to self", async () => {
|
|
788
634
|
const { wrapper } = await waffle.loadFixture(fixture);
|
|
789
635
|
|
|
790
|
-
await expect(wrapper.connect(minter).mint(wrapper.address, 1)).revertedWith(
|
|
791
|
-
|
|
792
|
-
);
|
|
793
|
-
await expect(
|
|
794
|
-
wrapper.connect(rewarder).sendOrMint(wrapper.address, 1)
|
|
795
|
-
).revertedWith("self");
|
|
636
|
+
await expect(wrapper.connect(minter).mint(wrapper.address, 1)).revertedWith("self");
|
|
637
|
+
await expect(wrapper.connect(rewarder).sendOrMint(wrapper.address, 1)).revertedWith("self");
|
|
796
638
|
});
|
|
797
639
|
});
|