Comprobación manual de bitcoins acreditados

Si tengo la dirección de bitcoin, la clave privada y un ID de transacción de Bitcoin ( regtestmodo) en las variables de shell, ¿qué código de Python debo ejecutar para afirmar que los Bitcoins están realmente destinados a esta clave privada?

He estado siguiendo este excelente artículo: Bitcoins de la manera difícil: usando el protocolo de Bitcoin sin procesar . Espero replicar esto con Bitcoin en modo de prueba como parte de un diseño más grande.

Para empezar, tenía que asegurarme de que el código mencionado en el artículo (disponible aquí ) pueda generar una dirección de Bitcoin con mo ncomo prefijo y se use 111como ID de red. Ver aquí _ Hice los siguientes cambios de código para generar direcciones para el regtestmodo:

keyUtils.pubKeyToAddr

def pubKeyToAddr(s): ripemd160 = hashlib.new('ripemd160') ripemd160.update(hashlib.sha256(s.decode('hex')).digest()) return utils.base58CheckEncode(111, ripemd160.digest())

utils.base58CheckEncode

def base58CheckEncode(version, payload): s = chr(version) + payload checksum = hashlib.sha256(hashlib.sha256(s).digest()).digest()[0:4] result = s + checksum leadingZeros = countLeadingChars(result, '\0') return 'm' * leadingZeros + base58encode(base256decode(result))

Luego, con bitcoin-qt, transfirí algunos BTC a una dirección generada desde arriba. La transferencia se realiza y se confirma cuando se crea un nuevo bloque.

Sin embargo, no puedo ver la cantidad acreditada a esta nueva dirección con el getreceivedbyaddresscomando. Estoy ejecutando este comando en la consola de la ventana de depuración (por alguna razón, bitcoin-clino se conectaría incluso después de configurar bitcoind ). Creo que la razón podría ser el hecho de que la clave privada y la dirección de bitcoin se generaron en otro lugar desde la línea de comandos en lugar de la --data-dirubicación predeterminada que bitcoin-qtse usó cuando se lanzó. Entiendo esto.

¿Importó la clave privada o la dirección a la billetera de Bitcoin Core? getreceivedbyaddress es un RPC de billetera y solo puede conocer las transacciones que la billetera considera propias.
En realidad, no quiero importar las claves privadas a la billetera que pertenece al nodo completo. Quiero tratar la dirección de Bitcoin creada por mabuakky como una billetera separada.
Bitcoin Core solo admite una billetera por ahora.
Por cierto, no necesita importar la clave privada. Simplemente puede importar la dirección (con importaddress) como una dirección de solo vigilancia.
¿Quiso decir que solo se admite una billetera en el regtestmodo?
Si el almacén de transacciones es un BerkleyDB, seguramente debería ser tan fácil como ejecutar una consulta en ese DB con mi dirección de Bitcoin como entrada. El resultado de la consulta podría ser solo la cadena hexadecimal que solo yo puedo resolver porque soy el propietario de la clave privada.
Bitcoin Core no tiene una base de datos por dirección y no la necesita. Su billetera solo realiza un seguimiento de las transacciones relevantes. Si desea utilizar getreceivedbyaddress, primero debe hacer que la billetera rastree esa dirección.
Lo siento, no quise decir una base de datos por dirección. Me refería a la propia cadena de bloques. Citando su respuesta aquí (: D) - bitcoin.stackexchange.com/a/11108/6975 - Estaba pensando, si puedo consultar blocks/blk*.datcon mi dirección de Bitcoin como entrada. Después de todo, blockchain.info permite buscar por dirección. Entonces, ¿por qué no en este caso también?
No existe un índice por dirección de la cadena de bloques, ya que no es necesario. Es posible escanear a través de la cadena (y la billetera lo hará por usted en el momento de la importación), pero eso puede llevar fácilmente docenas de minutos, algo que no desea hacer cuando emite una llamada RPC.
blockchain.info tiene una base de datos masiva preindexada para cada dirección. Eso no está implementado en Bitcoin Core y, por lo general, no lo necesita. Permitir que la billetera rastree las transacciones que son relevantes es mucho más escalable.
Gracias, @PieterWuille, por la explicación. Creo que simplemente crearé otro nodo y seguiré adelante.

Respuestas (1)

No puedo ver el monto acreditado a esta nueva dirección con el comando getreceivedbyaddress.

No hay un índice por dirección de la cadena de bloques en el núcleo de Bitcoin.

Para que bitcoin-core rastree una dirección, debe, por ejemplo, agregar una dirección a la billetera como una dirección de solo visualización.