Use TypeScript
polynode-sdk >= 0.14.2, Python polynode >= 0.14.1, or Rust
polynode >= 0.17.1 with its trading feature. Wallet authorization requires
an eligible paid Polynode plan and a valid pn_live_... API key. It is included
in the supported SDK flow; there is no separate add-on or additional service
URL to configure.user_owned.
What changes
User-owned mode removes the shared builder allowance from these operations. It
does not remove wallet balances, market rules, order API limits, or ordinary
rate limits, and it should not be presented as universally unlimited trading.
Which integration should I use?
Web application
Connect an injected wallet, authorize it, choose browser memory or an
encrypted backend vault, and place an actual user-owned order.
Service signer
Keep using
ensureReady / ensure_ready with your HSM, MPC wallet, Privy
server wallet, or controlled private-key signer.Credential meanings
User-owned execution uses distinct credentials for distinct purposes:
The wallet-owned relayer credential is not a private key and cannot sign an
order or transfer funds by itself. It is still sensitive. Never log it, commit
it, put it in a URL, or share it across wallets.
Treat the controlling EOA as the isolation key. One user must never inherit
another user’s trader, challenge, wallet-owned credential, order credentials,
prepared order, or result.
Supported account types
- Deposit wallet (
3) is the default for a new V2 user-owned browser or service-signer setup. The controlling EOA signs; the deposit wallet holds collateral and positions. - Existing Safe (
2) remains supported when it is the account identity already associated with that user. Do not switch an existing user to a different deterministic account merely because both addresses exist. - EOA (
0) can place orders directly. Initial approvals are on-chain transactions and require gas from that EOA. - Legacy proxy/Magic (
1) is rejected in user-owned mode.
Service-signer setup
Use this model when your existing platform signer can produce both personal-message and EIP-712 signatures. The SDK obtains the wallet-scoped authorization during readiness and keeps it in memory. Save the returned credential in your own encrypted store if the process must restore it later.- TypeScript
- Python
- Rust
authorizeUserOwnedExecution(signer) when you need only the authorization
result instead of full readiness.Restore a wallet-owned credential
For a returning service signer, load only the credential saved for the active wallet and pass it in the trader configuration. The SDK revalidates its owner before any user-owned operation.- TypeScript
- Python
- Rust
Order and position behavior
User-owned mode enforces these invariants before signing or submission:- V2 order builder attribution is exactly zero.
- Builder credentials and builder authentication are absent.
- A positive Polynode fee configuration is rejected.
- The relayer credential owner, controlling EOA, funder, account type, and active order credentials must describe one wallet identity.
- There is no automatic transport or attribution fallback.
split, merge, convert, wrap, and unwrap retain their wallet-specific
requirements. See Trading and fees for funding and position
methods. Use the web-app guide when the user’s
injected wallet signs an order while your backend retains credentials.
Network path
User-owned order traffic uses the SDK’s direct transport by default. Approved integrations may explicitly choose Polynode regional egress:
The selected path is fixed for each request and never falls back automatically.
Regional egress changes the network path only; it does not add builder
attribution or wallet custody.
Security checklist
- Enable user-owned mode only after the user explicitly opts in.
- Keep the Polynode API key on the backend.
- Bind every credential and prepared operation to one expected controlling EOA.
- Keep wallet-owned and order API credentials in an encrypted per-wallet vault, or explicitly accept the browser-memory risks.
- Never log challenges, credentials, API secrets, passphrases, or signatures.
- Do not configure builder credentials, nonzero builder attribution, or a positive Polynode fee on this trader.
- Confirm the returned account type and funder before funding it.
- Reconcile an ambiguous order result instead of retrying a signed intent.
- Close traders and browser sessions when their request, worker job, or login session ends.

