SplintrSplintr
CA:Coming Soon

// production

Going Live

Splintr ships fully in test mode out of the box. To accept real money you need three things: a settlement destination, hot-wallet keys for the chains you want to sweep, and paid RPC endpoints. This page walks through each one.

1. Required secrets

Add these in Backend → Secrets. Names are exact and case-sensitive.

SECRETWhere it comes fromNotes
PLATFORM_EVM_PRIVATE_KEYHot wallet you generate offline0x-prefixed 32-byte hex. Funds USDC sweeps on EVM chains.
PLATFORM_SOLANA_PRIVATE_KEY`solana-keygen new` output, base58 encodedFunds SPL USDC sweeps on Solana mainnet.
EVM_RPC_BASEAlchemy / Ankr / QuickNodeHTTPS URL for Base mainnet. Sibling vars: EVM_RPC_ETHEREUM, EVM_RPC_ARBITRUM, EVM_RPC_OPTIMISM, EVM_RPC_POLYGON — set the ones you accept.
SOL_RPC_URLHelius / Triton / QuickNodeHTTPS URL for Solana mainnet. SOLANA_RPC_URL is also accepted.
LIFI_API_KEYli.fi dashboardAlready set. Required for cross-chain routing.
CIRCLE_API_KEYconsole.circle.com/api-keysBearer token used verbatim as `Authorization: Bearer <key>`. Sandbox keys start with `TEST_API_KEY:`, mainnet with `LIVE_API_KEY:` — Splintr picks the base URL from the prefix automatically.
CIRCLE_ENVIRONMENTYou (optional override)`sandbox` or `live`. Only set if you want to force a base URL regardless of key prefix.
PAYOUT_ALLOWED_CHAINSYou (optional kill-switch)Comma-separated list, e.g. `base,arbitrum,solana`. Unset = allow every supported chain (ethereum, base, arbitrum, optimism, polygon, bnb, avalanche, robinhood, solana). Change without redeploy to pause a chain.

2. Hot wallets

Generate keys offline. Never paste an existing personal wallet's key.

EVM

snippet.tsx
# Generate a fresh key
openssl rand -hex 32 | awk '{print "0x"$1}'

# Fund the resulting address on each chain you accept:
#   - Base:    ~$50 USDC + $5 ETH for gas
#   - Arbitrum: ~$50 USDC + $5 ETH for gas
# Then paste the 0x... key as PLATFORM_EVM_PRIVATE_KEY.

Solana

snippet.tsx
# Generate offline (keep the JSON file safe)
solana-keygen new --outfile splintr-hot.json

# Convert byte array to base58 for storage
python -c "import json,base58,sys; print(base58.b58encode(bytes(json.load(open('splintr-hot.json')))).decode())"

# Fund with ~$50 USDC (SPL) + 0.05 SOL for fees.
# Paste the base58 string as PLATFORM_SOLANA_PRIVATE_KEY.

3. RPC providers

Public RPCs will rate-limit you within an hour of first live traffic. Use paid endpoints.

  • Alchemy — Base + Arbitrum. Create separate apps per chain.
  • Helius — Solana. The free tier is fine for early volume.

4. Payout rails

Merchants pick a rail in Dashboard → Settings. Options:

  • self_custody — Splintr broadcasts USDC transfers from your hot wallets directly to the merchant address.
  • circle — Splintr creates a Circle payout and reconciles via webhook. Requires Circle secrets above.
  • mock — Test-mode only. No on-chain broadcast.

5. Alert sinks

Configure destinations in Dashboard → Alerts. Splintr will page you when webhook delivery, payouts, or intent expiry breach the thresholds you set.

6. Live smoke test

Once secrets are in place, run one real $0.50 payment end-to-end from CI or a laptop:

snippet.tsx
SPLINTR_LIVE_SMOKE=1 \
SPLINTR_BASE_URL=https://splintr.cash \
SPLINTR_SECRET_KEY=sk_live_... \
MERCHANT_WALLET=0xYourMerchantWallet \
node scripts/smoke-payout-live.mjs

The script creates a $0.50 live intent, prints the checkout URL, polls until settled, waits for the payout row, and asserts an on-chain tx hash. Any failure exits non-zero.

Also available as a manual GitHub Action (payout-live-smoke workflow) — never runs on push.

This live workflow requires GitHub environment secrets named exactly SPLINTR_LIVE_SECRET_KEY and SPLINTR_LIVE_MERCHANT_WALLET on the production environment. Staging secrets are only used by the staging smoke suite.

7. Dashboard go-live checklist

Your dashboard home shows a live readiness checklist for this merchant: settlement destination set, a live API key issued, an enabled webhook endpoint, at least one settled live payment, and at least one successful payout. Every item must be green before you route real customer volume.

Payout failures are shown in plain language on the Payouts page — the most common one is an unfunded platform hot wallet on the settlement chain. Fund it, then retry the payout from the same row.

Stuck? Open an issue at github.com/Splintr-dev/SPLINTR.