Keys and registration
Keys and registration
Generated an ECDSA P-256 key pair.
Private key stored in a secrets manager or HSM (not in code, not in env files on disk).
Public key registered with Blink; merchantId received and configured.
Key rotation plan documented.
Signer endpoint
Signer endpoint
Signer served over HTTPS only.
Signer authenticates callers (session token, API key, or CORS restriction).
Request validation implemented for all fields (amount, chainId, address, token, callbackScheme).
Token validation checks for valid contract address format (0x-prefixed hex).
Idempotency keys are generated as UUID v4 per request.
signatureTimestamp included in all signed payloads.
Rate limiting is in place to prevent abuse.
Error responses do not leak internal details (stack traces, key paths, etc.).
CORS configured to only allow your frontend origin(s).
Deposit SDK
Deposit SDK
SDK installed and configured with production signer URL.
webviewBaseUrl set to the Blink production URL (confirm with Blink).
Error handling implemented with DepositError codes and user-friendly messages via getDisplayMessage().
deposit.destroy() called on component unmount / page unload.
Viewport meta tag set correctly for mobile (no unexpected scaling).
CSP on your page restricts frame-src to https://pay.blink.cash (see Security & Content Integrity).
Content integrity
Content integrity
frame-src CSP set so the deposit iframe can only load from Blink.
Verified the deployed UI against https://pay.blink.cash/manifest.json (optional, for audits).
npm audit signatures passes for @swype-org/deposit (registry signature + lockfile integrity).
Monitoring and reconciliation
Monitoring and reconciliation
Signer requests and responses logged (excluding private key material).
reference and/or metadata used for correlating payments with internal orders.
Transfer status verified server-side (do not rely solely on the client-side DepositResult).
Alerting configured for signer errors, timeouts, and elevated failure rates.