Security

How we protect client funds

How we hold keys, approve withdrawals, watch for problems and respond when something goes wrong.

Cold storage

Held offline, with key shares in separate locations. Moves only to the warm wallet, after a time delay.

Warm wallet

Refills the hot wallet. Needs staff approval and can only send to our own wallets.

Hot wallet

Automated client payouts to whitelisted addresses, within a daily cap.

Key management

MPC key management

Each key is split into shares with threshold signatures (MPC-TSS). The shares sign together without ever being combined.

  • Shares sit with separate parties, including an isolated policy service and an offline backup.
  • Shares can be refreshed, so an old leaked share is useless.
  • Encrypted backups and a written recovery procedure.

Policy engine

One key share belongs to an independent policy service. It checks every request and withholds its signature when a rule is broken.

RuleExampleIf it fails
Address whitelistPayouts only to addresses approved in advance, after a waiting periodRejected
Amount levelsLarger amounts need more approvers and may be delayedSent for approval
Speed limitsHourly and daily caps per asset, per wallet and per merchantPaused
Contract callsTreasury wallets cannot use delegatecall, change owners, upgrade contracts or grant token approvalsRejected, alert raised
Time windowsWarm and cold transfers only during staffed hoursQueued
AML screeningDestination is sanctioned or high-riskBlocked

Circuit breakers

Authorised staff can pause withdrawals at any time. Restarting them needs several authorised people. These conditions trigger a pause automatically.

Outflow spike

Withdrawals far above the normal level for that hour, or above a fixed cap.

Balance mismatch

The on-chain balance differs from our internal ledger.

Unknown transaction

A wallet sends something our system did not create.

System warnings

A node out of sync, unusual error rates, or a config change outside the release window.

Level 1 · Limit

One client or one asset

Triggered automatically. An authorised officer can lift it after review.

Level 2 · Pause

All automated payouts

Triggered automatically or by authorised staff. The restart needs more than one approval.

Level 3 · Freeze

Every outgoing movement

Triggered automatically or by authorised staff. The restart needs several key holders, including an executive, after the cause is understood.

How a restart is approved

A restart is a signed request, not a button. Each approver confirms it on their own hardware security key, and the policy service, which holds one key share, checks the signatures before it will sign anything again. One compromised admin account cannot unfreeze the system.

Manual processing while paused

Deposits keep being credited. Withdrawals queue for the operations team, who apply the same rules and multi-person approval as the automated flow. Merchants see each request's status in the console.

Transaction verification

Before any transfer is signed, we confirm that the transaction approvers see is exactly the transaction that will be executed. Nothing is signed on trust.

  • Two independent systems decode every raw transaction. Their results must match.
  • Approvers use a dedicated device that shows destination, amount, asset and contract method in plain text.
  • Transactions that cannot be decoded are rejected. We never sign blind.
# Request signature
signature = HMAC_SHA256(secret,
  timestamp + "\n" + nonce + "\n" +
  method + "\n" + path + "\n" +
  SHA256(body))

# Server-side checks
✓ client TLS certificate valid
✓ source IP on allow-list
✓ timestamp within allowed window
✓ nonce never used before
✓ signature matches
✓ key permitted for this action
API & webhooks

API security

Mutual TLS, signed requests and replay protection on every call.

Scoped keys

Read, deposit and payout keys are separate. Payout keys cannot change whitelists.

Idempotency

Retried requests never create a second payout.

Signed webhooks

Verify our signature, then re-query the transaction before crediting a client.

Operational security

Approval devices

Dedicated, managed devices that are never used for email, browsing or development.

Separation of duties

No one person can create, approve and broadcast a transfer. Production access is granted per task and logged.

Software supply chain

Pinned dependencies, integrity hashes on front-end files, and a second reviewer on every deployment.

Reconciliation

Ledger, on-chain balances and provider records are matched continuously. Any difference pauses withdrawals.

Access logging

Access to production and approval systems is logged. Security researchers can report issues through our responsible disclosure program.

Incident response

Written runbooks for detecting, containing and investigating incidents.

Security documentation

Clients can request more detail on our security model during onboarding.