¿Geth --syncmode light descarga State Trie?

Me gustaría descargar una versión reciente de Ethereum State Trie. He leído aquí que geth --syncmode lightdescarga el estado actual. Pero, ¿eso solo abarca los bloques más recientes o también una versión reciente del State Trie?

Cuando comencé mi nodo, geth dijo que agregó un punto de control confiable para el bloque 5734399. Así que pensé que descargó el estado trie de un par para ese bloque. Así que traté de acceder a los archivos leveldb directamente usando la raíz del estado del bloque 5734399 siguiendo este tutorial . Sin embargo, no había datos de prueba disponibles para la raíz del estado de ese bloque en leveldb. ¿Geth quizás descargue el State Trie de algún otro bloque? ¿O no descarga ningún State Trie en absoluto?

Aquí está mi código nodejs para leer leveldb:

var level = require('level');
var rlp = require('rlp');
var Trie = require('merkle-patricia-tree/secure');

var root = "0x35cabdf547eeddccbc9d2df11e3c8b3e0254144b57ec33560c446d8dccfbdf78"; // block 5734399

var db = level('/media/sdc1/.ethereum_light/geth/lightchaindata');
var trie = new Trie(db, root);

var stream = trie.createReadStream();

stream.on('data', function (data){
        console.log(data.key);
});

Respuestas (1)

El cliente ligero no descarga datos de estado. Descarga la cadena de encabezado y verifica la prueba de trabajo, pero no las transacciones en sí. Cada bloque incluye una raíz de estado, lo que le permite verificar los datos de estado contra el bloque sin tener que verificar las transacciones. Cuando realiza una llamada RPC contra un cliente ligero, solicita los datos de estado de sus pares. Los pares proporcionan una prueba Merkle, que se puede verificar con la raíz del estado, lo que garantiza que los pares no puedan haber proporcionado información falsa. Pero si no tiene compañeros, no puede obtener ninguna información de un cliente ligero.