Skip to content

Contract ABIs ​

The Solidity sources are authoritative:

  • src/InterestRatePool.sol
  • src/periphery/QuoteMarket.sol
  • src/periphery/KeeperBundler.sol
  • src/interfaces/ICoreAdapter.sol

Generate current Foundry artifacts from the repository root:

bash
forge build

The resulting ABI is the abi field in:

text
out/InterestRatePool.sol/InterestRatePool.json
out/QuoteMarket.sol/QuoteMarket.json
out/KeeperBundler.sol/KeeperBundler.json

The pool links two external libraries, ExpiryEngineLib and ExpiryPositionLib; their events (TickSwept, PositionClaimed) and errors are emitted from the pool's address, so the pool's full ABI merges them in. Regenerate the checked-in ABIs after any Solidity change:

bash
forge build && node scripts/deploy/generate-abis.mjs

This writes packages/sdk/src/abis/generated.ts (interestRatePoolAbi, quoteMarketAbi, keeperBundlerAbi, exported from @interestswap/sdk and @interestswap/sdk/abis) and deploy/goldsky/abis/*.json for the subgraph. Every TypeScript package imports the SDK ABIs; --check fails CI when they are stale.

Positions and series keys ​

A series key packs (feeEpoch, expiry, rate) into a bytes32 (16 + 64 + 128 bits). It names a backer book (VRT, token id keccak256(abi.encode(poolId, seriesKey))) and one fixed-rate leg of a borrower. A borrower holds one position per (poolId, expiry): several legs sharing one prepaid funding, so prepaid, keeper, liquidation and settlement calls take the expiry (borrowerPosition(poolId, expiry, user), supplyPrepaid(poolId, expiry, amount, onBehalf), settle(poolId, expiry, budget, recipient)), while leg calls take the series key (mintFRT, burnFRT, rollFRT, legOf).

EIP-712 Quote Type ​

QuoteMarket uses domain name QuoteMarket, version 1, the connected chain ID, and the deployed QuoteMarket as verifyingContract.

text
Quote(address maker,address taker,bytes32 poolId,bytes32 seriesKey,
      uint128 notional,uint128 vrtAmount,uint64 nonce,uint64 deadline,
      bytes32 salt)

All integer fields must be signed exactly as on-chain values. Human-readable token and APY conversions happen before constructing the typed data.

Interest Exchange Protocol