NeoGo v0.119.0 cible la préparation au hard fork de Gorgon et corrige 41 écarts de VM

Neo SPCC a publié NeoGo v0.119.0 « Yawl », introduisant des changements de protocole qui s'activent lors du prochain hard fork de Gorgon, résolvant 41 différences de transactions MainNet entre NeoGo et le nœud de référence C# et offrant des optimisations de performances pour les opérateurs de nœuds. La version est compatible avec le nœud C# v3.9.2 et ne nécessite pas de resynchronisation de la base de données.
La mise à jour arrive alors que les équipes d’infrastructure de Neo se préparent pour Gorgon, le prochain hard fork du réseau. Le Neo Council a voté en avril pour reporter une proposition de réduction des frais d'exécution en faveur de l'attente du modèle de tarification dynamique des opcodes de Gorgon, que Neo SPCC a conçu pour rendre les transactions standard nettement moins chères tout en rendant les transactions malveillantes exponentiellement plus chères. Aucune date de déploiement n’a été fixée pour le hard fork.
Modifications du protocole Gorgone
Plusieurs changements de comportement dans la version 0.119.0 ne prennent effet que lorsque Gorgon s'active. Celles-ci incluent une gestion plus stricte des arguments de signature cryptographique non valides dans les opérations CryptoLib et System.Crypto, qui déclencheront désormais une FAULT au lieu de procéder silencieusement. La version ajoute également des vérifications d'opérandes manquantes pour les instructions SHR et SHL VM et une vérification des limites d'index pour HASKEY, alignant ainsi le comportement de NeoGo sur la spécification Gorgon attendue.
Les modifications de la gestion des contrats sont également incluses : le cache ContractManagement est désormais mis à jour avant le blocage du contrat lors de la destruction, et les comptes de contrat sont bloqués avant la destruction du contrat, tous deux effectifs chez Gorgon.
Correctifs de compatibilité des machines virtuelles
La v0.119.0 traite 41 transactions MainNet où NeoGo et le nœud de référence C# ont produit différents résultats FAULT. Ces divergences signifiaient que les deux implémentations traitaient différemment certains contrats – un problème de fiabilité pour un réseau multi-clients.
Les correctifs incluent la gestion corrigée des rappels asynchrones System.Contract.CallNative, la validation du type de valeur de retour de méthode lors des appels de contrat et plusieurs corrections de refcounting pour l'analyse des arguments PACKMAP, SETITEM et SYSCALL. Plusieurs paniques de VM ont également été résolues, notamment des plantages lors de l'accès au champ de structure et une réponse incorrecte de getBlock de Ledger lorsqu'on lui donne un index de bloc au-delà de la hauteur actuelle – NeoGo renvoie désormais null, correspondant au comportement du nœud C#.
L'implémentation sous-jacente de stackitem.Map a également été retravaillée, portée de l'implémentation de référence C# pour utiliser une structure ordonnée.
Améliorations des performances
Une nouvelle option DirectRelay RPC permet la diffusion directe des transactions vers les pairs plutôt que le routage via la file d'attente standard pour les appels sendrawtransaction. Cette fonctionnalité est particulièrement pertinente suite à l'activation des temps de blocage de trois secondes sur MainNet fin avril, où une propagation plus rapide a un plus grand impact. Neo SPCC a noté que les tests de réseau synthétique ont montré une amélioration minime, bien que les conditions réelles puissent différer.
Les opérations Mempool ont reçu des micro-optimisations entraînant une réduction allant jusqu'à 24 % du temps et des allocations pour le scénario commun aux mêmes frais. La transmission des messages de consensus via la couche P2P a également été améliorée et BoltDB a été mis à niveau vers une version optimisée pour l'allocation afin de réduire la pression de la mémoire.
Mises à jour opérationnelles
Les opérateurs de nœuds exécutant systemd peuvent désormais utiliser l'intégration sd_notify, activant les unités de service Type=notify appropriées avec les signaux READY, RELOADING et STOPPING. Une nouvelle métrique Prometheus pour les connexions WebSocket actives a été ajoutée, motivée par les nœuds de stockage NeoFS rencontrant les limites du client WebSocket.
Quatre métriques Prometheus existantes ont été renommées sans période de transition : current_state_height, current_block_height, current_persisted_height et current_header_height perdent le préfixe « current_ ». Les opérateurs devront mettre à jour les tableaux de bord et les alertes en conséquence.
Pour les développeurs, le type d'erreur Actor.ErrExecFailed a été obsolète au profit de neorpc.FaultException, nécessitant une migration dans les applications qui vérifient les échecs d'exécution.
Regarder vers l'avenir
NeoGo v0.119.0 rapproche le client Go de la préparation Gorgon tout en renforçant son alignement avec l'implémentation de référence C#. Le hard fork Gorgon reste sans date prévue, avec une tarification dynamique des opcodes déjà implémentée du côté NeoGo et en attente d'achèvement dans le nœud C#. La couverture précédente de NeoGo peut être trouvée dans l'article de NNT sur la version 0.118.0.
Les notes de version complètes sont disponibles sur le lien ci-dessous : https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0