BTC$68,420▲ 0.82% / ETH$3,841▼ 0.31% / LTC$94.05▲ 1.14% / SOL$221.60▲ 3.02% / USDT·TRC20$1.0000 / USDC·ERC20$0.9999 / XMR$168.42▼ 0.18% / TON$6.02▲ 0.47% / XRP$2.41▼ 0.09% / GAS·ETH18 gwei / Indicative prices · illustrative ticker / No-KYC · non-pooled · 0.4% flat / BTC$68,420▲ 0.82% / ETH$3,841▼ 0.31% / LTC$94.05▲ 1.14% / SOL$221.60▲ 3.02% / USDT·TRC20$1.0000 / USDC·ERC20$0.9999 / XMR$168.42▼ 0.18% / TON$6.02▲ 0.47% / XRP$2.41▼ 0.09% / GAS·ETH18 gwei / Indicative prices · illustrative ticker / No-KYC · non-pooled · 0.4% flat
OrbChain
UTC 18:47:02 Get started →
Feature · Signed Receipts ▓ ED25519 · OFFLINE-VERIFIABLE Nobody else ships this

Signed
receipts.

Every paid invoice emits an Ed25519-signed JSON receipt. Verify offline against our published public key — in any language, in any runtime, without talking to our API. The record of settlement is cryptographic, not just a row in our database.

Sign · Publish · Verify offline
§ Part I / IV · Why it matters

Database rows
aren't evidence.

Auditors don't accept screenshots
They accept signatures
SymScenarioWhy a signed receipt winsValue
DSPCustomer disputes a paid invoiceCryptographic proof the invoice was paid, by what amount, to which address, at what time. Gateway can't retroactively forge it.EVIDENCE
AUDTax auditSigned attestation per payment. Independent from our database. Survives if OrbChain vanishes.AUDIT
ACCAccounting pipelineIngestible as a first-class financial record. Pipes into QuickBooks / Xero / Pennylane via your own adapter.INTEGRATION
AIRAir-gapped workflowsVerifier runs completely offline. No API call, no internet needed. Matters for high-security finance environments.INFRASTRUCTURE
DOMCross-jurisdictionWorks without our cooperation, which matters for merchants in regulatory environments where our response time is a liability.SOVEREIGNTY
§ Part II / IV · Mechanism

Ed25519 over canonical JSON.

Published public key
Rotated & notarized on release
#StepDetailState
01Invoice PAIDChain monitor confirms; deposit credits; payment.paid webhook fires.PAID
02CanonicalizeReceipt body built: track_id, amount, currency, coin, tx_hash, confirmed_at, merchant_id, version. Stringified with sorted keys (see src/services/receipts.ts).CANONICAL
03Signcrypto.sign(null, canonical, privateKey) — Ed25519 over the canonical bytes. 64-byte signature.SIGNED
04ServeGET /v1/payment/:track_id/receipt returns the body + signature + public-key fingerprint.AVAILABLE
05VerifyFetch our public key once from /v1/common/receipt-public-key (cache forever). Verify signature offline in any language.OFFLINE
§ Part III / IV · Verifier code

Node. Python.
Any language.

Ed25519 is standardized
Every crypto lib implements it
node verify.js · offlinezero external calls
// Fetch the receipt + verify against our public key (cached once).
const crypto = require("crypto");

function verifyReceipt(receipt, publicKeyPem) {
  const canonical = JSON.stringify(receipt.body, Object.keys(receipt.body).sort());
  return crypto.verify(
    null,                         // Ed25519 takes no hash algo
    Buffer.from(canonical),
    crypto.createPublicKey(publicKeyPem),
    Buffer.from(receipt.signature, "hex")
  );
}

// One-time fetch + pin. Public key rarely rotates.
const publicKeyPem = await fetch(
  "https://orbchain.io/v1/common/receipt-public-key"
).then(r => r.text());

// Fetch the receipt (one-time, with auth).
const receipt = await fetch(
  "https://orbchain.io/v1/payment/pay_01JR3K9T…/receipt",
  { headers: { "merchant_api_key": "mk_live_…" } }
).then(r => r.json());

// Verify anywhere, anytime — no network required after pin.
verifyReceipt(receipt, publicKeyPem);  // → true
§ Part IV / IV · Questions

Things auditors
ask first.

Short and direct
Cryptography isn't magic
Q.01Is this a standard format I can audit?

Yes. Ed25519 (RFC 8032). Canonical JSON with sorted keys. Public key in PKCS#8 PEM. No custom crypto, no bespoke serialization.

Q.02How do you rotate the key?

The endpoint returns both the current key and a list of previous keys with their validity windows. A receipt signed with a prior key still verifies — we never invalidate old signatures.

Q.03Can I verify without hitting your API?

Yes. Pin the public key once at signup; verify every subsequent receipt offline. No network calls needed. This is the whole point.

Q.04What's in the signed body?

track_id, version, merchant_id, coin, pay_currency, amount, amount_usd, fee_usd, net_usd, tx_hash, confirmations, confirmed_at, receipt_issued_at. Nothing that requires looking us up.

Q.05Do you ship this on payouts too?

Yes — GET /v1/payout/:payout_id/receipt. Same signature scheme. Same verification code.

Cryptographic records.
On every payment.

No other crypto gateway ships this. Adds zero work on your side until you need the evidence.