diff --git a/README.md b/README.md
index b30cad17..9e57437b 100644
--- a/README.md
+++ b/README.md
@@ -476,7 +476,7 @@ For a given branch, the system maintains the following invariant:
That is:
-`ActivePool.aggRecordedDebt + ActivePool.calcPendingAggInterest() + DefaultPool.BoldDebt = SUM_i=1_n(TroveManager.getEntireTroveDebt())`
+`ActivePool.aggRecordedDebt + ActivePool.calcPendingAggInterest() = SUM_i=1_n(TroveManager.getEntireTroveDebt())`
For all `n` Troves in the branch.
@@ -492,17 +492,6 @@ Pending aggregate interest is “applied” upon most system actions. That is:
This is the only way BOLD is ever minted as interest. Applying individual interest to a Trove updates its recorded debt, but interest is always minted in aggregate.
-### Redistribution gains and interest accrual
-
-The redistribution mechanism from Liquity v1 is carried over to Liquity v2. That is, when the Stability Pool is empty, liquidations are performed by redistributing all debt and collateral from the liquidated Trove(s) to all other active Troves in proportion to their collateral.
-
-Thus active Troves potentially accrue redistribution debt gains over time. The total redistributed debt is recorded in the `DefaultPool`, and individual Troves' pending redistribution gains are handled in `TroveManager` by the `L_coll` and `L_boldDebt` global trackers.
-
-Whenever a Trove is touched e.g. by the borrower adjusting debt, its pending redistribution debt gain is "applied" i.e. moved into its recorded debt.
-
-Pending redistribution gains do **not** accrue interest at aggregate or individual level. All redistribution debt gains are held outside and apart from the interest accrual calculations. This means that a Trove with a relatively high pending redistribution debt gain has a slight advantage: it pays less interest than a Trove with equal entire debt but no pending redistribution gains.
-
-However, it is possible for anyone to permissionlessly apply a Trove's redistribution gain, i.e. to move them into the Trove's recorded debt via `TroveManager.applyPendingDebt`. This works for batch and non-batched Troves. As such, any unfairness in interest accrual due to redistribution gains can be manually removed.
### Redemption evasion mitigation
@@ -533,7 +522,7 @@ The premature adjustment fee works as so:
#### Batches and premature adjustment fees
##### Joining a batch
-When a trove joins a batch, it pays an upfront fee if the last trove adjustment was done less than the cool period ago. It does’t matter if the Trove and batch have the same interest rate, or when was the last adjustment by the batch.
+When a trove joins a batch, it pays an upfront fee if the last trove adjustment was done more than the cool period ago. It does’t matter if the Trove and batch have the same interest rate, or when was the last adjustment by the batch.
The last interest rate timestamp will be updated to the time of joining.
@@ -1210,8 +1199,8 @@ When `lastGoodPrice` is used to price the LST, the _real_ market price may be hi
| Scenario | Consequence |
|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
-| lastGoodPrice > real market price | Urgent redemptions return too little LST collateral, and may be unprofitable even when BOLD trades at $1 or below |
-| lastGoodPrice < real market price | Urgent redemptions return too much LST collateral. They may be too profitable, compared to the market price. |
+| lastGoodPrice > market price | Urgent redemptions return too little LST collateral, and may be unprofitable even when BOLD trades at $1 or below |
+| lastGoodPrice < market price | Urgent redemptions return too much LST collateral. They may be too profitable, compared to the market price. |
#### Solution
@@ -1226,29 +1215,15 @@ If the primary oracle setup fails on a given LST branch, then using `lastGoodPri
However, a fallback price utilizing the ETH-USD price and the LST's canonical rate could be used. The proposed fallback price calculation for each branch is here:
-| Collateral | Primary price calc | Fallback if LST market oracle fails | Fallback if ETH-USD market oracle fails | Fallback if canonical rate fails |
-|------------|---------------------------------------------------------|------------------------------------------------------------|-----------------------------------------|----------------------------------|
-| WETH | ETH-USD | N/A | lastGoodPrice | N/A |
-| WSTETH | STETH-USD * WSTETH-STETH_canonical | min(lastGoodPrice, ETH-USD * WSTETH-STETH_canonical) | lastGoodPrice | lastGoodPrice |
-| RETH | min(ETH-USD * RETH-ETH, ETH-USD * RETH-ETH_canonical) | min(lastGoodPrice, ETH-USD * RETH-ETH_canonical) | lastGoodPrice | lastGoodPrice |
-
-
-## Primary LST oracle failure
-
-During shutdown no borrower ops are allowed, so the main risk of a manipulated canonical rate (inflated price and excess BOLD minting) is eliminated. However, in this case we still take a minimum: `min(lastGoodPrice, ETH-USD * canonical_rate)`. This ensures that if the canonical rate is also manipulated up, we still give urgent redemptions a chance of being profitable (and clearing bad debt) with the `lastGoodPrice`.
-
-#### STETH-USD oracle failure
-
-When this oracle fails, the WSTETH PriceFeed switches to pricing WSTETH in USD with `min(lastGoodPrice, ETH-USD * WSTETH-STETH_canonical)`. Since we substitute the failed STETH-USD oracle with the ETH-USD oracle, this inherently assumes that 1 STETH is worth 1 ETH. This is not guaranteed, though its deemed a reasonable assumption during branch shut down, where the system's priority is purely to clear bad debt via urgent redemptions.
-
-## Canonical rate failure
-The LST canonical exchange rate is used in all calculations on all PriceFeeds. If it fails, the branch falls back to using the `lastGoodPrice`, and the branch gets shut down if it is live. If the canonical rate fails _after_ shut down, then the LST PriceFeed switches `lastGoodPrice` and the branch remains shut down. When calling the LST contract externally to fetch the canonical rate, failure is defined as:
+| Collateral | Primary price calc | Fallback price calc |
+|------------|----------------------------------------------------------------|--------------------------------------------|
+| WETH | ETH-USD | lastGoodPrice |
+| WSTETH | STETH-USD * WSTETH-STETH_canonical | ETH-USD * WSTETH-STETH_canonical |
+| RETH | min(ETH-USD * RETH-ETH, ETH-USD * RETH-ETH_canonical) | ETH-USD * RETH-ETH_canonical |
-- The returned rate is 0, or
-- The external call reverts
+During shutdown no borrower ops are allowed, so the main risk of a manipulated canonical rate (inflated price and excess BOLD minting) is eliminated, and it will be safe to use the canonical rate in conjunction with ETH-USD.
-## ETH-USD oracle failure
-The ETH-USD market oracle is used in all calculations on all PriceFeeds. If it fails, the branch falls back to using the `lastGoodPrice`, and the branch gets shut down if it is live. If the ETH-USD oracle fails _after_ shut down, then the LST PriceFeed switches `lastGoodPrice` and the branch remains shut down.
+Additionally, if the _ETH-USD_ oracle fails after shut down, then the LST PriceFeed should finally switch to the `lastGoodPrice`, and the branch remains shut down.
The full logic is implemented in this PR:
https://github.com/liquity/bold/pull/393
@@ -1296,7 +1271,7 @@ As mentioned in the interest rate [implementation section](#core-debt-invariant)
That is:
-`ActivePool.aggRecordedDebt + ActivePool.calcPendingAggInterest() + DefaultBool.BoltDebt = SUM_i=1_n(TroveManager.getEntireTroveDebt())`
+`ActivePool.aggRecordedDebt + ActivePool.calcPendingAggInterest() = SUM_i=1_n(TroveManager.getEntireTroveDebt())`
For all `n` Troves in the branch.
@@ -1379,13 +1354,7 @@ Various solutions have been fielded. Generally, any solution which appears to cr
4. **New multi-collateral Stability Pool.** This pool would absorb some fraction of liquidations from all branches, including shut down branches.
-5. **Governance can direct BOLD interest to pay down bad debt**. BOLD interest could be voted to be redirected to paying down the bad debt over time. Although this would not directly clear the bad debt, economically, it should have the same impact - since ultimately, it is the redeemability of _circulating_ BOLD that determines the peg. When an amount equal to the bad debt has been burned, then all circulating BOLD is fully redeemable. See this example:
-
-
-
-This provides a credible way of eventually "filling the hole" created by bad debt (unlike other approaches such as the SP haircut, which depends on SP funds). No additional core system code nor additional governance features are required. Governance may simply propose to redirect BOLD interest to a burn address.
-
-If there is remaining collateral in the shutdown branch (albeit perhaps at zero USD value) and there are liquidateable Troves, Governance could alternatively vote to direct fees to a permissionless contract that deposits the BOLD to the SP of the shutdown branch and liquidates the Troves against those funds. The resulting collateral gains could, if they have non-zero value, be swapped on a DEX, e.g. for BOLD which could be then directed to LP incentives. All deposits and swaps could be handled permissionlessly by this governance-deployed contract.
+5. **Governance can direct BOLD interest to pay down bad debt**. BOLD interest could be voted to be redirected to paying down the bad debt over time.
And some additional solutions that may help reduce the chance of bad debt occurring in the first place:
@@ -1393,12 +1362,24 @@ And some additional solutions that may help reduce the chance of bad debt occurr
7. **Pro-rata redemptions at TCR < 100% (branch specific, not routed)**. Urgent redemptions are helpful for shrinking the debt of a shut down branch when it is at `TCR > 100%`. However, at `TCR < 100%`, urgent redemptions do not help clear the bad debt. They simply remove all collateral and push it into its final state faster (and in fact, make it slightly worse since they pay a slight collateral bonus). At `TCR < 100%`, we could offer special pro-rata redemptions only on the shut down branch - e.g. at `TCR = 80%`, users may redeem 1 BOLD for $0.80 worth of collateral. This would (in principle) allow someone to completely clear the bad debt via redemption. At first glance it seems unprofitable, but if the redeemer has reason to believe the collateral is underpriced and the price may rebound at some point in future, they may believe it to be profitable to redeem pro-rata.
-**Conclusion**
+**Chosen solution**
-Ultimately, no measures have been implemented in the protocol directly, so the protocol may end up with some bad debt in the case of a branch shut down. Here there is a theoretical possibility that the BOLD supply may be reduced by either users accidentally burning BOLD, or that borrower's interest could be directed by governance to burn BOLD, which would restore its backing over time.
+Solution 5 is chosen. Governance can vote to burn the interest under its control by sending the minted BOLD to a burn address. Although this does not directly clear the bad debt, economically, it should have the same impact - since ultimately, it is the redeemability of _circulating_ BOLD that determines the peg. When an amount equal to the bad debt has been burned, then all circulating BOLD is fully redeemable.
+See this example:
-### 11 - Inaccurate calculation of average branch interest rate
+
+
+This was chosen over other approaches because:
+
+- It provides a credible way of eventually "filling the hole" created by bad debt (unlike other approaches such as the SP haircut, which depends on SP funds)
+- No additional core system code nor additional governance features are required. Governance can simply propose to redirect BOLD interest to a burn address.
+
+**Extension: governance can liquidate and swap collateral gains**
+
+If there is remaining collateral in the shutdown branch (albeit perhaps at zero USD value) and there are liquidateable Troves, Governance could alternatively vote to direct fees to a permissionless contract that deposits the BOLD to the SP of the shutdown branch and liquidates the Troves against those funds. The resulting collateral gains could, if they have non-zero value, be swapped on a DEX, e.g. for BOLD which could be then directed to LP incentives. All deposits and swaps could be handled permissionlessly by this governance-deployed contract.
+
+### 11 - ## Inaccurate calculation of average branch interest rate
`getNewApproxAvgInterestRateFromTroveChange` does not actually calculate the correct average interest rate for a collateral branch. Ideally, we would like to calculate the debt-weighted average interest of all Troves within the branch, upon which our calculation of the upfront fee is based. The desired formula would be:
@@ -1458,52 +1439,6 @@ sum(debt_i)
While this wouldn't result in the most accurate estimation of the average interest rate either — considering we'd be using outdated debt values sampled at different times for each Trove as weights — at least we would have consistent weights in the numerator and denominator of our weighted average. To implement this though, we'd have to keep track of this modified sum (i.e. the sum of recorded Trove debts) in `ActivePool`, which we currently don't do.
-## 12 - Borrower can create multiple unredeemable Troves and evade redemptions
-
-Brought up by @javalasers on Discord:
-
-**Description:**
-
-(credit @javalasers) There's an attack vector where the user can:
-
-- Create a trove with `MIN_DEBT` of debt and `MIN_ANNUAL_INTEREST_RATE` interest.
-- Redeem a tiny amount of BOLD worth of collateral from the protocol
-- If they hit their own Trove, They now have a trove paying the min interest but with `debt < MIN_DEBT`, which (in previous system logic) makes this Trove unredeemable.
-- This operation could be repeated in order to create multiple Troves at `debt < MIN_DEBT`, for a total unredeemable debt of ~ `n * MIN_DEBT`
-
-This has been fixed in this PR:
-https://github.com/liquity/bold/pull/426
-
-Here is the original impact, pre-fix:
-
-**Impact:**
-
-If this attack were profitable, it may break the whole equilibrium and game theory of the user set interest rate.
-
-Some math should be done, and it heavily depends on gas price, but some considerations:
-
-- The interest wouldn’t be zero due to the min. interest rate, so eventually the Trove would become redeemable again when it's debt rises above `MIN_DEBT` close to `MIN_DEBT`. So if the aim is to keep it 1 year, at min interest rate of 0.5%, the zombie troves should have 1,990 BOLD debt.
-- To set it up `~2n` txs are needed, where `n ~= total debt / MIN_DEBT`
-- There’s an additional `(n-1) * ETH_GAS_COMPENSATION` ETH that needs to be locked up.
-
-Also, the management of the Trove needs to be considered, so:
-- Either they all have a very high CR -> not capital efficient, it’s kind of a hidden cost
-- Or then 2n times more gas have to be spent to adjust troves every time if the attacker is trying to have a low CR and actively manage them (for each trove there’s 1 adjustment that brings it up above `MIN_DEBT` and then again a redemption).
-
-**Potential Solutions**
-
-1. Keep a pointer to the last redemeed zombie trove, and use that one first when the next redemption happens (h/t @danielattilasimon ). The attack would still work with redistributions - even after having debt reduced to 0 redistributions could result in the attacker's Trove at `debt < MIN_DEBT` but that’s far more unlikely and much harder to perform (with an extra cost of 5% of the SP size, a huge trove to be liquidated could be opened and then go for the redistributions - however, it’s hard, expensive, can’t be done in 1 tx, it depends on ETH fluctuations, on the global TCR...).
-
-2. When a trove gets redeemed and ends up with non zero debt, automatically set it to the max interest rate (h/t @cvalkan)
-
-**Chosen solution**
-
-Solution 1. was implemented in this PR:
-https://github.com/liquity/bold/pull/426
-
-Note: with this approach, it can happen that a zombie Trove belonging to a batch gets its debt increased to above `MIN_DEBT` due to its batch being updated but without a direct adjustment occurring on the Trove itself - in which case, the Trove remains a zombie and holds the pointer to the last zombie trove, so it will get still redeemed first in the list upon the next redemption.
-
-However this seems like quite an edge case: the Trove needs to be batched, get partially redeemed, become a zombie, and then the batch updated before the borrower touches it and debt increased to above MIN_DEBT, and then redeemed _again_ as first in the list. The borrower can easily prevent the last step if desired by touching the Trove and updating its debt to `debt > MIN_DEBT` beforehand.
## Requirements
diff --git a/contracts/README.md b/contracts/README.md
index cf42d0ca..26b6ebf2 100644
--- a/contracts/README.md
+++ b/contracts/README.md
@@ -27,8 +27,6 @@ $ forge build
$ forge test
```
-Run tests with `forge test -vvv` to see the console logs, which will show trove URI data.
-
### Format
```shell
diff --git a/contracts/src/BorrowerOperations.sol b/contracts/src/BorrowerOperations.sol
index d1478df0..3e8e6574 100644
--- a/contracts/src/BorrowerOperations.sol
+++ b/contracts/src/BorrowerOperations.sol
@@ -128,7 +128,7 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
error BatchInterestRateChangePeriodNotPassed();
error TroveNotOpen();
error TroveNotActive();
- error TroveNotZombie();
+ error TroveNotUnredeemable();
error TroveOpen();
error UpfrontFeeTooHigh();
error BelowCriticalThreshold();
@@ -470,7 +470,7 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
_adjustTrove(troveManagerCached, _troveId, troveChange, _maxUpfrontFee);
}
- function adjustZombieTrove(
+ function adjustUnredeemableTrove(
uint256 _troveId,
uint256 _collChange,
bool _isCollIncrease,
@@ -481,7 +481,7 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
uint256 _maxUpfrontFee
) external override {
ITroveManager troveManagerCached = troveManager;
- _requireTroveIsZombie(troveManagerCached, _troveId);
+ _requireTroveIsUnredeemable(troveManagerCached, _troveId);
TroveChange memory troveChange;
_initTroveChange(troveChange, _collChange, _isCollIncrease, _boldChange, _isDebtIncrease);
@@ -520,7 +520,7 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
_requireIsNotInBatch(_troveId);
address owner = troveNFT.ownerOf(_troveId);
_requireSenderIsOwnerOrInterestManager(_troveId, owner);
- _requireInterestRateInDelegateRange(_troveId, _newAnnualInterestRate, owner);
+ _requireInterestRateInDelegateRange(_troveId, _newAnnualInterestRate);
_requireTroveIsActive(troveManagerCached, _troveId);
LatestTroveData memory trove = troveManagerCached.getLatestTroveData(_troveId);
@@ -650,8 +650,8 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
}
}
- // Make sure the Trove doesn't end up zombie
- // Now the max repayment is capped to stay above MIN_DEBT, so this only applies to adjustZombieTrove
+ // Make sure the Trove doesn't end up unredeemable
+ // Now the max repayment is capped to stay above MIN_DEBT, so this only applies to adjustUnredeemableTrove
_requireAtLeastMinDebt(vars.newDebt);
vars.newICR = LiquityMath._computeCR(vars.newColl, vars.newDebt, vars.price);
@@ -787,8 +787,8 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
);
activePool.mintAggInterestAndAccountForTroveChange(change, batchManager);
- // If the trove was zombie, and now it’s not anymore, put it back in the list
- if (_checkTroveIsZombie(troveManagerCached, _troveId) && trove.entireDebt >= MIN_DEBT) {
+ // If the trove was unredeemable, and now it’s not anymore, put it back in the list
+ if (_checkTroveIsUnredeemable(troveManagerCached, _troveId) && trove.entireDebt >= MIN_DEBT) {
troveManagerCached.setTroveStatusToActive(_troveId);
_reInsertIntoSortedTroves(
_troveId, trove.annualInterestRate, _upperHint, _lowerHint, batchManager, batch.annualInterestRate
@@ -1287,17 +1287,6 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
}
}
- function _requireInterestRateInDelegateRange(uint256 _troveId, uint256 _annualInterestRate, address _owner) internal view {
- InterestIndividualDelegate memory individualDelegate = interestIndividualDelegateOf[_troveId];
- // We have previously checked that sender is either owner or delegate
- // If it’s owner, this restriction doesn’t apply
- if (individualDelegate.account == msg.sender) {
- _requireInterestRateInRange(
- _annualInterestRate, individualDelegate.minInterestRate, individualDelegate.maxInterestRate
- );
- }
- }
-
function _requireIsNotInBatch(uint256 _troveId) internal view {
if (interestBatchManagerOf[_troveId] != address(0)) {
revert TroveInBatch();
@@ -1315,7 +1304,7 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
function _requireTroveIsOpen(ITroveManager _troveManager, uint256 _troveId) internal view {
ITroveManager.Status status = _troveManager.getTroveStatus(_troveId);
- if (status != ITroveManager.Status.active && status != ITroveManager.Status.zombie) {
+ if (status != ITroveManager.Status.active && status != ITroveManager.Status.unredeemable) {
revert TroveNotOpen();
}
}
@@ -1327,20 +1316,20 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
}
}
- function _requireTroveIsZombie(ITroveManager _troveManager, uint256 _troveId) internal view {
- if (!_checkTroveIsZombie(_troveManager, _troveId)) {
- revert TroveNotZombie();
+ function _requireTroveIsUnredeemable(ITroveManager _troveManager, uint256 _troveId) internal view {
+ if (!_checkTroveIsUnredeemable(_troveManager, _troveId)) {
+ revert TroveNotUnredeemable();
}
}
- function _checkTroveIsZombie(ITroveManager _troveManager, uint256 _troveId) internal view returns (bool) {
+ function _checkTroveIsUnredeemable(ITroveManager _troveManager, uint256 _troveId) internal view returns (bool) {
ITroveManager.Status status = _troveManager.getTroveStatus(_troveId);
- return status == ITroveManager.Status.zombie;
+ return status == ITroveManager.Status.unredeemable;
}
function _requireTroveIsNotOpen(ITroveManager _troveManager, uint256 _troveId) internal view {
ITroveManager.Status status = _troveManager.getTroveStatus(_troveId);
- if (status == ITroveManager.Status.active || status == ITroveManager.Status.zombie) {
+ if (status == ITroveManager.Status.active || status == ITroveManager.Status.unredeemable) {
revert TroveOpen();
}
}
@@ -1453,6 +1442,15 @@ contract BorrowerOperations is LiquityBase, AddRemoveManagers, IBorrowerOperatio
if (_minInterestRate >= _maxInterestRate) revert MinGeMax();
}
+ function _requireInterestRateInDelegateRange(uint256 _troveId, uint256 _annualInterestRate) internal view {
+ InterestIndividualDelegate memory individualDelegate = interestIndividualDelegateOf[_troveId];
+ if (individualDelegate.account != address(0)) {
+ _requireInterestRateInRange(
+ _annualInterestRate, individualDelegate.minInterestRate, individualDelegate.maxInterestRate
+ );
+ }
+ }
+
function _requireInterestRateInBatchManagerRange(address _interestBatchManagerAddress, uint256 _annualInterestRate)
internal
view
diff --git a/contracts/src/Interfaces/IBorrowerOperations.sol b/contracts/src/Interfaces/IBorrowerOperations.sol
index e23a0820..d4eb9c61 100644
--- a/contracts/src/Interfaces/IBorrowerOperations.sol
+++ b/contracts/src/Interfaces/IBorrowerOperations.sol
@@ -67,7 +67,7 @@ interface IBorrowerOperations is ILiquityBase, IAddRemoveManagers {
uint256 _maxUpfrontFee
) external;
- function adjustZombieTrove(
+ function adjustUnredeemableTrove(
uint256 _troveId,
uint256 _collChange,
bool _isCollIncrease,
diff --git a/contracts/src/Interfaces/ITroveManager.sol b/contracts/src/Interfaces/ITroveManager.sol
index 9db8cc66..6dc5ff6f 100644
--- a/contracts/src/Interfaces/ITroveManager.sol
+++ b/contracts/src/Interfaces/ITroveManager.sol
@@ -18,7 +18,7 @@ interface ITroveManager is ILiquityBase {
active,
closedByOwner,
closedByLiquidation,
- zombie
+ unredeemable
}
function shutdownTime() external view returns (uint256);
@@ -53,8 +53,6 @@ interface ITroveManager is ILiquityBase {
function getCurrentICR(uint256 _troveId, uint256 _price) external view returns (uint256);
- function lastZombieTroveId() external view returns (uint256);
-
function batchLiquidateTroves(uint256[] calldata _troveArray) external;
function redeemCollateral(
@@ -90,7 +88,7 @@ interface ITroveManager is ILiquityBase {
uint256 _batchDebt
) external;
- // Called from `adjustZombieTrove()`
+ // Called from `adjustUnredeemableTrove()`
function setTroveStatusToActive(uint256 _troveId) external;
function onAdjustTroveInterestRate(
diff --git a/contracts/src/NFTMetadata/MetadataNFT.sol b/contracts/src/NFTMetadata/MetadataNFT.sol
index 73b65f52..80714a4a 100644
--- a/contracts/src/NFTMetadata/MetadataNFT.sol
+++ b/contracts/src/NFTMetadata/MetadataNFT.sol
@@ -8,8 +8,6 @@ import "./utils/baseSVG.sol";
import "./utils/bauhaus.sol";
import "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol";
-import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol";
-
import {ITroveManager} from "src/Interfaces/ITroveManager.sol";
interface IMetadataNFT {
@@ -17,7 +15,6 @@ interface IMetadataNFT {
uint256 _tokenId;
address _owner;
address _collToken;
- address _boldToken;
uint256 _collAmount;
uint256 _debtAmount;
uint256 _interestRate;
@@ -38,8 +35,7 @@ contract MetadataNFT is IMetadataNFT {
}
function uri(TroveData memory _troveData) public view returns (string memory) {
- string memory attr = attributes(_troveData);
- return json.formattedMetadata(name, description, renderSVGImage(_troveData), attr);
+ return json.formattedMetadata(name, description, renderSVGImage(_troveData));
}
function renderSVGImage(TroveData memory _troveData) internal view returns (string memory) {
@@ -49,25 +45,6 @@ contract MetadataNFT is IMetadataNFT {
);
}
- function attributes(TroveData memory _troveData) public view returns (string memory) {
- //include: collateral token address, collateral amount, debt token address, debt amount, interest rate, status
- return string.concat(
- '[{"trait_type": "Collateral Token", "value": "',
- Strings.toHexString(_troveData._collToken),
- '"}, {"trait_type": "Collateral Amount", "value": "',
- Strings.toString(_troveData._collAmount),
- '"}, {"trait_type": "Debt Token", "value": "',
- Strings.toHexString(_troveData._boldToken),
- '"}, {"trait_type": "Debt Amount", "value": "',
- Strings.toString(_troveData._debtAmount),
- '"}, {"trait_type": "Interest Rate", "value": "',
- Strings.toString(_troveData._interestRate),
- '"}, {"trait_type": "Status", "value": "',
- _status2Str(_troveData._status),
- '"} ]'
- );
- }
-
function dynamicTextComponents(TroveData memory _troveData) public view returns (string memory) {
string memory id = LibString.toHexString(_troveData._tokenId);
id = string.concat(LibString.slice(id, 0, 6), "...", LibString.slice(id, 38, 42));
@@ -85,7 +62,7 @@ contract MetadataNFT is IMetadataNFT {
if (status == ITroveManager.Status.active) return "Active";
if (status == ITroveManager.Status.closedByOwner) return "Closed";
if (status == ITroveManager.Status.closedByLiquidation) return "Liquidated";
- if (status == ITroveManager.Status.zombie) return "Zombie";
+ if (status == ITroveManager.Status.unredeemable) return "Unredeemable";
return "";
}
}
diff --git a/contracts/src/NFTMetadata/utils/JSON.sol b/contracts/src/NFTMetadata/utils/JSON.sol
index 9fd422b1..6a80d114 100644
--- a/contracts/src/NFTMetadata/utils/JSON.sol
+++ b/contracts/src/NFTMetadata/utils/JSON.sol
@@ -10,25 +10,16 @@ library json {
string constant DOUBLE_QUOTES = '\\"';
- function formattedMetadata(
- string memory name,
- string memory description,
- string memory svgImg,
- string memory attributes
- ) internal pure returns (string memory) {
+ function formattedMetadata(string memory name, string memory description, string memory svgImg)
+ internal
+ pure
+ returns (string memory)
+ {
return string.concat(
"data:application/json;base64,",
encode(
bytes(
- string.concat(
- "{",
- _prop("name", name),
- _prop("description", description),
- _xmlImage(svgImg),
- ',"attributes":',
- attributes,
- "}"
- )
+ string.concat("{", _prop("name", name), _prop("description", description), _xmlImage(svgImg), "}")
)
)
);
diff --git a/contracts/src/TroveManager.sol b/contracts/src/TroveManager.sol
index 274232a2..668116e3 100644
--- a/contracts/src/TroveManager.sol
+++ b/contracts/src/TroveManager.sol
@@ -111,8 +111,6 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
// Array of all batch managers - used to fetch them off-chain
address[] public batchIds;
- uint256 public lastZombieTroveId;
-
// Error trackers for the trove redistribution calculation
uint256 internal lastCollError_Redistribution;
uint256 internal lastBoldDebtError_Redistribution;
@@ -151,7 +149,6 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
uint256 oldWeightedRecordedDebt;
uint256 newWeightedRecordedDebt;
uint256 newStake;
- bool isZombieTrove;
LatestTroveData trove;
LatestBatchData batch;
}
@@ -455,7 +452,7 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
}
function _isLiquidatableStatus(Status _status) internal pure returns (bool) {
- return _status == Status.active || _status == Status.zombie;
+ return _status == Status.active || _status == Status.unredeemable;
}
function _batchLiquidateTroves(
@@ -666,26 +663,14 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
bool isTroveInBatch = _singleRedemption.batchAddress != address(0);
uint256 newDebt = _applySingleRedemption(_defaultPool, _singleRedemption, isTroveInBatch);
- // Make Trove zombie if it's tiny (and it wasn’t already), in order to prevent griefing future (normal, sequential) redemptions
+ // Make Trove unredeemable if it's tiny, in order to prevent griefing future (normal, sequential) redemptions
if (newDebt < MIN_DEBT) {
- if (!_singleRedemption.isZombieTrove) {
- Troves[_singleRedemption.troveId].status = Status.zombie;
- if (isTroveInBatch) {
- sortedTroves.removeFromBatch(_singleRedemption.troveId);
- } else {
- sortedTroves.remove(_singleRedemption.troveId);
- }
- // If it’s a partial redemption, let’s store a pointer to it so it’s used first in the next one
- if (newDebt > 0) {
- lastZombieTroveId = _singleRedemption.troveId;
- }
- } else if (newDebt == 0) {
- // Reset last zombie trove pointer if the previous one was fully redeemed now
- lastZombieTroveId = 0;
+ Troves[_singleRedemption.troveId].status = Status.unredeemable;
+ if (isTroveInBatch) {
+ sortedTroves.removeFromBatch(_singleRedemption.troveId);
+ } else {
+ sortedTroves.remove(_singleRedemption.troveId);
}
- } else {
- // Reset last zombie trove pointer if the previous one ended up above min debt
- lastZombieTroveId = 0;
}
}
@@ -745,13 +730,7 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
uint256 remainingBold = _boldamount;
SingleRedemptionValues memory singleRedemption;
- // Let’s check if there’s a pending zombie trove from previous redemption
- if (lastZombieTroveId != 0) {
- singleRedemption.troveId = lastZombieTroveId;
- singleRedemption.isZombieTrove = true;
- } else {
- singleRedemption.troveId = sortedTrovesCached.getLast();
- }
+ singleRedemption.troveId = sortedTrovesCached.getLast();
address lastBatchUpdatedInterest = address(0);
// Loop through the Troves starting from the one with lowest collateral ratio until _amount of Bold is exchanged for collateral
@@ -759,13 +738,7 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
while (singleRedemption.troveId != 0 && remainingBold > 0 && _maxIterations > 0) {
_maxIterations--;
// Save the uint256 of the Trove preceding the current one
- uint256 nextUserToCheck;
- if (singleRedemption.isZombieTrove) {
- nextUserToCheck = sortedTrovesCached.getLast();
- } else {
- nextUserToCheck = sortedTrovesCached.getPrev(singleRedemption.troveId);
- }
-
+ uint256 nextUserToCheck = sortedTrovesCached.getPrev(singleRedemption.troveId);
// Skip if ICR < 100%, to make sure that redemptions always improve the CR of hit Troves
if (getCurrentICR(singleRedemption.troveId, _price) < _100pct) {
singleRedemption.troveId = nextUserToCheck;
@@ -796,7 +769,6 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
remainingBold -= singleRedemption.boldLot;
singleRedemption.troveId = nextUserToCheck;
- singleRedemption.isZombieTrove = false;
}
// We are removing this condition to prevent blocking redemptions
@@ -839,7 +811,7 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
bool isTroveInBatch = _singleRedemption.batchAddress != address(0);
_applySingleRedemption(_defaultPool, _singleRedemption, isTroveInBatch);
- // No need to make this Trove zombie if it has tiny debt, since:
+ // No need to make this Trove unredeemable if it has tiny debt, since:
// - This collateral branch has shut down and urgent redemptions are enabled
// - Urgent redemptions aren't sequential, so they can't be griefed by tiny Troves.
}
@@ -1312,9 +1284,6 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
function setTroveStatusToActive(uint256 _troveId) external {
_requireCallerIsBorrowerOperations();
Troves[_troveId].status = Status.active;
- if (lastZombieTroveId == _troveId) {
- lastZombieTroveId = 0;
- }
}
function onAdjustTroveInterestRate(
@@ -1467,8 +1436,6 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
if (_batchAddress != address(0)) {
if (trove.status == Status.active) {
sortedTroves.removeFromBatch(_troveId);
- } else if (trove.status == Status.zombie && lastZombieTroveId == _troveId) {
- lastZombieTroveId = 0;
}
_removeTroveSharesFromBatch(
@@ -1483,8 +1450,6 @@ contract TroveManager is LiquityBase, ITroveManager, ITroveEvents {
} else {
if (trove.status == Status.active) {
sortedTroves.remove(_troveId);
- } else if (trove.status == Status.zombie && lastZombieTroveId == _troveId) {
- lastZombieTroveId = 0;
}
}
diff --git a/contracts/src/TroveNFT.sol b/contracts/src/TroveNFT.sol
index 97440176..c2ffd6ac 100644
--- a/contracts/src/TroveNFT.sol
+++ b/contracts/src/TroveNFT.sol
@@ -16,7 +16,6 @@ import {ITroveManager} from "./Interfaces/ITroveManager.sol";
contract TroveNFT is ERC721, ITroveNFT {
ITroveManager public immutable troveManager;
IERC20Metadata internal immutable collToken;
- IBoldToken internal immutable boldToken;
IMetadataNFT public immutable metadataNFT;
@@ -29,7 +28,6 @@ contract TroveNFT is ERC721, ITroveNFT {
troveManager = _addressesRegistry.troveManager();
collToken = _addressesRegistry.collToken();
metadataNFT = _addressesRegistry.metadataNFT();
- boldToken = _addressesRegistry.boldToken();
}
function tokenURI(uint256 _tokenId) public view override(ERC721, IERC721Metadata) returns (string memory) {
@@ -40,7 +38,6 @@ contract TroveNFT is ERC721, ITroveNFT {
_tokenId: _tokenId,
_owner: ownerOf(_tokenId),
_collToken: address(collToken),
- _boldToken: address(boldToken),
_collAmount: coll,
_debtAmount: debt,
_interestRate: annualInterestRate,
diff --git a/contracts/src/Zappers/GasCompZapper.sol b/contracts/src/Zappers/GasCompZapper.sol
index 801892d4..19d11794 100644
--- a/contracts/src/Zappers/GasCompZapper.sol
+++ b/contracts/src/Zappers/GasCompZapper.sol
@@ -155,7 +155,7 @@ contract GasCompZapper is AddRemoveManagers {
_adjustTrovePost(_collChange, _isCollIncrease, _boldChange, _isDebtIncrease, receiver);
}
- function adjustZombieTroveWithRawETH(
+ function adjustUnredeemableTroveWithRawETH(
uint256 _troveId,
uint256 _collChange,
bool _isCollIncrease,
@@ -166,7 +166,7 @@ contract GasCompZapper is AddRemoveManagers {
uint256 _maxUpfrontFee
) external {
address receiver = _adjustTrovePre(_troveId, _collChange, _isCollIncrease, _boldChange, _isDebtIncrease);
- borrowerOperations.adjustZombieTrove(
+ borrowerOperations.adjustUnredeemableTrove(
_troveId, _collChange, _isCollIncrease, _boldChange, _isDebtIncrease, _upperHint, _lowerHint, _maxUpfrontFee
);
_adjustTrovePost(_collChange, _isCollIncrease, _boldChange, _isDebtIncrease, receiver);
diff --git a/contracts/src/Zappers/WETHZapper.sol b/contracts/src/Zappers/WETHZapper.sol
index a11e58df..eca59bc5 100644
--- a/contracts/src/Zappers/WETHZapper.sol
+++ b/contracts/src/Zappers/WETHZapper.sol
@@ -143,7 +143,7 @@ contract WETHZapper is AddRemoveManagers {
_adjustTrovePost(_collChange, _isCollIncrease, _boldChange, _isDebtIncrease, receiver);
}
- function adjustZombieTroveWithRawETH(
+ function adjustUnredeemableTroveWithRawETH(
uint256 _troveId,
uint256 _collChange,
bool _isCollIncrease,
@@ -154,7 +154,7 @@ contract WETHZapper is AddRemoveManagers {
uint256 _maxUpfrontFee
) external {
address payable receiver = _adjustTrovePre(_troveId, _collChange, _isCollIncrease, _boldChange, _isDebtIncrease);
- borrowerOperations.adjustZombieTrove(
+ borrowerOperations.adjustUnredeemableTrove(
_troveId, _collChange, _isCollIncrease, _boldChange, _isDebtIncrease, _upperHint, _lowerHint, _maxUpfrontFee
);
_adjustTrovePost(_collChange, _isCollIncrease, _boldChange, _isDebtIncrease, receiver);
diff --git a/contracts/src/scripts/DeployLiquity2.s.sol b/contracts/src/scripts/DeployLiquity2.s.sol
index d487927c..477fcfa7 100644
--- a/contracts/src/scripts/DeployLiquity2.s.sol
+++ b/contracts/src/scripts/DeployLiquity2.s.sol
@@ -478,12 +478,19 @@ contract DeployLiquity2Script is Script, StdCheats, MetadataDeployment {
// deploy zappers
(contracts.gasCompZapper, contracts.wethZapper) =
- _deployZappers(contracts.addressesRegistry, contracts.collToken, _weth);
+ _deployZappers(contracts.addressesRegistry, contracts.collToken, _weth);
}
- function _deployZappers(IAddressesRegistry _addressesRegistry, IERC20 _collToken, IWETH _weth)
+ function _deployZappers(
+ IAddressesRegistry _addressesRegistry,
+ IERC20 _collToken,
+ IWETH _weth
+ )
internal
- returns (GasCompZapper gasCompZapper, WETHZapper wethZapper)
+ returns (
+ GasCompZapper gasCompZapper,
+ WETHZapper wethZapper
+ )
{
bool lst = _collToken != _weth;
if (lst) {
diff --git a/contracts/src/test/AnchoredInvariantsTest.t.sol b/contracts/src/test/AnchoredInvariantsTest.t.sol
index e45f3cb9..212b0f5e 100644
--- a/contracts/src/test/AnchoredInvariantsTest.t.sol
+++ b/contracts/src/test/AnchoredInvariantsTest.t.sol
@@ -1,17 +1,13 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
-import {Strings} from "openzeppelin-contracts/contracts/utils/Strings.sol";
-
import "./TestContracts/DevTestSetup.sol";
import {BaseInvariantTest} from "./TestContracts/BaseInvariantTest.sol";
import {BaseMultiCollateralTest} from "./TestContracts/BaseMultiCollateralTest.sol";
import {AdjustedTroveProperties, InvariantsTestHandler} from "./TestContracts/InvariantsTestHandler.t.sol";
import {Logging} from "./Utils/Logging.sol";
-import {TroveId} from "./Utils/TroveId.sol";
-contract AnchoredInvariantsTest is Logging, BaseInvariantTest, BaseMultiCollateralTest, TroveId {
- using Strings for uint256;
+contract AnchoredInvariantsTest is Logging, BaseInvariantTest, BaseMultiCollateralTest {
using StringFormatting for uint256;
InvariantsTestHandler handler;
@@ -484,632 +480,4 @@ contract AnchoredInvariantsTest is Logging, BaseInvariantTest, BaseMultiCollater
vm.prank(hope);
handler.provideToSP(1, 4.127947448768090932 ether, false);
}
-
- function testSortedTroveSize() external {
- uint256 i = 1;
- TestDeployer.LiquityContractsDev memory c = branches[i];
-
- vm.prank(adam);
- handler.addMeToLiquidationBatch();
-
- vm.prank(barb);
- handler.addMeToLiquidationBatch();
-
- vm.prank(adam);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(adam);
- handler.registerBatchManager(
- 3,
- 0.100944149373120884 ether,
- 0.377922952132481818 ether,
- 0.343424998629201343 ether,
- 0.489955880173256455 ether,
- 2070930
- );
-
- vm.prank(carl);
- handler.addMeToLiquidationBatch();
-
- vm.prank(carl);
- handler.warp(9_303_785);
-
- vm.prank(barb);
- handler.registerBatchManager(
- 1,
- 0.301964103682871801 ether,
- 0.756908371280377546 ether,
- 0.540898165697757771 ether,
- 0.000017102564306416 ether,
- 27657915
- );
-
- vm.prank(fran);
- handler.addMeToLiquidationBatch();
-
- vm.prank(eric);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(hope);
- handler.addMeToLiquidationBatch();
-
- // upper hint: 30979495632948298397104351002742564073201815129975103483277328125306028611241
- // lower hint: 36051278007718023196469061266077621121244014979449590376694871896669965056265
- // upfront fee: 118.231198854524639989 ether
- vm.prank(gabe);
- handler.openTrove(
- 1, 7_591.289850943621327156 ether, 1.900000000017470971 ether, 0.812103428106344175 ether, 1121, 415425919
- );
-
- // redemption rate: 0.005000000000000004 ether
- // redeemed BOLD: 0.000000000000071705 ether
- // redeemed Troves: [
- // [],
- // [gabe],
- // [],
- // [],
- // ]
- vm.prank(hope);
- handler.redeemCollateral(0.000000000000071705 ether, 1);
-
- // redemption rate: 0.387443853477360594 ether
- // redeemed BOLD: 5_896.917877499258624384 ether
- // redeemed Troves: [
- // [],
- // [gabe],
- // [],
- // [],
- // ]
- vm.prank(gabe);
- handler.redeemCollateral(5_896.917877499258624384 ether, 1);
-
- vm.prank(eric);
- handler.warp(11_371_761);
-
- vm.prank(gabe);
- handler.registerBatchManager(
- 0,
- 0.23834235868248997 ether,
- 0.761711006198436234 ether,
- 0.523368647516059893 ether,
- 0.761688376122671962 ether,
- 31535998
- );
-
- vm.prank(hope);
- handler.registerBatchManager(
- 2,
- 0.036127532604869915 ether,
- 0.999999999999999999 ether,
- 0.963882428861225203 ether,
- 0.848537401570757863 ether,
- 29802393
- );
-
- vm.prank(eric);
- handler.addMeToUrgentRedemptionBatch();
-
- // batch manager: hope
- // upper hint: 111996671338791781291582287523793567344508255320483065919810498665837663289426
- // lower hint: 37857035535383668733402580992354953018471987882089934484705744026840633200601
- // upfront fee: 1_355.203530437779650125 ether
- vm.prank(carl);
- handler.openTroveAndJoinInterestBatchManager(
- 2, 73_312.036791249214758342 ether, 1.900020510596646286 ether, 40, 115, 737
- );
-
- vm.prank(barb);
- handler.registerBatchManager(
- 0,
- 0.955741837871335122 ether,
- 0.974535636428930833 ether,
- 0.964294359297779033 ether,
- 0.000000000000268875 ether,
- 3335617
- );
-
- vm.prank(gabe);
- handler.addMeToLiquidationBatch();
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 975.74654191520134809 ether
- vm.prank(fran);
- handler.provideToSP(2, 12_633.808570846161076142 ether, true);
-
- // batch manager: adam
- // upper hint: 7512901306961997563120107574274771509748256751277397278816998908345777536679
- // lower hint: 27989025468780058605431608942843597971189459457295957311648808450848491056535
- // upfront fee: 166.681364294341638522 ether
- vm.prank(carl);
- handler.openTroveAndJoinInterestBatchManager(
- 3, 25_307.541971224954454066 ether, 2.401194840294921108 ether, 142, 6432363, 25223
- );
-
- vm.prank(carl);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(adam);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(dana);
- handler.warp(8_774_305);
-
- vm.prank(adam);
- handler.warp(3_835);
-
- vm.prank(eric);
- handler.warp(9_078_180);
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 0 ether
- vm.prank(gabe);
- handler.provideToSP(2, 5_179.259567321319728284 ether, true);
-
- // price: 120.905132749610222778 ether
- vm.prank(hope);
- handler.setPrice(1, 2.100000000000002648 ether);
-
- vm.prank(barb);
- handler.lowerBatchManagementFee(1, 0.000008085711886436 ether);
-
- vm.prank(hope);
- handler.addMeToLiquidationBatch();
-
- vm.prank(adam);
- handler.addMeToLiquidationBatch();
-
- vm.prank(gabe);
- handler.addMeToLiquidationBatch();
-
- // price: 80.314880400478576408 ether
- vm.prank(gabe);
- handler.setPrice(1, 1.394988326842136963 ether);
-
- vm.prank(carl);
- handler.warp(1_849_907);
-
- // upper hint: 84800337471693920904250232874319843718400766719524250287777680170677855896573
- // lower hint: 0
- // upfront fee: 0 ether
- // function: adjustZombieTrove()
- vm.prank(gabe);
- handler.adjustTrove(
- 1,
- uint8(AdjustedTroveProperties.onlyColl),
- 29.524853479148084596 ether,
- true,
- 0 ether,
- true,
- 40,
- 14,
- 4554760
- );
-
- info("SortedTroves size: ", c.sortedTroves.getSize().toString());
- info("num troves: ", handler.numTroves(i).toString());
- info("num zombies: ", handler.numZombies(i).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
-
- // upper hint: 0
- // lower hint: 74750724351164404027318726202729770837051588626953680774538886892291438048970
- // upfront fee: 773.037543760336600445 ether
- vm.prank(carl);
- handler.openTrove(
- 0, 40_510.940914935073773948 ether, 2.063402456659389908 ether, 0.995000000000000248 ether, 0, 55487655
- );
-
- vm.prank(adam);
- handler.registerBatchManager(
- 0,
- 0.541865737266494949 ether,
- 0.672692246806001449 ether,
- 0.650860934960147488 ether,
- 0.070089828074852802 ether,
- 29179158
- );
-
- vm.prank(fran);
- handler.registerBatchManager(
- 1,
- 0.566980989185701648 ether,
- 0.86881504225021711 ether,
- 0.702666683322997409 ether,
- 0.667232273668645041 ether,
- 7007521
- );
-
- vm.prank(dana);
- handler.addMeToUrgentRedemptionBatch();
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 1_129.588991574293634631 ether
- vm.prank(barb);
- handler.provideToSP(1, 0.000000000000000002 ether, false);
-
- info("SortedTroves size: ", c.sortedTroves.getSize().toString());
- info("num troves: ", handler.numTroves(i).toString());
- info("num zombies: ", handler.numZombies(i).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
-
- // redemption rate: 0.184202341360173417 ether
- // redeemed BOLD: 66_462.494346928386331338 ether
- // redeemed Troves: [
- // [carl],
- // [gabe],
- // [],
- // [carl],
- // ]
- vm.prank(eric);
- handler.redeemCollateral(66_462.49434692838633134 ether, 1);
-
- info("SortedTroves size: ", c.sortedTroves.getSize().toString());
- info("num troves: ", handler.numTroves(i).toString());
- info("num zombies: ", handler.numZombies(i).toString());
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- assertEq(c.sortedTroves.getSize(), handler.numTroves(i) - handler.numZombies(i), "Wrong SortedTroves size");
- }
-
- function testAssertLastZombieTroveInABatchHasMoreThanMinDebt() external {
- uint256 i = 1;
- TestDeployer.LiquityContractsDev memory c = branches[i];
-
- vm.prank(adam);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(hope);
- handler.registerBatchManager(
- 0,
- 0.99500000000072184 ether,
- 0.996944021609020651 ether,
- 0.99533906344899454 ether,
- 0.378970428480541887 ether,
- 314055
- );
-
- vm.prank(dana);
- handler.warp(2_225_439);
-
- vm.prank(adam);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(barb);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(barb);
- handler.registerBatchManager(
- 2,
- 0.995000000000009379 ether,
- 0.999999999998128142 ether,
- 0.997477804125778004 ether,
- 0.000000001035389259 ether,
- 10046
- );
-
- vm.prank(gabe);
- handler.registerBatchManager(
- 2,
- 0.346476084765605513 ether,
- 0.346476084765605514 ether,
- 0.346476084765605514 ether,
- 0.000000000000000002 ether,
- 27010346
- );
-
- vm.prank(fran);
- handler.warp(19_697_329);
-
- vm.prank(gabe);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(fran);
- handler.registerBatchManager(
- 1,
- 0.995000000000019257 ether,
- 0.999999999996150378 ether,
- 0.999999999226237651 ether,
- 0.696688179568702502 ether,
- 7641047
- );
-
- vm.prank(gabe);
- handler.warp(977_685);
-
- vm.prank(gabe);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(fran);
- handler.addMeToLiquidationBatch();
-
- // batch manager: fran
- // upper hint: 0
- // lower hint: 60678094901167127062962700790111047491633904950610080336398562382189456360809
- // upfront fee: 242.684833433337541236 ether
- vm.prank(gabe);
- handler.openTroveAndJoinInterestBatchManager(
- 1, 12_654.280610244006254376 ether, 2.145058504746006382 ether, 182, 22444926, 124118903
- );
-
- // redemption rate: 0.005 ether
- // redeemed BOLD: 0.000000000000017162 ether
- // redeemed Troves: [
- // [],
- // [gabe],
- // [],
- // [],
- // ]
- vm.prank(hope);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- handler.redeemCollateral(0.000000000000017162 ether, 0);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
-
- // upper hint: 79178440845664423591903906560915994242429107602729190780850212197412640295587
- // lower hint: 0
- // upfront fee: 624.393448965513162837 ether
- vm.prank(hope);
- handler.openTrove(
- 0, 32_721.264734011072612096 ether, 2.333153121000516764 ether, 0.995000000000109949 ether, 52719, 31482
- );
-
- // price: 244.435094708283018275 ether
- vm.prank(dana);
- handler.setPrice(1, 2.621637893811990143 ether);
-
- vm.prank(carl);
- handler.addMeToUrgentRedemptionBatch();
-
- // redemption rate: 0.37622704640950591 ether
- // redeemed BOLD: 34_333.025174298345667786 ether
- // redeemed Troves: [
- // [hope],
- // [gabe],
- // [],
- // [],
- // ]
- vm.prank(carl);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- handler.redeemCollateral(34_333.025174298345667787 ether, 0);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
-
- vm.prank(gabe);
- handler.addMeToLiquidationBatch();
-
- vm.prank(adam);
- handler.addMeToLiquidationBatch();
-
- // upper hint: hope
- // lower hint: hope
- // upfront fee: 45.851924869044942133 ether
- vm.prank(carl);
- handler.openTrove(
- 0, 3_111.607048463492852195 ether, 1.16895262626418546 ether, 0.142852735597140811 ether, 1885973, 10937
- );
-
- // upper hint: 2646484967802154597987056038088487662712072023062744056283555991417410575365
- // lower hint: 20207836743015961388089283396921182522044498153231052202943306959004515414684
- // upfront fee: 0 ether
- // function: addColl()
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- vm.prank(gabe);
- handler.adjustTrove(
- 1, uint8(AdjustedTroveProperties.onlyColl), 3.631424438531681645 ether, true, 0 ether, false, 86, 703, 9499
- );
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
-
- vm.prank(barb);
- handler.lowerBatchManagementFee(2, 0.000000000204221707 ether);
-
- vm.prank(hope);
- handler.addMeToLiquidationBatch();
-
- vm.prank(hope);
- handler.addMeToLiquidationBatch();
-
- vm.prank(hope);
- handler.addMeToUrgentRedemptionBatch();
-
- // redemption rate: 0.37622704640950591 ether
- // redeemed BOLD: 0.000000000000005602 ether
- // redeemed Troves: [
- // [carl],
- // [gabe],
- // [],
- // [],
- // ]
- vm.prank(carl);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- handler.redeemCollateral(0.000000000000005603 ether, 1);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
-
- vm.prank(fran);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(dana);
- handler.addMeToUrgentRedemptionBatch();
-
- vm.prank(dana);
- handler.registerBatchManager(
- 1, 0.995000000000001129 ether, 1 ether, 0.999999999999799729 ether, 0.000000000000000001 ether, 31535999
- );
-
- // redemption rate: 0.718476929948594246 ether
- // redeemed BOLD: 5_431.066474911544502914 ether
- // redeemed Troves: [
- // [carl],
- // [gabe],
- // [],
- // [],
- // ]
- vm.prank(barb);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- handler.redeemCollateral(10_313.397298437031513085 ether, 1);
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe ent debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- info("gabe rec debt: ", c.troveManager.getTroveDebt(addressToTroveId(gabe)).decimal());
- info("lzti: ", c.troveManager.lastZombieTroveId().toString());
-
- vm.prank(dana);
- handler.warp(30_167_580);
-
- info("gabe ent debt: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- info("gabe rec debt: ", c.troveManager.getTroveDebt(addressToTroveId(gabe)).decimal());
- info("lzti: ", c.troveManager.lastZombieTroveId().toString());
- vm.prank(gabe);
- handler.registerBatchManager(
- 1,
- 0.995000000000002877 ether,
- 0.999999999999430967 ether,
- 0.996456350847225481 ether,
- 0.000000001322368348 ether,
- 14343
- );
- info("gabe ent debt 1: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- info("gabe rec debt 1: ", c.troveManager.getTroveDebt(addressToTroveId(gabe)).decimal());
-
- vm.prank(hope);
- handler.addMeToLiquidationBatch();
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 0 ether
- vm.prank(barb);
- handler.provideToSP(3, 1_933.156398582065633891 ether, false);
-
- vm.prank(hope);
- handler.addMeToUrgentRedemptionBatch();
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 6_368.077020894268536036 ether
- vm.prank(hope);
- handler.provideToSP(0, 6_184.412833814428802676 ether, true);
-
- vm.prank(carl);
- handler.addMeToLiquidationBatch();
-
- // upper hint: 81940996894813545005963650320412669449148720334632109303327864712326705297348
- // lower hint: carl
- // upfront fee: 297.236383200558451701 ether
- vm.prank(barb);
- handler.openTrove(
- 0,
- 69_695.596747080749922615 ether,
- 1.900000000000006402 ether,
- 0.153255449436557929 ether,
- 1498297936,
- 1276315316
- );
-
- // upper hint: 0
- // lower hint: 30960623452289762463130736603892188849115197753010878244835568881362241800197
- // upfront fee: 56.245103106642574315 ether
- // function: withdrawBold()
- vm.prank(hope);
- handler.adjustTrove(
- 0,
- uint8(AdjustedTroveProperties.onlyDebt),
- 0 ether,
- false,
- 7_875.177407392532383015 ether,
- true,
- 5,
- 16648,
- 270
- );
-
- // batch manager: gabe
- // upper hint: gabe
- // lower hint: 0
- // upfront fee: 1_261.275141740191589507 ether
- vm.prank(adam);
- handler.openTroveAndJoinInterestBatchManager(
- 1, 66_969.454138225567397381 ether, 2.984784797753777921 ether, 4294967294, 1, 52
- );
- info("gabe ent debt 2: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- info("gabe rec debt 2: ", c.troveManager.getTroveDebt(addressToTroveId(gabe)).decimal());
-
- // batch manager: hope
- // upper hint: 0
- // lower hint: barb
- // upfront fee: 1_272.067039116734276271 ether
- vm.prank(eric);
- handler.openTroveAndJoinInterestBatchManager(
- 0, 96_538.742068715532219745 ether, 2.762063859567414329 ether, 0, 61578232, 336273331
- );
-
- // initial deposit: 6_184.412833814428802676 ether
- // compounded deposit: 6_184.412833814428802676 ether
- // yield gain: 7_538.471959199501948711 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 0 ether
- vm.prank(hope);
- handler.provideToSP(0, 0.000000001590447554 ether, true);
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 0 ether
- vm.prank(fran);
- handler.provideToSP(3, 180_836.387435487377369461 ether, true);
-
- vm.prank(fran);
- handler.addMeToLiquidationBatch();
-
- // initial deposit: 0 ether
- // compounded deposit: 0 ether
- // yield gain: 0 ether
- // coll gain: 0 ether
- // stashed coll: 0 ether
- // blocked SP yield: 0 ether
- vm.prank(eric);
- handler.provideToSP(2, 0.000000000000000012 ether, true);
-
- vm.prank(carl);
- handler.addMeToUrgentRedemptionBatch();
-
- // redemption rate: 0.00500000000000102 ether
- // redeemed BOLD: 0.000000000536305094 ether
- // redeemed Troves: [
- // [barb],
- // [gabe],
- // [],
- // [],
- // ]
- info("gabe trove Id: ", addressToTroveId(gabe).toString());
- info("gabe ent debt e: ", c.troveManager.getTroveEntireDebt(addressToTroveId(gabe)).decimal());
- info("gabe rec debt e: ", c.troveManager.getTroveDebt(addressToTroveId(gabe)).decimal());
- info("lzti: ", c.troveManager.lastZombieTroveId().toString());
- vm.prank(barb);
- handler.redeemCollateral(0.000000000536305095 ether, 3);
- }
}
diff --git a/contracts/src/test/HintHelpers.t.sol b/contracts/src/test/HintHelpers.t.sol
index 1eb02cba..2d0465b9 100644
--- a/contracts/src/test/HintHelpers.t.sol
+++ b/contracts/src/test/HintHelpers.t.sol
@@ -16,7 +16,7 @@ contract HintHelpersTest is DevTestSetup {
assertEq(
uint8(troveManager.getTroveStatus(redeemedTroveId)),
- uint8(ITroveManager.Status.zombie),
+ uint8(ITroveManager.Status.unredeemable),
"Redeemed Trove should have become a zombie"
);
diff --git a/contracts/src/test/Invariants.t.sol b/contracts/src/test/Invariants.t.sol
index 46e7ffb9..d861a11c 100644
--- a/contracts/src/test/Invariants.t.sol
+++ b/contracts/src/test/Invariants.t.sol
@@ -38,7 +38,7 @@ library ToStringFunctions {
if (status == ITroveManager.Status.active) return "ITroveManager.Status.active";
if (status == ITroveManager.Status.closedByOwner) return "ITroveManager.Status.closedByOwner";
if (status == ITroveManager.Status.closedByLiquidation) return "ITroveManager.Status.closedByLiquidation";
- if (status == ITroveManager.Status.zombie) return "ITroveManager.Status.zombie";
+ if (status == ITroveManager.Status.unredeemable) return "ITroveManager.Status.unredeemable";
revert("Invalid status");
}
}
@@ -109,7 +109,6 @@ contract InvariantsTest is Logging, BaseInvariantTest, BaseMultiCollateralTest {
TestDeployer.LiquityContractsDev memory c = branches[i];
assertEq(c.troveManager.getTroveIdsCount(), handler.numTroves(i), "Wrong number of Troves");
- assertEq(c.troveManager.lastZombieTroveId(), handler.designatedVictimId(i), "Wrong designated victim");
assertEq(c.sortedTroves.getSize(), handler.numTroves(i) - handler.numZombies(i), "Wrong SortedTroves size");
assertApproxEqAbsDecimal(
c.activePool.calcPendingAggInterest(), handler.getPendingInterest(i), 1e-10 ether, 18, "Wrong interest"
@@ -187,13 +186,14 @@ contract InvariantsTest is Logging, BaseInvariantTest, BaseMultiCollateralTest {
ITroveManager.Status status = c.troveManager.getTroveStatus(troveId);
assertTrue(
- status == ITroveManager.Status.active || status == ITroveManager.Status.zombie, "Unexpected status"
+ status == ITroveManager.Status.active || status == ITroveManager.Status.unredeemable,
+ "Unexpected status"
);
if (status == ITroveManager.Status.active) {
assertTrue(c.sortedTroves.contains(troveId), "SortedTroves should contain active Troves");
} else {
- assertFalse(c.sortedTroves.contains(troveId), "SortedTroves shouldn't contain zombie Troves");
+ assertFalse(c.sortedTroves.contains(troveId), "SortedTroves shouldn't contain unredeemable Troves");
}
}
}
diff --git a/contracts/src/test/TestContracts/BaseTest.sol b/contracts/src/test/TestContracts/BaseTest.sol
index 2cbded88..d5271a7c 100644
--- a/contracts/src/test/TestContracts/BaseTest.sol
+++ b/contracts/src/test/TestContracts/BaseTest.sol
@@ -302,7 +302,7 @@ contract BaseTest is TestAccounts, Logging {
vm.stopPrank();
}
- function adjustZombieTrove(
+ function adjustUnredeemableTrove(
address _account,
uint256 _troveId,
uint256 _collChange,
@@ -312,7 +312,7 @@ contract BaseTest is TestAccounts, Logging {
) public {
vm.startPrank(_account);
- borrowerOperations.adjustZombieTrove(
+ borrowerOperations.adjustUnredeemableTrove(
_troveId,
_collChange,
_isCollIncrease,
diff --git a/contracts/src/test/TestContracts/DevTestSetup.sol b/contracts/src/test/TestContracts/DevTestSetup.sol
index 4ed74043..9ce9d087 100644
--- a/contracts/src/test/TestContracts/DevTestSetup.sol
+++ b/contracts/src/test/TestContracts/DevTestSetup.sol
@@ -258,26 +258,8 @@ contract DevTestSetup is BaseTest {
assertLt(troveManager.getTroveEntireDebt(_troveIDs.B), MIN_DEBT);
// Check A and B tagged as Zombie troves
- assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.zombie));
- assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.zombie));
- }
-
- function _redeemAndCreateEmptyZombieTrovesAAndB(ABCDEF memory _troveIDs) internal {
- // Redeem enough to leave A with 0 debt and B with debt < MIN_DEBT
- uint256 redeemFromA = troveManager.getTroveEntireDebt(_troveIDs.A);
- uint256 redeemFromB = troveManager.getTroveEntireDebt(_troveIDs.B);
- uint256 redeemAmount = redeemFromA + redeemFromB;
-
- // Fully redeem A and B
- redeem(E, redeemAmount);
-
- // Check A, B has debt == 0
- assertEq(troveManager.getTroveEntireDebt(_troveIDs.A), 0);
- assertEq(troveManager.getTroveEntireDebt(_troveIDs.B), 0);
-
- // Check A and B tagged as Zombie troves
- assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.zombie));
- assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
+ assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
}
function _redeemAndCreateZombieTroveAAndHitB(ABCDEF memory _troveIDs) internal {
@@ -294,7 +276,7 @@ contract DevTestSetup is BaseTest {
assertGt(troveManager.getTroveEntireDebt(_troveIDs.B), MIN_DEBT);
// // Check A is zombie Trove but B is not
- assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(_troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
assertEq(uint8(troveManager.getTroveStatus(_troveIDs.B)), uint8(ITroveManager.Status.active));
}
diff --git a/contracts/src/test/TestContracts/Interfaces/ITroveManagerTester.sol b/contracts/src/test/TestContracts/Interfaces/ITroveManagerTester.sol
index 4d234d4c..6ee22a4a 100644
--- a/contracts/src/test/TestContracts/Interfaces/ITroveManagerTester.sol
+++ b/contracts/src/test/TestContracts/Interfaces/ITroveManagerTester.sol
@@ -40,7 +40,7 @@ interface ITroveManagerTester is ITroveManager {
// Trove and batch getters
function checkTroveIsActive(uint256 _troveId) external view returns (bool);
function checkTroveIsOpen(uint256 _troveId) external view returns (bool);
- function checkTroveIsZombie(uint256 _troveId) external view returns (bool);
+ function checkTroveIsUnredeemable(uint256 _troveId) external view returns (bool);
function hasRedistributionGains(uint256 _troveId) external view returns (bool);
diff --git a/contracts/src/test/TestContracts/InvariantsTestHandler.t.sol b/contracts/src/test/TestContracts/InvariantsTestHandler.t.sol
index 9a22bfe6..617a0bc1 100644
--- a/contracts/src/test/TestContracts/InvariantsTestHandler.t.sol
+++ b/contracts/src/test/TestContracts/InvariantsTestHandler.t.sol
@@ -143,8 +143,8 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
uint256 batchManagementFee;
Trove trove;
bool wasActive;
- bool wasZombie;
- bool useZombie;
+ bool wasUnredeemable;
+ bool useUnredeemable;
uint256 maxDebtDec;
int256 collDelta;
int256 debtDelta;
@@ -300,7 +300,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
uint256 totalCollRedeemed;
Redeemed[] redeemed;
EnumerableAddressSet batchManagers; // batch managers touched by redemption
- uint256 newDesignatedVictimId;
}
struct UrgentRedemptionTransientState {
@@ -329,7 +328,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
ITroveManager.Status constant ACTIVE = ITroveManager.Status.active;
ITroveManager.Status constant CLOSED_BY_OWNER = ITroveManager.Status.closedByOwner;
ITroveManager.Status constant CLOSED_BY_LIQ = ITroveManager.Status.closedByLiquidation;
- ITroveManager.Status constant UNREDEEMABLE = ITroveManager.Status.zombie;
+ ITroveManager.Status constant UNREDEEMABLE = ITroveManager.Status.unredeemable;
FunctionCaller immutable _functionCaller;
bool immutable _assumeNoExpectedFailures; // vm.assume() away calls that fail extectedly
@@ -342,7 +341,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
mapping(uint256 branchIdx => uint256) LIQ_PENALTY_REDIST;
// Public ghost variables (per branch, exposed to InvariantsTest)
- mapping(uint256 branchIdx => uint256) public designatedVictimId; // ID of zombie Trove that'll be redeemed first
mapping(uint256 branchIdx => uint256) public collSurplus;
mapping(uint256 branchIdx => uint256) public spBoldDeposits;
mapping(uint256 branchIdx => uint256) public spBoldYield;
@@ -423,7 +421,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
coll = trove.coll;
debt = trove.debt;
- status = _isZombie(i, troveId) ? UNREDEEMABLE : ACTIVE;
+ status = _isUnredeemable(i, troveId) ? UNREDEEMABLE : ACTIVE;
batchManager = _batchManagerOf[i][troveId];
}
@@ -696,7 +694,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
bool isCollInc,
uint256 debtChange,
bool isDebtInc,
- uint32 useZombieSeed,
+ uint32 useUnredeemableSeed,
uint32 upperHintSeed,
uint32 lowerHintSeed
) external {
@@ -704,7 +702,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
i = _bound(i, 0, branches.length - 1);
v.prop = AdjustedTroveProperties(_bound(prop, 0, uint8(AdjustedTroveProperties._COUNT) - 1));
- useZombieSeed %= 100;
+ useUnredeemableSeed %= 100;
v.upperHint = _pickHint(i, upperHintSeed);
v.lowerHint = _pickHint(i, lowerHintSeed);
@@ -717,18 +715,18 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
v.batchManagementFee = v.c.troveManager.getLatestBatchData(v.batchManager).accruedManagementFee;
v.trove = _troves[i][v.troveId];
v.wasActive = _isActive(i, v.troveId);
- v.wasZombie = _isZombie(i, v.troveId);
+ v.wasUnredeemable = _isUnredeemable(i, v.troveId);
- if (v.wasActive || v.wasZombie) {
+ if (v.wasActive || v.wasUnredeemable) {
// Choose the wrong type of adjustment 1% of the time
- if (v.wasZombie) {
- v.useZombie = useZombieSeed != 0;
+ if (v.wasUnredeemable) {
+ v.useUnredeemable = useUnredeemableSeed != 0;
} else {
- v.useZombie = useZombieSeed == 0;
+ v.useUnredeemable = useUnredeemableSeed == 0;
}
} else {
- // Choose with equal probability between normal vs. zombie adjustment
- v.useZombie = useZombieSeed < 50;
+ // Choose with equal probability between normal vs. unredeemable adjustment
+ v.useUnredeemable = useUnredeemableSeed < 50;
}
collChange = v.prop != AdjustedTroveProperties.onlyDebt ? _bound(collChange, 0, v.t.entireColl + 1) : 0;
@@ -740,7 +738,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
v.$collDelta = v.collDelta * int256(_price[i]) / int256(DECIMAL_PRECISION);
v.upfrontFee = hintHelpers.predictAdjustTroveUpfrontFee(i, v.troveId, isDebtInc ? debtChange : 0);
if (v.upfrontFee > 0) assertGtDecimal(v.debtDelta, 0, 18, "Only debt increase should incur upfront fee");
- v.functionName = _getAdjustmentFunctionName(v.prop, isCollInc, isDebtInc, v.useZombie);
+ v.functionName = _getAdjustmentFunctionName(v.prop, isCollInc, isDebtInc, v.useUnredeemable);
info("upper hint: ", _hintToString(i, v.upperHint));
info("lower hint: ", _hintToString(i, v.lowerHint));
@@ -755,7 +753,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
isCollInc.toString(),
debtChange.decimal(),
isDebtInc.toString(),
- useZombieSeed.toString(),
+ useUnredeemableSeed.toString(),
upperHintSeed.toString(),
lowerHintSeed.toString()
);
@@ -767,8 +765,8 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
vm.prank(msg.sender);
try _functionCaller.call(
address(v.c.borrowerOperations),
- v.useZombie
- ? _encodeZombieTroveAdjustment(
+ v.useUnredeemable
+ ? _encodeUnredeemableTroveAdjustment(
v.troveId, collChange, isCollInc, debtChange, isDebtInc, v.upperHint, v.lowerHint, v.upfrontFee
)
: _encodeActiveTroveAdjustment(
@@ -781,8 +779,8 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
// Preconditions
assertFalse(isShutdown[i], "Should have failed as branch had been shut down");
assertFalse(v.collDelta == 0 && v.debtDelta == 0, "Should have failed as there was no change");
- if (v.useZombie) assertTrue(v.wasZombie, "Should have failed as Trove wasn't zombie");
- if (!v.useZombie) assertTrue(v.wasActive, "Should have failed as Trove wasn't active");
+ if (v.useUnredeemable) assertTrue(v.wasUnredeemable, "Should have failed as Trove wasn't unredeemable");
+ if (!v.useUnredeemable) assertTrue(v.wasActive, "Should have failed as Trove wasn't active");
assertLeDecimal(-v.collDelta, int256(v.t.entireColl), 18, "Should have failed as withdrawal > coll");
assertLeDecimal(-v.debtDelta, int256(v.t.entireDebt), 18, "Should have failed as repayment > debt");
v.newDebt = v.t.entireDebt.add(v.debtDelta) + v.upfrontFee;
@@ -802,7 +800,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
v.trove.debt = v.trove.debt.add(v.debtDelta) + v.upfrontFee;
_troves[i][v.troveId] = v.trove;
_zombieTroveIds[i].remove(v.troveId);
- if (designatedVictimId[i] == v.troveId) designatedVictimId[i] = 0;
// Effects (batch)
if (v.batchManager != address(0)) _touchBatch(i, v.batchManager);
@@ -820,11 +817,11 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
assertEqDecimal(v.collDelta, 0, 18, "Shouldn't have failed as there was a coll change");
assertEqDecimal(v.debtDelta, 0, 18, "Shouldn't have failed as there was a debt change");
} else if (selector == BorrowerOperations.TroveNotActive.selector) {
- assertFalse(v.useZombie, string.concat("Shouldn't have been thrown by ", v.functionName));
+ assertFalse(v.useUnredeemable, string.concat("Shouldn't have been thrown by ", v.functionName));
assertFalse(v.wasActive, "Shouldn't have failed as Trove was active");
- } else if (selector == BorrowerOperations.TroveNotZombie.selector) {
- assertTrue(v.useZombie, string.concat("Shouldn't have been thrown by ", v.functionName));
- assertFalse(v.wasZombie, "Shouldn't have failed as Trove was zombie");
+ } else if (selector == BorrowerOperations.TroveNotUnredeemable.selector) {
+ assertTrue(v.useUnredeemable, string.concat("Shouldn't have been thrown by ", v.functionName));
+ assertFalse(v.wasUnredeemable, "Shouldn't have failed as Trove was unredeemable");
} else if (selector == BorrowerOperations.CollWithdrawalTooHigh.selector) {
assertGtDecimal(-v.collDelta, int256(v.t.entireColl), 18, "Shouldn't have failed as withdrawal <= coll");
} else if (selector == BorrowerOperations.DebtBelowMin.selector) {
@@ -1017,7 +1014,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
delete _timeSinceLastTroveInterestRateAdjustment[i][v.troveId];
_troveIds[i].remove(v.troveId);
_zombieTroveIds[i].remove(v.troveId);
- if (designatedVictimId[i] == v.troveId) designatedVictimId[i] = 0;
// Effects (batch)
if (v.batchManager != address(0)) {
@@ -1116,7 +1112,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
delete _timeSinceLastTroveInterestRateAdjustment[i][troveId];
_troveIds[i].remove(troveId);
_zombieTroveIds[i].remove(troveId);
- if (designatedVictimId[i] == troveId) designatedVictimId[i] = 0;
if (batchManager != address(0)) _batches[i][batchManager].troves.remove(troveId);
}
@@ -1285,8 +1280,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
}
}
- designatedVictimId[j] = r[j].newDesignatedVictimId;
-
// Effects (batches)
for (uint256 i = 0; i < r[j].batchManagers.size(); ++i) {
_touchBatch(j, r[j].batchManagers.get(i));
@@ -1516,11 +1509,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
// Effects (Trove)
v.trove.applyPending();
_troves[i][v.troveId] = v.trove;
-
- if (v.t.entireDebt >= MIN_DEBT) {
- _zombieTroveIds[i].remove(v.troveId);
- if (designatedVictimId[i] == v.troveId) designatedVictimId[i] = 0;
- }
+ if (v.t.entireDebt >= MIN_DEBT) _zombieTroveIds[i].remove(v.troveId);
// Effects (batch)
if (v.batchManager != address(0)) _touchBatch(i, v.batchManager);
@@ -2434,12 +2423,12 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
return _troveIds[i].has(troveId);
}
- function _isZombie(uint256 i, uint256 troveId) internal view returns (bool) {
+ function _isUnredeemable(uint256 i, uint256 troveId) internal view returns (bool) {
return _zombieTroveIds[i].has(troveId);
}
function _isActive(uint256 i, uint256 troveId) internal view returns (bool) {
- return _isOpen(i, troveId) && !_isZombie(i, troveId);
+ return _isOpen(i, troveId) && !_isUnredeemable(i, troveId);
}
function _pickHint(uint256 i, uint256 seed) internal view returns (uint256) {
@@ -2643,29 +2632,6 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
delete _liquidation;
}
- function _planOneRedemption(uint256 i, uint256 troveId, uint256 remainingAmount, uint256 feePct)
- internal
- returns (uint256 debtRedeemed)
- {
- LatestTroveData memory trove = branches[i].troveManager.getLatestTroveData(troveId);
- if (_ICR(i, trove) < _100pct) return 0;
-
- debtRedeemed = Math.min(remainingAmount, trove.entireDebt);
- uint256 collRedeemedPlusFee = debtRedeemed * DECIMAL_PRECISION / _price[i];
- uint256 fee = collRedeemedPlusFee * feePct / _100pct;
- uint256 collRedeemed = collRedeemedPlusFee - fee;
-
- mapping(uint256 branchIdx => RedemptionTransientState) storage r = _redemption;
- r[i].redeemed.push(Redeemed({troveId: troveId, coll: collRedeemed, debt: debtRedeemed}));
- r[i].totalCollRedeemed += collRedeemed;
-
- address batchManager = _batchManagerOf[i][troveId];
- if (batchManager != address(0)) r[i].batchManagers.add(batchManager);
-
- uint256 newDebt = trove.entireDebt - debtRedeemed;
- r[i].newDesignatedVictimId = 0 < newDebt && newDebt < MIN_DEBT ? troveId : 0;
- }
-
function _planRedemption(uint256 amount, uint256 maxIterationsPerCollateral, uint256 feePct)
internal
returns (uint256 totalDebtRedeemed, mapping(uint256 branchIdx => RedemptionTransientState) storage r)
@@ -2675,43 +2641,51 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
r = _redemption;
// Try in proportion to unbacked
- for (uint256 i = 0; i < branches.length; ++i) {
- if (isShutdown[i] || _TCR(i) < SCR[i]) continue;
- totalProportions += proportions[i] = _getUnbacked(i);
+ for (uint256 j = 0; j < branches.length; ++j) {
+ if (isShutdown[j] || _TCR(j) < SCR[j]) continue;
+ totalProportions += proportions[j] = _getUnbacked(j);
}
// Fallback: in proportion to branch debt
if (totalProportions == 0) {
- for (uint256 i = 0; i < branches.length; ++i) {
- if (isShutdown[i] || _TCR(i) < SCR[i]) continue;
- totalProportions += proportions[i] = _getTotalDebt(i);
+ for (uint256 j = 0; j < branches.length; ++j) {
+ if (isShutdown[j] || _TCR(j) < SCR[j]) continue;
+ totalProportions += proportions[j] = _getTotalDebt(j);
}
}
if (totalProportions == 0) return (0, r);
- for (uint256 i = 0; i < branches.length; ++i) {
- r[i].newDesignatedVictimId = designatedVictimId[i];
+ for (uint256 j = 0; j < branches.length; ++j) {
+ r[j].attemptedAmount = amount * proportions[j] / totalProportions;
+ if (r[j].attemptedAmount == 0) continue;
- r[i].attemptedAmount = amount * proportions[i] / totalProportions;
- if (r[i].attemptedAmount == 0) continue;
+ TestDeployer.LiquityContractsDev memory c = branches[j];
+ uint256 remainingAmount = r[j].attemptedAmount;
+ uint256 troveId = 0; // "root node" ID
- uint256 remainingAmount = r[i].attemptedAmount;
- uint256 lastTrove = branches[i].sortedTroves.getPrev(0);
+ for (uint256 i = 0; i < maxIterationsPerCollateral || maxIterationsPerCollateral == 0; ++i) {
+ if (remainingAmount == 0) break;
- (uint256 troveId, uint256 nextTroveId) = designatedVictimId[i] != 0
- ? (designatedVictimId[i], lastTrove)
- : (lastTrove, branches[i].sortedTroves.getPrev(lastTrove));
+ troveId = c.sortedTroves.getPrev(troveId);
+ if (troveId == 0) break;
- for (uint256 j = 0; j < maxIterationsPerCollateral || maxIterationsPerCollateral == 0; ++j) {
- if (remainingAmount == 0 || troveId == 0) break;
+ LatestTroveData memory trove = c.troveManager.getLatestTroveData(troveId);
+ if (_ICR(j, trove) < _100pct) continue;
- uint256 debtRedeemed = _planOneRedemption(i, troveId, remainingAmount, feePct);
+ uint256 debtRedeemed = Math.min(remainingAmount, trove.entireDebt);
+ uint256 collRedeemedPlusFee = debtRedeemed * DECIMAL_PRECISION / _price[j];
+ uint256 fee = collRedeemedPlusFee * feePct / _100pct;
+ uint256 collRedeemed = collRedeemedPlusFee - fee;
+
+ r[j].redeemed.push(Redeemed({troveId: troveId, coll: collRedeemed, debt: debtRedeemed}));
+
+ address batchManager = _batchManagerOf[j][troveId];
+ if (batchManager != address(0)) r[j].batchManagers.add(batchManager);
+
+ r[j].totalCollRedeemed += collRedeemed;
totalDebtRedeemed += debtRedeemed;
remainingAmount -= debtRedeemed;
-
- troveId = nextTroveId;
- nextTroveId = branches[i].sortedTroves.getPrev(nextTroveId);
}
}
}
@@ -2809,10 +2783,10 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
AdjustedTroveProperties prop,
bool isCollIncrease,
bool isDebtIncrease,
- bool zombie
+ bool unredeemable
) internal pure returns (string memory) {
- if (zombie) {
- return "adjustZombieTrove()";
+ if (unredeemable) {
+ return "adjustUnredeemableTrove()";
}
if (prop == AdjustedTroveProperties.onlyColl) {
@@ -2873,7 +2847,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
revert("Invalid prop");
}
- function _encodeZombieTroveAdjustment(
+ function _encodeUnredeemableTroveAdjustment(
uint256 troveId,
uint256 collChange,
bool isCollIncrease,
@@ -2884,7 +2858,7 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
uint256 maxUpfrontFee
) internal pure returns (bytes memory) {
return abi.encodeCall(
- IBorrowerOperations.adjustZombieTrove,
+ IBorrowerOperations.adjustUnredeemableTrove,
(troveId, collChange, isCollIncrease, debtChange, isDebtIncrease, upperHint, lowerHint, maxUpfrontFee)
);
}
@@ -2973,8 +2947,8 @@ contract InvariantsTestHandler is BaseHandler, BaseMultiCollateralTest {
return (selector, "BorrowerOperations.TroveNotActive()");
}
- if (selector == BorrowerOperations.TroveNotZombie.selector) {
- return (selector, "BorrowerOperations.TroveNotZombie()");
+ if (selector == BorrowerOperations.TroveNotUnredeemable.selector) {
+ return (selector, "BorrowerOperations.TroveNotUnredeemable()");
}
if (selector == BorrowerOperations.TroveOpen.selector) {
diff --git a/contracts/src/test/TestContracts/TroveManagerTester.t.sol b/contracts/src/test/TestContracts/TroveManagerTester.t.sol
index eaa73030..863a6345 100644
--- a/contracts/src/test/TestContracts/TroveManagerTester.t.sol
+++ b/contracts/src/test/TestContracts/TroveManagerTester.t.sol
@@ -152,7 +152,7 @@ contract TroveManagerTester is ITroveManagerTester, TroveManager {
function checkTroveIsOpen(uint256 _troveId) public view returns (bool) {
Status status = Troves[_troveId].status;
- return status == Status.active || status == Status.zombie;
+ return status == Status.active || status == Status.unredeemable;
}
function checkTroveIsActive(uint256 _troveId) external view returns (bool) {
@@ -160,9 +160,9 @@ contract TroveManagerTester is ITroveManagerTester, TroveManager {
return status == Status.active;
}
- function checkTroveIsZombie(uint256 _troveId) external view returns (bool) {
+ function checkTroveIsUnredeemable(uint256 _troveId) external view returns (bool) {
Status status = Troves[_troveId].status;
- return status == Status.zombie;
+ return status == Status.unredeemable;
}
function hasRedistributionGains(uint256 _troveId) external view override returns (bool) {
diff --git a/contracts/src/test/Utils/TroveId.sol b/contracts/src/test/Utils/TroveId.sol
deleted file mode 100644
index fef9f3e8..00000000
--- a/contracts/src/test/Utils/TroveId.sol
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.18;
-
-contract TroveId {
- function addressToTroveId(address _owner, uint256 _ownerIndex) public pure returns (uint256) {
- return uint256(keccak256(abi.encode(_owner, _ownerIndex)));
- }
-
- function addressToTroveId(address _owner) public pure returns (uint256) {
- return addressToTroveId(_owner, 0);
- }
-}
diff --git a/contracts/src/test/interestBatchManagement.t.sol b/contracts/src/test/interestBatchManagement.t.sol
index fe1b11e5..0abc63f1 100644
--- a/contracts/src/test/interestBatchManagement.t.sol
+++ b/contracts/src/test/interestBatchManagement.t.sol
@@ -114,7 +114,7 @@ contract InterestBatchManagementTest is DevTestSetup {
vm.stopPrank();
}
- function testCannotSetBatchManagerIfTroveIsZombie() public {
+ function testCannotSetBatchManagerIfTroveIsUnredeemable() public {
registerBatchManager(B);
// Open trove
@@ -754,7 +754,7 @@ contract InterestBatchManagementTest is DevTestSetup {
redeem(A, 500e18);
// Check A is zombie
- assertEq(uint8(troveManager.getTroveStatus(ATroveId)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(ATroveId)), uint8(ITroveManager.Status.unredeemable));
// Fast-forward time
vm.warp(block.timestamp + 3650 days);
@@ -1135,7 +1135,7 @@ contract InterestBatchManagementTest is DevTestSetup {
assertEq(troveData.lastInterestRateAdjTime, block.timestamp, "Wrong interest rate adj time for A");
}
- function testAnZombieTroveGoesBackToTheBatch() public {
+ function testAnUnredeemableTroveGoesBackToTheBatch() public {
// A opens trove and joins batch manager B
uint256 troveId = openTroveAndJoinBatchManager(A, 100 ether, 2000e18, B, 5e16);
@@ -1144,11 +1144,11 @@ contract InterestBatchManagementTest is DevTestSetup {
vm.warp(block.timestamp + 10 days);
- // C redeems and makes A zombie
+ // C redeems and makes A unredeemable
redeem(C, 1000e18);
// A adjusts back to normal
- adjustZombieTrove(A, troveId, 0, false, 1000e18, true);
+ adjustUnredeemableTrove(A, troveId, 0, false, 1000e18, true);
assertEq(borrowerOperations.interestBatchManagerOf(troveId), B, "A should be in batch (BO)");
(,,,,,,,, address tmBatchManagerAddress,) = troveManager.Troves(troveId);
diff --git a/contracts/src/test/interestIndividualDelegation.t.sol b/contracts/src/test/interestIndividualDelegation.t.sol
index f8a8c5b1..e29a1f91 100644
--- a/contracts/src/test/interestIndividualDelegation.t.sol
+++ b/contracts/src/test/interestIndividualDelegation.t.sol
@@ -102,22 +102,6 @@ contract InterestIndividualDelegationTest is DevTestSetup {
vm.stopPrank();
}
- function testOwnerCanSetInterestBelowMin() public {
- uint256 troveId = openTroveAndSetIndividualDelegate();
-
- vm.startPrank(A);
- borrowerOperations.adjustTroveInterestRate(troveId, MIN_ANNUAL_INTEREST_RATE, 0, 0, 1e24);
- vm.stopPrank();
- }
-
- function testOwnerCanSetInterestAboveMax() public {
- uint256 troveId = openTroveAndSetIndividualDelegate();
-
- vm.startPrank(A);
- borrowerOperations.adjustTroveInterestRate(troveId, 50e16, 0, 0, 1e24);
- vm.stopPrank();
- }
-
function testSetDelegateRevertsIfTroveIsClosed() public {
vm.startPrank(B);
borrowerOperations.registerBatchManager(1e16, 20e16, 5e16, 25e14, MIN_INTEREST_RATE_CHANGE_PERIOD);
@@ -137,17 +121,17 @@ contract InterestIndividualDelegationTest is DevTestSetup {
vm.stopPrank();
}
- function testSetDelegateRevertsIfTroveIsZombie() public {
+ function testSetDelegateRevertsIfTroveIsUnredeemable() public {
vm.startPrank(B);
borrowerOperations.registerBatchManager(1e16, 20e16, 5e16, 25e14, MIN_INTEREST_RATE_CHANGE_PERIOD);
vm.stopPrank();
// Open trove
uint256 troveId = openTroveNoHints100pct(A, 100e18, 5000e18, 5e16);
- // Make trove zombie
+ // Make trove unredeemable
redeem(A, 4000e18);
- // Check A’s trove is zombie
- assertEq(troveManager.checkTroveIsZombie(troveId), true, "A trove should be zombie");
+ // Check A’s trove is unredeemable
+ assertEq(troveManager.checkTroveIsUnredeemable(troveId), true, "A trove should be unredeemable");
// Set batch manager (B)
vm.startPrank(A);
diff --git a/contracts/src/test/redemptions.t.sol b/contracts/src/test/redemptions.t.sol
index 85c8b2cc..ebf93e7e 100644
--- a/contracts/src/test/redemptions.t.sol
+++ b/contracts/src/test/redemptions.t.sol
@@ -22,14 +22,12 @@ contract Redemptions is DevTestSetup {
uint256 debt_A = troveManager.getTroveEntireDebt(troveIDs.A);
uint256 debt_B = troveManager.getTroveEntireDebt(troveIDs.B);
- /*
console.log(troveIDs.A, "A id");
console.log(troveIDs.B, "B id");
console.log(sortedTroves.contains(troveIDs.B), "B is in list t0");
console.log(troveManager.getTroveEntireDebt(troveIDs.B), "A debt t0");
console.log(troveManager.getTroveEntireDebt(troveIDs.B), "B debt t0");
console.log(sortedTroves.getLast(), "first to redeem t0");
- */
uint256 debt_C = troveManager.getTroveEntireDebt(troveIDs.C);
uint256 debt_D = troveManager.getTroveEntireDebt(troveIDs.D);
@@ -75,8 +73,8 @@ contract Redemptions is DevTestSetup {
redeem(E, redeemAmount_1);
// Check A and B still open
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.zombie));
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.unredeemable));
}
function testFullRedemptionLeavesTrovesWithDebtEqualToZero() public {
@@ -114,8 +112,8 @@ contract Redemptions is DevTestSetup {
redeem(E, redeemAmount_2);
// Check A and B still open with debt == zero
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.zombie));
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.unredeemable));
assertEq(troveManager.getTroveEntireDebt(troveIDs.A), 0);
assertEq(troveManager.getTroveEntireDebt(troveIDs.B), 0);
@@ -281,8 +279,7 @@ contract Redemptions is DevTestSetup {
_redeemAndCreateZombieTrovesAAndB(troveIDs);
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.zombie));
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer");
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
}
function testTroveRedeemedToBelowMIN_DEBTBecomesZombieTrove() public {
@@ -290,8 +287,7 @@ contract Redemptions is DevTestSetup {
_redeemAndCreateZombieTrovesAAndB(troveIDs);
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.zombie));
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer");
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.unredeemable));
}
function testTroveRedeemedToAboveMIN_DEBTDoesNotBecomesZombieTrove() public {
@@ -300,7 +296,6 @@ contract Redemptions is DevTestSetup {
_redeemAndCreateZombieTroveAAndHitB(troveIDs);
assertEq(uint8(troveManager.getTroveStatus(troveIDs.C)), uint8(ITroveManager.Status.active));
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer");
}
function testZombieTrovesRemovedFromSortedList() public {
@@ -322,12 +317,9 @@ contract Redemptions is DevTestSetup {
// Check Trove with lowest interest rate is C
assertEq(sortedTroves.getLast(), troveIDs.C);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer");
}
- function testZombieTroveCanStillBeRedeemedFrom() public {
+ function testZombieTroveCantBeRedeemedFrom() public {
(,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
_redeemAndCreateZombieTrovesAAndB(troveIDs);
@@ -339,154 +331,14 @@ contract Redemptions is DevTestSetup {
uint256 redeemAmount = debt_B / 2;
redeem(E, redeemAmount);
- // Check B's debt changed from redeemAmount < debt_B;
- assertEq(troveManager.getTroveEntireDebt(troveIDs.B), debt_B - redeemAmount);
+ // Check B's debt unchanged from redeemAmount < debt_B;
+ assertEq(debt_B, troveManager.getTroveEntireDebt(troveIDs.B));
- debt_B = troveManager.getTroveEntireDebt(troveIDs.B);
redeemAmount = debt_B + 1;
redeem(E, redeemAmount);
- // Check B's debt changed from redeemAmount > debt_B;
- assertEq(troveManager.getTroveEntireDebt(troveIDs.B), 0);
- }
-
- function testRedemptionsWithNoPartialLeaveNoPointerToZombieTroves() public {
- (,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
-
- _redeemAndCreateEmptyZombieTrovesAAndB(troveIDs);
-
- // Check A, B removed from sorted list
- assertFalse(sortedTroves.contains(troveIDs.A));
- assertFalse(sortedTroves.contains(troveIDs.B));
-
- // Check A, B zombie (already checked in helper above)
- //assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.zombie));
- //assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.zombie));
-
- // Check A, B empty (already checked in helper above)
- //assertEq(troveManager.getTroveEntireDebt(troveIDs.A), 0);
- //assertEq(troveManager.getTroveEntireDebt(troveIDs.B), 0);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer");
- }
-
- function testZombieTrovePointerGetsResetIfLastOneIsFullyRedemeed() public {
- (,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
-
- _redeemAndCreateZombieTrovesAAndB(troveIDs);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer before");
-
- // Get B debt before 2nd redeem
- uint256 debt_B = troveManager.getTroveEntireDebt(troveIDs.B);
- assertGt(debt_B, 0, "B debt should be non zero");
-
- uint256 redeemAmount = debt_B;
- console2.log("redeem again");
- console2.log(redeemAmount, "redeemAmount");
- redeem(E, redeemAmount);
-
- // Check B is empty now
- assertEq(troveManager.getTroveEntireDebt(troveIDs.B), 0, "B debt should be zero");
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer after");
- }
-
- function testZombieTrovePointerGetsResetIfTroveIsResuscitatedManuallyByOwner() public {
- (,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
-
- _redeemAndCreateZombieTrovesAAndB(troveIDs);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer before");
-
- // Restore trove
- adjustZombieTrove(B, troveIDs.B, 0, false, MIN_DEBT, true);
-
- // Check B is above min debt
- assertGt(troveManager.getTroveEntireDebt(troveIDs.B), MIN_DEBT, "B debt should be above min");
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer after");
- }
-
- function testZombieTrovePointerGetsResetIfTroveIsResuscitatedViaInterest() public {
- (,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
-
- _redeemAndCreateZombieTrovesAAndB(troveIDs);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer before");
-
- // Restore trove
- adjustZombieTrove(B, troveIDs.B, 0, false, MIN_DEBT, true);
- // fast-forward time a lot
- vm.warp(block.timestamp + 3650 days);
-
- // E applies interest on B's Trove
- applyPendingDebt(E, troveIDs.B);
-
- // Check B is above min debt
- assertGt(troveManager.getTroveEntireDebt(troveIDs.B), MIN_DEBT, "B debt should be above min");
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer after");
- }
-
- function testZombieTrovePointerGetsResetIfTroveIsClosed() public {
- (,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
-
- _redeemAndCreateZombieTrovesAAndB(troveIDs);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer before");
-
- // Get B debt before 2nd redeem
- uint256 debt_B = troveManager.getTroveEntireDebt(troveIDs.B);
- assertGt(debt_B, 0, "B debt should be non zero");
-
- deal(address(boldToken), B, debt_B);
- closeTrove(B, troveIDs.B);
-
- // Check B is closed
- assertEq(
- uint8(troveManager.getTroveStatus(troveIDs.B)),
- uint8(ITroveManager.Status.closedByOwner),
- "B trove should be closed"
- );
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer after");
- }
-
- function testZombieTrovePointerGetsResetIfTroveIsLiquidated() public {
- (,, ABCDEF memory troveIDs) = _setupForRedemptionAscendingInterest();
-
- _redeemAndCreateZombieTrovesAAndB(troveIDs);
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), troveIDs.B, "Wrong last zombie trove pointer before");
-
- // Liquidate B
- console2.log(
- troveManager.getCurrentICR(troveIDs.B, priceFeed.getPrice()),
- "troveManager.getCurrentICR(troveIDs.E, price)"
- );
- priceFeed.setPrice(priceFeed.getPrice() / 25);
- liquidate(A, troveIDs.B);
-
- // Check B is liquidated
- assertEq(
- uint8(troveManager.getTroveStatus(troveIDs.B)),
- uint8(ITroveManager.Status.closedByLiquidation),
- "B trove should be liquidated"
- );
-
- // Check last Zombie trove pointer
- assertEq(troveManager.lastZombieTroveId(), 0, "Wrong last zombie trove pointer after");
+ // Check B's debt unchanged from redeemAmount > debt_B;
+ assertEq(debt_B, troveManager.getTroveEntireDebt(troveIDs.B));
}
function testZombieTrovesCanReceiveRedistGains() public {
@@ -617,8 +469,8 @@ contract Redemptions is DevTestSetup {
transferBold(E, A, boldToken.balanceOf(E) / 2);
transferBold(E, B, boldToken.balanceOf(E));
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.zombie));
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.A)), uint8(ITroveManager.Status.unredeemable));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.unredeemable));
closeTrove(A, troveIDs.A);
closeTrove(B, troveIDs.B);
@@ -644,8 +496,8 @@ contract Redemptions is DevTestSetup {
uint256 surplusDebt = 37;
// A and B withdraw Bold from their zombie Trove
- adjustZombieTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
- adjustZombieTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
// Check they are above the min debt
assertGt(troveManager.getTroveEntireDebt(troveIDs.A), MIN_DEBT);
@@ -669,8 +521,8 @@ contract Redemptions is DevTestSetup {
uint256 surplusDebt = 37;
// A and B withdraw Bold from their zombie Trove
- adjustZombieTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
- adjustZombieTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
// Check they are above the min debt
assertGt(troveManager.getTroveEntireDebt(troveIDs.A), MIN_DEBT);
@@ -702,8 +554,8 @@ contract Redemptions is DevTestSetup {
assertFalse(sortedTroves.contains(troveIDs.B));
// A and B withdraw Bold from their zombie Trove
- adjustZombieTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
- adjustZombieTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
// Check they are above the min debt
assertGt(troveManager.getTroveEntireDebt(troveIDs.A), MIN_DEBT);
@@ -734,8 +586,8 @@ contract Redemptions is DevTestSetup {
uint256 surplusDebt = 37;
// A and B withdraw Bold from their zombie Trove
- adjustZombieTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
- adjustZombieTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(A, troveIDs.A, 0, false, debtDelta_A + surplusDebt, true);
+ adjustUnredeemableTrove(B, troveIDs.B, 0, false, debtDelta_A + surplusDebt, true);
// Check they are above the min debt
assertGt(troveManager.getTroveEntireDebt(troveIDs.A), MIN_DEBT, "A debt should be above min");
@@ -759,10 +611,10 @@ contract Redemptions is DevTestSetup {
// A and B attempt to withdraw Bold, but not enough
vm.expectRevert(BorrowerOperations.DebtBelowMin.selector);
- this.adjustZombieTrove(A, troveIDs.A, 0, false, borrow_A, true);
+ this.adjustUnredeemableTrove(A, troveIDs.A, 0, false, borrow_A, true);
vm.expectRevert(BorrowerOperations.DebtBelowMin.selector);
- this.adjustZombieTrove(B, troveIDs.B, 0, false, borrow_B, true);
+ this.adjustUnredeemableTrove(B, troveIDs.B, 0, false, borrow_B, true);
}
function testZombieTroveBorrowerCanNotRepayDebt() public {
@@ -871,9 +723,9 @@ contract Redemptions is DevTestSetup {
assertEq(troveManager.calcTroveAccruedInterest(troveIDs.A), 0);
assertGt(troveManager.calcTroveAccruedInterest(troveIDs.B), 0);
// Troves are zombie
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.A));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.A));
assertFalse(sortedTroves.contains(troveIDs.A));
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.B));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.B));
assertFalse(sortedTroves.contains(troveIDs.B));
// E applies interest on A and B's Troves
@@ -884,9 +736,9 @@ contract Redemptions is DevTestSetup {
assertEq(troveManager.calcTroveAccruedInterest(troveIDs.B), 0);
// Troves are still zombie
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.A));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.A));
assertFalse(sortedTroves.contains(troveIDs.A));
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.B));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.B));
assertFalse(sortedTroves.contains(troveIDs.B));
}
@@ -901,9 +753,9 @@ contract Redemptions is DevTestSetup {
assertEq(troveManager.calcTroveAccruedInterest(troveIDs.A), 0);
assertGt(troveManager.calcTroveAccruedInterest(troveIDs.B), 0);
// Troves are zombie
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.A));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.A));
assertFalse(sortedTroves.contains(troveIDs.A));
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.B));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.B));
assertFalse(sortedTroves.contains(troveIDs.B));
// E applies interest on A and B's Troves
@@ -913,9 +765,9 @@ contract Redemptions is DevTestSetup {
assertEq(troveManager.calcTroveAccruedInterest(troveIDs.A), 0);
assertEq(troveManager.calcTroveAccruedInterest(troveIDs.B), 0);
// Troves B is not zombie anymore (A still is)
- assertTrue(troveManager.checkTroveIsZombie(troveIDs.A));
+ assertTrue(troveManager.checkTroveIsUnredeemable(troveIDs.A));
assertFalse(sortedTroves.contains(troveIDs.A));
- assertFalse(troveManager.checkTroveIsZombie(troveIDs.B));
+ assertFalse(troveManager.checkTroveIsUnredeemable(troveIDs.B));
assertTrue(sortedTroves.contains(troveIDs.B));
}
@@ -939,7 +791,7 @@ contract Redemptions is DevTestSetup {
// assertFalse(troveManager.checkBelowCriticalThreshold(price));
assertLt(troveManager.getCurrentICR(troveIDs.B, price), MCR);
- assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.zombie));
+ assertEq(uint8(troveManager.getTroveStatus(troveIDs.B)), uint8(ITroveManager.Status.unredeemable));
// E liquidates B
liquidate(E, troveIDs.B);
diff --git a/contracts/src/test/shutdown.t.sol b/contracts/src/test/shutdown.t.sol
index 1f7e677b..540297b9 100644
--- a/contracts/src/test/shutdown.t.sol
+++ b/contracts/src/test/shutdown.t.sol
@@ -219,11 +219,11 @@ contract ShutdownTest is DevTestSetup {
vm.stopPrank();
}
- function testCannotAdjustZombieTroveAfterShutdown() public {
+ function testCannotAdjustUnredeemableTroveAfterShutdown() public {
uint256 troveId = openMulticollateralTroveNoHints100pctWithIndex(0, A, 0, 11e18, 10000e18, 5e16);
openMulticollateralTroveNoHints100pctWithIndex(0, B, 0, 22e18, 20000e18, 6e16);
- // B redeems from A’s trove, to make it zombie
+ // B redeems from A’s trove, to make it unredeemable
//deal(address(boldToken), B, 20000e18);
vm.startPrank(B);
collateralRegistry.redeemCollateral(10000e18, 0, 1e18);
@@ -234,12 +234,12 @@ contract ShutdownTest is DevTestSetup {
contractsArray[0].priceFeed.setPrice(500e18);
contractsArray[0].borrowerOperations.shutdown();
- // Check A’s trove is zombie
- assertEq(troveManager.checkTroveIsZombie(troveId), true, "A trove should be zombie");
+ // Check A’s trove is unredeemable
+ assertEq(troveManager.checkTroveIsUnredeemable(troveId), true, "A trove should be unredeemable");
vm.startPrank(A);
vm.expectRevert(BorrowerOperations.IsShutDown.selector);
- borrowerOperations.adjustZombieTrove(troveId, 1e18, true, 0, false, 0, 0, 1000e18);
+ borrowerOperations.adjustUnredeemableTrove(troveId, 1e18, true, 0, false, 0, 0, 1000e18);
vm.stopPrank();
}
diff --git a/contracts/src/test/troveNFT.t.sol b/contracts/src/test/troveNFT.t.sol
index 9079e7c6..3059a039 100644
--- a/contracts/src/test/troveNFT.t.sol
+++ b/contracts/src/test/troveNFT.t.sol
@@ -33,33 +33,4 @@ contract troveNFTTest is DevTestSetup {
emit log_string(uri);
}
-
- function testTroveURIAttributes() public {
- uint256 troveId = _openTrove();
-
- TroveNFT troveNFT = TroveNFT(address(troveManager.troveNFT()));
-
- string memory uri = troveNFT.tokenURI(troveId);
-
- emit log_string(uri);
-
- /**
- * TODO: validate each individual attribute, or manually make a json and validate it all at once
- * // Check for expected attributes
- * assertTrue(LibString.contains(uri, '"trait_type": "Collateral Token"'), "Collateral Token attribute missing");
- * assertTrue(LibString.contains(uri, '"trait_type": "Collateral Amount"'), "Collateral Amount attribute missing");
- * assertTrue(LibString.contains(uri, '"trait_type": "Debt Token"'), "Debt Token attribute missing");
- * assertTrue(LibString.contains(uri, '"trait_type": "Debt Amount"'), "Debt Amount attribute missing");
- * assertTrue(LibString.contains(uri, '"trait_type": "Interest Rate"'), "Interest Rate attribute missing");
- * assertTrue(LibString.contains(uri, '"trait_type": "Status"'), "Status attribute missing");
- *
- * // Check for expected values
- * //assertTrue(LibString.contains(uri, string.concat('"value": "', Strings.toHexString(address(collateral)))), "Incorrect Collateral Token value");
- * assertTrue(LibString.contains(uri, '"value": "2000000000000000000"'), "Incorrect Collateral Amount value");
- * assertTrue(LibString.contains(uri, string.concat('"value": "', Strings.toHexString(address(boldToken)))), "Incorrect Debt Token value");
- * assertTrue(LibString.contains(uri, '"value": "1000000000000000000000"'), "Incorrect Debt Amount value");
- * assertTrue(LibString.contains(uri, '"value": "5000000000000000"'), "Incorrect Interest Rate value");
- * assertTrue(LibString.contains(uri, '"value": "Active"'), "Incorrect Status value");
- */
- }
}
diff --git a/contracts/src/test/zapperGasComp.t.sol b/contracts/src/test/zapperGasComp.t.sol
index 9db79bda..1a21afb7 100644
--- a/contracts/src/test/zapperGasComp.t.sol
+++ b/contracts/src/test/zapperGasComp.t.sol
@@ -307,7 +307,7 @@ contract ZapperGasCompTest is DevTestSetup {
}
// TODO: more adjustment combinations
- function testCanAdjustZombieTroveWithdrawCollAndBold() external {
+ function testCanAdjustUnredeemableTroveWithdrawCollAndBold() external {
uint256 collAmount1 = 10 ether;
uint256 collAmount2 = 1 ether;
uint256 boldAmount1 = 10000e18;
@@ -335,7 +335,7 @@ contract ZapperGasCompTest is DevTestSetup {
gasCompZapper.setRemoveManagerWithReceiver(troveId, B, A);
vm.stopPrank();
- // Redeem to make trove zombie
+ // Redeem to make trove unredeemable
vm.startPrank(A);
collateralRegistry.redeemCollateral(boldAmount1 - boldAmount2, 10, 1e18);
vm.stopPrank();
@@ -347,7 +347,9 @@ contract ZapperGasCompTest is DevTestSetup {
// Adjust (withdraw coll and Bold)
vm.startPrank(B);
- gasCompZapper.adjustZombieTroveWithRawETH(troveId, collAmount2, false, boldAmount2, true, 0, 0, boldAmount2);
+ gasCompZapper.adjustUnredeemableTroveWithRawETH(
+ troveId, collAmount2, false, boldAmount2, true, 0, 0, boldAmount2
+ );
vm.stopPrank();
assertEq(troveManager.getTroveEntireColl(troveId), troveCollBefore - collAmount2, "Trove coll mismatch");
diff --git a/contracts/src/test/zapperWETH.t.sol b/contracts/src/test/zapperWETH.t.sol
index 2d5bb28c..78df9d3d 100644
--- a/contracts/src/test/zapperWETH.t.sol
+++ b/contracts/src/test/zapperWETH.t.sol
@@ -342,7 +342,7 @@ contract ZapperWETHTest is DevTestSetup {
}
// TODO: more adjustment combinations
- function testCanAdjustZombieTroveWithdrawCollAndBold() external {
+ function testCanAdjustUnredeemableTroveWithdrawCollAndBold() external {
uint256 ethAmount1 = 10 ether;
uint256 ethAmount2 = 1 ether;
uint256 boldAmount1 = 10000e18;
@@ -369,7 +369,7 @@ contract ZapperWETHTest is DevTestSetup {
wethZapper.setRemoveManagerWithReceiver(troveId, B, A);
vm.stopPrank();
- // Redeem to make trove zombie
+ // Redeem to make trove unredeemable
vm.startPrank(A);
collateralRegistry.redeemCollateral(boldAmount1 - boldAmount2, 10, 1e18);
vm.stopPrank();
@@ -381,7 +381,7 @@ contract ZapperWETHTest is DevTestSetup {
// Adjust (withdraw coll and Bold)
vm.startPrank(B);
- wethZapper.adjustZombieTroveWithRawETH(troveId, ethAmount2, false, boldAmount2, true, 0, 0, boldAmount2);
+ wethZapper.adjustUnredeemableTroveWithRawETH(troveId, ethAmount2, false, boldAmount2, true, 0, 0, boldAmount2);
vm.stopPrank();
assertEq(troveManager.getTroveEntireColl(troveId), troveCollBefore - ethAmount2, "Trove coll mismatch");
diff --git a/frontend/app/.env b/frontend/app/.env
index 5456b7c8..e455d9ae 100644
--- a/frontend/app/.env
+++ b/frontend/app/.env
@@ -26,6 +26,9 @@ NEXT_PUBLIC_CHAIN_RPC_URL=http://127.0.0.1:8545
# NEXT_PUBLIC_CHAIN_BLOCK_EXPLORER=Liquity Testnet|https://testnet.liquity.org/
# NEXT_PUBLIC_CHAIN_CONTRACT_MULTICALL=0xffB2BAa708261533b51D18394fd8AFd0E32aBC55|488
+NEXT_PUBLIC_LQTY_TOKEN=0x6DEA81C8171D0bA574754EF6F8b412F2Ed88c54D
+NEXT_PUBLIC_LUSD_TOKEN=0x5f98805A4E8be255a32880FDeC7F6728C6568bA0
+
# Dev & testnet collaterals
NEXT_PUBLIC_COLL_0_TOKEN_ID=ETH
NEXT_PUBLIC_COLL_1_TOKEN_ID=STETH
diff --git a/frontend/app/.graphclient/index.ts b/frontend/app/.graphclient/index.ts
index 87fe6975..cc577175 100644
--- a/frontend/app/.graphclient/index.ts
+++ b/frontend/app/.graphclient/index.ts
@@ -62,8 +62,49 @@ export type Block_height = {
readonly number_gte?: InputMaybe;
};
+export type BorrowerInfo = {
+ readonly id: Scalars['ID']['output'];
+ readonly troves: Scalars['Int']['output'];
+ readonly trovesByCollateral: ReadonlyArray;
+};
+
+export type BorrowerInfo_filter = {
+ readonly id?: InputMaybe;
+ readonly id_not?: InputMaybe;
+ readonly id_gt?: InputMaybe;
+ readonly id_lt?: InputMaybe;
+ readonly id_gte?: InputMaybe;
+ readonly id_lte?: InputMaybe;
+ readonly id_in?: InputMaybe>;
+ readonly id_not_in?: InputMaybe>;
+ readonly troves?: InputMaybe;
+ readonly troves_not?: InputMaybe;
+ readonly troves_gt?: InputMaybe;
+ readonly troves_lt?: InputMaybe;
+ readonly troves_gte?: InputMaybe;
+ readonly troves_lte?: InputMaybe;
+ readonly troves_in?: InputMaybe>;
+ readonly troves_not_in?: InputMaybe>;
+ readonly trovesByCollateral?: InputMaybe>;
+ readonly trovesByCollateral_not?: InputMaybe>;
+ readonly trovesByCollateral_contains?: InputMaybe>;
+ readonly trovesByCollateral_contains_nocase?: InputMaybe>;
+ readonly trovesByCollateral_not_contains?: InputMaybe>;
+ readonly trovesByCollateral_not_contains_nocase?: InputMaybe>;
+ /** Filter for the block changed event. */
+ readonly _change_block?: InputMaybe;
+ readonly and?: InputMaybe>>;
+ readonly or?: InputMaybe>>;
+};
+
+export type BorrowerInfo_orderBy =
+ | 'id'
+ | 'troves'
+ | 'trovesByCollateral';
+
export type Collateral = {
readonly id: Scalars['ID']['output'];
+ readonly collIndex: Scalars['Int']['output'];
readonly token: Token;
readonly minCollRatio: Scalars['BigInt']['output'];
readonly troves: ReadonlyArray;
@@ -193,6 +234,7 @@ export type CollateralAddresses_orderBy =
| 'borrowerOperations'
| 'collateral'
| 'collateral__id'
+ | 'collateral__collIndex'
| 'collateral__minCollRatio'
| 'collateral__totalDeposited'
| 'collateral__totalDebt'
@@ -211,6 +253,14 @@ export type Collateral_filter = {
readonly id_lte?: InputMaybe;
readonly id_in?: InputMaybe>;
readonly id_not_in?: InputMaybe>;
+ readonly collIndex?: InputMaybe;
+ readonly collIndex_not?: InputMaybe;
+ readonly collIndex_gt?: InputMaybe;
+ readonly collIndex_lt?: InputMaybe;
+ readonly collIndex_gte?: InputMaybe;
+ readonly collIndex_lte?: InputMaybe;
+ readonly collIndex_in?: InputMaybe>;
+ readonly collIndex_not_in?: InputMaybe>;
readonly token?: InputMaybe;
readonly token_not?: InputMaybe;
readonly token_gt?: InputMaybe;
@@ -266,6 +316,7 @@ export type Collateral_filter = {
export type Collateral_orderBy =
| 'id'
+ | 'collIndex'
| 'token'
| 'token__id'
| 'token__name'
@@ -352,6 +403,8 @@ export type Query = {
readonly interestRateBrackets: ReadonlyArray;
readonly trove?: Maybe;
readonly troves: ReadonlyArray;
+ readonly borrowerInfo?: Maybe;
+ readonly borrowerInfos: ReadonlyArray;
/** Access to subgraph metadata */
readonly _meta?: Maybe<_Meta_>;
};
@@ -447,6 +500,24 @@ export type QuerytrovesArgs = {
};
+export type QueryborrowerInfoArgs = {
+ id: Scalars['ID']['input'];
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
+export type QueryborrowerInfosArgs = {
+ skip?: InputMaybe;
+ first?: InputMaybe;
+ orderBy?: InputMaybe;
+ orderDirection?: InputMaybe;
+ where?: InputMaybe;
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
export type Query_metaArgs = {
block?: InputMaybe;
};
@@ -462,6 +533,8 @@ export type Subscription = {
readonly interestRateBrackets: ReadonlyArray;
readonly trove?: Maybe;
readonly troves: ReadonlyArray;
+ readonly borrowerInfo?: Maybe;
+ readonly borrowerInfos: ReadonlyArray;
/** Access to subgraph metadata */
readonly _meta?: Maybe<_Meta_>;
};
@@ -557,6 +630,24 @@ export type SubscriptiontrovesArgs = {
};
+export type SubscriptionborrowerInfoArgs = {
+ id: Scalars['ID']['input'];
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
+export type SubscriptionborrowerInfosArgs = {
+ skip?: InputMaybe;
+ first?: InputMaybe;
+ orderBy?: InputMaybe;
+ orderDirection?: InputMaybe;
+ where?: InputMaybe;
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
export type Subscription_metaArgs = {
block?: InputMaybe;
};
@@ -657,6 +748,7 @@ export type Token_orderBy =
| 'id'
| 'collateral'
| 'collateral__id'
+ | 'collateral__collIndex'
| 'collateral__minCollRatio'
| 'collateral__totalDeposited'
| 'collateral__totalDebt'
@@ -666,6 +758,7 @@ export type Token_orderBy =
export type Trove = {
readonly id: Scalars['ID']['output'];
+ readonly troveId: Scalars['String']['output'];
readonly borrower: Scalars['Bytes']['output'];
readonly debt: Scalars['BigInt']['output'];
readonly deposit: Scalars['BigInt']['output'];
@@ -685,6 +778,26 @@ export type Trove_filter = {
readonly id_lte?: InputMaybe;
readonly id_in?: InputMaybe>;
readonly id_not_in?: InputMaybe>;
+ readonly troveId?: InputMaybe;
+ readonly troveId_not?: InputMaybe;
+ readonly troveId_gt?: InputMaybe;
+ readonly troveId_lt?: InputMaybe;
+ readonly troveId_gte?: InputMaybe;
+ readonly troveId_lte?: InputMaybe;
+ readonly troveId_in?: InputMaybe>;
+ readonly troveId_not_in?: InputMaybe>;
+ readonly troveId_contains?: InputMaybe;
+ readonly troveId_contains_nocase?: InputMaybe;
+ readonly troveId_not_contains?: InputMaybe;
+ readonly troveId_not_contains_nocase?: InputMaybe;
+ readonly troveId_starts_with?: InputMaybe;
+ readonly troveId_starts_with_nocase?: InputMaybe;
+ readonly troveId_not_starts_with?: InputMaybe;
+ readonly troveId_not_starts_with_nocase?: InputMaybe;
+ readonly troveId_ends_with?: InputMaybe;
+ readonly troveId_ends_with_nocase?: InputMaybe;
+ readonly troveId_not_ends_with?: InputMaybe;
+ readonly troveId_not_ends_with_nocase?: InputMaybe;
readonly borrower?: InputMaybe;
readonly borrower_not?: InputMaybe;
readonly borrower_gt?: InputMaybe;
@@ -772,6 +885,7 @@ export type Trove_filter = {
export type Trove_orderBy =
| 'id'
+ | 'troveId'
| 'borrower'
| 'debt'
| 'deposit'
@@ -781,6 +895,7 @@ export type Trove_orderBy =
| 'closedAt'
| 'collateral'
| 'collateral__id'
+ | 'collateral__collIndex'
| 'collateral__minCollRatio'
| 'collateral__totalDeposited'
| 'collateral__totalDebt';
@@ -910,6 +1025,9 @@ export type ResolversTypes = ResolversObject<{
BlockChangedFilter: BlockChangedFilter;
Block_height: Block_height;
Boolean: ResolverTypeWrapper;
+ BorrowerInfo: ResolverTypeWrapper;
+ BorrowerInfo_filter: BorrowerInfo_filter;
+ BorrowerInfo_orderBy: BorrowerInfo_orderBy;
Bytes: ResolverTypeWrapper;
Collateral: ResolverTypeWrapper;
CollateralAddresses: ResolverTypeWrapper;
@@ -947,6 +1065,8 @@ export type ResolversParentTypes = ResolversObject<{
BlockChangedFilter: BlockChangedFilter;
Block_height: Block_height;
Boolean: Scalars['Boolean']['output'];
+ BorrowerInfo: BorrowerInfo;
+ BorrowerInfo_filter: BorrowerInfo_filter;
Bytes: Scalars['Bytes']['output'];
Collateral: Collateral;
CollateralAddresses: CollateralAddresses;
@@ -994,12 +1114,20 @@ export interface BigIntScalarConfig extends GraphQLScalarTypeConfig = ResolversObject<{
+ id?: Resolver;
+ troves?: Resolver;
+ trovesByCollateral?: Resolver, ParentType, ContextType>;
+ __isTypeOf?: IsTypeOfResolverFn;
+}>;
+
export interface BytesScalarConfig extends GraphQLScalarTypeConfig {
name: 'Bytes';
}
export type CollateralResolvers = ResolversObject<{
id?: Resolver;
+ collIndex?: Resolver;
token?: Resolver;
minCollRatio?: Resolver;
troves?: Resolver, ParentType, ContextType, RequireFields>;
@@ -1044,6 +1172,8 @@ export type QueryResolvers, ParentType, ContextType, RequireFields>;
trove?: Resolver, ParentType, ContextType, RequireFields>;
troves?: Resolver, ParentType, ContextType, RequireFields>;
+ borrowerInfo?: Resolver, ParentType, ContextType, RequireFields>;
+ borrowerInfos?: Resolver, ParentType, ContextType, RequireFields>;
_meta?: Resolver, ParentType, ContextType, Partial>;
}>;
@@ -1058,6 +1188,8 @@ export type SubscriptionResolvers, "interestRateBrackets", ParentType, ContextType, RequireFields>;
trove?: SubscriptionResolver, "trove", ParentType, ContextType, RequireFields>;
troves?: SubscriptionResolver, "troves", ParentType, ContextType, RequireFields>;
+ borrowerInfo?: SubscriptionResolver, "borrowerInfo", ParentType, ContextType, RequireFields>;
+ borrowerInfos?: SubscriptionResolver, "borrowerInfos", ParentType, ContextType, RequireFields>;
_meta?: SubscriptionResolver, "_meta", ParentType, ContextType, Partial>;
}>;
@@ -1076,6 +1208,7 @@ export type TokenResolvers = ResolversObject<{
id?: Resolver;
+ troveId?: Resolver;
borrower?: Resolver;
debt?: Resolver;
deposit?: Resolver;
@@ -1105,6 +1238,7 @@ export type _Meta_Resolvers = ResolversObject<{
BigDecimal?: GraphQLScalarType;
BigInt?: GraphQLScalarType;
+ BorrowerInfo?: BorrowerInfoResolvers;
Bytes?: GraphQLScalarType;
Collateral?: CollateralResolvers;
CollateralAddresses?: CollateralAddressesResolvers;
@@ -1171,7 +1305,7 @@ const liquity2Transforms = [];
const additionalTypeDefs = [] as any[];
const liquity2Handler = new GraphqlHandler({
name: "liquity2",
- config: {"endpoint":"http://localhost:8000/subgraphs/name/liquity2/liquity2"},
+ config: {"endpoint":"https://api.studio.thegraph.com/query/42403/liquity2/version/latest"},
baseDir,
cache,
pubsub,
@@ -1192,8 +1326,9 @@ const merger = new(BareMerger as any)({
store: rootStore.child('bareMerger')
})
const documentHashMap = {
- "45745732d955f1e9e56be85453b7766bb2b5d776bad265e1e6734958fbc111c8": TrovesByAccountDocument,
-"45745732d955f1e9e56be85453b7766bb2b5d776bad265e1e6734958fbc111c8": TroveByIdDocument
+ "1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad": TrovesByAccountDocument,
+"1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad": TrovesCountDocument,
+"1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad": TroveByIdDocument
}
additionalEnvelopPlugins.push(usePersistedOperations({
getPersistedOperation(key) {
@@ -1220,14 +1355,21 @@ additionalEnvelopPlugins.push(usePersistedOperations({
return printWithCache(TrovesByAccountDocument);
},
location: 'TrovesByAccountDocument.graphql',
- sha256Hash: '45745732d955f1e9e56be85453b7766bb2b5d776bad265e1e6734958fbc111c8'
+ sha256Hash: '1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad'
+ },{
+ document: TrovesCountDocument,
+ get rawSDL() {
+ return printWithCache(TrovesCountDocument);
+ },
+ location: 'TrovesCountDocument.graphql',
+ sha256Hash: '1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad'
},{
document: TroveByIdDocument,
get rawSDL() {
return printWithCache(TroveByIdDocument);
},
location: 'TroveByIdDocument.graphql',
- sha256Hash: '45745732d955f1e9e56be85453b7766bb2b5d776bad265e1e6734958fbc111c8'
+ sha256Hash: '1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad'
}
];
},
@@ -1288,22 +1430,29 @@ export type TrovesByAccountQueryVariables = Exact<{
export type TrovesByAccountQuery = { readonly troves: ReadonlyArray<(
- Pick
+ Pick
& { readonly collateral: (
- Pick
+ Pick
& { readonly token: Pick }
) }
)> };
+export type TrovesCountQueryVariables = Exact<{
+ id: Scalars['ID']['input'];
+}>;
+
+
+export type TrovesCountQuery = { readonly borrowerInfo?: Maybe> };
+
export type TroveByIdQueryVariables = Exact<{
id: Scalars['ID']['input'];
}>;
export type TroveByIdQuery = { readonly trove?: Maybe<(
- Pick
+ Pick
& { readonly collateral: (
- Pick
+ Pick
& { readonly token: Pick }
) }
)> };
@@ -1311,8 +1460,9 @@ export type TroveByIdQuery = { readonly trove?: Maybe<(
export const TrovesByAccountDocument = gql`
query TrovesByAccount($account: Bytes!) {
- troves(where: {borrower: $account}) {
+ troves(where: {borrower: $account, closedAt: null}) {
id
+ troveId
borrower
debt
deposit
@@ -1327,14 +1477,24 @@ export const TrovesByAccountDocument = gql`
name
}
minCollRatio
+ collIndex
}
}
}
` as unknown as DocumentNode;
+export const TrovesCountDocument = gql`
+ query TrovesCount($id: ID!) {
+ borrowerInfo(id: $id) {
+ troves
+ trovesByCollateral
+ }
+}
+ ` as unknown as DocumentNode;
export const TroveByIdDocument = gql`
query TroveById($id: ID!) {
trove(id: $id) {
id
+ troveId
borrower
debt
deposit
@@ -1349,6 +1509,7 @@ export const TroveByIdDocument = gql`
name
}
minCollRatio
+ collIndex
}
}
}
@@ -1356,12 +1517,16 @@ export const TroveByIdDocument = gql`
+
export type Requester = (doc: DocumentNode, vars?: V, options?: C) => Promise | AsyncIterable
export function getSdk(requester: Requester) {
return {
TrovesByAccount(variables: TrovesByAccountQueryVariables, options?: C): Promise {
return requester(TrovesByAccountDocument, variables, options) as Promise;
},
+ TrovesCount(variables: TrovesCountQueryVariables, options?: C): Promise {
+ return requester(TrovesCountDocument, variables, options) as Promise;
+ },
TroveById(variables: TroveByIdQueryVariables, options?: C): Promise {
return requester(TroveByIdDocument, variables, options) as Promise;
}
diff --git a/frontend/app/.graphclient/persisted_operations.json b/frontend/app/.graphclient/persisted_operations.json
index 5c0346b7..e6d82218 100644
--- a/frontend/app/.graphclient/persisted_operations.json
+++ b/frontend/app/.graphclient/persisted_operations.json
@@ -1,3 +1,3 @@
{
- "45745732d955f1e9e56be85453b7766bb2b5d776bad265e1e6734958fbc111c8": "query TrovesByAccount($account: Bytes!) {\n troves(where: {borrower: $account}) {\n id\n borrower\n debt\n deposit\n stake\n interestRate\n createdAt\n closedAt\n collateral {\n id\n token {\n symbol\n name\n }\n minCollRatio\n }\n }\n}\n\nquery TroveById($id: ID!) {\n trove(id: $id) {\n id\n borrower\n debt\n deposit\n stake\n interestRate\n createdAt\n closedAt\n collateral {\n id\n token {\n symbol\n name\n }\n minCollRatio\n }\n }\n}"
+ "1117fda82156c6f9afe1ba1a1b37888d86ad9be723d9b2a14aeac6633ce20aad": "query TrovesByAccount($account: Bytes!) {\n troves(where: {borrower: $account, closedAt: null}) {\n id\n troveId\n borrower\n debt\n deposit\n stake\n interestRate\n createdAt\n closedAt\n collateral {\n id\n token {\n symbol\n name\n }\n minCollRatio\n collIndex\n }\n }\n}\n\nquery TrovesCount($id: ID!) {\n borrowerInfo(id: $id) {\n troves\n trovesByCollateral\n }\n}\n\nquery TroveById($id: ID!) {\n trove(id: $id) {\n id\n troveId\n borrower\n debt\n deposit\n stake\n interestRate\n createdAt\n closedAt\n collateral {\n id\n token {\n symbol\n name\n }\n minCollRatio\n collIndex\n }\n }\n}"
}
\ No newline at end of file
diff --git a/frontend/app/.graphclient/schema.graphql b/frontend/app/.graphclient/schema.graphql
index d53c0294..c563e883 100644
--- a/frontend/app/.graphclient/schema.graphql
+++ b/frontend/app/.graphclient/schema.graphql
@@ -35,10 +35,52 @@ input Block_height {
number_gte: Int
}
+type BorrowerInfo {
+ id: ID!
+ troves: Int!
+ trovesByCollateral: [Int!]!
+}
+
+input BorrowerInfo_filter {
+ id: ID
+ id_not: ID
+ id_gt: ID
+ id_lt: ID
+ id_gte: ID
+ id_lte: ID
+ id_in: [ID!]
+ id_not_in: [ID!]
+ troves: Int
+ troves_not: Int
+ troves_gt: Int
+ troves_lt: Int
+ troves_gte: Int
+ troves_lte: Int
+ troves_in: [Int!]
+ troves_not_in: [Int!]
+ trovesByCollateral: [Int!]
+ trovesByCollateral_not: [Int!]
+ trovesByCollateral_contains: [Int!]
+ trovesByCollateral_contains_nocase: [Int!]
+ trovesByCollateral_not_contains: [Int!]
+ trovesByCollateral_not_contains_nocase: [Int!]
+ """Filter for the block changed event."""
+ _change_block: BlockChangedFilter
+ and: [BorrowerInfo_filter]
+ or: [BorrowerInfo_filter]
+}
+
+enum BorrowerInfo_orderBy {
+ id
+ troves
+ trovesByCollateral
+}
+
scalar Bytes
type Collateral {
id: ID!
+ collIndex: Int!
token: Token!
minCollRatio: BigInt!
troves(skip: Int = 0, first: Int = 100, orderBy: Trove_orderBy, orderDirection: OrderDirection, where: Trove_filter): [Trove!]!
@@ -159,6 +201,7 @@ enum CollateralAddresses_orderBy {
borrowerOperations
collateral
collateral__id
+ collateral__collIndex
collateral__minCollRatio
collateral__totalDeposited
collateral__totalDebt
@@ -178,6 +221,14 @@ input Collateral_filter {
id_lte: ID
id_in: [ID!]
id_not_in: [ID!]
+ collIndex: Int
+ collIndex_not: Int
+ collIndex_gt: Int
+ collIndex_lt: Int
+ collIndex_gte: Int
+ collIndex_lte: Int
+ collIndex_in: [Int!]
+ collIndex_not_in: [Int!]
token: String
token_not: String
token_gt: String
@@ -233,6 +284,7 @@ input Collateral_filter {
enum Collateral_orderBy {
id
+ collIndex
token
token__id
token__name
@@ -448,6 +500,32 @@ type Query {
"""
subgraphError: _SubgraphErrorPolicy_! = deny
): [Trove!]!
+ borrowerInfo(
+ id: ID!
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): BorrowerInfo
+ borrowerInfos(
+ skip: Int = 0
+ first: Int = 100
+ orderBy: BorrowerInfo_orderBy
+ orderDirection: OrderDirection
+ where: BorrowerInfo_filter
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): [BorrowerInfo!]!
"""Access to subgraph metadata"""
_meta(block: Block_height): _Meta_
}
@@ -583,6 +661,32 @@ type Subscription {
"""
subgraphError: _SubgraphErrorPolicy_! = deny
): [Trove!]!
+ borrowerInfo(
+ id: ID!
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): BorrowerInfo
+ borrowerInfos(
+ skip: Int = 0
+ first: Int = 100
+ orderBy: BorrowerInfo_orderBy
+ orderDirection: OrderDirection
+ where: BorrowerInfo_filter
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): [BorrowerInfo!]!
"""Access to subgraph metadata"""
_meta(block: Block_height): _Meta_
}
@@ -689,6 +793,7 @@ enum Token_orderBy {
id
collateral
collateral__id
+ collateral__collIndex
collateral__minCollRatio
collateral__totalDeposited
collateral__totalDebt
@@ -699,6 +804,7 @@ enum Token_orderBy {
type Trove {
id: ID!
+ troveId: String!
borrower: Bytes!
debt: BigInt!
deposit: BigInt!
@@ -718,6 +824,26 @@ input Trove_filter {
id_lte: ID
id_in: [ID!]
id_not_in: [ID!]
+ troveId: String
+ troveId_not: String
+ troveId_gt: String
+ troveId_lt: String
+ troveId_gte: String
+ troveId_lte: String
+ troveId_in: [String!]
+ troveId_not_in: [String!]
+ troveId_contains: String
+ troveId_contains_nocase: String
+ troveId_not_contains: String
+ troveId_not_contains_nocase: String
+ troveId_starts_with: String
+ troveId_starts_with_nocase: String
+ troveId_not_starts_with: String
+ troveId_not_starts_with_nocase: String
+ troveId_ends_with: String
+ troveId_ends_with_nocase: String
+ troveId_not_ends_with: String
+ troveId_not_ends_with_nocase: String
borrower: Bytes
borrower_not: Bytes
borrower_gt: Bytes
@@ -805,6 +931,7 @@ input Trove_filter {
enum Trove_orderBy {
id
+ troveId
borrower
debt
deposit
@@ -814,6 +941,7 @@ enum Trove_orderBy {
closedAt
collateral
collateral__id
+ collateral__collIndex
collateral__minCollRatio
collateral__totalDeposited
collateral__totalDebt
diff --git a/frontend/app/.graphclient/sources/liquity2/introspectionSchema.ts b/frontend/app/.graphclient/sources/liquity2/introspectionSchema.ts
index 4d3350be..0075c32a 100644
--- a/frontend/app/.graphclient/sources/liquity2/introspectionSchema.ts
+++ b/frontend/app/.graphclient/sources/liquity2/introspectionSchema.ts
@@ -255,19 +255,11 @@ const schemaAST = {
],
"directives": []
},
- {
- "kind": "ScalarTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- },
- "directives": []
- },
{
"kind": "ObjectTypeDefinition",
"name": {
"kind": "Name",
- "value": "Collateral"
+ "value": "BorrowerInfo"
},
"fields": [
{
@@ -293,7 +285,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "token"
+ "value": "troves"
},
"arguments": [],
"type": {
@@ -302,7 +294,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token"
+ "value": "Int"
}
}
},
@@ -312,112 +304,9 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio"
+ "value": "trovesByCollateral"
},
"arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "troves"
- },
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "skip"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "0"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "first"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "100"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderBy"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove_orderBy"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderDirection"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "OrderDirection"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "where"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove_filter"
- }
- },
- "directives": []
- }
- ],
"type": {
"kind": "NonNullType",
"type": {
@@ -428,256 +317,168 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Trove"
+ "value": "Int"
}
}
}
}
},
"directives": []
- },
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "InputObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo_filter"
+ },
+ "fields": [
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses"
+ "value": "id"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited"
+ "value": "id_not"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt"
+ "value": "id_gt"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
},
"directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "ObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses"
- },
- "fields": [
+ },
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "id_lt"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations"
+ "value": "id_gte"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "id_lte"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves"
+ "value": "id_in"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
+ "kind": "ListType",
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "stabilityPool"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "token"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
}
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager"
+ "value": "id_not_in"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
+ "kind": "ListType",
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
}
}
},
"directives": []
},
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "troveNft"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- }
- },
- "directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "InputObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_filter"
- },
- "fields": [
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "troves"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
},
"directives": []
@@ -686,13 +487,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not"
+ "value": "troves_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
},
"directives": []
@@ -701,13 +502,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gt"
+ "value": "troves_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
},
"directives": []
@@ -716,13 +517,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lt"
+ "value": "troves_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
},
"directives": []
@@ -731,13 +532,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gte"
+ "value": "troves_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
},
"directives": []
@@ -746,13 +547,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lte"
+ "value": "troves_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
},
"directives": []
@@ -761,7 +562,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_in"
+ "value": "troves_in"
},
"type": {
"kind": "ListType",
@@ -771,7 +572,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
}
}
@@ -782,7 +583,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not_in"
+ "value": "troves_not_in"
},
"type": {
"kind": "ListType",
@@ -792,7 +593,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Int"
}
}
}
@@ -803,43 +604,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "borrowerOperations_not"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "borrowerOperations_gt"
+ "value": "trovesByCollateral"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
}
},
"directives": []
@@ -848,13 +625,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations_lt"
+ "value": "trovesByCollateral_not"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
}
},
"directives": []
@@ -863,13 +646,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations_gte"
+ "value": "trovesByCollateral_contains"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
}
},
"directives": []
@@ -878,13 +667,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations_lte"
+ "value": "trovesByCollateral_contains_nocase"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
}
},
"directives": []
@@ -893,7 +688,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations_in"
+ "value": "trovesByCollateral_not_contains"
},
"type": {
"kind": "ListType",
@@ -903,7 +698,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "Int"
}
}
}
@@ -914,7 +709,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations_not_in"
+ "value": "trovesByCollateral_not_contains_nocase"
},
"type": {
"kind": "ListType",
@@ -924,7 +719,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "Int"
}
}
}
@@ -933,15 +728,20 @@ const schemaAST = {
},
{
"kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Filter for the block changed event.",
+ "block": true
+ },
"name": {
"kind": "Name",
- "value": "borrowerOperations_contains"
+ "value": "_change_block"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "BlockChangedFilter"
}
},
"directives": []
@@ -950,13 +750,16 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations_not_contains"
+ "value": "and"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo_filter"
+ }
}
},
"directives": []
@@ -965,340 +768,499 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "or"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo_filter"
+ }
}
},
"directives": []
- },
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "EnumTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo_orderBy"
+ },
+ "values": [
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "value": "id"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_gt"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "value": "troves"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_lt"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "value": "trovesByCollateral"
},
"directives": []
- },
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "ScalarTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ },
+ "directives": []
+ },
+ {
+ "kind": "ObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ },
+ "fields": [
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_gte"
+ "value": "id"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_lte"
+ "value": "collIndex"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_in"
+ "value": "token"
},
+ "arguments": [],
"type": {
- "kind": "ListType",
+ "kind": "NonNullType",
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token"
}
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_in"
+ "value": "minCollRatio"
},
+ "arguments": [],
"type": {
- "kind": "ListType",
+ "kind": "NonNullType",
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
}
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_contains"
+ "value": "troves"
},
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove_filter"
+ }
+ },
+ "directives": []
+ }
+ ],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove"
+ }
+ }
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_contains_nocase"
+ "value": "addresses"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_contains"
+ "value": "totalDeposited"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_contains_nocase"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "collateral_starts_with"
+ "value": "totalDebt"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
- },
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "ObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses"
+ },
+ "fields": [
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_starts_with_nocase"
+ "value": "id"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_starts_with"
+ "value": "borrowerOperations"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_starts_with_nocase"
+ "value": "collateral"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_ends_with"
+ "value": "sortedTroves"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_ends_with_nocase"
+ "value": "stabilityPool"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_ends_with"
+ "value": "token"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_ends_with_nocase"
+ "value": "troveManager"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral_"
+ "value": "troveNft"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral_filter"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
}
},
"directives": []
- },
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "InputObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_filter"
+ },
+ "fields": [
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves"
+ "value": "id"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
},
"directives": []
@@ -1307,13 +1269,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_not"
+ "value": "id_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
},
"directives": []
@@ -1322,13 +1284,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_gt"
+ "value": "id_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
},
"directives": []
@@ -1337,13 +1299,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_lt"
+ "value": "id_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
},
"directives": []
@@ -1352,13 +1314,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_gte"
+ "value": "id_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
},
"directives": []
@@ -1367,13 +1329,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_lte"
+ "value": "id_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
},
"directives": []
@@ -1382,7 +1344,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_in"
+ "value": "id_in"
},
"type": {
"kind": "ListType",
@@ -1392,7 +1354,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
}
}
@@ -1403,7 +1365,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_not_in"
+ "value": "id_not_in"
},
"type": {
"kind": "ListType",
@@ -1413,7 +1375,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "ID"
}
}
}
@@ -1424,7 +1386,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_contains"
+ "value": "borrowerOperations"
},
"type": {
"kind": "NamedType",
@@ -1439,7 +1401,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "sortedTroves_not_contains"
+ "value": "borrowerOperations_not"
},
"type": {
"kind": "NamedType",
@@ -1454,7 +1416,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool"
+ "value": "borrowerOperations_gt"
},
"type": {
"kind": "NamedType",
@@ -1469,7 +1431,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_not"
+ "value": "borrowerOperations_lt"
},
"type": {
"kind": "NamedType",
@@ -1484,7 +1446,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_gt"
+ "value": "borrowerOperations_gte"
},
"type": {
"kind": "NamedType",
@@ -1499,7 +1461,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_lt"
+ "value": "borrowerOperations_lte"
},
"type": {
"kind": "NamedType",
@@ -1514,13 +1476,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_gte"
+ "value": "borrowerOperations_in"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ }
}
},
"directives": []
@@ -1529,43 +1497,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_lte"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "stabilityPool_in"
- },
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "stabilityPool_not_in"
+ "value": "borrowerOperations_not_in"
},
"type": {
"kind": "ListType",
@@ -1586,7 +1518,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_contains"
+ "value": "borrowerOperations_contains"
},
"type": {
"kind": "NamedType",
@@ -1601,7 +1533,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool_not_contains"
+ "value": "borrowerOperations_not_contains"
},
"type": {
"kind": "NamedType",
@@ -1616,13 +1548,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token"
+ "value": "collateral"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1631,13 +1563,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not"
+ "value": "collateral_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1646,13 +1578,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_gt"
+ "value": "collateral_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1661,13 +1593,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_lt"
+ "value": "collateral_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1676,13 +1608,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_gte"
+ "value": "collateral_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1691,13 +1623,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_lte"
+ "value": "collateral_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1706,7 +1638,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_in"
+ "value": "collateral_in"
},
"type": {
"kind": "ListType",
@@ -1716,7 +1648,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
}
}
@@ -1727,7 +1659,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_in"
+ "value": "collateral_not_in"
},
"type": {
"kind": "ListType",
@@ -1737,7 +1669,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
}
}
@@ -1748,13 +1680,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_contains"
+ "value": "collateral_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1763,13 +1695,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_contains"
+ "value": "collateral_contains_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1778,13 +1710,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager"
+ "value": "collateral_not_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1793,13 +1725,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_not"
+ "value": "collateral_not_contains_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1808,13 +1740,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_gt"
+ "value": "collateral_starts_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1823,13 +1755,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_lt"
+ "value": "collateral_starts_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1838,13 +1770,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_gte"
+ "value": "collateral_not_starts_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1853,13 +1785,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_lte"
+ "value": "collateral_not_starts_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1868,19 +1800,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_in"
+ "value": "collateral_ends_with"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
@@ -1889,19 +1815,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_not_in"
+ "value": "collateral_ends_with_nocase"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
@@ -1910,13 +1830,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_contains"
+ "value": "collateral_not_ends_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1925,13 +1845,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager_not_contains"
+ "value": "collateral_not_ends_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Bytes"
+ "value": "String"
}
},
"directives": []
@@ -1940,7 +1860,22 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft"
+ "value": "collateral_"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "sortedTroves"
},
"type": {
"kind": "NamedType",
@@ -1955,7 +1890,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_not"
+ "value": "sortedTroves_not"
},
"type": {
"kind": "NamedType",
@@ -1970,7 +1905,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_gt"
+ "value": "sortedTroves_gt"
},
"type": {
"kind": "NamedType",
@@ -1985,7 +1920,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_lt"
+ "value": "sortedTroves_lt"
},
"type": {
"kind": "NamedType",
@@ -2000,7 +1935,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_gte"
+ "value": "sortedTroves_gte"
},
"type": {
"kind": "NamedType",
@@ -2015,7 +1950,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_lte"
+ "value": "sortedTroves_lte"
},
"type": {
"kind": "NamedType",
@@ -2030,7 +1965,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_in"
+ "value": "sortedTroves_in"
},
"type": {
"kind": "ListType",
@@ -2051,7 +1986,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_not_in"
+ "value": "sortedTroves_not_in"
},
"type": {
"kind": "ListType",
@@ -2072,7 +2007,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_contains"
+ "value": "sortedTroves_contains"
},
"type": {
"kind": "NamedType",
@@ -2087,7 +2022,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveNft_not_contains"
+ "value": "sortedTroves_not_contains"
},
"type": {
"kind": "NamedType",
@@ -2100,20 +2035,15 @@ const schemaAST = {
},
{
"kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Filter for the block changed event.",
- "block": true
- },
"name": {
"kind": "Name",
- "value": "_change_block"
+ "value": "stabilityPool"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BlockChangedFilter"
+ "value": "Bytes"
}
},
"directives": []
@@ -2122,16 +2052,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "and"
+ "value": "stabilityPool_not"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_filter"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
}
},
"directives": []
@@ -2140,147 +2067,145 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "or"
+ "value": "stabilityPool_gt"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_filter"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
}
},
"directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "EnumTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_orderBy"
- },
- "values": [
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrowerOperations"
+ "value": "stabilityPool_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "stabilityPool_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral__id"
+ "value": "stabilityPool_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral__minCollRatio"
+ "value": "stabilityPool_in"
},
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "collateral__totalDeposited"
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ }
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral__totalDebt"
+ "value": "stabilityPool_not_in"
},
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "sortedTroves"
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ }
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stabilityPool"
+ "value": "stabilityPool_contains"
},
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "token"
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troveManager"
+ "value": "stabilityPool_not_contains"
},
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "troveNft"
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
},
"directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "InputObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Collateral_filter"
- },
- "fields": [
+ },
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "token"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
},
"directives": []
@@ -2289,13 +2214,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not"
+ "value": "token_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
},
"directives": []
@@ -2304,13 +2229,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gt"
+ "value": "token_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
},
"directives": []
@@ -2319,13 +2244,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lt"
+ "value": "token_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
},
"directives": []
@@ -2334,13 +2259,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gte"
+ "value": "token_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
},
"directives": []
@@ -2349,13 +2274,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lte"
+ "value": "token_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
},
"directives": []
@@ -2364,7 +2289,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_in"
+ "value": "token_in"
},
"type": {
"kind": "ListType",
@@ -2374,7 +2299,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
}
}
@@ -2385,7 +2310,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not_in"
+ "value": "token_not_in"
},
"type": {
"kind": "ListType",
@@ -2395,7 +2320,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "Bytes"
}
}
}
@@ -2406,13 +2331,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token"
+ "value": "token_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2421,13 +2346,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not"
+ "value": "token_not_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2436,13 +2361,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_gt"
+ "value": "troveManager"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2451,13 +2376,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_lt"
+ "value": "troveManager_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2466,13 +2391,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_gte"
+ "value": "troveManager_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2481,13 +2406,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_lte"
+ "value": "troveManager_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2496,7 +2421,37 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_in"
+ "value": "troveManager_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troveManager_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troveManager_in"
},
"type": {
"kind": "ListType",
@@ -2506,7 +2461,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
}
}
@@ -2517,7 +2472,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_in"
+ "value": "troveManager_not_in"
},
"type": {
"kind": "ListType",
@@ -2527,7 +2482,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
}
}
@@ -2538,13 +2493,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_contains"
+ "value": "troveManager_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2553,13 +2508,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_contains_nocase"
+ "value": "troveManager_not_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2568,13 +2523,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_contains"
+ "value": "troveNft"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2583,13 +2538,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_contains_nocase"
+ "value": "troveNft_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2598,13 +2553,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_starts_with"
+ "value": "troveNft_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2613,13 +2568,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_starts_with_nocase"
+ "value": "troveNft_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2628,13 +2583,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_starts_with"
+ "value": "troveNft_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2643,13 +2598,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_starts_with_nocase"
+ "value": "troveNft_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2658,13 +2613,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_ends_with"
+ "value": "troveNft_in"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ }
}
},
"directives": []
@@ -2673,13 +2634,19 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_ends_with_nocase"
+ "value": "troveNft_not_in"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ }
}
},
"directives": []
@@ -2688,13 +2655,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_ends_with"
+ "value": "troveNft_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
@@ -2703,28 +2670,33 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token_not_ends_with_nocase"
+ "value": "troveNft_not_contains"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Bytes"
}
},
"directives": []
},
{
"kind": "InputValueDefinition",
- "name": {
+ "description": {
+ "kind": "StringValue",
+ "value": "Filter for the block changed event.",
+ "block": true
+ },
+ "name": {
"kind": "Name",
- "value": "token_"
+ "value": "_change_block"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token_filter"
+ "value": "BlockChangedFilter"
}
},
"directives": []
@@ -2733,13 +2705,16 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio"
+ "value": "and"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_filter"
+ }
}
},
"directives": []
@@ -2748,160 +2723,155 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_not"
+ "value": "or"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_filter"
+ }
}
},
"directives": []
- },
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "EnumTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_orderBy"
+ },
+ "values": [
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_gt"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "value": "id"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_lt"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "value": "borrowerOperations"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_gte"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "value": "collateral"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_lte"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "value": "collateral__id"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_in"
+ "value": "collateral__collIndex"
},
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
- }
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__minCollRatio"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio_not_in"
+ "value": "collateral__totalDeposited"
},
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
- }
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__totalDebt"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "troves_"
+ "value": "sortedTroves"
},
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove_filter"
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "stabilityPool"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses_"
+ "value": "token"
},
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_filter"
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troveManager"
},
"directives": []
},
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troveNft"
+ },
+ "directives": []
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "InputObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_filter"
+ },
+ "fields": [
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited"
+ "value": "id"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
},
"directives": []
@@ -2910,13 +2880,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_not"
+ "value": "id_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
},
"directives": []
@@ -2925,13 +2895,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_gt"
+ "value": "id_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
},
"directives": []
@@ -2940,13 +2910,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_lt"
+ "value": "id_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
},
"directives": []
@@ -2955,13 +2925,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_gte"
+ "value": "id_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
},
"directives": []
@@ -2970,13 +2940,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_lte"
+ "value": "id_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
},
"directives": []
@@ -2985,7 +2955,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_in"
+ "value": "id_in"
},
"type": {
"kind": "ListType",
@@ -2995,7 +2965,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
}
}
@@ -3006,7 +2976,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited_not_in"
+ "value": "id_not_in"
},
"type": {
"kind": "ListType",
@@ -3016,7 +2986,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "ID"
}
}
}
@@ -3027,13 +2997,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt"
+ "value": "collIndex"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
},
"directives": []
@@ -3042,13 +3012,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_not"
+ "value": "collIndex_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
},
"directives": []
@@ -3057,13 +3027,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_gt"
+ "value": "collIndex_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
},
"directives": []
@@ -3072,13 +3042,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_lt"
+ "value": "collIndex_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
},
"directives": []
@@ -3087,13 +3057,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_gte"
+ "value": "collIndex_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
},
"directives": []
@@ -3102,13 +3072,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_lte"
+ "value": "collIndex_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
},
"directives": []
@@ -3117,7 +3087,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_in"
+ "value": "collIndex_in"
},
"type": {
"kind": "ListType",
@@ -3127,7 +3097,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
}
}
@@ -3138,7 +3108,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt_not_in"
+ "value": "collIndex_not_in"
},
"type": {
"kind": "ListType",
@@ -3148,7 +3118,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "Int"
}
}
}
@@ -3157,20 +3127,15 @@ const schemaAST = {
},
{
"kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Filter for the block changed event.",
- "block": true
- },
"name": {
"kind": "Name",
- "value": "_change_block"
+ "value": "token"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BlockChangedFilter"
+ "value": "String"
}
},
"directives": []
@@ -3179,16 +3144,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "and"
+ "value": "token_not"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral_filter"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
@@ -3197,295 +3159,310 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "or"
+ "value": "token_gt"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral_filter"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "EnumTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Collateral_orderBy"
- },
- "values": [
+ },
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "token_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token"
+ "value": "token_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token__id"
+ "value": "token_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token__name"
+ "value": "token_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
+ }
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token__symbol"
+ "value": "token_not_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
+ }
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "token__decimals"
+ "value": "token_contains"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "minCollRatio"
+ "value": "token_contains_nocase"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troves"
+ "value": "token_not_contains"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses"
+ "value": "token_not_contains_nocase"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__id"
+ "value": "token_starts_with"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__borrowerOperations"
+ "value": "token_starts_with_nocase"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__sortedTroves"
+ "value": "token_not_starts_with"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__stabilityPool"
+ "value": "token_not_starts_with_nocase"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__token"
+ "value": "token_ends_with"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__troveManager"
+ "value": "token_ends_with_nocase"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "addresses__troveNft"
+ "value": "token_not_ends_with"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDeposited"
+ "value": "token_not_ends_with_nocase"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt"
- },
- "directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "ScalarTypeDefinition",
- "description": {
- "kind": "StringValue",
- "value": "8 bytes signed integer\n",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "Int8"
- },
- "directives": []
- },
- {
- "kind": "ObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket"
- },
- "fields": [
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "rate"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "totalDebt"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
- }
+ "value": "token_"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token_filter"
+ }
},
"directives": []
},
- {
- "kind": "FieldDefinition",
- "name": {
- "kind": "Name",
- "value": "totalTroves"
- },
- "arguments": [],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- }
- },
- "directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "InputObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket_filter"
- },
- "fields": [
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "minCollRatio"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
},
"directives": []
@@ -3494,13 +3471,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not"
+ "value": "minCollRatio_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
},
"directives": []
@@ -3509,13 +3486,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gt"
+ "value": "minCollRatio_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
},
"directives": []
@@ -3524,13 +3501,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lt"
+ "value": "minCollRatio_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
},
"directives": []
@@ -3539,13 +3516,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gte"
+ "value": "minCollRatio_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
},
"directives": []
@@ -3554,13 +3531,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lte"
+ "value": "minCollRatio_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
},
"directives": []
@@ -3569,7 +3546,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_in"
+ "value": "minCollRatio_in"
},
"type": {
"kind": "ListType",
@@ -3579,7 +3556,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
}
}
@@ -3590,7 +3567,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not_in"
+ "value": "minCollRatio_not_in"
},
"type": {
"kind": "ListType",
@@ -3600,7 +3577,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "BigInt"
}
}
}
@@ -3611,7 +3588,37 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate"
+ "value": "troves_"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "addresses_"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDeposited"
},
"type": {
"kind": "NamedType",
@@ -3626,7 +3633,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_not"
+ "value": "totalDeposited_not"
},
"type": {
"kind": "NamedType",
@@ -3641,7 +3648,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_gt"
+ "value": "totalDeposited_gt"
},
"type": {
"kind": "NamedType",
@@ -3656,7 +3663,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_lt"
+ "value": "totalDeposited_lt"
},
"type": {
"kind": "NamedType",
@@ -3671,7 +3678,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_gte"
+ "value": "totalDeposited_gte"
},
"type": {
"kind": "NamedType",
@@ -3686,7 +3693,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_lte"
+ "value": "totalDeposited_lte"
},
"type": {
"kind": "NamedType",
@@ -3701,7 +3708,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_in"
+ "value": "totalDeposited_in"
},
"type": {
"kind": "ListType",
@@ -3722,7 +3729,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "rate_not_in"
+ "value": "totalDeposited_not_in"
},
"type": {
"kind": "ListType",
@@ -3873,15 +3880,20 @@ const schemaAST = {
},
{
"kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Filter for the block changed event.",
+ "block": true
+ },
"name": {
"kind": "Name",
- "value": "totalTroves"
+ "value": "_change_block"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "BlockChangedFilter"
}
},
"directives": []
@@ -3890,13 +3902,16 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_not"
+ "value": "and"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_filter"
+ }
}
},
"directives": []
@@ -3905,175 +3920,139 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_gt"
+ "value": "or"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_filter"
+ }
}
},
"directives": []
- },
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "EnumTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_orderBy"
+ },
+ "values": [
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_lt"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
+ "value": "id"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_gte"
+ "value": "collIndex"
},
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "token"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_lte"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
+ "value": "token__id"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_in"
- },
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- }
- }
+ "value": "token__name"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves_not_in"
- },
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- }
- }
+ "value": "token__symbol"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Filter for the block changed event.",
- "block": true
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "token__decimals"
},
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "_change_block"
+ "value": "minCollRatio"
},
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BlockChangedFilter"
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troves"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "and"
+ "value": "addresses"
},
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket_filter"
- }
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "addresses__id"
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "or"
+ "value": "addresses__borrowerOperations"
},
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket_filter"
- }
- }
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "addresses__sortedTroves"
},
"directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "EnumTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket_orderBy"
- },
- "values": [
+ },
{
"kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "addresses__stabilityPool"
},
"directives": []
},
@@ -4081,7 +4060,7 @@ const schemaAST = {
"kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "rate"
+ "value": "addresses__token"
},
"directives": []
},
@@ -4089,7 +4068,7 @@ const schemaAST = {
"kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalDebt"
+ "value": "addresses__troveManager"
},
"directives": []
},
@@ -4097,30 +4076,15 @@ const schemaAST = {
"kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "totalTroves"
+ "value": "addresses__troveNft"
},
"directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "EnumTypeDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Defines the order direction, either ascending or descending",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "OrderDirection"
- },
- "values": [
+ },
{
"kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "asc"
+ "value": "totalDeposited"
},
"directives": []
},
@@ -4128,98 +4092,48 @@ const schemaAST = {
"kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "desc"
+ "value": "totalDebt"
},
"directives": []
}
],
"directives": []
},
+ {
+ "kind": "ScalarTypeDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "8 bytes signed integer\n",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "Int8"
+ },
+ "directives": []
+ },
{
"kind": "ObjectTypeDefinition",
"name": {
"kind": "Name",
- "value": "Query"
+ "value": "InterestRateBracket"
},
"fields": [
{
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "id"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
"name": {
"kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
- }
- ],
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral"
+ "value": "ID"
+ }
}
},
"directives": []
@@ -4228,153 +4142,35 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collaterals"
+ "value": "rate"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
"name": {
"kind": "Name",
- "value": "skip"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "0"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "first"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "100"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderBy"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral_orderBy"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderDirection"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "OrderDirection"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "where"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral_filter"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
+ "value": "BigInt"
+ }
}
- ],
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt"
+ },
+ "arguments": [],
"type": {
"kind": "NonNullType",
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
}
}
},
@@ -4384,97 +4180,2270 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "token"
+ "value": "totalTroves"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
"name": {
"kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
+ "value": "Int"
+ }
}
- ],
+ },
+ "directives": []
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "InputObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket_filter"
+ },
+ "fields": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token"
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "tokens"
+ "value": "id_not"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "skip"
- },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_not_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_not"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate_not_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_not"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt_not_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_not"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_gte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_lte"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves_not_in"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Filter for the block changed event.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "_change_block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BlockChangedFilter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "and"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket_filter"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "or"
+ },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket_filter"
+ }
+ }
+ },
+ "directives": []
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "EnumTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket_orderBy"
+ },
+ "values": [
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "rate"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalDebt"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "totalTroves"
+ },
+ "directives": []
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "EnumTypeDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Defines the order direction, either ascending or descending",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ },
+ "values": [
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "asc"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "desc"
+ },
+ "directives": []
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "ObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Query"
+ },
+ "fields": [
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collaterals"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ }
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "token"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "tokens"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token"
+ }
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateralAddresses"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateralAddresses_collection"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "CollateralAddresses"
+ }
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "interestRateBracket"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "interestRateBrackets"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket"
+ }
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "trove"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troves"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Trove"
+ }
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "borrowerInfo"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "borrowerInfos"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "0"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "first"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ },
+ "defaultValue": {
+ "kind": "IntValue",
+ "value": "100"
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderBy"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo_orderBy"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "orderDirection"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "OrderDirection"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "where"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo_filter"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BorrowerInfo"
+ }
+ }
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Access to subgraph metadata",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "_meta"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_Meta_"
+ }
+ },
+ "directives": []
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "ObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Subscription"
+ },
+ "fields": [
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "subgraphError"
+ },
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_SubgraphErrorPolicy_"
+ }
+ }
+ },
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collaterals"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "skip"
+ },
"type": {
"kind": "NamedType",
"name": {
@@ -4517,7 +6486,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token_orderBy"
+ "value": "Collateral_orderBy"
}
},
"directives": []
@@ -4547,7 +6516,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token_filter"
+ "value": "Collateral_filter"
}
},
"directives": []
@@ -4610,7 +6579,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token"
+ "value": "Collateral"
}
}
}
@@ -4622,7 +6591,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateralAddresses"
+ "value": "token"
},
"arguments": [
{
@@ -4695,7 +6664,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "CollateralAddresses"
+ "value": "Token"
}
},
"directives": []
@@ -4704,7 +6673,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateralAddresses_collection"
+ "value": "tokens"
},
"arguments": [
{
@@ -4755,7 +6724,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "CollateralAddresses_orderBy"
+ "value": "Token_orderBy"
}
},
"directives": []
@@ -4785,7 +6754,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "CollateralAddresses_filter"
+ "value": "Token_filter"
}
},
"directives": []
@@ -4848,7 +6817,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "CollateralAddresses"
+ "value": "Token"
}
}
}
@@ -4860,7 +6829,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "interestRateBracket"
+ "value": "collateralAddresses"
},
"arguments": [
{
@@ -4933,7 +6902,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "InterestRateBracket"
+ "value": "CollateralAddresses"
}
},
"directives": []
@@ -4942,7 +6911,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "interestRateBrackets"
+ "value": "collateralAddresses_collection"
},
"arguments": [
{
@@ -4993,7 +6962,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "InterestRateBracket_orderBy"
+ "value": "CollateralAddresses_orderBy"
}
},
"directives": []
@@ -5023,7 +6992,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "InterestRateBracket_filter"
+ "value": "CollateralAddresses_filter"
}
},
"directives": []
@@ -5086,7 +7055,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "InterestRateBracket"
+ "value": "CollateralAddresses"
}
}
}
@@ -5098,7 +7067,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "trove"
+ "value": "interestRateBracket"
},
"arguments": [
{
@@ -5171,7 +7140,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Trove"
+ "value": "InterestRateBracket"
}
},
"directives": []
@@ -5180,7 +7149,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "troves"
+ "value": "interestRateBrackets"
},
"arguments": [
{
@@ -5231,7 +7200,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Trove_orderBy"
+ "value": "InterestRateBracket_orderBy"
}
},
"directives": []
@@ -5261,7 +7230,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Trove_filter"
+ "value": "InterestRateBracket_filter"
}
},
"directives": []
@@ -5304,87 +7273,39 @@ const schemaAST = {
"name": {
"kind": "Name",
"value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
- }
- ],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove"
- }
- }
- }
- }
- },
- "directives": []
- },
- {
- "kind": "FieldDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Access to subgraph metadata",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "_meta"
- },
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
+ }
}
},
+ "defaultValue": {
+ "kind": "EnumValue",
+ "value": "deny"
+ },
"directives": []
}
],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_Meta_"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "InterestRateBracket"
+ }
+ }
+ }
}
},
"directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "ObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Subscription"
- },
- "fields": [
+ },
{
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "trove"
},
"arguments": [
{
@@ -5457,7 +7378,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Collateral"
+ "value": "Trove"
}
},
"directives": []
@@ -5466,7 +7387,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "collaterals"
+ "value": "troves"
},
"arguments": [
{
@@ -5517,7 +7438,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Collateral_orderBy"
+ "value": "Trove_orderBy"
}
},
"directives": []
@@ -5547,7 +7468,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Collateral_filter"
+ "value": "Trove_filter"
}
},
"directives": []
@@ -5610,7 +7531,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Collateral"
+ "value": "Trove"
}
}
}
@@ -5622,7 +7543,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "token"
+ "value": "borrowerInfo"
},
"arguments": [
{
@@ -5695,7 +7616,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token"
+ "value": "BorrowerInfo"
}
},
"directives": []
@@ -5704,7 +7625,7 @@ const schemaAST = {
"kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "tokens"
+ "value": "borrowerInfos"
},
"arguments": [
{
@@ -5755,7 +7676,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token_orderBy"
+ "value": "BorrowerInfo_orderBy"
}
},
"directives": []
@@ -5785,7 +7706,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token_filter"
+ "value": "BorrowerInfo_filter"
}
},
"directives": []
@@ -5848,7 +7769,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Token"
+ "value": "BorrowerInfo"
}
}
}
@@ -5857,237 +7778,277 @@ const schemaAST = {
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "FieldDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Access to subgraph metadata",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "_meta"
+ },
+ "arguments": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "block"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Block_height"
+ }
+ },
+ "directives": []
+ }
+ ],
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "_Meta_"
+ }
+ },
+ "directives": []
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "ScalarTypeDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "A string representation of microseconds UNIX timestamp (16 digits)\n",
+ "block": true
+ },
+ "name": {
+ "kind": "Name",
+ "value": "Timestamp"
+ },
+ "directives": []
+ },
+ {
+ "kind": "ObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Token"
+ },
+ "fields": [
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral"
+ },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "name"
+ },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "symbol"
+ },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "decimals"
+ },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Int"
+ }
+ }
+ },
+ "directives": []
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "InputObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Token_filter"
+ },
+ "fields": [
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_not"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateralAddresses"
+ "value": "id_lt"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
- ],
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_gte"
+ },
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "CollateralAddresses"
+ "value": "ID"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateralAddresses_collection"
+ "value": "id_lte"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "skip"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "0"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "first"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "100"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderBy"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_orderBy"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderDirection"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "OrderDirection"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "where"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses_filter"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
- ],
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id_in"
+ },
"type": {
- "kind": "NonNullType",
+ "kind": "ListType",
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "CollateralAddresses"
- }
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
}
}
}
@@ -6095,475 +8056,131 @@ const schemaAST = {
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "interestRateBracket"
+ "value": "id_not_in"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
+ "value": "ID"
}
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
+ }
}
- ],
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral"
+ },
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "InterestRateBracket"
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "interestRateBrackets"
+ "value": "collateral_not"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "skip"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "0"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "first"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "100"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderBy"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket_orderBy"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderDirection"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "OrderDirection"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "where"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket_filter"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral_lt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
- ],
+ },
+ "directives": []
+ },
+ {
+ "kind": "InputValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral_gte"
+ },
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "InterestRateBracket"
- }
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "trove"
+ "value": "collateral_lte"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
- }
- ],
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Trove"
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "troves"
+ "value": "collateral_in"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "skip"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "0"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "first"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
- },
- "defaultValue": {
- "kind": "IntValue",
- "value": "100"
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderBy"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove_orderBy"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "orderDirection"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "OrderDirection"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "where"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove_filter"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "block"
- },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Block_height"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "subgraphError"
- },
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_SubgraphErrorPolicy_"
- }
- }
- },
- "defaultValue": {
- "kind": "EnumValue",
- "value": "deny"
- },
- "directives": []
- }
- ],
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Trove"
- }
+ "value": "String"
}
}
}
@@ -6571,183 +8188,112 @@ const schemaAST = {
"directives": []
},
{
- "kind": "FieldDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Access to subgraph metadata",
- "block": true
- },
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "_meta"
+ "value": "collateral_not_in"
},
- "arguments": [
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "block"
- },
+ "type": {
+ "kind": "ListType",
+ "type": {
+ "kind": "NonNullType",
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Block_height"
+ "value": "String"
}
- },
- "directives": []
- }
- ],
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "_Meta_"
+ }
}
},
"directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "ScalarTypeDefinition",
- "description": {
- "kind": "StringValue",
- "value": "A string representation of microseconds UNIX timestamp (16 digits)\n",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "Timestamp"
- },
- "directives": []
- },
- {
- "kind": "ObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Token"
- },
- "fields": [
+ },
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "collateral_contains"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "collateral_contains_nocase"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name"
+ "value": "collateral_not_contains"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol"
+ "value": "collateral_not_contains_nocase"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals"
+ "value": "collateral_starts_with"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Int"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "InputObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Token_filter"
- },
- "fields": [
+ },
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "collateral_starts_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -6756,13 +8302,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not"
+ "value": "collateral_not_starts_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -6771,13 +8317,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gt"
+ "value": "collateral_not_starts_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -6786,13 +8332,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lt"
+ "value": "collateral_ends_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -6801,13 +8347,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gte"
+ "value": "collateral_ends_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -6816,13 +8362,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lte"
+ "value": "collateral_not_ends_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -6831,19 +8377,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_in"
+ "value": "collateral_not_ends_with_nocase"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
@@ -6852,19 +8392,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not_in"
+ "value": "collateral_"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral_filter"
}
},
"directives": []
@@ -6873,7 +8407,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "name"
},
"type": {
"kind": "NamedType",
@@ -6888,7 +8422,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not"
+ "value": "name_not"
},
"type": {
"kind": "NamedType",
@@ -6903,7 +8437,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_gt"
+ "value": "name_gt"
},
"type": {
"kind": "NamedType",
@@ -6918,7 +8452,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_lt"
+ "value": "name_lt"
},
"type": {
"kind": "NamedType",
@@ -6933,7 +8467,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_gte"
+ "value": "name_gte"
},
"type": {
"kind": "NamedType",
@@ -6948,7 +8482,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_lte"
+ "value": "name_lte"
},
"type": {
"kind": "NamedType",
@@ -6963,7 +8497,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_in"
+ "value": "name_in"
},
"type": {
"kind": "ListType",
@@ -6984,7 +8518,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_in"
+ "value": "name_not_in"
},
"type": {
"kind": "ListType",
@@ -7005,7 +8539,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_contains"
+ "value": "name_contains"
},
"type": {
"kind": "NamedType",
@@ -7020,7 +8554,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_contains_nocase"
+ "value": "name_contains_nocase"
},
"type": {
"kind": "NamedType",
@@ -7035,7 +8569,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_contains"
+ "value": "name_not_contains"
},
"type": {
"kind": "NamedType",
@@ -7050,7 +8584,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_contains_nocase"
+ "value": "name_not_contains_nocase"
},
"type": {
"kind": "NamedType",
@@ -7065,7 +8599,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_starts_with"
+ "value": "name_starts_with"
},
"type": {
"kind": "NamedType",
@@ -7080,7 +8614,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_starts_with_nocase"
+ "value": "name_starts_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7095,7 +8629,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_starts_with"
+ "value": "name_not_starts_with"
},
"type": {
"kind": "NamedType",
@@ -7110,7 +8644,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_starts_with_nocase"
+ "value": "name_not_starts_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7125,7 +8659,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_ends_with"
+ "value": "name_ends_with"
},
"type": {
"kind": "NamedType",
@@ -7140,7 +8674,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_ends_with_nocase"
+ "value": "name_ends_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7155,7 +8689,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_ends_with"
+ "value": "name_not_ends_with"
},
"type": {
"kind": "NamedType",
@@ -7170,7 +8704,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_not_ends_with_nocase"
+ "value": "name_not_ends_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7185,22 +8719,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral_"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral_filter"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "name"
+ "value": "symbol"
},
"type": {
"kind": "NamedType",
@@ -7215,7 +8734,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not"
+ "value": "symbol_not"
},
"type": {
"kind": "NamedType",
@@ -7230,7 +8749,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_gt"
+ "value": "symbol_gt"
},
"type": {
"kind": "NamedType",
@@ -7245,7 +8764,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_lt"
+ "value": "symbol_lt"
},
"type": {
"kind": "NamedType",
@@ -7260,7 +8779,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_gte"
+ "value": "symbol_gte"
},
"type": {
"kind": "NamedType",
@@ -7275,7 +8794,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_lte"
+ "value": "symbol_lte"
},
"type": {
"kind": "NamedType",
@@ -7290,7 +8809,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_in"
+ "value": "symbol_in"
},
"type": {
"kind": "ListType",
@@ -7311,7 +8830,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_in"
+ "value": "symbol_not_in"
},
"type": {
"kind": "ListType",
@@ -7332,7 +8851,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_contains"
+ "value": "symbol_contains"
},
"type": {
"kind": "NamedType",
@@ -7347,7 +8866,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_contains_nocase"
+ "value": "symbol_contains_nocase"
},
"type": {
"kind": "NamedType",
@@ -7362,7 +8881,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_contains"
+ "value": "symbol_not_contains"
},
"type": {
"kind": "NamedType",
@@ -7377,7 +8896,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_contains_nocase"
+ "value": "symbol_not_contains_nocase"
},
"type": {
"kind": "NamedType",
@@ -7392,7 +8911,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_starts_with"
+ "value": "symbol_starts_with"
},
"type": {
"kind": "NamedType",
@@ -7407,7 +8926,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_starts_with_nocase"
+ "value": "symbol_starts_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7422,7 +8941,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_starts_with"
+ "value": "symbol_not_starts_with"
},
"type": {
"kind": "NamedType",
@@ -7437,7 +8956,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_starts_with_nocase"
+ "value": "symbol_not_starts_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7452,7 +8971,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_ends_with"
+ "value": "symbol_ends_with"
},
"type": {
"kind": "NamedType",
@@ -7467,7 +8986,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_ends_with_nocase"
+ "value": "symbol_ends_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7482,7 +9001,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_ends_with"
+ "value": "symbol_not_ends_with"
},
"type": {
"kind": "NamedType",
@@ -7497,7 +9016,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "name_not_ends_with_nocase"
+ "value": "symbol_not_ends_with_nocase"
},
"type": {
"kind": "NamedType",
@@ -7512,13 +9031,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol"
+ "value": "decimals"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
},
"directives": []
@@ -7527,13 +9046,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not"
+ "value": "decimals_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
},
"directives": []
@@ -7542,13 +9061,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_gt"
+ "value": "decimals_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
},
"directives": []
@@ -7557,13 +9076,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_lt"
+ "value": "decimals_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
},
"directives": []
@@ -7572,13 +9091,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_gte"
+ "value": "decimals_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
},
"directives": []
@@ -7587,13 +9106,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_lte"
+ "value": "decimals_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
},
"directives": []
@@ -7602,7 +9121,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_in"
+ "value": "decimals_in"
},
"type": {
"kind": "ListType",
@@ -7612,7 +9131,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
}
}
@@ -7623,7 +9142,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_in"
+ "value": "decimals_not_in"
},
"type": {
"kind": "ListType",
@@ -7633,7 +9152,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "Int"
}
}
}
@@ -7642,15 +9161,20 @@ const schemaAST = {
},
{
"kind": "InputValueDefinition",
+ "description": {
+ "kind": "StringValue",
+ "value": "Filter for the block changed event.",
+ "block": true
+ },
"name": {
"kind": "Name",
- "value": "symbol_contains"
+ "value": "_change_block"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "BlockChangedFilter"
}
},
"directives": []
@@ -7659,13 +9183,16 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_contains_nocase"
+ "value": "and"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token_filter"
+ }
}
},
"directives": []
@@ -7674,163 +9201,329 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_contains"
+ "value": "or"
},
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "ListType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Token_filter"
+ }
}
},
"directives": []
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "EnumTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Token_orderBy"
+ },
+ "values": [
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "EnumValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_contains_nocase"
+ "value": "collateral"
},
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__id"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__collIndex"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__minCollRatio"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__totalDeposited"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__totalDebt"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "name"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "symbol"
+ },
+ "directives": []
+ },
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "decimals"
+ },
+ "directives": []
+ }
+ ],
+ "directives": []
+ },
+ {
+ "kind": "ObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Trove"
+ },
+ "fields": [
+ {
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "id"
+ },
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "ID"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_starts_with"
+ "value": "troveId"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "borrower"
+ },
+ "arguments": [],
+ "type": {
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Bytes"
+ }
+ }
+ },
+ "directives": []
+ },
+ {
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_starts_with_nocase"
+ "value": "debt"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_starts_with"
+ "value": "deposit"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_starts_with_nocase"
+ "value": "stake"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_ends_with"
+ "value": "interestRate"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_ends_with_nocase"
+ "value": "createdAt"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "BigInt"
+ }
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_ends_with"
+ "value": "closedAt"
},
+ "arguments": [],
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "String"
+ "value": "BigInt"
}
},
"directives": []
},
{
- "kind": "InputValueDefinition",
+ "kind": "FieldDefinition",
"name": {
"kind": "Name",
- "value": "symbol_not_ends_with_nocase"
+ "value": "collateral"
},
+ "arguments": [],
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "String"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "Collateral"
+ }
}
},
"directives": []
- },
+ }
+ ],
+ "interfaces": [],
+ "directives": []
+ },
+ {
+ "kind": "InputObjectTypeDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "Trove_filter"
+ },
+ "fields": [
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals"
+ "value": "id"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
},
"directives": []
@@ -7839,13 +9532,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_not"
+ "value": "id_not"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
},
"directives": []
@@ -7854,13 +9547,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_gt"
+ "value": "id_gt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
},
"directives": []
@@ -7869,13 +9562,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_lt"
+ "value": "id_lt"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
},
"directives": []
@@ -7884,13 +9577,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_gte"
+ "value": "id_gte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
},
"directives": []
@@ -7899,13 +9592,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_lte"
+ "value": "id_lte"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
},
"directives": []
@@ -7914,7 +9607,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_in"
+ "value": "id_in"
},
"type": {
"kind": "ListType",
@@ -7924,7 +9617,7 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
+ "value": "ID"
}
}
}
@@ -7935,7 +9628,7 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals_not_in"
+ "value": "id_not_in"
},
"type": {
"kind": "ListType",
@@ -7945,351 +9638,216 @@ const schemaAST = {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "Int"
- }
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "description": {
- "kind": "StringValue",
- "value": "Filter for the block changed event.",
- "block": true
- },
- "name": {
- "kind": "Name",
- "value": "_change_block"
- },
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BlockChangedFilter"
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "and"
- },
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Token_filter"
- }
- }
- },
- "directives": []
- },
- {
- "kind": "InputValueDefinition",
- "name": {
- "kind": "Name",
- "value": "or"
- },
- "type": {
- "kind": "ListType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Token_filter"
- }
- }
- },
- "directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "EnumTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Token_orderBy"
- },
- "values": [
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "id"
- },
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "collateral"
- },
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "collateral__id"
- },
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "collateral__minCollRatio"
- },
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "collateral__totalDeposited"
+ "value": "ID"
+ }
+ }
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral__totalDebt"
+ "value": "troveId"
},
- "directives": []
- },
- {
- "kind": "EnumValueDefinition",
- "name": {
- "kind": "Name",
- "value": "name"
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "symbol"
+ "value": "troveId_not"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
},
{
- "kind": "EnumValueDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "decimals"
+ "value": "troveId_gt"
+ },
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
},
"directives": []
- }
- ],
- "directives": []
- },
- {
- "kind": "ObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Trove"
- },
- "fields": [
+ },
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "troveId_lt"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "borrower"
+ "value": "troveId_gte"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Bytes"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "debt"
+ "value": "troveId_lte"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "deposit"
+ "value": "troveId_in"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
+ "kind": "ListType",
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
}
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "stake"
+ "value": "troveId_not_in"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
+ "kind": "ListType",
"type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
+ "kind": "NonNullType",
+ "type": {
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
+ }
}
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "interestRate"
+ "value": "troveId_contains"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "createdAt"
+ "value": "troveId_contains_nocase"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "BigInt"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "closedAt"
+ "value": "troveId_not_contains"
},
- "arguments": [],
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "BigInt"
+ "value": "String"
}
},
"directives": []
},
{
- "kind": "FieldDefinition",
+ "kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "collateral"
+ "value": "troveId_not_contains_nocase"
},
- "arguments": [],
"type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "Collateral"
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
- }
- ],
- "interfaces": [],
- "directives": []
- },
- {
- "kind": "InputObjectTypeDefinition",
- "name": {
- "kind": "Name",
- "value": "Trove_filter"
- },
- "fields": [
+ },
{
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id"
+ "value": "troveId_starts_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -8298,13 +9856,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not"
+ "value": "troveId_starts_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -8313,13 +9871,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gt"
+ "value": "troveId_not_starts_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -8328,13 +9886,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lt"
+ "value": "troveId_not_starts_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -8343,13 +9901,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_gte"
+ "value": "troveId_ends_with"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -8358,13 +9916,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_lte"
+ "value": "troveId_ends_with_nocase"
},
"type": {
"kind": "NamedType",
"name": {
"kind": "Name",
- "value": "ID"
+ "value": "String"
}
},
"directives": []
@@ -8373,19 +9931,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_in"
+ "value": "troveId_not_ends_with"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
@@ -8394,19 +9946,13 @@ const schemaAST = {
"kind": "InputValueDefinition",
"name": {
"kind": "Name",
- "value": "id_not_in"
+ "value": "troveId_not_ends_with_nocase"
},
"type": {
- "kind": "ListType",
- "type": {
- "kind": "NonNullType",
- "type": {
- "kind": "NamedType",
- "name": {
- "kind": "Name",
- "value": "ID"
- }
- }
+ "kind": "NamedType",
+ "name": {
+ "kind": "Name",
+ "value": "String"
}
},
"directives": []
@@ -9766,6 +11312,14 @@ const schemaAST = {
},
"directives": []
},
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "troveId"
+ },
+ "directives": []
+ },
{
"kind": "EnumValueDefinition",
"name": {
@@ -9838,6 +11392,14 @@ const schemaAST = {
},
"directives": []
},
+ {
+ "kind": "EnumValueDefinition",
+ "name": {
+ "kind": "Name",
+ "value": "collateral__collIndex"
+ },
+ "directives": []
+ },
{
"kind": "EnumValueDefinition",
"name": {
diff --git a/frontend/app/.graphclient/sources/liquity2/schema.graphql b/frontend/app/.graphclient/sources/liquity2/schema.graphql
index d53c0294..c563e883 100644
--- a/frontend/app/.graphclient/sources/liquity2/schema.graphql
+++ b/frontend/app/.graphclient/sources/liquity2/schema.graphql
@@ -35,10 +35,52 @@ input Block_height {
number_gte: Int
}
+type BorrowerInfo {
+ id: ID!
+ troves: Int!
+ trovesByCollateral: [Int!]!
+}
+
+input BorrowerInfo_filter {
+ id: ID
+ id_not: ID
+ id_gt: ID
+ id_lt: ID
+ id_gte: ID
+ id_lte: ID
+ id_in: [ID!]
+ id_not_in: [ID!]
+ troves: Int
+ troves_not: Int
+ troves_gt: Int
+ troves_lt: Int
+ troves_gte: Int
+ troves_lte: Int
+ troves_in: [Int!]
+ troves_not_in: [Int!]
+ trovesByCollateral: [Int!]
+ trovesByCollateral_not: [Int!]
+ trovesByCollateral_contains: [Int!]
+ trovesByCollateral_contains_nocase: [Int!]
+ trovesByCollateral_not_contains: [Int!]
+ trovesByCollateral_not_contains_nocase: [Int!]
+ """Filter for the block changed event."""
+ _change_block: BlockChangedFilter
+ and: [BorrowerInfo_filter]
+ or: [BorrowerInfo_filter]
+}
+
+enum BorrowerInfo_orderBy {
+ id
+ troves
+ trovesByCollateral
+}
+
scalar Bytes
type Collateral {
id: ID!
+ collIndex: Int!
token: Token!
minCollRatio: BigInt!
troves(skip: Int = 0, first: Int = 100, orderBy: Trove_orderBy, orderDirection: OrderDirection, where: Trove_filter): [Trove!]!
@@ -159,6 +201,7 @@ enum CollateralAddresses_orderBy {
borrowerOperations
collateral
collateral__id
+ collateral__collIndex
collateral__minCollRatio
collateral__totalDeposited
collateral__totalDebt
@@ -178,6 +221,14 @@ input Collateral_filter {
id_lte: ID
id_in: [ID!]
id_not_in: [ID!]
+ collIndex: Int
+ collIndex_not: Int
+ collIndex_gt: Int
+ collIndex_lt: Int
+ collIndex_gte: Int
+ collIndex_lte: Int
+ collIndex_in: [Int!]
+ collIndex_not_in: [Int!]
token: String
token_not: String
token_gt: String
@@ -233,6 +284,7 @@ input Collateral_filter {
enum Collateral_orderBy {
id
+ collIndex
token
token__id
token__name
@@ -448,6 +500,32 @@ type Query {
"""
subgraphError: _SubgraphErrorPolicy_! = deny
): [Trove!]!
+ borrowerInfo(
+ id: ID!
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): BorrowerInfo
+ borrowerInfos(
+ skip: Int = 0
+ first: Int = 100
+ orderBy: BorrowerInfo_orderBy
+ orderDirection: OrderDirection
+ where: BorrowerInfo_filter
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): [BorrowerInfo!]!
"""Access to subgraph metadata"""
_meta(block: Block_height): _Meta_
}
@@ -583,6 +661,32 @@ type Subscription {
"""
subgraphError: _SubgraphErrorPolicy_! = deny
): [Trove!]!
+ borrowerInfo(
+ id: ID!
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): BorrowerInfo
+ borrowerInfos(
+ skip: Int = 0
+ first: Int = 100
+ orderBy: BorrowerInfo_orderBy
+ orderDirection: OrderDirection
+ where: BorrowerInfo_filter
+ """
+ The block at which the query should be executed. Can either be a `{ hash: Bytes }` value containing a block hash, a `{ number: Int }` containing the block number, or a `{ number_gte: Int }` containing the minimum block number. In the case of `number_gte`, the query will be executed on the latest block only if the subgraph has progressed to or past the minimum block number. Defaults to the latest block when omitted.
+ """
+ block: Block_height
+ """
+ Set to `allow` to receive data even if the subgraph has skipped over errors while syncing.
+ """
+ subgraphError: _SubgraphErrorPolicy_! = deny
+ ): [BorrowerInfo!]!
"""Access to subgraph metadata"""
_meta(block: Block_height): _Meta_
}
@@ -689,6 +793,7 @@ enum Token_orderBy {
id
collateral
collateral__id
+ collateral__collIndex
collateral__minCollRatio
collateral__totalDeposited
collateral__totalDebt
@@ -699,6 +804,7 @@ enum Token_orderBy {
type Trove {
id: ID!
+ troveId: String!
borrower: Bytes!
debt: BigInt!
deposit: BigInt!
@@ -718,6 +824,26 @@ input Trove_filter {
id_lte: ID
id_in: [ID!]
id_not_in: [ID!]
+ troveId: String
+ troveId_not: String
+ troveId_gt: String
+ troveId_lt: String
+ troveId_gte: String
+ troveId_lte: String
+ troveId_in: [String!]
+ troveId_not_in: [String!]
+ troveId_contains: String
+ troveId_contains_nocase: String
+ troveId_not_contains: String
+ troveId_not_contains_nocase: String
+ troveId_starts_with: String
+ troveId_starts_with_nocase: String
+ troveId_not_starts_with: String
+ troveId_not_starts_with_nocase: String
+ troveId_ends_with: String
+ troveId_ends_with_nocase: String
+ troveId_not_ends_with: String
+ troveId_not_ends_with_nocase: String
borrower: Bytes
borrower_not: Bytes
borrower_gt: Bytes
@@ -805,6 +931,7 @@ input Trove_filter {
enum Trove_orderBy {
id
+ troveId
borrower
debt
deposit
@@ -814,6 +941,7 @@ enum Trove_orderBy {
closedAt
collateral
collateral__id
+ collateral__collIndex
collateral__minCollRatio
collateral__totalDeposited
collateral__totalDebt
diff --git a/frontend/app/.graphclient/sources/liquity2/types.ts b/frontend/app/.graphclient/sources/liquity2/types.ts
index 4852f8c1..c708275d 100644
--- a/frontend/app/.graphclient/sources/liquity2/types.ts
+++ b/frontend/app/.graphclient/sources/liquity2/types.ts
@@ -39,8 +39,49 @@ export type Block_height = {
readonly number_gte?: InputMaybe;
};
+export type BorrowerInfo = {
+ readonly id: Scalars['ID']['output'];
+ readonly troves: Scalars['Int']['output'];
+ readonly trovesByCollateral: ReadonlyArray;
+};
+
+export type BorrowerInfo_filter = {
+ readonly id?: InputMaybe;
+ readonly id_not?: InputMaybe;
+ readonly id_gt?: InputMaybe;
+ readonly id_lt?: InputMaybe;
+ readonly id_gte?: InputMaybe;
+ readonly id_lte?: InputMaybe;
+ readonly id_in?: InputMaybe>;
+ readonly id_not_in?: InputMaybe>;
+ readonly troves?: InputMaybe;
+ readonly troves_not?: InputMaybe;
+ readonly troves_gt?: InputMaybe;
+ readonly troves_lt?: InputMaybe;
+ readonly troves_gte?: InputMaybe;
+ readonly troves_lte?: InputMaybe;
+ readonly troves_in?: InputMaybe>;
+ readonly troves_not_in?: InputMaybe>;
+ readonly trovesByCollateral?: InputMaybe>;
+ readonly trovesByCollateral_not?: InputMaybe>;
+ readonly trovesByCollateral_contains?: InputMaybe>;
+ readonly trovesByCollateral_contains_nocase?: InputMaybe>;
+ readonly trovesByCollateral_not_contains?: InputMaybe>;
+ readonly trovesByCollateral_not_contains_nocase?: InputMaybe>;
+ /** Filter for the block changed event. */
+ readonly _change_block?: InputMaybe;
+ readonly and?: InputMaybe>>;
+ readonly or?: InputMaybe>>;
+};
+
+export type BorrowerInfo_orderBy =
+ | 'id'
+ | 'troves'
+ | 'trovesByCollateral';
+
export type Collateral = {
readonly id: Scalars['ID']['output'];
+ readonly collIndex: Scalars['Int']['output'];
readonly token: Token;
readonly minCollRatio: Scalars['BigInt']['output'];
readonly troves: ReadonlyArray;
@@ -170,6 +211,7 @@ export type CollateralAddresses_orderBy =
| 'borrowerOperations'
| 'collateral'
| 'collateral__id'
+ | 'collateral__collIndex'
| 'collateral__minCollRatio'
| 'collateral__totalDeposited'
| 'collateral__totalDebt'
@@ -188,6 +230,14 @@ export type Collateral_filter = {
readonly id_lte?: InputMaybe;
readonly id_in?: InputMaybe>;
readonly id_not_in?: InputMaybe>;
+ readonly collIndex?: InputMaybe;
+ readonly collIndex_not?: InputMaybe;
+ readonly collIndex_gt?: InputMaybe;
+ readonly collIndex_lt?: InputMaybe;
+ readonly collIndex_gte?: InputMaybe;
+ readonly collIndex_lte?: InputMaybe;
+ readonly collIndex_in?: InputMaybe>;
+ readonly collIndex_not_in?: InputMaybe>;
readonly token?: InputMaybe;
readonly token_not?: InputMaybe;
readonly token_gt?: InputMaybe;
@@ -243,6 +293,7 @@ export type Collateral_filter = {
export type Collateral_orderBy =
| 'id'
+ | 'collIndex'
| 'token'
| 'token__id'
| 'token__name'
@@ -329,6 +380,8 @@ export type Query = {
readonly interestRateBrackets: ReadonlyArray;
readonly trove?: Maybe;
readonly troves: ReadonlyArray;
+ readonly borrowerInfo?: Maybe;
+ readonly borrowerInfos: ReadonlyArray;
/** Access to subgraph metadata */
readonly _meta?: Maybe<_Meta_>;
};
@@ -424,6 +477,24 @@ export type QuerytrovesArgs = {
};
+export type QueryborrowerInfoArgs = {
+ id: Scalars['ID']['input'];
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
+export type QueryborrowerInfosArgs = {
+ skip?: InputMaybe;
+ first?: InputMaybe;
+ orderBy?: InputMaybe;
+ orderDirection?: InputMaybe;
+ where?: InputMaybe;
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
export type Query_metaArgs = {
block?: InputMaybe;
};
@@ -439,6 +510,8 @@ export type Subscription = {
readonly interestRateBrackets: ReadonlyArray;
readonly trove?: Maybe;
readonly troves: ReadonlyArray;
+ readonly borrowerInfo?: Maybe;
+ readonly borrowerInfos: ReadonlyArray;
/** Access to subgraph metadata */
readonly _meta?: Maybe<_Meta_>;
};
@@ -534,6 +607,24 @@ export type SubscriptiontrovesArgs = {
};
+export type SubscriptionborrowerInfoArgs = {
+ id: Scalars['ID']['input'];
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
+export type SubscriptionborrowerInfosArgs = {
+ skip?: InputMaybe;
+ first?: InputMaybe;
+ orderBy?: InputMaybe;
+ orderDirection?: InputMaybe;
+ where?: InputMaybe;
+ block?: InputMaybe;
+ subgraphError?: _SubgraphErrorPolicy_;
+};
+
+
export type Subscription_metaArgs = {
block?: InputMaybe;
};
@@ -634,6 +725,7 @@ export type Token_orderBy =
| 'id'
| 'collateral'
| 'collateral__id'
+ | 'collateral__collIndex'
| 'collateral__minCollRatio'
| 'collateral__totalDeposited'
| 'collateral__totalDebt'
@@ -643,6 +735,7 @@ export type Token_orderBy =
export type Trove = {
readonly id: Scalars['ID']['output'];
+ readonly troveId: Scalars['String']['output'];
readonly borrower: Scalars['Bytes']['output'];
readonly debt: Scalars['BigInt']['output'];
readonly deposit: Scalars['BigInt']['output'];
@@ -662,6 +755,26 @@ export type Trove_filter = {
readonly id_lte?: InputMaybe;
readonly id_in?: InputMaybe>;
readonly id_not_in?: InputMaybe>;
+ readonly troveId?: InputMaybe;
+ readonly troveId_not?: InputMaybe;
+ readonly troveId_gt?: InputMaybe;
+ readonly troveId_lt?: InputMaybe;
+ readonly troveId_gte?: InputMaybe;
+ readonly troveId_lte?: InputMaybe;
+ readonly troveId_in?: InputMaybe>;
+ readonly troveId_not_in?: InputMaybe>;
+ readonly troveId_contains?: InputMaybe;
+ readonly troveId_contains_nocase?: InputMaybe