Going to production
Use this checklist after the complete payment lifecycle works on Testnet4 / Stagenet and before enabling Mainnet.
Before you start
- A tested API or WooCommerce integration
- Dedicated production wallets or wallet accounts
- A public HTTPS webhook endpoint
- An owner for fulfillment, refund, reconciliation, and incident decisions
Step 1 — Separate environments
Use different API keys, webhook secrets, receive configurations, databases/configuration values, and logs for Test and Mainnet. Never infer network from an address alone; store the API response's asset and network.
Step 2 — Verify wallet ownership
- BTC: compare the first derived Mainnet address with the dedicated wallet.
- BCH: verify CashAddr prefix and account derivation independently.
- XMR: verify the primary address and private view key belong to the same Mainnet wallet; choose a safe restore height.
Back up seeds and spend keys offline. Manatee must never receive them. Treat public wallet data and XMR view keys as sensitive because they reveal incoming activity.
Step 3 — Harden webhook processing
- Verify timestamp and HMAC signature against the raw request body.
- Enforce a replay window and store each event ID once.
- Match the payment ID to the order mapping stored at creation time, then verify asset, network, and amount before mutation.
- Return a successful response only after durable processing.
- Reconcile by authenticated API lookup after missed or ambiguous events.
Step 4 — Define order policy
Document confirmation targets, underpayment tolerance, overpayment handling, late-payment handling, refunds, cancelled-order reconciliation, and which states permit fulfillment.
Manatee reports payment state; it cannot reverse or refund on-chain transfers. Send refunds from your wallet only after an authenticated business review.
Step 5 — Add operational monitoring
Monitor API availability, scanner/node readiness, webhook failure and retry counts, payment age, reconciliation backlog, and plan usage. Store payment ID, address, exact atomic amount, expiry, asset, network, and reference with every order.
Step 6 — Run low-value smoke tests
Create and pay one low-value Mainnet payment for each enabled asset. Verify detection, confirmation, webhook signature, idempotency, order mapping, explorer/wallet visibility, and accounting export.
Step 7 — Prepare incident recovery
Document how to disable new payment creation without losing already-received funds, query authoritative state after an outage, rotate API keys and webhook secrets, replace an exposed view key or public wallet account, and communicate delayed confirmation to customers.
Launch checklist
- Dedicated Mainnet wallet/account configured for each enabled asset
- Address or view-key ownership verified
- Mainnet API key and webhook secret stored server-side
- Signed webhook, replay, and idempotency tests pass
- Reconciliation and refund policies approved
- Monitoring and alerts enabled
- Low-value Mainnet smoke tests pass
- Test payment instructions cannot appear in production checkout