Ruta práctica: activos digitales en la operación
Artículo 1 de 12
8%
completado al llegar aquí
Sistemas distribuidosNota de investigación16 min de lectura
Web3 para el equipo: el mínimo común
Direcciones, nonce, comisiones y la diferencia entre confirmación y finalidad: lo que todo el equipo debe saber antes de acreditar un depósito o firmar un retiro.
Un cliente avisa por soporte: "les envié 1.000 USDC hace un minuto, ya aparece en el explorador, ¿por qué no lo veo en mi saldo?". La persona de soporte mira el explorador de bloques y ve la transacción con un "1 confirmación". El sistema interno todavía no la abona. ¿Quién tiene razón? Los dos, y ese es el problema que resuelve este capítulo: el equipo necesita un vocabulario común y una regla escrita sobre cuándo un depósito ya no puede desaparecer.
Este es el primer módulo de la ruta práctica. No enseña a programar contra una red: el equipo ya domina sus lenguajes y su infraestructura. Explica el mínimo que cualquier persona (desarrollo, operación, soporte, cumplimiento) debe entender antes de mover un activo, y termina con dos entregables: un glosario operativo y una tabla de finalidad por red.
Brújula de lectura
Actor, evidencia y estado
Actor
Quien firma la transacciónEl titular de la llave privada de la dirección de origen; ni el proveedor ni el nodo pueden firmar por él.
Evidencia
Transacción incluida en un bloqueHash, bloque y número de confirmaciones; el bloque finalizado es la prueba más fuerte.
Estado
Saldo y nonce de cada cuentaCada transacción válida mueve el estado de la red de t a t+1 y sube el nonce del emisor.
Cuatro palabras que todo el equipo debe usar igual
Volvamos al depósito. El cliente "envió a una dirección". Una dirección es un identificador público, como 0x7E5F…5Bdf en Ethereum, que cualquiera puede usar como destino. Detrás de ella hay una cuenta: un registro en el estado de la red con su saldo y su contador de transacciones. En Ethereum existen cuentas controladas por una llave privada y cuentas controladas por código (contratos). [1] Si quieres ver cómo una llave se convierte en dirección, el capítulo Cuentas, claves y direcciones sin humo lo hace paso a paso.
Una transacción es una orden firmada que cambia ese estado. Incluye destino, valor, datos opcionales, límite de gas, comisiones máximas, la firma y un nonce: un contador que sube de uno en uno con cada transacción de la cuenta emisora. [2] El nonce importa en operación por dos razones. Impide que alguien reenvíe la misma transacción para cobrar dos veces. Y obliga a un orden: si la transacción con nonce 7 se atasca, la 8 espera detrás de ella.
La regla que más cuesta interiorizar es esta: una transacción firmada no se puede revocar. No existe un "cancelar" en el protocolo. Mientras no entre en un bloque, lo único posible es competir con otra transacción del mismo nonce que pague más comisión; una vez dentro de un bloque finalizado, ya no hay vuelta atrás. Por eso todos los controles de este programa (políticas, aprobaciones, listas de destinos) viven antes de la firma, no después.
Glosario mínimo del módulo
0 de 7 revisados
Comisión: quién paga, cuánto y qué pasa si no alcanza
Ahora el escenario inverso: el equipo de tesorería envía un retiro y el cliente pregunta por qué recibió 999,58 y no 1.000. En las redes públicas, quien envía la transacción paga una comisión para que se procese. En Ethereum se mide en gas, la unidad de trabajo de cómputo, y la paga siempre la cuenta emisora en la moneda nativa de la red (ETH), aunque el activo transferido sea USDC. [2]
La comisión de Ethereum tiene dos partes: una comisión base que la red quema y una propina para el validador que incluye la transacción. El emisor fija un máximo por unidad de gas y un límite de gas; si el precio de mercado sube por encima de su máximo, la transacción queda pendiente. [2] El detalle del cálculo y del recibo está en Una transacción Ethereum por dentro.
Tres consecuencias operativas que el equipo debe convertir en reglas:
- Cada wallet que envía necesita saldo en la moneda nativa. Una wallet con 50.000 USDC y cero ETH no puede mover sus USDC. Alguien debe vigilar y reponer ese saldo.
- El costo de una transacción no es fijo. Depende de la congestión de la red en el momento del envío. Si el producto promete un retiro "sin costo", el negocio absorbe una variable.
- Una transacción atascada bloquea a las siguientes de la misma cuenta. El procedimiento para acelerarla (reemplazarla con el mismo nonce y más comisión) debe estar escrito antes de necesitarlo.
Confirmación no es finalidad
Volvamos al "1 confirmación" que vio soporte. Una confirmación es cada bloque que se añade encima del bloque que contiene la transacción. La transacción incluida en el último bloque tiene una; con cada bloque nuevo suma otra. El riesgo es la reorganización (reorg): la red descarta los bloques más recientes y los sustituye por otros, y una transacción que parecía asentada desaparece o cambia de posición. Circle lo resume así en su documentación: cada confirmación extra hace menos probable un reorg, y el número necesario varía por red. [3]
La finalidad es una garantía más fuerte: el punto a partir del cual revertir la transacción exige romper las reglas de la red, no solo tener mala suerte. Ethereum, desde que usa prueba de participación, divide el tiempo en ranuras de 12 segundos y épocas de 32 ranuras. Cuando validadores con al menos dos tercios del ETH en stake votan por dos puntos de control consecutivos, el anterior queda finalizado; revertirlo obligaría a un atacante a perder al menos un tercio de todo el ETH en stake. [4]
En la práctica, Circle estima esa espera en unos 65 bloques, de 15 a 19 minutos. [10] La propia interfaz de los nodos lo expone: al consultar el estado se puede pedir el bloque latest (el último propuesto), safe (la cabeza segura) o finalized (el último finalizado). [5] Un servicio que acredita depósitos leyendo latest está apostando a que no habrá reorg. El capítulo Indexers, eventos y reorgs muestra cómo indexar sin perder ni duplicar.
Un depósito, de la firma al abono
Cómo leer esta figura
Cinco cajas en fila conectadas por flechas: firmada (el nodo la recibe), pendiente (en el mempool), incluida (una confirmación), N confirmaciones o bloque safe, y final (bloque finalized). Sobre cada caja una nota: aún se puede sustituir; puede no entrar nunca; un reorg la puede sacar; reorg cada vez menos probable; revertir cuesta stake. Debajo, una banda de color que va de rojo a verde rotulada riesgo de que el saldo desaparezca, de alto a bajo salvo fallo de la red. Abajo, una caja morada, política de abono, con flechas discontinuas hacia las cajas de N confirmaciones y final, y una caja roja que dice la firma no se revoca, solo se compite con otra del mismo nonce.
No todas las redes funcionan así. En las de prueba de trabajo, como Bitcoin, la finalidad es probabilística: nunca llega a ser absoluta, solo cada vez más improbable de revertir. El mecanismo y por qué hace falta consenso para que un pago no se gaste dos veces están en El ataque del doble gasto. Y cualquier tiempo de confirmación supone que la red se comporta con cierta sincronía; qué ocurre cuando no, lo cuenta GST: estabilización global.
Red principal y redes de pruebas
El último concepto evita un error caro y frecuente en equipos nuevos. La red principal (mainnet) es donde los activos tienen valor. Las redes de pruebas (testnets) imitan su funcionamiento con monedas sin valor. En Ethereum, los equipos de clientes mantienen hoy dos: Sepolia, recomendada para probar aplicaciones, y Hoodi, para probar actualizaciones del protocolo y validadores. [6]
La misma documentación desaconseja reutilizar cuentas de mainnet en redes de pruebas y viceversa. [6] Para el equipo eso se traduce en separar ambientes de punta a punta: credenciales de API, llaves, listas de destinos y monitoreo distintos. Los proveedores contratados suelen ofrecer espacios de trabajo separados para pruebas y producción; cuáles exactamente y cómo se aíslan es un punto a validar con cada uno.
Un detalle más: el mismo token puede existir en varias redes. USDC en Ethereum y USDC en Solana son activos distintos en cadenas distintas; enviar por la red equivocada puede perder fondos. Los módulos de stablecoins vuelven sobre este riesgo.
Cómo lo resuelven Fireblocks, BitGo, Kaleido y Circle
Ningún proveedor elimina la decisión de finalidad: la parametrizan. Lo que cambia es dónde se configura y qué evento recibe tu sistema.
Comparación
Dónde se decide cuándo un depósito cuenta
Fireblocks
Política de confirmaciones por espacio de trabajo, con valores por defecto por red y una política personalizada.
- Recomienda pocas confirmaciones solo para orígenes conocidos
- Permite forzar la confirmación de una transacción concreta
- Tras confirmar, el saldo pasa a disponible
BitGo
El webhook de transferencias acepta numConfirmations: notifica cuando la transferencia alcanza ese número.
- 0 u omitido: sin umbral
- Las cuentas Go son libro interno, no cadena
- Avisa de transferencias entrantes y salientes
Kaleido
Su capa de conectores promete gestionar nonces, gas y reorgs, y entregar eventos sin duplicados.
- Umbral de confirmaciones por red: a validar
- Útil si se operan nodos o redes propias
Circle (emisor de USDC)
Publica cuántas confirmaciones espera por red antes de atestiguar una transferencia entre cadenas.
- Rápida: incluida en bloque, con tope global por riesgo de reorg
- Estándar: finalidad dura, por ejemplo unos 65 bloques en Ethereum
Fireblocks documenta una política de control de depósitos y confirmaciones: cada espacio de trabajo tiene una por defecto con un número de confirmaciones por red, y se puede definir una propia. Su guía recomienda bajar el número solo para orígenes conocidos (una cuenta propia, una contraparte de confianza) y no para direcciones externas desconocidas. También permite confirmar manualmente o por API una transacción concreta, lo que la marca como completada de inmediato. [7] Esa capacidad de forzar es útil y peligrosa: quién puede usarla es una decisión de política.
BitGo expone el umbral en el webhook de transferencias: el campo numConfirmations fija cuántas confirmaciones debe alcanzar una transferencia antes de notificar, y 0 equivale a no poner umbral. [8] Kaleido describe su capa de conectores como la que calcula gas, administra nonces y maneja reorgs, con entrega "exactamente una vez"; no encontramos en su documentación pública el umbral de confirmaciones por red, así que queda a validar. [9]
Circle no es proveedor de wallets en este programa, sino emisor de USDC; aun así su documentación es una referencia útil. Para su protocolo de transferencias entre cadenas publica cuántas confirmaciones espera en cada red: en modo estándar, por ejemplo, unos 65 bloques en Ethereum (15 a 19 minutos), 32 en Solana y de 2 a 3 en Polygon PoS. [10] Son los umbrales que el emisor usa para su propio riesgo, no una norma para el tuyo.
Decisiones del módulo y entregables
La decisión que abre este módulo es una sola, pero se aplica a cada red: cuántas confirmaciones, o qué nivel de finalidad, exige el sistema antes de dar un depósito por bueno. Conviene tomarla por red y por tramo de monto, y escribirla en el mismo lugar donde se configura el proveedor.
Checklist del módulo
0 de 7 revisados
El primer entregable es el glosario de la sección inicial, en el formato que use el equipo. El segundo es la tabla de finalidad por red. La plantilla siguiente parte de los umbrales que Circle publica como referencia; la columna "Umbral propuesto" la completa el equipo, y toda red sin fuente queda marcada como pendiente.
| Red | Modelo de finalidad | Señal que usamos | Referencia publicada | Umbral propuesto | Responsable |
|---|---|---|---|---|---|
| Ethereum | Checkpoints finalizados (PoS) | Bloque finalized | ~65 bloques, 15–19 min (Circle, estándar) | Completar | Arquitectura |
| Arbitrum, Base, OP Mainnet | Heredan de Ethereum (capa 2) | Lote finalizado en Ethereum | ~65 bloques de Ethereum (Circle, estándar) | Completar | Arquitectura |
| Polygon PoS | Por confirmaciones | N confirmaciones | 2–3 bloques (Circle, estándar) | Completar | Arquitectura |
| Solana | Por confirmaciones | N confirmaciones | 32 bloques, ~17 s (Circle, estándar) | Completar | Arquitectura |
| Bitcoin | Probabilística (PoW) | N confirmaciones | A validar con el proveedor | Completar | Arquitectura |
| Tron (USDT) | A validar | A validar | A validar con el proveedor | Completar | Arquitectura |
El siguiente módulo, Llaves: generación, guarda, respaldo y rotación, responde la pregunta que este dejó abierta: si una firma no se revoca, ¿dónde vive la llave que firma y quién puede usarla?
Bibliografía académica
- [1]
ethereum.org, "Ethereum accounts," Ethereum developer documentation. [Online]. Available: https://ethereum.org/developers/docs/accounts/
Tipos de cuenta y campos de una cuenta.
- [2]
ethereum.org, "Transactions," Ethereum developer documentation. [Online]. Available: https://ethereum.org/developers/docs/transactions/
Campos de una transacción, nonce, comisión base quemada y propina al validador.
- [3]
Circle, "Blockchain confirmations," Circle Developer Docs. [Online]. Available: https://developers.circle.com/wallets/blockchain-confirmations
Confirmaciones, reorgs y estado COMPLETE en Circle Wallets.
- [4]
ethereum.org, "Proof-of-stake (PoS)," Ethereum developer documentation. [Online]. Available: https://ethereum.org/developers/docs/consensus-mechanisms/pos/
Ranuras de 12 s, épocas de 32 ranuras, checkpoints justificados y finalizados, costo de revertir.
- [5]
ethereum.org, "JSON-RPC API," Ethereum developer documentation. [Online]. Available: https://ethereum.org/developers/docs/apis/json-rpc/
Parámetro de bloque: earliest, latest, safe, finalized, pending.
- [6]
ethereum.org, "Networks," Ethereum developer documentation. [Online]. Available: https://ethereum.org/developers/docs/networks/
Mainnet, Sepolia y Hoodi; no reutilizar cuentas entre mainnet y testnets.
- [7]
Fireblocks, "Overview: Deposit Control & Confirmation Policy," Fireblocks Developer Docs. [Online]. Available: https://developers.fireblocks.com/docs/define-confirmation-policy
Política de confirmaciones por defecto y personalizada; cuándo bajar o subir el umbral; confirmación manual.
- [8]
BitGo, "Create Wallet Webhooks," BitGo Developer Portal. [Online]. Available: https://developers.bitgo.com/docs/webhooks-wallet
Tipos de webhook de wallet; numConfirmations; cuentas Go como libro interno.
- [9]
Kaleido, "FireFly Connectors," kaleido.io. [Online]. Available: https://www.kaleido.io/product/firefly-connectors
Gestión de gas, nonces y reorgs; entrega de transacciones sin duplicados.
- [10]
Circle, "Finality and block confirmations," Circle Developer Docs (CCTP). [Online]. Available: https://developers.circle.com/cctp/concepts/finality-and-block-confirmations
Confirmaciones por red para transferencias rápidas y estándar.
Rutas vecinas
Si este tema te abrió hambre, sigue por aquí.
Series y labs que comparten área o dependen de esta ruta. Pocas opciones, para no convertir la curiosidad en menú infinito.
Series relacionadas
HotStuff: de cero a estado del arte
Ruta progresiva para entender consenso BFT moderno: quórums, sincronía parcial, locks, taxonomía one/two/three-chain, QC/highQC, multipipeline, view-change, responsiveness, AggQC, Fast-HotStuff, sync y frontera DAG-BFT.
Ethereum: de historia a labs
Serie progresiva para entender Ethereum desde el whitepaper, forks y The Merge hasta EVM, Solidity, proof-of-stake, rollups, account abstraction, DeFi, observabilidad y laboratorios reproducibles.
Substrate: del runtime al consenso propio
Serie de 20 capítulos, de neófito a experto, sobre Substrate (Polkadot SDK): runtime en Wasm, FRAME, extrinsics, estado, pesos, actualizaciones sin fork, Aura, BABE, GRANDPA, sincronización, parachains, XCM, Sassafras, BEEFY y cómo conectar un consenso BFT propio a un nodo.
Labs para convertir lectura en práctica
Prueba de trabajo y reajuste de dificultad
Laboratorio determinista para medir el costo de la prueba de trabajo y ver cómo el reajuste por altura de bloque estabiliza el tiempo entre bloques.
Consensus benchmark
Banco reproducible para comparar consenso BFT y documentar los trade-offs de HotStuff-2.
Ethereum local: Anvil, wallet y primera transacción
Laboratorio base para levantar una red local, crear cuentas, firmar transacciones y observar receipts sin gastar ETH real.
RPC y Cast: leer Ethereum con lupa
Ejercicios con JSON-RPC y Cast para consultar bloques, nonces, gas, receipts, logs y errores reproducibles.
Sigue leyendo
Ideas conectadas con este artículo
Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.
Llaves: generación, guarda, respaldo y rotación
El ciclo de vida completo de una llave de firma, comparado entre HSM y MPC y entre Fireblocks, BitGo y Kaleido, con una plantilla de responsables para generación, uso, respaldo, rotación y baja.
Tipos de firma: multifirma frente a MPC
Cuántas personas o sistemas deben aprobar y dónde se verifica esa aprobación: comparación entre multifirma en la cadena y firma por umbral, con criterios de redes, costo y auditoría, y una matriz de decisión por caso de uso.
Wallets hot, warm y cold: exposición frente a velocidad
La temperatura de una wallet decide cuánto dinero queda expuesto en línea y cuánto tarda un retiro. Este capítulo convierte ese compromiso en una política de tesorería con límites, barridos y aprobaciones por monto.
Custodia: quién responde por los activos y quién cambia las reglas
Custodiar es responder por los activos de otros. Este capítulo compara autocustodia, custodia de terceros y modelos mixtos, separa cuentas segregadas de ómnibus y define quién aprueba mover fondos y quién aprueba cambiar las reglas.