Me gustaría entender mejor cómo funciona un cliente ligero. Hasta donde yo sé, un cliente ligero almacena localmente solo los encabezados de bloque (80 bytes cada uno) y recibe un nuevo encabezado de bloque en promedio cada 10 minutos.
Básicamente tengo dos preguntas:
1) ¿Cómo puede un cliente ligero recuperar una transacción dado su hash? Me gustaría recuperar la transacción completa para leer los datos después del código OP_RETURN.
2) ¿Cómo puede el cliente ligero estar seguro de que la transacción recuperada es realmente la de la cadena de bloques más larga? ¿Simplemente verifica si hay 5 bloques ya confirmados después del bloque de la transacción?
Muchas gracias
1) La forma más fácil dentro del protocolo es probablemente agregar ese hash de transacción a un filtro de floración, enviar el filtro de floración a un nodo remoto con filterload
y solicitar cada bloque filtrado. Esto le enviará solo la transacción que le interesa. (También enviará algunas transacciones adicionales que coincidan con el filtro de floración porque son falsos positivos). Consulte BIP37 para obtener más detalles sobre cómo funciona esta función. Así es como los clientes ligeros basados en BitcoinJ encuentran transacciones relevantes para ellos.
Saber la altura del bloque en el que está incluido lo simplificaría enormemente, ya que solo necesitará mirar un bloque, en lugar de toda la cadena.
2) No. Obtienen los encabezados de bloque para toda la mejor cadena. Esto va desde el bloque de génesis hasta la punta actual. (Esto es actualmente 450000*80=36MB
) Luego verifican que el bloque relevante esté en algún lugar de esa cadena.
gatb27
Nick ODell
gatb27
Nick ODell
gatb27
tx_hash
como elblock_number
, ¿qué tipo de mensaje debo enviar a mis compañeros para recuperar la transacción completa?Nick ODell
block_hash
, ytx_hash
envíe el filtro de floración confilterload
. Luego envíasgetdata
, con un tipo inv deMSG_FILTERED_BLOCK
, y el hash de bloque. Esto documenta los detalles de bajo nivel. en.bitcoin.it/wiki/Protocol_documentation#Inventory_Vectors Déjame ver si puedo elaborar un código de ejemplo para ti.gatb27
tx_hash
,block_number
devuelve el hexadecimal después de OP_RETURN en la salida tx_hash. ¿Dónde puedo encontrar una guía para aprender a hacerlo? :)