Verit Global logo
Verit Global
Back to Industries

Settle LPs, validators, and users exactly—across chain and fiat.

Cross‑domain mismatches (off‑chain books vs on‑chain payouts) and micro‑fee drift shouldn’t exist. We release only the proven set—bound to on‑chain headers/receipts and fresh approvals—so replays match bit‑for‑bit.

Exchanges & Digital-Asset Platforms market hero

Who this is for

CEX / hybrid exchanges & Web3 platforms

Splitting trading fees, staking yields, or rebates with LPs, validators, and users across on‑chain and fiat rails.

Where pain shows up

Off‑chain vs on‑chain mismatches, re‑runs that change cents/wei, micro‑fee rounding drift, finality not tied to payouts, heavy audit lift.

Outcome we target

Wei/penny‑exact, cross‑domain‑verified disbursements; replayable transcripts; approvals fresh/in‑quorum; clean audits.

What you get (in plain English)

No micro‑fee drift

Integer math + late quantization + deterministic carry—sub‑cents/wei assigned once per window.

Cross‑domain proof

Bind payouts to on‑chain headers/receipts (SPV) and sealed transcripts; auditors can replay and verify.

Safer policy changes

Canary + digest equality across versions; promotion only on equality; rollback bounded to a window.

Before → After (at a glance)

Traditional stack & flow (before)

  • Off‑chain: matching engine + warehouse fees (Snowflake/BigQuery/Spark) with FP math & per‑trade rounding
  • Payout rails: on‑chain programs/custody wallets and/or ACH/SEPA/PSPs
  • Back office: subledger/ERP + spreadsheets, monthly close tools

Re‑runs shift cents/wei; finality not tied to payout; no replay‑proof that “this batch exactly equals those inputs.” Audits are heavy.

Overlay architecture (after)

  • Deterministic engine: single‑writer logs/partitions; fixed fold order; i128 accumulation.
  • Late quantization + carry‑ledger: round once at finalization; ≤½‑ULP bound; assignments recorded.
  • Transcript + output_digest: content‑addressed, replayable evidence; require digest equality.
  • Acceptance gate: Finance ACK + CT (KYC/OFAC/Tax) + optional SPV headers/receipts; freshness & quorum.
  • Cross‑domain adapter: verify on‑chain block header / custody receipt inside the same audited pipeline.

How it works (60 seconds)

1) Ingest & compute

Normalize maker/taker fees, rebates, staking rewards into ordered logs with idempotency; compute deterministically in integers.

2) Window close

Advance a monotone watermark; fold in a fixed order; late quantize; assign carry deterministically; seal transcript & digest.

3) Authorize & disburse

Require replay equality + acceptance success (ACK/CT and optional SPV). Release only the ALLOW set; HOLDs reason‑coded.

Keep your rails—no rip‑and‑replace.

Hourly cadence (example)

  • T+0–55m: Ingest & compute deterministically
  • T+55m: Window close (watermark, fold, quantize, carry)
  • T+56m: Authorize(window_id) — equality + acceptance
  • T+57m: Disburse ALLOW (on‑chain or ACH/PSP); HOLDs reason‑coded
  • Next window: Late trades/chargebacks land here

Acceptance policy (example)

Required proofs

  • ACK (Finance reserves) — window‑level
  • CT (KYC/OFAC/Tax) — principal/cohort‑level
  • SPV (optional) — on‑chain block header/Merkle proof or custody/bank receipt headers

Freshness & quorum

  • Freshness: ACK ≤ 60m; CT ≤ 24h; SPV ≤ 60m
  • Quorum: 2 of 3 (Finance, Compliance, Ops)

If unmet

  • HOLD with reason: STALE_PROOF, INSUFFICIENT_QUORUM, INVALID_SIGNATURE
  • Owners alerted; re‑check without mutating outputs

Fits your stack

Keep what works

Keep your on‑chain programs/custody wallets and/or ACH/SEPA rails, plus your ERP/subledger. We add a pre‑release gate.

Add three fields

  • window_id — identifies the payout window
  • output_digest — ties to the sealed transcript (replay equality)
  • provider_batch_id — tx batch hash / custody receipt / PSP batch reference

One pre‑release call

Right before you post transfers or create the ACH/PSP batch:

Authorize
POST /authorize { window_id }
→ ALLOW roster + HOLD roster with reason codes

Path A — On‑chain (programmatic)

  • Execute on‑chain batch for ALLOW set
  • Record provider_batch_id (tx batch hash)
  • POST /proofs with SPV headers/headers_hash to close the loop

