Skip to content

Commit

Permalink
chore: update revert msgs, add test case
Browse files Browse the repository at this point in the history
  • Loading branch information
Cphilo committed Mar 6, 2024
1 parent a971e1c commit 0c141fc
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 26 deletions.
10 changes: 5 additions & 5 deletions contracts/WooPPV2.sol
Original file line number Diff line number Diff line change
Expand Up @@ -383,8 +383,8 @@ contract WooPPV2 is Ownable, ReentrancyGuard, Pausable, IWooPPV2 {
require(to != address(0), "WooPPV2: !to");
require(baseToken != quoteToken, "WooPPV2: baseToken==quoteToken");

require(balance(baseToken) <= tokenInfos[baseToken].capBal, "WooPPV2: CAP_EXCEEDS");
require(balance(baseToken) - tokenInfos[baseToken].reserve >= baseAmount, "WooPPV2: BASE_BALANCE_NOT_ENOUGH");
require(balance(baseToken) <= tokenInfos[baseToken].capBal, "WooPPV2: !CAP");
require(balance(baseToken) - tokenInfos[baseToken].reserve >= baseAmount, "WooPPV2: !BASE");

{
uint256 newPrice;
Expand Down Expand Up @@ -431,8 +431,8 @@ contract WooPPV2 is Ownable, ReentrancyGuard, Pausable, IWooPPV2 {
require(to != address(0), "WooPPV2: !to");
require(baseToken != quoteToken, "WooPPV2: baseToken==quoteToken");

require(balance(quoteToken) <= tokenInfos[quoteToken].capBal, "WooPPV2: CAP_EXCEEDS");
require(balance(quoteToken) - tokenInfos[quoteToken].reserve >= quoteAmount, "WooPPV2: !QUOTE_BALANCE");
require(balance(quoteToken) <= tokenInfos[quoteToken].capBal, "WooPPV2: !CAP");
require(balance(quoteToken) - tokenInfos[quoteToken].reserve >= quoteAmount, "WooPPV2: !QUOTE");

uint256 swapFee = (quoteAmount * tokenInfos[baseToken].feeRate) / 1e5;
quoteAmount = quoteAmount - swapFee;
Expand Down Expand Up @@ -479,7 +479,7 @@ contract WooPPV2 is Ownable, ReentrancyGuard, Pausable, IWooPPV2 {
require(baseToken2 != address(0) && baseToken2 != quoteToken, "WooPPV2: !baseToken2");
require(to != address(0), "WooPPV2: !to");

require(balance(baseToken1) <= tokenInfos[baseToken1].capBal, "WooPPV2: CAP_EXCEEDS");
require(balance(baseToken1) <= tokenInfos[baseToken1].capBal, "WooPPV2: !CAP");
require(balance(baseToken1) - tokenInfos[baseToken1].reserve >= base1Amount, "WooPPV2: !BASE1_BALANCE");

IWooracleV2.State memory state1 = IWooracleV2(wooracle).state(baseToken1);
Expand Down
92 changes: 71 additions & 21 deletions test/typescript/WooPPv2.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -310,14 +310,8 @@ describe("WooPPV2 Integration tests", () => {
});

it("sellBase fail1", async () => {
await wooPP.setCapBal(btcToken.address, ONE.div(2));
await expect(wooPP.swap(btcToken.address, quote.address, ONE, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: CAP_EXCEEDS"
);
await wooPP.setCapBal(btcToken.address, btcCapBal);

await expect(wooPP.swap(btcToken.address, quote.address, ONE, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: BASE_BALANCE_NOT_ENOUGH"
"WooPPV2: !BASE"
);

await expect(wooPP.swap(ZERO_ADDR, quote.address, ONE, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
Expand All @@ -341,6 +335,26 @@ describe("WooPPV2 Integration tests", () => {
).to.be.revertedWith("WooPPV2: quoteAmount_LT_minQuoteAmount");
});

it("sellBase cap fail", async() => {
const bal = await wooPP.balance(btcToken.address);
const addAmount = ONE.mul(2);
await btcToken.mint(user2.address, addAmount);

const baseAmount = ONE;
await wooPP.setCapBal(btcToken.address, bal.add(baseAmount));

await btcToken.connect(user2).approve(wooPP.address, baseAmount);
await btcToken.connect(user2).transfer(wooPP.address, baseAmount);
await wooPP.swap(btcToken.address, quote.address, ONE, 0, user2.address, ZERO_ADDR);

await btcToken.connect(user2).approve(wooPP.address, baseAmount);
await btcToken.connect(user2).transfer(wooPP.address, baseAmount);
await expect(wooPP.swap(btcToken.address, quote.address, ONE, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: !CAP"
);
await wooPP.setCapBal(btcToken.address, btcCapBal);
});

it("sellQuote accuracy1", async () => {
await btcToken.mint(user1.address, ONE.mul(3));
await usdtToken.mint(user1.address, ONE.mul(100000));
Expand Down Expand Up @@ -441,14 +455,8 @@ describe("WooPPV2 Integration tests", () => {

it("sellQuote fail1", async () => {
const quoteAmount = ONE.mul(20000);

await wooPP.setCapBal(quote.address, quoteAmount.div(2));
await expect(wooPP.swap(quote.address, btcToken.address, quoteAmount, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: CAP_EXCEEDS"
);
await wooPP.setCapBal(quote.address, usdtCapBal);
await expect(wooPP.swap(quote.address, btcToken.address, quoteAmount, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: !QUOTE_BALANCE"
"WooPPV2: !QUOTE"
);

await expect(wooPP.swap(quote.address, ZERO_ADDR, quoteAmount, 0, user2.address, ZERO_ADDR)).to.be.revertedWith(
Expand All @@ -473,6 +481,25 @@ describe("WooPPV2 Integration tests", () => {
).to.be.revertedWith("WooPPV2: baseAmount_LT_minBaseAmount");
});

it("sellQuote cap fail", async() => {
const bal = await wooPP.balance(quote.address);
const quoteAmount = ONE.mul(100);
const addAmount = quoteAmount.mul(2);
await usdtToken.mint(user1.address, addAmount);

await wooPP.setCapBal(quote.address, bal.add(quoteAmount));
await usdtToken.connect(user1).approve(wooPP.address, quoteAmount);
await usdtToken.connect(user1).transfer(wooPP.address, quoteAmount);
await wooPP.swap(quote.address, btcToken.address, quoteAmount, 0, user1.address, ZERO_ADDR);

await usdtToken.connect(user1).approve(wooPP.address, quoteAmount);
await usdtToken.connect(user1).transfer(wooPP.address, quoteAmount);
await expect(wooPP.swap(quote.address, btcToken.address, quoteAmount, 0, user1.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: !CAP"
);
await wooPP.setCapBal(usdtToken.address, usdtCapBal);
});

it("balance accuracy", async () => {
const bal1 = await wooPP.balance(usdtToken.address);
const bal2 = await wooPP.balance(btcToken.address);
Expand Down Expand Up @@ -923,13 +950,6 @@ describe("WooPPV2 Integration tests", () => {
await wooToken.connect(user1).approve(wooPP.address, base1Amount);
await wooToken.connect(user1).transfer(wooPP.address, base1Amount);

await wooPP.setCapBal(wooToken.address, base1Amount.div(2));
await expect(
wooPP
.connect(user1)
.swap(wooToken.address, btcToken.address, base1Amount, minBase2Amount, user1.address, ZERO_ADDR)
).to.be.revertedWith("WooPPV2: CAP_EXCEEDS");
await wooPP.setCapBal(wooToken.address, wooCapBal);
await expect(
wooPP
.connect(user1)
Expand Down Expand Up @@ -963,6 +983,36 @@ describe("WooPPV2 Integration tests", () => {
.swap(wooToken.address, btcToken.address, base1Amount, minBase2Amount, user1.address, ZERO_ADDR)
).to.be.reverted;
});
it("swapBaseToBase cap fail", async () => {
_clearUser1Balance();

await wooToken.approve(wooPP.address, ONE.mul(1000000));
await wooPP.deposit(wooToken.address, ONE.mul(1000000));

await quote.approve(wooPP.address, ONE.mul(10000));
await wooPP.deposit(quote.address, ONE.mul(10000));

const base1Amount = ONE;
const minBase2Amount = base1Amount.mul(BTC_PRICE).mul(100).div(15).mul(997).div(1000);

const addAmount = base1Amount.mul(2);
await btcToken.mint(user1.address, addAmount);
const btcBal = await wooPP.balance(btcToken.address);
await wooPP.setCapBal(btcToken.address, btcBal.add(base1Amount));

await btcToken.connect(user1).approve(wooPP.address, base1Amount);
await btcToken.connect(user1).transfer(wooPP.address, base1Amount);
await wooPP
.swap(btcToken.address, wooToken.address, base1Amount, minBase2Amount, user1.address, ZERO_ADDR);

await btcToken.connect(user1).approve(wooPP.address, base1Amount);
await btcToken.connect(user1).transfer(wooPP.address, base1Amount);
await expect(wooPP
.swap(btcToken.address, wooToken.address, base1Amount, minBase2Amount, user1.address, ZERO_ADDR)).to.be.revertedWith(
"WooPPV2: !CAP"
);
await wooPP.setCapBal(wooToken.address, wooCapBal);
});
});

async function _clearUser1Balance() {
Expand Down

0 comments on commit 0c141fc

Please sign in to comment.