SDK Getting Started
@interestswap/sdk provides production address constants, quote/RFQ models, EIP-712 signing, HTTP helpers, an authenticated RFQ WebSocket client, rate conversions, and a local daemon socket client.
Install
pnpm add @interestswap/sdk viemNode.js 20 or later is required. The WebSocket signer APIs can use a private key, but browser applications should use BackerSigner.setAccount with the connected wallet rather than expose a private key to client code.
Read Production Data
The SDK defaults to the generated Base contract addresses, but its orderbook URL defaults to localhost. Set the service URL explicitly for production:
import { InterestSwapClient, PRODUCTION_DEPLOYMENT } from '@interestswap/sdk'
const client = new InterestSwapClient({
orderbookUrl: 'https://api.interest.exchange',
})
const [health, poolData] = await Promise.all([
client.getHealth(),
client.getPoolRates(),
])
console.log(PRODUCTION_DEPLOYMENT.chainId, health.status, poolData.pools)orderbookUrl is the origin without /api/v1; the client appends API and WebSocket paths.
Request Borrower Quotes
const result = await client.requestQuotes({
poolId: '0x...',
expiry: 1_787_000_000,
notional: '1407554', // raw loan-token units
})
for (const quote of result.quotes) {
console.log(
quote.marketQuote.maker,
quote.notional,
quote.vrtAmount,
quote.expiresAt,
)
}This endpoint discovers quotes; it does not execute them. A borrower must revalidate the selected quote and call the deployed QuoteMarket through Bundler3 with the required approvals.
Listen and Quote as a Backer
import { InterestSwapClient } from '@interestswap/sdk'
const client = new InterestSwapClient({
orderbookUrl: 'https://api.interest.exchange',
})
// Server-side only. Prefer setAccount with a wallet client in wallet software.
client.setPrivateKey(process.env.BACKER_PRIVATE_KEY as `0x${string}`)
const ws = client.connectWebSocket({
onAuthenticated: (address) => console.log('authenticated', address),
onRFQ: async (rfq) => {
// Apply policy, choose an eligible series, read QuoteMarket.nonces(maker),
// calculate vrtAmount, construct the exact QuoteMarketQuote, then:
// await ws.submitQuote(rfq.rfqId, quote)
console.log('RFQ', rfq)
},
onQuoteAck: (ack) => console.log('quote result', ack),
})Before submitting, the maker must have enough pool loan token and must approve QuoteMarket for at least vrtAmount. The quote nonce must equal the current on-chain QuoteMarket.nonces(maker) value.
