BentoSDK

Place a parlay

Create a quote, submit on-chain, and claim winnings.

Prerequisites

  • tournamentsBaseUrl configured
  • JWT or wallet auth for quote creation
  • onchain config for chain submission (or use calldata builders with your own signer)

Flow

import {
  createBentoSdk,
  jwtAuthProvider,
  walletAuthProvider,
  waitForParlaySettlement,
} from '@bento.fun/sdk';

const sdk = createBentoSdk({
  baseUrl: process.env.BENTO_URL!,
  tournamentsBaseUrl: process.env.PARLAY_TOURNMENT_URL,
  auth: walletAuthProvider(() => ({ /* … */ })),
  tournamentsAuth: jwtAuthProvider({
    getAccessToken: () => token,
  }),
  onchain: {
    contracts: {
      parlayDiamond: '0x…',
      usdc: '0x…',
      /* … */
    },
    wallet: viemWalletClient,
  },
});

// 1. Create quote
const quote = await sdk.tournaments!.parlay.createQuote({
  legs: [{ marketId: '…', outcome: 'YES' }],
  stake: '25',
});

// 2. Prepare (optional server-side step)
await sdk.tournaments!.parlay.prepareQuoteForPlacement(quote.id);

// 3. On-chain placement
const { hash } = await sdk.onchain!.placeParlayFromQuoteId(quote.id);

// 4. Wait for settlement (poll)
await waitForParlaySettlement(sdk.tournaments!.parlay, quote.parlayId);

// 5. Claim after win
await sdk.tournaments!.parlay.claim(quote.parlayId);

Backend signer path

If your backend owns the wallet:

import { buildPlaceParlayCalldata } from '@bento.fun/sdk';

const calldata = buildPlaceParlayCalldata(quote);
await backendWallet.sendTransaction({ to: calldata.to, data: calldata.data });

On this page