Quiero ver el saldo de alguna dirección usando bitcoind.
Configuré txindex=1
e hice una -reindex
para indexar todas las transacciones.
Pero aún así, no parece haber una forma de obtener saldos de una dirección. getreceivedbyaddress
no funciona con direcciones fuera de su propia billetera (esperé que lo hiciera después de un -txindex=1 -reindex
, pero no fue así).
Me pregunto por qué blockexplorer.com getreceivedbyaddress
puede hacer esto para cualquier dirección pero el cliente predeterminado no puede. Si descarga y sincroniza toda la cadena de bloques, debería poder consultarla para obtener información, ¿verdad?
Por defecto, lo que mantiene el motor blockchain 0.8 es:
En este nivel no existe nada relacionado con direcciones o saldos. Esa es solo una representación del lado del cliente de los datos. El saldo de una billetera es la suma de los valores de los UTXO que se pueden gastar con el juego de llaves en la billetera. Puede definir el saldo de una dirección como la suma de los valores de los UTXO asignados a un script que coincide con una dirección determinada (y esto es lo que hacen varios sitios), pero presentarlo de esta manera es bastante confuso: hace que muchas personas piensen que Las transacciones de Bitcoin transfieren valor de una dirección a otra. Esto no es cierto, consumen salidas específicas de una transacción anterior y las fusionan y dividen en nuevas salidas.
La -txindex
opción que mencionas, agrega una cosa más que mantiene el motor de validación:
Esto se agregó para que el getrawtransaction
comando funcione con transacciones históricas, pero nuevamente, esto no tiene nada que ver con las direcciones. Sería posible una base de datos que indexe el UTXO establecido por dirección, o incluso el historial completo de la cadena de bloques por dirección, pero sería relativamente costoso de mantener y no debería ser necesario para las operaciones normales (aunque es bastante útil para la depuración). ..).
Donde esas cosas pertenecen, es en la billetera. La billetera, tal como la presenta el cliente de referencia, no utiliza el "saldo de una dirección", sino que ve las direcciones como puntos de entrada a la billetera, pero administra las monedas en toda la billetera juntas, independientemente de a qué dirección se enviaron por última vez. Esto también confunde a las personas que están acostumbradas a mirar sitios web similares a BlockExplorer, cuando se dan cuenta de que, por ejemplo, el cambio siempre se envía a una dirección nueva.
Entonces, para dar una respuesta real: si realmente desea realizar un seguimiento de un saldo, necesita la interfaz de la billetera. En este momento, esto es bastante inflexible, pero hay planes para mejorar esta situación pronto. Con suerte, pronto obtendremos soporte para múltiples billeteras y billeteras de solo reloj, donde puede agregar direcciones que le gustaría rastrear, sin tener sus claves.
listunspent
o algo así? ¿O es realmente simplemente imposible?getblockhash
y getblock
, iterar a través de todas las transacciones en cada bloque usando getrawtransaction
, y buscar salidas que acrediten la dirección que desea, o que se consuman en una entrada. Esto probablemente tomaría horas...Esto proviene de la lista de llamadas del cliente/API de Bitcoin original con respecto al comando getreceivedbyaddress
.
Devuelve el importe total recibido por en transacciones con al menos [minconf] confirmaciones. Si bien algunos pueden considerar esto obvio, el valor informado por esto solo considera recibir transacciones. No comprueba los pagos que se han realizado desde esta dirección. En otras palabras, esto no es "getaddressbalance". Funciona solo para direcciones en la billetera local, las direcciones externas siempre mostrarán 0. [Negrita agregada por mí.]
Técnicamente tienes razón; la cadena de bloques lleva la información que está buscando. Sin embargo, el cliente original no tiene la función para calcularlo.
getreceivedbyaddress
que no se puede.getreceivedbyaddress
? ¿A qué debo enviarlo? ¿Hay algún ejemplo simple de este comando o cualquier otro?getaddressbalance
@jorijnsmit mencionado fue solo un comando hipotético.1 of n
múltiples firmas, incluso si se reconoce como mío.El concepto de "saldo de dirección" se basa en la confusión.
La forma en que Bitcoin está diseñado, hay tres conceptos diferentes relacionados: direcciones, billeteras y cuentas. Las billeteras se componen de una o más cuentas, cada una con un saldo (que incluso puede ser negativo). La billetera en su conjunto tiene un saldo que suma la suma de todas las cuentas (que siempre debe ser positivo).
Las direcciones son simplemente puntos de entrada a una billetera; no tienen saldos y solo deben usarse una vez*. Las direcciones están asociadas a una cuenta: cuando se reciben monedas en la dirección, se acredita esa cuenta; tenga en cuenta que esta es una asociación unidireccional: la cuenta no está asociada a la dirección, ni la moneda recibida; su saldo simplemente se incrementa por la cantidad recibida. Cuando gasta bitcoins, su billetera elige monedas para gastar (más o menos) al azar, sin preocuparse por cómo se recibieron, y generalmente usará una dirección invisible completamente nueva internamente, que no verá como un final. usuario. En general, estas son algunas de las razones por las que tiene poco sentido hablar de un "saldo de direcciones".
* Si bien es bastante común que las personas reutilicen las direcciones para depósitos o donaciones, hacerlo es perjudicial para usted y para otras personas que usan Bitcoin de varias maneras que están fuera del alcance de esta pregunta.
scantxoutset
RPC para eso ahora, que escanea el conjunto UTXO en lugar de toda la cadena de bloques."Esperamos que pronto obtengamos soporte para (...) monederos de solo visualización, en los que puede agregar direcciones que le gustaría rastrear, sin tener sus claves". –Pieter Wuille
Por lo que he visto, Pieter Wuille y otros incluyeron esta función en la versión 0.10.0 de Bitcoin Core , por lo que ahora es posible usar Bitcoin Core para obtener el saldo de cualquier dirección simplemente siguiendo estos pasos:
1) Cree una nueva billetera (detenga el programa, cambie el nombre del antiguo archivo wallet.dat, reinicie el programa y creará una nueva billetera.dat vacía).
2) Inicie Bitcoin Core y vaya a Ayuda > Ventana de depuración > Consola.
3) En la línea de comandos de la consola, ejecute el siguiente comando :
direcciónimportada la_dirección_en la que_está_interesado
Tenga en cuenta que esto hará que el programa vuelva a escanear toda la cadena de bloques, lo que puede llevar varios minutos.
Luego puede cerrar la ventana de depuración. Ahora la ventana principal del programa muestra dos columnas de saldos, la primera es el saldo de las direcciones normales en la billetera (aquellas cuyos bitcoins puede gastar), y la segunda es el saldo de las direcciones de solo reloj en la cartera. Este último es lo que estabas buscando.
Una vez que haya terminado, puede detener el programa, eliminar o cambiar el nombre de la billetera o moverla a otro lugar, y cambiar el nombre de la billetera anterior a "wallet.dat".
Tenga en cuenta que el cliente de Bitcoin debe tener una copia actualizada de toda la cadena de bloques, ya que la opción predeterminada rescan=true de importaddress no acepta cadenas de bloques recortadas, y rescan=false no mostrará el saldo actual.
No he probado esto y no soy un experto en bitcoins, así que tome esta respuesta con precaución.
He escrito un programa en Python3 que le permite buscar cualquier dirección en el núcleo de bitcoin, ya sea que pertenezca a su billetera o no.
Aquí está el enlace de github:
https://github.com/ORP967/Bitcoin_Core_RPC_par_address
Déjame saber lo que piensas o si tienes alguna mejora que puedas tener.
Tom van der Woerdt
txindex
no es relevante aquí, ya que el cliente no necesita el índice completo para obtener el saldo de una dirección determinada.steven roose
codificando_idiota
steven roose
LF00