Skip to main content

Portfolio

The ctx.portfolio module lets you view positions, balances, and claimable winnings. If a signer is configured, the address defaults to your wallet.
import { ContextClient } from "@contextwtf/sdk"

const ctx = new ContextClient({
  apiKey: process.env.CONTEXT_API_KEY!,
  signer: { privateKey: process.env.PRIVATE_KEY! as `0x${string}` },
})

Get positions

View all positions across markets:
const { portfolio, cursor } = await ctx.portfolio.get()

for (const position of portfolio) {
  console.log(`Market: ${position.marketId}`)
  console.log(`Outcome: ${position.outcomeName}`)
  console.log(`Balance: ${position.balance}`)
  console.log(`Current value: ${position.currentValue}`)
  console.log(`Net investment: ${position.netInvestment}`)
}

Filter by kind

// Only active positions
const active = await ctx.portfolio.get(undefined, { kind: "active" })

// Won positions
const won = await ctx.portfolio.get(undefined, { kind: "won" })

// Claimable positions
const claimable = await ctx.portfolio.get(undefined, { kind: "claimable" })
KindDescription
"all"All positions
"active"Open market positions
"won"Winning positions in resolved markets
"lost"Losing positions in resolved markets
"claimable"Positions ready to claim

Filter by market

const { portfolio } = await ctx.portfolio.get(undefined, {
  marketId: "0x1234...",
})

Look up another address

const { portfolio } = await ctx.portfolio.get("0xOtherAddress...")

Claimable winnings

Get positions in resolved markets that are ready to claim:
const { positions, totalClaimable, markets } = await ctx.portfolio.claimable()

console.log(`Total claimable: ${totalClaimable}`)

for (const pos of positions) {
  console.log(`${pos.outcomeName}: ${pos.claimableAmount}`)
}

Portfolio stats

Get a summary of your portfolio value:
const stats = await ctx.portfolio.stats()

console.log(`Portfolio value: ${stats.currentPortfolioValue}`)
console.log(`Change: ${stats.currentPortfolioPercentChange}%`)

Balances

Get TUSD and outcome token balances:
const balance = await ctx.portfolio.balance()

console.log(`TUSD balance: ${balance.usdc.balance}`)
console.log(`  In wallet: ${balance.usdc.walletBalance}`)
console.log(`  In settlement: ${balance.usdc.settlementBalance}`)

for (const token of balance.outcomeTokens) {
  console.log(`${token.outcomeName} (${token.marketId}): ${token.balance}`)
}

Token balance

Query the balance of a specific token:
const tokenBal = await ctx.portfolio.tokenBalance(
  "0xWalletAddress...",
  "0xTokenAddress...",
)

console.log(`${tokenBal.symbol}: ${tokenBal.balance} (${tokenBal.decimals} decimals)`)