NeoGo v0.119.0 apunta a la preparación del hard fork de Gorgon y corrige 41 discrepancias de VM

Neo SPCC ha lanzado NeoGo v0.119.0 “Yawl”, introduciendo cambios de protocolo que se activan en el próximo hard fork Gorgon, resolviendo 41 diferencias de transacciones MainNet entre NeoGo y el nodo de referencia C#, y ofreciendo optimizaciones de rendimiento para los operadores de nodos. La versión es compatible con el nodo C# v3.9.2 y no requiere resincronización de la base de datos.
La actualización llega mientras los equipos de infraestructura de Neo se preparan para Gorgon, la próxima bifurcación de la red. El Neo Council votó en abril para aplazar una reducción de la tarifa de ejecución propuesta a favor de esperar el modelo dinámico de precios de código de operación de Gorgon, que Neo SPCC diseñó para hacer que las transacciones estándar sean significativamente más baratas y al mismo tiempo encarecer exponencialmente las transacciones maliciosas. No se ha fijado una fecha de implementación para el hard fork.
Cambios en el protocolo Gorgona
Varios cambios de comportamiento en v0.119.0 entran en vigor solo cuando se activa Gorgon. Estos incluyen un manejo más estricto de argumentos de firma criptográfica no válidos en las operaciones CryptoLib y System.Crypto, que ahora activarán una FALLA en lugar de proceder silenciosamente. El lanzamiento también agrega verificaciones de operandos faltantes para las instrucciones SHR y SHL VM y una verificación de límites de índice para HASKEY, alineando el comportamiento de NeoGo con la especificación esperada de Gorgon.
También se incluyen cambios en la gestión de contratos: el caché de ContractManagement ahora se actualiza antes del bloqueo del contrato en la destrucción, y las cuentas del contrato se bloquean antes de la destrucción del contrato, ambos efectivos en Gorgon.
Correcciones de compatibilidad de VM
v0.119.0 aborda 41 transacciones de MainNet donde NeoGo y el nodo de referencia de C# produjeron diferentes resultados de FALLA. Estas discrepancias significaban que las dos implementaciones procesaban ciertos contratos de manera diferente, un problema de confiabilidad para una red multicliente.
Las correcciones incluyen el manejo corregido de las devoluciones de llamadas asíncronas System.Contract.CallNative, la validación del tipo de valor de retorno del método durante las llamadas de contrato y múltiples correcciones de recuento para el análisis de argumentos de PACKMAP, SETITEM y SYSCALL. También se resolvieron varios pánicos de VM, incluidos bloqueos en el acceso al campo de estructura y una respuesta incorrecta de getBlock de Ledger cuando se le da un índice de bloque más allá de la altura actual; NeoGo ahora devuelve nulo, coincidiendo con el comportamiento del nodo C#.
La implementación subyacente de stackitem.Map también fue reelaborada, trasladada desde la implementación de referencia de C# para usar una estructura ordenada.
Mejoras de rendimiento
Una nueva opción DirectRelay RPC permite la transmisión directa de transacciones a pares en lugar de enrutarlas a través de la cola estándar para llamadas sendrawtransaction. La característica es particularmente relevante luego de la activación de tiempos de bloqueo de tres segundos en MainNet a fines de abril, donde una propagación más rápida tiene un mayor impacto. Neo SPCC señaló que las pruebas de redes sintéticas mostraron una mejora mínima, aunque las condiciones del mundo real pueden diferir.
Las operaciones de Mempool recibieron microoptimizaciones que produjeron una reducción de hasta un 24 % en el tiempo y las asignaciones para el escenario común de la misma tarifa. También se mejoró la entrega de mensajes de consenso a través de la capa P2P y BoltDB se actualizó a una versión optimizada para la asignación para reducir la presión de la memoria.
Actualizaciones operativas
Los operadores de nodos que ejecutan systemd ahora pueden usar la integración sd_notify, lo que permite unidades de servicio Type=notify adecuadas con señales LISTO, RECARGA y DETENCIÓN. Se agregó una nueva métrica de Prometheus para conexiones WebSocket activas, motivada por los nodos de almacenamiento NeoFS que encuentran límites de cliente WebSocket.
Se cambió el nombre de cuatro métricas existentes de Prometheus sin un período de transición: current_state_height, current_block_height, current_persisted_height y current_header_height pierden el prefijo "current_". Los operadores deberán actualizar los paneles y las alertas en consecuencia.
Para los desarrolladores, el tipo de error actor.ErrExecFailed ha quedado obsoleto en favor de neorpc.FaultException, lo que requiere migración en aplicaciones que verifican fallas de ejecución.
Mirando hacia adelante
NeoGo v0.119.0 acerca al cliente Go a la preparación de Gorgon y al mismo tiempo refuerza su alineación con la implementación de referencia de C#. La bifurcación dura de Gorgon sigue sin una fecha programada, con precios de código de operación dinámicos ya implementados en el lado de NeoGo y esperando su finalización en el nodo C#. La cobertura anterior de NeoGo se puede encontrar en el artículo de NNT sobre v0.118.0.
Las notas de la versión completas se pueden encontrar en el siguiente enlace: https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0