Home < Bitcoin Core Dev Tech < Bitcoin Core Dev Tech 2023 (Apr) < Bitcoin Core Dev Tech 2022 < Bitcoin Core Dev Tech 2019 < Bitcoin Core Dev Tech 2018 (Oct) < Bitcoin Core Dev Tech 2018 (Mar) < Bitcoin Core Dev Tech 2017 < Bitcoin Core Dev Tech 2015 < Bitcoin Explained < Bitcoin-designs < Bitcoin Magazine < Andreas Antonopoulos < Austin Bitcoin Developers < Advancing Bitcoin < Baltic Honeybadger < Misc < Chaincode Labs < Lets Talk Bitcoin Podcast < Greg Maxwell < Bit Block Boom < AssumeUTXO update

AssumeUTXO update

Oradores: James O'Beirne

Fecha: April 27, 2023

Traducción Por: Blue Moon

Tags: Bitcoin core, Assumeutxo

Categoría: Core dev tech

Objetivos

  • permitir a los nodos obtener un conjunto utxo rápidamente (1h)
  • al mismo tiempo, sin grandes concesiones en materia de seguridad

Enfoque

  • Proporcionar instantánea utxo serializada
  • obtener primero la cadena de cabeceras, cargar la instantánea y deserializar, sincronizar con la punta a partir de ahí
  • a continuación, iniciar la verificación de fondo con una segunda instantánea
  • por último, comparar los hashes cuando el IBD en segundo plano llega a la base de la instantánea

Actualización del progreso

  • se ha hecho mucha refactorización; se ha introducido ChainStateManager, se han eliminado globals, se ha refactorizado mempool / blockstorage
  • cambios en la lógica de init / shutdown se han fusionado
  • cambios en la cartera realizados
  • cambios p2p aún en revisión (por ejemplo, la elección de la cadena de estado a la que añadir nuevos bloques)

Cuestiones pendientes

El orden nFile se fragmenta, posibles problemas con la poda y/o reindexación -> Introducir contador nFile de blockfile por tipos de chainstate (cambio simple)

Poda

  • actualmente, objetivo de poda con ventana final
  • hacer lo mismo, pero con dos puntas - diferentes posibilidades para conseguirlo

Indexación

las señales validationinterface son recogidas por los índices

  • podría construir fuera de orden, pero algunos índices (coinstats) no puede ser construido fuera de orden

  • solución sencilla: desactivar todos los índices hasta que se complete la sincronización

  • solución sofisticada: desactivar sólo algunos indexadores

  • Introducir rpc para cargar chainstate

  • Poner hashes assumeutxo reales en chainparams

  • En total, sólo ~ 1k loc izquierda, aunque la mayoría en lugares importantes

Planteamiento de la discusión

  • ¿Realmente necesitamos la sincronización en segundo plano?
  • No hacer la sincronización en segundo plano es más simple, pero cambia los supuestos de seguridad.
  • Además, se eliminaría la necesidad de que cada nodo debe ser capaz de sincronizar la cadena