Tratando de entender cómo bitcore-node almacena los datos en la base de datos

Estoy investigando los datos y la fuente de bitcore-node ( http://bitcore.io/ ), estoy un poco confundido sobre cómo se almacena toda la información en la base de datos, probablemente sea de manera similar a otros exploradores de bloques. , así que tal vez alguien podría ayudarme.

En este caso por ejemplo https://blockchain.info/tx/acb2e895a9b3664cfcfb13dd0321ef0c1205cf2aa082681dc6ba424af6456a42

En la base de datos encontré dos txo- txo-acb2e895a9b3664cfcfb13dd0321ef0c1205cf2aa082681dc6ba424af6456a42-0

{"prevTxId":"8697331c3124c8a4cf2f43afb5732374ea13769e42f10aa3a98148a08989af5e","outputIndex":1,"sequenceNumber":4294967295,"script":"4730440220106c316c22d4bf8c970f8e4b1af1edd95121397cfe29ab987cb000b478ec8e4302202b77986b89d77ab716da3cf53424efacf35e9097b1c89194df220e99503b8cae01","scriptString":"71 0x30440220106c316c22d4bf8c970f8e4b1af1edd95121397cfe29ab987cb000b478ec8e4302202b77986b89d77ab716da3cf53424efacf35e9097b1c89194df220e99503b8cae01","heightConfirmed":37514}

txo-acb2e895a9b3664cfcfb13dd0321ef0c1205cf2aa082681dc6ba424af6456a42-1

{"satoshis":10100000000,"script":"76a91427d25a1ff9a6da31eeb991c48bb6cd95191a6b2c88ac"}

Datos claramente diferentes, no sé por qué en un caso almacenamos el txid anterior y en el otro solo los satoshis enviados. Tiene que ser obvio, pero no estoy seguro de lo que me estoy perdiendo aquí.

Otro ejemplo https://blockchain.info/tx/00eff263871e6d44abed66d90abb10d5a211441668511dba3146e380360efe4b

txo-00eff263871e6d44abed66d90abb10d5a211441668511dba3146e380360efe4b-0 (de 0 a 5 todos tienen datos similares)

{"prevTxId":"6aebb4a764a027436f703ca9d42d0735423798f56973f9f236832a91fc2e9026","outputIndex":0,"sequenceNumber":4294967295,"script":"473044022057801e812f964bcb9e8ff17b37acef55afbb7119a66f24a148ba65e86a7aa1e3022064af657d280068b979ea17a29969976aedee8a664b3f1b575ebb88ef9275302601","scriptString":"71 0x3044022057801e812f964bcb9e8ff17b37acef55afbb7119a66f24a148ba65e86a7aa1e3022064af657d280068b979ea17a29969976aedee8a664b3f1b575ebb88ef9275302601","heightConfirmed":10712}

Además,... son entradas, no salidas de la transacción.

Estoy tratando de leer el código, pero no puedo entender todas las piezas.

Como alguien me señala en reddit, parece que está usando txo, para almacenar tanto salidas como entradas. Entonces, no estoy seguro de cómo bitcore logra obtener las entradas/salidas por separado más adelante (la API le permite solicitar solo las entradas, por ejemplo).

¿Está utilizando uno de los subproyectos de bitcore? En realidad, no veo ninguna referencia a una base de datos en bitcore, ni en ninguno de los subproyectos que busqué.
No, solo estaba usando el nodo bitcore, pero porque no había ningún subproyecto/módulo en este momento. Cambiaron bastante el código desde ellos, necesito revisarlo nuevamente. Estoy un poco confundido con bitcore (¿solo la biblioteca?) y bitcore-node (¿un nodo completo con base de datos?), ya que tiene un módulo para el explorador de bloques para bitcore (no bitcore-node ) -exploradores . El nodo usa una base de datos: github.com/bitpay/bitcore-node/blob/master/lib/db.js De todos modos, lo que quiero es la estructura de la clave DB, para replicarla por mi cuenta

Respuestas (1)

El proyecto de nodo bitcore de Bitpay utiliza el mismo directorio de datos que Bitcoin Core. Puede ver esto en su configuración de muestra en su README:

var configuration = {
    datadir: '~/.bitcoin',
    network: 'testnet'
};

Como tal, puede ver: ¿Cuáles son las claves utilizadas en el levelDB de la cadena de bloques (es decir, cuáles son los pares clave:valor)? para obtener información sobre lo que hay en esta base de datos. Sin embargo, bitcore-node proporciona otra interfaz para almacenar datos adicionales sobre direcciones y sus saldos. Esto se define en este archivo . Debe habilitar esto en su configuración y volver a indexar la cadena de bloques para habilitar este módulo, como sus detalles README.

Como muestran estas líneas , para cada salida, los pares clave-valor se agregan a la base de datos leveldb en este formato:

key:   [AddressModule.PREFIXES.OUTPUTS, address, timestamp, txid, outputIndex].join('-'),
value: [output.satoshis, script, height].join(':')

Y, de manera similar para las entradas, este es el formato de los pares clave-valor:

key: [AddressModule.PREFIXES.SPENTS, input.prevTxId, input.outputIndex].join('-'),
value: [txid, j].join(':')