Getting a loan offer

The loan offers are queried via our subgraph, with each individual network having it's own endpoint as outlined in the introduction of this guide

The query structure is the same across networks.

For the sake of this example let's assume we are querying the subgraph for WETH offers on mainnet.

Querying for the offers

The query below is an example to get all available commitments for WETH

These fields are required for calculating the required data for submitting the transaction through the contracts.

query getCommitmentsForWETH {
    commitments(
     where:  {
       and: [
         {
           collateralToken_: {
             address: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
           }
           status: "Active"
           expirationTimestamp_gt: "1729708565"
           committedAmount_gt: "0"
         }
         {
      }
      orderBy: maxPrincipalPerCollateralAmount
      orderDirection: desc
   )
 {
  committedAmount
  expirationTimestamp
  maxDuration
  maxPrincipalPerCollateralAmount
  minAPY
  collateralToken {
    id
    address
    nftId
    type
    decimals
    symbol
    name
  }
  principalToken {
    address
    type
    nftId
    decimals
    symbol
    name
  }
  marketplace {
    marketplaceFeePercent
  }
  acceptedPrincipal
  maxPrincipal
  forwarderAddress
  }
}

The response from the above query would look like this, and these values will be used for executing the loan as outlined in the next section.

{
    "data": {
        "commitments": [
            {
                "acceptedPrincipal": "0",
                "collateralToken": {
                    "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                    "decimals": "18",
                    "id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                    "name": "Wrapped Ether",
                    "nftId": null,
                    "symbol": "WETH",
                    "type": "ERC20"
                },
                "committedAmount": "5165603368",
                "id": "1726",
                "lenderAddress": "0x7133c664af6763ab9aeeb095d3c114a750d8dfdc",
                "marketplace": {
                    "marketplaceFeePercent": "100"
                },
                "maxDuration": "259200",
                "maxPrincipal": "5165603368",
                "maxPrincipalPerCollateralAmount": "1000000000000000",
                "minAPY": "7016",
                "principalToken": {
                    "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
                    "decimals": "6",
                    "name": "USD Coin",
                    "nftId": null,
                    "symbol": "USDC",
                    "type": "ERC20"
                },
                "principalTokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
                "status": "Active",
                "updatedAt": "0",
                 "forwarderAddress": "0x17a8e82351661dfd568fee6d7c38695b67e1e924",
            }
        ]
    }
}

API Reference

Commitment fields

type Commitment @entity {
  id: ID!
  commitmentId: BigInt!
  createdAt: BigInt!
  updatedAt: BigInt!
  status: String!
  forwarderAddress: Bytes! # address of the LenderCommitmentForwarder contract
  rolloverable: Boolean!

  # Offer
  committedAmount: BigInt! # Current committed amount
  expirationTimestamp: BigInt!
  maxDuration: BigInt!
  minAPY: BigInt!
  principalToken: Token!
  principalTokenAddress: Bytes!

  # Required Collateral
  collateralToken: Token
  collateralTokenAddress: Bytes
  collateralTokenType: BigInt!
  maxPrincipalPerCollateralAmount: BigInt

  commitmentBorrowers: [Bytes!]!

  # Lender
  lender: Lender!
  lenderAddress: Bytes!
  lenderPrincipalBalance: BigInt!
  lenderPrincipalAllowance: BigInt!

  # Market
  marketplace: MarketPlace!
  marketplaceId: BigInt!

  # TokenStats
  tokenVolume: TokenVolume!

  # Extra
  maxPrincipal: BigInt!
  acceptedPrincipal: BigInt! # funds that were accepted
  _oldAcceptedPrincipal: BigInt! # funds that were accepted that was not previously tracked on-chain
  _newAcceptedPrincipal: BigInt! # funds that were accepted AFTER commitmentPrincipalAccepted function was added on-chain

  commitmentRewards: [CommitmentReward!]! @derivedFrom(field: "commitment")
}


# Association between RewardAllocations and Commitments
type CommitmentReward @entity {
  id: ID!
  createdAt: BigInt!
  updatedAt: BigInt!

  reward: RewardAllocation!
  commitment: Commitment!

  roi: BigInt!
  apy: BigInt!
}

Last updated