Verificando una raíz de transacción a mano

Supongamos que tengo un bloque muy simple con una transacción cuyo hash es:

0xce70a6b3ae683183e9c4d7c5a22ed5e2cf1f82a38fa67acaa24124b42b258b4a

Y cuando ejecuto eth.getBlockobtengo la siguiente raíz de transacción:

0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421

Suponiendo que tengo la keccak256función, ¿cómo verificaría que esta raíz es correcta? Es decir, ¿cómo construyo y codifico las transacciones?

Respuestas (2)

Tendrías que reconstruir el trie. Utiliza el mismo formato de patricia trie que se ve en Ethereum. El mejor ejemplo está en la wiki.

Los elementos en el trie de patricia vienen en pares de ruta->valor, y para la trie de transacción específicamente, la ruta es rlp(transactionIndex). transactionIndexsiendo su índice dentro del bloque que se extrae (el ordenamiento lo decide un minero). El valor es la transacción sin firma firmada.

Mi biblioteca js tiene funciones tanto para generar la prueba como para verificarla . Utiliza el módulo de nodo merkle-patricia-tree para construir el trie.

De acuerdo con https://github.com/ethereum/wiki/wiki/Patricia-Tree#transactions-trie , debe rlpEncode(transactionIndex). Entonces, supongo que necesitaría ver si ese hash tx estaba presente en alguno de los índices del trie TX.

Tal vez eche un vistazo a https://github.com/zmitton/eth-proof de Zac Mitton . Más específicamente https://github.com/zmitton/eth-proof/blob/master/buildProof.js#L147