Estaba revisando el código de ABE y descubrí que la relación de los bloques con las transacciones es de muchos a muchos.
¿Por qué algunas transacciones se almacenan en las listas de transacciones de varios bloques?
Dentro de una cadena de bloques, cada transacción solo puede ocurrir una vez. Sin embargo, la estructura de datos que la gente llama con frecuencia "la cadena de bloques" es en realidad una estructura de árbol, con una raíz (el bloque de génesis) y diferentes ramas. La rama válida más larga de este árbol se denomina cadena de bloques activa, pero ocasionalmente, durante una reorganización, los nodos cambian a otra rama (generalmente solo cambian los últimos 1-2 bloques). Cualquier transacción que estaba en la sucursal anterior pero no en la nueva se intenta extraer nuevamente cuando sea posible. Esto da como resultado que una transacción esté en varios bloques dentro del árbol, pero no en la misma cadena.
Existía otra forma. Al principio, existía la posibilidad de que dos transacciones de base de monedas fueran idénticas. Esto ocurrió en los bloques en la altura 91842 y 91880. Desde entonces, se ha vuelto ilegal y luego imposible a través de BIP30 y BIP34 .
bvpx
pieter wuille
getblockhash
, le dará el hash del bloque en la cadena actualmente activa. Entonces no, a excepción de las bases de monedas duplicadas, nunca encontrará una transacción dos veces de esa manera. Necesitas buscar en bloques que no están en la cadena principal. El RPC consulta la base de datos local, que tiene todos los bloques (también los que no están en la cadena principal) que su nodo haya aceptado alguna vez, pero solo los activos están indexados y accesibles a través degetblockhash
.bvpx
getblockhash
localmente. Sin embargo, también dicegetblockhash
que le da un bloque en la cadena actualmente activa, pero "también aquellos que no están en la cadena principal", y que "tendría que buscar en bloques que no están en la cadena principal" para poder encontrar un transacción dos veces. ¿Puedes buscar específicamente bloques "que no estén en la cadena principal" congetblockhash
?pieter wuille
getblockhash
le da el hash de un bloque a una altura particular en la cadena actualmente activa. Cuando solicita un bloque realgetblock
, puede especificar cualquier hash de bloque, incluso de otros bloques.bvpx
getblockhash
Bien, entonces cuando lo haces agetblock
través del RPC, ¿es posible ver dos transacciones en diferentes bloques?pieter wuille
bvpx
pieter wuille
getblock
de , pero no hay forma de obtener una lista de dichos bloques inactivos, por ejemplo.bvpx