¿Cómo calcular la raíz de Merkle sin coinbasetxn?

¿Cómo se construye una raíz de merkle sin una transacción de base de monedas? Calculo la raíz de merkle sin la parte de la base de monedas y obtengo una raíz diferente a la del remitente.

¿Podría aclarar la intención detrás de su pregunta? El cálculo de la raíz de Merkle en el protocolo Bitcoin incluye la base de monedas.
Igual que la pregunta bitcoin.stackexchange.com/q/28133/31696 en realidad. Pido coinbasetxn y no me sale del pool. ¿La piscina está mal configurada? (es decir, especifico la clave mutable para devolverlo pero no lo hace)
Básicamente, estoy tratando de verificar que tengo todo correcto para calcular la raíz de Merkle si tengo que enviar un bloque. Así que examino otra presentación. Para un ejemplo, uso el bloque 391971 y encuentro que la transacción de la base de monedas está en realidad en la parte superior. Así que cambio mi código para generar la raíz de merkle sin un txn de coinbase para verificar que verifique el resultado que obtengo para getrawtransaction de la transacción de coinbase y el doble tiene eso usando dblsha(coinbase).encode('hex') ahora lo que obtengo es el forma little endian del hash. Estoy usando el mismo código de python en el ejemplo.

Respuestas (2)

¿Qué piscina estás usando? Como ejemplo, si presiona (ENVIAR una solicitud a) eligius pool ( http://gbt.mining.eligius.st:9337 ) con el cuerpo como

{"id": 0, "método": "getblocktemplate", "params": [{"capacidades": ["coinbasetxn", "workid", "coinbase/append"]}]}

tomado de https://en.bitcoin.it/wiki/Getblocktemplate obtendrá un campo coinbasetxn devuelto en el json.

Me tienes :) Estoy llamando a mi propio servicio bitcoind. no lo recupero Tal vez hay un ajuste de configuración. Esto es lo que presento. .\bitcoin-cli.exe getblocktemplate '{\"id\": 0, \"método\": \"getblocktemplate\", \"params\": [{\"capacidades\": [\"coinbasetxn\" , \"workid\", \"coinbase/append\"],\"mutable\": [\"coinbase/append\"] }]}'

La transacción de coinbase está en la parte superior de la lista. No pude verificar la cadena merkle porque creo que no he invertido el endianess del hash. Estoy usando el mismo código de Python que obtuve de los ejemplos proporcionados. Todavía no he verificado que este sea el problema, ya que no estoy seguro de si necesito colocar el txn de coinbase al frente o al final antes del.

Estoy usando dblsha(coinbase).encode('hex') tal vez haya otro método de python que no revierta el endianess.