Path B — Off‑chain (ACH/PSP)

  • Create PSP/ACH file from ALLOW set
  • Include window_id in memo; capture batch ref as provider_batch_id
  • Optional: SPV receipt from custody/bank after execution

Data intake options: S3/GCS/SFTP, read‑only DB view, Kafka/Webhook — adapters provided.

Where these fields go

  • On‑chain/PSP batch metadata: window_id, output_digest, provider_batch_id
  • GL/subledger custom fields: custbody_payout_window_id, custbody_output_digest, custbody_provider_batch_id, custbody_transcript_url

Technical details (for software engineers)

View endpoints, SPV, data contracts & mappings

API surface

Gate release and fetch evidence:

POST /authorize (window_id)
// Verifies replay digest equality + acceptance matrix (freshness & quorum)
→ Returns: ALLOW roster + HOLD roster with reason codes
POST /proofs (submit attestations)
// Push CT/ACK/SPV payloads; we verify signatures & freshness and update decisions
GET /transcript/{window_id}
// Sealed transcript + output_digest for replay & audit

SPV (simple proof of validity)

  • On‑chain: block header + Merkle proof (chain_id, height, root)
  • Custody/bank: receipt headers (batch id, totals, timestamp, signature)
  • We bind these to the same window_id and output_digest for cross‑domain proof

Data contracts (minimal)

Tier 0 — fee/rebate/reward events
event_id,ts_occurred,principal_id,instrument,currency,amount_minor,source_type(maker_fee|taker_fee|rebate|stake_reward|refund|adjustment),chain_id?
Tier 2 — attestations (signed JSON)
// Finance ACK (window-level)
{ "window_id":"2025-09-05/17:00", "reserves_ok":true, "signer":"fin-ops@...", "expires_at":"2025-09-05T18:00:00Z" }

// CT (principal/cohort-level)
{ "principal_id":"LP-99102", "status":"cleared", "expires_at":"2025-09-06T00:00:00Z" }

// SPV (optional, window-level)
{ "window_id":"2025-09-05/17:00", "provider_batch_id":"TXB-88919", "totals_minor":"123456789", "headers_hash":"0x..." }
ERP/PSP/on-chain delta
// Add to payout metadata & GL:
window_id, output_digest, provider_batch_id, transcript_url

Worked micro‑example

Off‑chain → on‑chain with SPV
// Hourly window W: $12,345.67 fees to 3 LPs; LP-B CT stale
i128 accumulate → late quantize → carry-ledger (2 sub-cents assigned deterministically)
Seal transcript → output_digest=0xabc... → Authorize(W)
// HOLD(LP-B, STALE_PROOF); ALLOW LP-A/C
Execute on-chain batch → provider_batch_id=0x...; POST SPV headers_hash
Persist window_id/output_digest/provider_batch_id in subledger/ERP

Results teams aim for

Replay equality ≥ 99.99%

Windows where digest(replay) == digest(transcript).

Wei/penny‑exact outcomes

Late quantization + deterministic carry assigns sub‑units once; no drift on micro‑fees.

Time‑to‑release (p95)

Minutes from watermark close to authorized disbursement once proofs are fresh.

Reason‑coded blocks

Counts by reason (DIGEST_MISMATCH, STALE_PROOF, etc.) visible per window.

Migration safety

Promote only on digest equality across versions; canary and rollback bound risk.

Targets are set together during a pilot; they are goals, not guarantees.

Risks & mitigations

See risks & how we handle them
  • Late/missing proofs → auto‑HOLD; re‑check without mutating outputs.
  • Policy/migration defects → digest mismatch; canary + rollback; bounded exposure.
  • Hot markets/partitions → versioned shard function; promote only on digest equality.

FAQ

How do you reconcile off‑chain accounting with on‑chain payouts?

We bind the same window_id and output_digest to both the sealed transcript and the on‑chain/custody receipt via SPV headers, so a replay can prove equality end‑to‑end.

Will we need new payout rails or smart contracts?

No. Keep your contracts and rails. We add a pre‑release gate and a tiny SPV receipt to tie the payout back to the transcript.

What about re‑runs that used to change wei/cents?

Integer math + late quantization + deterministic carry mean a re‑run produces the same outputs bit‑for‑bit. If not, it won’t authorize.

Pilot in 30 days

What we’ll ask in discovery

  • Which markets/LP cohorts and rails (on‑chain vs ACH/PSP) are in scope?
  • Where do off‑chain vs on‑chain totals differ today, and by how much?
  • What must be true before cash moves? Who signs off?

Next step

Pilot a cohort for N hourly/daily windows; measure equality, reasons, and time‑to‑release.

Verit Global