Skip to main content
Una prueba de firma es evidencia criptográfica de que una wallet pertenece a tu cuenta, sin mover fondos y sin una transacción on-chain. CBPay construye un sobre anti-phishing estructurado y legible (título, propósito, wallet, nonce y ventana de validez), la wallet lo firma con EIP-191 (Ethereum) o TIP-191 (TRON), y cualquiera puede verificar el resultado en un link público — sin autenticación. Dos formas de producir una prueba:
Toda prueba expira 10 minutos después de emitida (expires_at). Una prueba atestigua un momento en el tiempo; si una contraparte necesita una fresca, crea una nueva firma.

El sobre anti-phishing

CBPay jamás firma un mensaje libre. Ambos flujos construyen el mismo sobre estructurado, así quien firma siempre ve qué se atestigua, qué wallet firma y hasta cuándo es válido:
El propósito wallet_link agrega una línea Account: con tu id de cuenta enmascarado. Una firma cuyo sobre está expirado, aún no es válido o está ligado a otra wallet se rechaza.

1. Firma server-side (wallet segregada)

Firma con una wallet segregada custodiada por CBPay (custody: cbpay). Como este flujo produce una firma con una llave custodiada, exige KYC aprobado y un desafío OTP.
1

Crea el desafío OTP

Pide un código de un solo uso para la acción sign_message y verifícalo para obtener un X-OTP-Token (ver OTP).
2

Solicita la firma

purpose es wallet_ownership o treasury_attestation. statement es una línea de texto libre opcional (máx. 140 runas) embebida en el sobre.
201
3

Comparte el link público

Envía verify_url a la contraparte. Lo abre sin credenciales y ve la prueba, su estado y la firma.
Cada firma también gatilla un email de seguridad al titular de la cuenta y un webhook wallet_signature_created.

Listar, detalle y revocar

Para probar la titularidad de una wallet cuyas llaves tienes (no custodiada por CBPay), completa un challenge firmado:
1

Crea el challenge

201
2

Firma el sobre en la wallet

Muestra el texto de envelope al titular y pídele firmarlo exactamente como se muestra con la wallet de address (MetaMask personal_sign para eth, TronLink para tron). El challenge expira en 10 minutos.
3

Envía la firma

200
Una verificación exitosa crea una prueba de firma (purpose: wallet_link) y dispara el webhook wallet_linked. Listar y revocar vínculos:

3. Verificación pública

Cualquiera con el link puede verificar una prueba — sin cuenta, sin token:
200
valid es true solo cuando la prueba está firmada, no revocada, no expirada y la firma sigue calzando con el sobre (verified_live re-chequea la criptografía en cada llamada). Un código desconocido o mal formado devuelve 404 not_found.

Estados

Errores

Webhooks

Suscríbete a estos eventos (ver Webhooks):
wallet_signature_created
wallet_linked

FAQ

No. Firmar un mensaje es puramente criptográfico: sin transacción on-chain, sin fee de red, sin cambio de saldo.
10 minutos desde issued_at. Después el link público muestra la prueba como expirada. Crea una nueva firma cuando se necesite una atestación fresca.
Sí — POST /v1/signature-proofs/{proofID}/revoke. El link público sigue funcionando y reporta status: revoked, así las verificaciones pasadas siguen siendo auditables.
El sobre acepta hasta 140 runas de statement. Requests sobre 280 caracteres fallan con invalid_statement; entre 141 y 280 el sobre los rechaza con sign_rejected.
Última modificación el 22 de agosto de 2026