Skip to main content
Opinion Labs (opinion.trade) runs on BNB Chain and uses a Gnosis Safe to hold positions, similar in structure to Polymarket. Orders are EIP-712 signed by your EOA on behalf of the Safe.

At a glance

Prerequisites

  • An Opinion Labs account (opinion.trade)
  • USDT on BNB Chain in your Opinion Labs Safe wallet
  • The EOA private key that controls the Safe
  • A Delphi API key

One-time setup

Opinion Labs has two pre-trading steps: looking up your Safe address and approving the exchange contracts.

1. Get your Safe address

This calls the Opinion Labs API directly (no server-side state).

2. Approve the exchange contracts

The Safe needs to approve the CTF Exchange contract to spend your USDT and Conditional Tokens. This is a one-time transaction per Safe.
enableTrading submits a Safe transaction that sets approvals for both USDT (ERC-20) and Conditional Tokens (ERC-1155). After it confirms, you can place orders.

3. Register credentials with Delphi

Build and place an order

Build parameters

The signed payload includes both the EIP-712 fields and Opinion-Labs-specific metadata (topicId, currencyAddress, tradingMethod, etc.) that the Opinion Labs API requires alongside the signature.

Query and cancel

Common pitfalls

Run enableTrading() once and wait for the receipt. The Safe transaction sets approvals atomically. Re-check getSafeApprovalStatus() after the receipt confirms — it should return allApproved: true.
USDT on BNB Chain uses 18 decimals, not 6 like USDT on Ethereum or Polygon. The SDK handles this for you — pass human-readable values to amount (e.g. 3 for 3 USDT) and the SDK converts internally.
Opinion Labs requires signatureType: '2' (POLY_GNOSIS_SAFE) — the Safe signs as the asset owner with the EOA producing the signature. The SDK sets this automatically. If you’re hand-rolling a signed payload, don’t use 0 (EOA) or 1 (PROXY).
Opinion Labs’s API requires both signature and sign fields, set to the same value. The SDK populates both. This is a quirk of their API surface, not a bug.

API reference