Resumen
La finalidad de Polygon es el punto en el que una transacción se vuelve irreversible en la cadena Polygon PoS. Con la actualización Heimdall v2, la finalidad ahora ocurre en aproximadamente 5 segundos, en lugar de 1-2 minutos, lo que hace que la red sea más adecuada para pagos y aplicaciones en tiempo real. Para los desarrolladores, comprender la finalidad es crucial para diseñar experiencias de usuario, manejar reorganizaciones y elegir la infraestructura RPC adecuada para monitorear el estado de finalidad.
Guía rápida de decisión: cómo afecta la finalidad a tu aplicación
Antes de profundizar en los mecanismos, pregúntate: ¿tu aplicación necesita esperar la finalidad antes de actuar? La respuesta determina tu estrategia de RPC y la experiencia del usuario.
- Pagos y liquidación: Si estás construyendo una aplicación de pagos, necesitas esperar la finalidad para evitar reversiones. Con la finalidad de ~5 segundos de Polygon, puedes mostrar un estado confirmado rápidamente, pero aún debes verificar la finalidad antes de liberar fondos.
- DeFi y trading: Para swaps o liquidaciones, esperar la finalidad reduce el riesgo de reorganizaciones, pero añade latencia. Podrías elegir aceptar finalidad probabilística por velocidad, pero prepárate para manejar reorganizaciones.
- Juegos y NFTs: Estos a menudo pueden funcionar con finalidad probabilística, pero si estás acuñando artículos raros, es posible que desees esperar la finalidad para evitar duplicados.
Siguiente paso: Si necesitas monitorear la finalidad, usa un proveedor de RPC que ofrezca acceso confiable al último bloque finalizado. OnFinality proporciona nodos dedicados y endpoints RPC que pueden ayudarte a consultar el estado de finalidad de manera eficiente.
¿Qué es la finalidad en blockchain?
La finalidad es la garantía de que una transacción o bloque no puede ser revertido o alterado. En blockchain, hay dos tipos principales:
- Finalidad probabilística: Cuantos más bloques se construyen sobre una transacción, menos probable es que sea reorganizada. Bitcoin usa este modelo.
- Finalidad determinista: Una vez que un bloque es finalizado, es irreversible. Ethereum usa Casper FFG, y Polygon usa un mecanismo de hitos.
Polygon PoS usa finalidad determinista, lo que significa que una vez que un hito es finalizado, las transacciones incluidas son permanentes.
Cómo funciona la finalidad de Polygon
Polygon logra la finalidad mediante dos mecanismos: hitos y checkpoints.
Hitos
Los hitos proporcionan finalidad determinista rápida en Polygon mismo, sin esperar a que un checkpoint sea enviado a Ethereum. En cada altura de Heimdall, los validadores proponen los hashes de bloques de Bor que han visto desde el último hito finalizado, usando extensiones de voto en el consenso CometBFT. Al finalizar la altura H+1 de Heimdall, Heimdall busca la secuencia común más larga de hashes de bloques de todos los validadores con acuerdo de 2/3 o más. Esa secuencia se finaliza como el nuevo hito.
Con la actualización Heimdall v2, los tiempos de bloque en Heimdall son de 1-2 segundos, por lo que los hitos se votan y finalizan mucho más rápido. Esto lleva la finalidad a aproximadamente 5 segundos.
Checkpoints
Los checkpoints son instantáneas periódicas del estado de la cadena de Polygon que se envían a Ethereum. Proporcionan seguridad adicional al anclar el estado de Polygon a Ethereum, pero son más lentos (típicamente cada 30 minutos a 1 hora). Los checkpoints no son necesarios para la finalidad en Polygon mismo, pero son importantes para puentes entre cadenas y otras aplicaciones que necesitan finalidad a nivel de Ethereum.
Por qué la finalidad importa para los desarrolladores
Comprender la finalidad es crítico para construir aplicaciones confiables. Aquí hay algunas razones:
- Experiencia del usuario: Si esperas la finalidad, los usuarios pueden ver demoras. Con la finalidad rápida de Polygon, puedes proporcionar una mejor experiencia de usuario.
- Manejo de reorganizaciones: Incluso con finalidad determinista, puede haber reorganizaciones temporales antes de que un hito sea finalizado. Debes manejarlas en tu aplicación.
- Interacciones entre cadenas: Si estás puenteando activos, necesitas esperar la finalidad en la cadena de origen antes de acuñar en la cadena de destino.
Consultando la finalidad en Polygon
Puedes consultar el estado de finalidad usando métodos RPC. Aquí hay algunos ejemplos:
Usando curl
Para obtener el último bloque finalizado, puedes usar el método eth_getBlockByNumber con la etiqueta finalized:
curl -X POST https://polygon.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["finalized", false],"id":1}'
Usando ethers.js
const { ethers } = require('ethers');
const provider = new ethers.JsonRpcProvider('https://polygon.api.onfinality.io/public');
async function getFinalizedBlock() {
const block = await provider.getBlock('finalized');
console.log('Finalized block:', block.number);
}
getFinalizedBlock();
Usando viem
import { createPublicClient, http } from 'viem';
import { polygon } from 'viem/chains';
const client = createPublicClient({
chain: polygon,
transport: http('https://polygon.api.onfinality.io/public'),
});
const block = await client.getBlock({ blockTag: 'finalized' });
console.log('Finalized block:', block.number);
Monitoreo de finalidad y manejo de reorganizaciones
Incluso con finalidad rápida, debes monitorear reorganizaciones, especialmente si estás construyendo aplicaciones de alto valor. Aquí hay algunos consejos:
- Rastrea el último bloque finalizado: Consulta la etiqueta
finalizedy compárala con el último bloque. Si la diferencia es grande, podría haber un problema. - Usa suscripciones WebSocket: Suscríbete a newHeads y escucha reorganizaciones rastreando hashes de bloques.
- Configura alertas: Usa herramientas de monitoreo para alertarte si la finalidad se retrasa o si hay reorganizaciones profundas.
Ejemplo de suscripción WebSocket
const WebSocket = require('ws');
const ws = new WebSocket('wss://polygon.api.onfinality.io/public');
ws.on('open', () => {
ws.send(JSON.stringify({
jsonrpc: '2.0',
method: 'eth_subscribe',
params: ['newHeads'],
id: 1
}));
});
ws.on('message', (data) => {
const message = JSON.parse(data);
if (message.method === 'eth_subscription') {
const block = message.params.result;
console.log('New block:', block.number, block.hash);
}
});
Finalidad y selección de proveedor de RPC
Al elegir un proveedor de RPC para Polygon, considera cómo manejan las consultas relacionadas con la finalidad y las reorganizaciones. Aquí hay una comparación:
| Proveedor | Soporte de finalidad | Manejo de reorganizaciones | Notas |
|---|---|---|---|
| OnFinality | Soporta la etiqueta finalized, suscripciones WebSocket | Proporciona infraestructura confiable con baja latencia | Precios de RPC y redes compatibles |
| Otros proveedores | Varía | Varía | Consulta la documentación para soporte de finalidad |
OnFinality ofrece endpoints públicos y dedicados, permitiéndote escalar según sea necesario. Para aplicaciones de producción, considera un nodo dedicado para un rendimiento más consistente.
Errores comunes y solución de problemas
- No esperar la finalidad: Si no esperas la finalidad, corres el riesgo de aceptar transacciones que podrían ser reorganizadas. Siempre verifica la etiqueta
finalizedpara operaciones críticas. - Usar la etiqueta de bloque incorrecta: Algunos proveedores de RPC pueden no soportar la etiqueta
finalized. Asegúrate de que tu proveedor lo haga. - Ignorar las reorganizaciones: Incluso con finalidad determinista, puede haber reorganizaciones temporales. Monitorea para detectarlas.
- Límites de tasa de RPC: Los endpoints públicos pueden tener límites de tasa. Para aplicaciones de alto rendimiento, usa un nodo dedicado.
Conclusiones clave
- La finalidad de Polygon ahora es de aproximadamente 5 segundos gracias a la actualización Heimdall v2.
- La finalidad es determinista a través de hitos, con checkpoints que proporcionan seguridad adicional en Ethereum.
- Los desarrolladores deben consultar la etiqueta
finalizedpara asegurar que las transacciones sean irreversibles. - Elige un proveedor de RPC que soporte consultas de finalidad y suscripciones WebSocket, como OnFinality.
- Monitorea las reorganizaciones y configura alertas para mantener la confiabilidad de la aplicación.
Preguntas frecuentes
¿Cuál es la diferencia entre finalidad probabilística y determinista?
La finalidad probabilística significa que hay una posibilidad de reorganización, mientras que la finalidad determinista significa que una vez que un bloque es finalizado, no puede ser revertido. Polygon usa finalidad determinista a través de hitos.
¿Cuánto tiempo toma la finalidad de Polygon?
Con Heimdall v2, la finalidad se logra en aproximadamente 5 segundos, en lugar de 1-2 minutos anteriormente.
¿Necesito esperar la finalidad en Polygon?
Depende de tu aplicación. Para pagos y transacciones de alto valor, sí. Para interacciones casuales, podrías aceptar finalidad probabilística.
¿Cómo puedo verificar si una transacción está finalizada?
Puedes usar el método eth_getTransactionReceipt y verificar el número de bloque contra el último bloque finalizado. Alternativamente, usa la etiqueta finalized en eth_getBlockByNumber.
¿Qué es un checkpoint?
Un checkpoint es una instantánea del estado de Polygon enviada a Ethereum. Proporciona seguridad adicional y se usa para puentes entre cadenas.
¿OnFinality soporta consultas de finalidad de Polygon?
Sí, el endpoint RPC de Polygon de OnFinality soporta la etiqueta finalized y suscripciones WebSocket. Para más detalles, consulta la página de red de Polygon.