Skip to content

Commit bb9943b

Browse files
authored
Merge pull request #328 from Gearbox-protocol/quota-fix
fix: buy quota error
2 parents 4fd0976 + 3ffc44f commit bb9943b

File tree

2 files changed

+83
-7
lines changed

2 files changed

+83
-7
lines changed

src/core/creditAccount.spec.ts

Lines changed: 80 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,12 +1575,12 @@ describe("CreditAccount calcQuotaUpdate test", () => {
15751575
[tokenDataByNetwork.Mainnet.STETH]: {
15761576
amountInTarget: 10_1345n,
15771577
balance: 0n,
1578-
token: tokenDataByNetwork.Mainnet.DAI,
1578+
token: tokenDataByNetwork.Mainnet.STETH,
15791579
},
15801580
[tokenDataByNetwork.Mainnet.WETH]: {
15811581
amountInTarget: 0n * PERCENTAGE_FACTOR,
15821582
balance: 0n,
1583-
token: tokenDataByNetwork.Mainnet.DAI,
1583+
token: tokenDataByNetwork.Mainnet.WETH,
15841584
},
15851585
},
15861586

@@ -1637,12 +1637,12 @@ describe("CreditAccount calcQuotaUpdate test", () => {
16371637
[tokenDataByNetwork.Mainnet.STETH]: {
16381638
amountInTarget: 10_1345n,
16391639
balance: 0n,
1640-
token: tokenDataByNetwork.Mainnet.DAI,
1640+
token: tokenDataByNetwork.Mainnet.STETH,
16411641
},
16421642
[tokenDataByNetwork.Mainnet.WETH]: {
16431643
amountInTarget: 0n * PERCENTAGE_FACTOR,
16441644
balance: 0n,
1645-
token: tokenDataByNetwork.Mainnet.DAI,
1645+
token: tokenDataByNetwork.Mainnet.WETH,
16461646
},
16471647
},
16481648

@@ -1681,6 +1681,82 @@ describe("CreditAccount calcQuotaUpdate test", () => {
16811681
},
16821682
});
16831683
});
1684+
it("should buy quota correctly when all assets listed in both buy and spend", () => {
1685+
const result = CreditAccountData.calcQuotaUpdate({
1686+
maxDebt: HUGE_MAX_DEBT,
1687+
quotaReserve: QUOTA_RESERVE,
1688+
quotas: cmQuotas,
1689+
initialQuotas: {
1690+
...caQuota,
1691+
[tokenDataByNetwork.Mainnet.DAI]: {
1692+
quota: 0n * PERCENTAGE_FACTOR,
1693+
},
1694+
[tokenDataByNetwork.Mainnet.STETH]: {
1695+
quota: 15n * PERCENTAGE_FACTOR,
1696+
},
1697+
},
1698+
assetsAfterUpdate: {
1699+
[tokenDataByNetwork.Mainnet.STETH]: {
1700+
amountInTarget: 0n * PERCENTAGE_FACTOR,
1701+
balance: 0n,
1702+
token: tokenDataByNetwork.Mainnet.STETH,
1703+
},
1704+
[tokenDataByNetwork.Mainnet.DAI]: {
1705+
amountInTarget: 10n * PERCENTAGE_FACTOR,
1706+
balance: 0n,
1707+
token: tokenDataByNetwork.Mainnet.DAI,
1708+
},
1709+
[tokenDataByNetwork.Mainnet.WETH]: {
1710+
amountInTarget: 5n * PERCENTAGE_FACTOR,
1711+
balance: 0n,
1712+
token: tokenDataByNetwork.Mainnet.WETH,
1713+
},
1714+
},
1715+
1716+
allowedToObtain: {
1717+
[tokenDataByNetwork.Mainnet.STETH]: {},
1718+
[tokenDataByNetwork.Mainnet.DAI]: {},
1719+
[tokenDataByNetwork.Mainnet.WETH]: {},
1720+
},
1721+
allowedToSpend: {
1722+
[tokenDataByNetwork.Mainnet.STETH]: {},
1723+
[tokenDataByNetwork.Mainnet.DAI]: {},
1724+
[tokenDataByNetwork.Mainnet.WETH]: {},
1725+
},
1726+
liquidationThresholds: DEFAULT_LT,
1727+
});
1728+
1729+
expect(result.quotaIncrease).to.be.deep.eq([
1730+
{
1731+
balance: 10n * PERCENTAGE_FACTOR,
1732+
token: tokenDataByNetwork.Mainnet.DAI,
1733+
},
1734+
]);
1735+
expect(result.quotaDecrease).to.be.deep.eq([
1736+
{
1737+
balance: MIN_INT96,
1738+
token: tokenDataByNetwork.Mainnet.STETH,
1739+
},
1740+
{
1741+
balance: -5n * PERCENTAGE_FACTOR,
1742+
token: tokenDataByNetwork.Mainnet.WETH,
1743+
},
1744+
]);
1745+
expect(result.desiredQuota).to.be.deep.eq({
1746+
[tokenDataByNetwork.Mainnet.DAI]: {
1747+
balance: 10n * PERCENTAGE_FACTOR,
1748+
token: tokenDataByNetwork.Mainnet.DAI,
1749+
},
1750+
[tokenDataByNetwork.Mainnet.WETH]: {
1751+
balance: 5n * PERCENTAGE_FACTOR,
1752+
token: tokenDataByNetwork.Mainnet.WETH,
1753+
},
1754+
[tokenDataByNetwork.Mainnet.STETH]: {
1755+
balance: 0n * PERCENTAGE_FACTOR,
1756+
token: tokenDataByNetwork.Mainnet.STETH,
1757+
},
1758+
});
1759+
});
16841760
});
16851761

16861762
describe("CreditAccount calcAvgQuotaBorrowRate test", () => {

src/core/creditAccount.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ export class CreditAccountData {
594594
Record<Address, Asset>
595595
>((acc, token) => {
596596
const ch = this.getSingleQuotaChange(token as Address, 0n, props);
597-
if (ch) acc[ch.token] = ch;
597+
if (ch && ch.balance < 0) acc[ch.token] = ch;
598598
return acc;
599599
}, {});
600600

@@ -626,7 +626,7 @@ export class CreditAccountData {
626626
maxQuotaIncrease,
627627
props,
628628
);
629-
if (ch) acc[ch.token] = ch;
629+
if (ch && ch.balance > 0) acc[ch.token] = ch;
630630
return acc;
631631
}, {});
632632

@@ -704,7 +704,7 @@ export class CreditAccountData {
704704
const quotaChange =
705705
unsafeQuotaChange > 0
706706
? BigIntMath.min(maxQuotaIncrease, unsafeQuotaChange)
707-
: initialQuota !== 0n &&
707+
: unsafeQuotaChange < 0 &&
708708
BigIntMath.abs(unsafeQuotaChange) >= initialQuota
709709
? MIN_INT96
710710
: unsafeQuotaChange;

0 commit comments

Comments
 (0)