Probablemente he entendido mal el significado del comando bitcoind 'getbalance'.
Estoy usando bitcoind en modo de registro.
Estoy usando direcciones de solo reloj de bitcoin multisig importadas, que son las siguientes:
mirko_180603243: 2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p
mirko_1169810029: 2N1DwxUDghdk2DRWee8PVLtcY9xxTM374Nj
mirko_1977534765: 2NANSy3VqQZmhQH36tNADVxEahLHJzQovdz
En el estado inicial no tengo tal transacción, como se esperaba: listtransactions mirko_180603243 10 0 verdadero: [] listtransactions mirko_1169810029 10 0 verdadero: [] listtransactions mirko_1977534765 10 0 verdadero: []
Luego envío algo de dinero a la primera cuenta (mirko_180603243)
sendtoaddress 2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p 10 "Initial load"
setgenerate true 6
Desde el punto de vista del equilibrio, todo está bien:
getbalance mirko_180603243 0 true: 10
listaccounts 1 true: "mirko_180603243" : 10.00000000
listunspent:
{
"txid" : "3c9970cda24b87ebf7080ff40d3be7cdded1afb6eafe3d9b7ade31f9c7fadc13",
"vout" : 0,
"address" : "2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p",
"account" : "mirko_180603243",
"scriptPubKey" : "a9142480ec8ccaea0328c6392c2ba4a4cd6fb0f6638b87",
"amount" : 10.00000000,
"confirmations" : 6,
"spendable" : false
}
Desde el punto de vista de las transacciones, todo es consistente:
listtransactions "mirko_180603243" 10 0 true:
{
"involvesWatchonly" : true,
"account" : "mirko_180603243",
"address" : "2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p",
"category" : "receive",
"amount" : 10.00000000,
"vout" : 0,
"confirmations" : 12,
"blockhash" : "0000a083a8b0543d68059d9c3421b4ff681630601e80c3f4d4e58a05e228385d",
"blockindex" : 1,
"blocktime" : 1414401010,
"txid" : "3c9970cda24b87ebf7080ff40d3be7cdded1afb6eafe3d9b7ade31f9c7fadc13",
"walletconflicts" : [
],
"time" : 1414400968,
"timereceived" : 1414400968,
"comment" : "Initial load"
}
Luego envío 3 BTC de la primera cuenta (mirko_180603243: 2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p) a la segunda (mirko_1169810029: 2N1DwxUDghdk2DRWee8PVLtcY9xxTM374Nj). Como solo tengo 10 BTC en un bloque, me devuelvo 7 BTC.
Esta es la transacción final:
gettransaction 153c45f199eba376d43cad614c2cd410140d2c9597b0de8392fa71209f6e43a5
{
"amount" : 10.00000000,
"confirmations" : 6,
"blockhash" : "0000da6254c04d050c93bb9949a5fdaec9256038edce3daa9798d2e0feca8199",
"blockindex" : 1,
"blocktime" : 1414401566,
"txid" : "153c45f199eba376d43cad614c2cd410140d2c9597b0de8392fa71209f6e43a5",
"walletconflicts" : [
],
"time" : 1414401480,
"timereceived" : 1414401480,
"details" : [
],
"hex" : "010000000113dcfac7f931de7a9b3dfeeab6afd1decde73b0df40f08f7eb874ba2cd70993c00000000fa0047304402205bb11653b7668488cf60a61c458bc729619b395d7b5d82c597d223956c0dc62d0220396fef209b3077b129648797ba72b9da0be94334dcebf067d1d5e31bb26ecf4a014730440220203dcdd4169db7c1259c14c7fe8ed0eb449b3f26a2732cbba3713779034afd9d022020c85a7ec67a8aaad642ff96b63b0c98ff9dedb35a68c3dfddd296ee7db08ac1014c67522102a880b200040eb0f4e3984263ce3fb86b39cb5ba4c9ea247bb2c4de4d36eec4ff4104abc0c6d83b138ff68b60ee11b5deb98da1bd4fe9d4894fe1041e436f5cebfb7be7cf886f15ea34a746302700008c88c1257b2f37128d764bc922940b2e01038752aeffffffff0200a3e1110000000017a914578335446ee73c6379c7cef95c4fc8c3c576e3a0870027b9290000000017a9142480ec8ccaea0328c6392c2ba4a4cd6fb0f6638b8700000000"
}
decoderawtransaction 010000000113dcfac...cd6fb0f6638b8700000000
{
"txid" : "153c45f199eba376d43cad614c2cd410140d2c9597b0de8392fa71209f6e43a5",
"version" : 1,
"locktime" : 0,
"vin" : [
{
"txid" : "3c9970cda24b87ebf7080ff40d3be7cdded1afb6eafe3d9b7ade31f9c7fadc13",
"vout" : 0,
"scriptSig" : {
"asm" : "0 304402205bb11653b7668488cf60a61c458bc729619b395d7b5d82c597d223956c0dc62d0220396fef209b3077b129648797ba72b9da0be94334dcebf067d1d5e31bb26ecf4a01 30440220203dcdd4169db7c1259c14c7fe8ed0eb449b3f26a2732cbba3713779034afd9d022020c85a7ec67a8aaad642ff96b63b0c98ff9dedb35a68c3dfddd296ee7db08ac101 522102a880b200040eb0f4e3984263ce3fb86b39cb5ba4c9ea247bb2c4de4d36eec4ff4104abc0c6d83b138ff68b60ee11b5deb98da1bd4fe9d4894fe1041e436f5cebfb7be7cf886f15ea34a746302700008c88c1257b2f37128d764bc922940b2e01038752ae",
"hex" : "0047304402205bb11653b7668488cf60a61c458bc729619b395d7b5d82c597d223956c0dc62d0220396fef209b3077b129648797ba72b9da0be94334dcebf067d1d5e31bb26ecf4a014730440220203dcdd4169db7c1259c14c7fe8ed0eb449b3f26a2732cbba3713779034afd9d022020c85a7ec67a8aaad642ff96b63b0c98ff9dedb35a68c3dfddd296ee7db08ac1014c67522102a880b200040eb0f4e3984263ce3fb86b39cb5ba4c9ea247bb2c4de4d36eec4ff4104abc0c6d83b138ff68b60ee11b5deb98da1bd4fe9d4894fe1041e436f5cebfb7be7cf886f15ea34a746302700008c88c1257b2f37128d764bc922940b2e01038752ae"
},
"sequence" : 4294967295
}
],
"vout" : [
{
"value" : 3.00000000,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_HASH160 578335446ee73c6379c7cef95c4fc8c3c576e3a0 OP_EQUAL",
"hex" : "a914578335446ee73c6379c7cef95c4fc8c3c576e3a087",
"reqSigs" : 1,
"type" : "scripthash",
"addresses" : [
"2N1DwxUDghdk2DRWee8PVLtcY9xxTM374Nj"
]
}
},
{
"value" : 7.00000000,
"n" : 1,
"scriptPubKey" : {
"asm" : "OP_HASH160 2480ec8ccaea0328c6392c2ba4a4cd6fb0f6638b OP_EQUAL",
"hex" : "a9142480ec8ccaea0328c6392c2ba4a4cd6fb0f6638b87",
"reqSigs" : 1,
"type" : "scripthash",
"addresses" : [
"2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p"
]
}
}
]
}
Todo es consistente con los bloques no gastados:
{
"txid" : "153c45f199eba376d43cad614c2cd410140d2c9597b0de8392fa71209f6e43a5",
"vout" : 1,
"address" : "2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p",
"account" : "mirko_180603243",
"scriptPubKey" : "a9142480ec8ccaea0328c6392c2ba4a4cd6fb0f6638b87",
"amount" : 7.00000000,
"confirmations" : 6,
"spendable" : false
}
{
"txid" : "153c45f199eba376d43cad614c2cd410140d2c9597b0de8392fa71209f6e43a5",
"vout" : 0,
"address" : "2N1DwxUDghdk2DRWee8PVLtcY9xxTM374Nj",
"account" : "mirko_1169810029",
"scriptPubKey" : "a914578335446ee73c6379c7cef95c4fc8c3c576e3a087",
"amount" : 3.00000000,
"confirmations" : 6,
"spendable" : false
}
Lo que no logro entender es el balance final:
getbalance mirko_180603243 1 true:
17 instead of 7
getbalance mirko_1169810029 1 true:
3
Básicamente, parece ser que 'getbalance' suma todas las transacciones entrantes, ignorando las que salen.
Actualmente, estoy calculando la cantidad disponible sumando todos los bloques no gastados para cada cuenta. Sin embargo, desafortunadamente, eso no es muy fácil de usar, ya que cuando paga 3 BTC y tiene un solo bloque de 10 BTC, antes de las confirmaciones ve 0. También podría incluir las transacciones de 0 confirmaciones, pero el usuario puede pensar que podía gastar ese dinero, lo cual es falso.
Perdón por el mensaje largo.
PD: Olvidé mencionar que descubrí que las cuentas NO se usan para débito: si desea pagar, debe usar 'mover' o 'enviar desde', pero solo quiero tener direcciones de solo reloj, como yo no desea conservar las claves privadas.
Por esta razón, no puedo confiar en los comandos 'mover' o 'enviar desde', sino que tengo que crear manualmente y firmar varias veces mi transacción.
Desde la página wiki de bitcoin "Explicación de cuentas" ( https://en.bitcoin.it/wiki/Accounts_explained ):
Cuando recibe bitcoins, siempre se asignan a una de sus cuentas, y puede cambiar qué cuenta se acredita en función de qué dirección de bitcoin recibe las monedas, al igual que le dice a un cajero de banco en qué cuenta acreditar cuando deposita efectivo en su banco . Sin embargo, enviar bitcoins es como retirar efectivo del banco; las monedas que se envían y debitan de una cuenta casi siempre no son las mismas monedas que se depositaron en esa cuenta.
Entonces, realmente no puede hacer lo que dijo (a continuación), enviar desde una cuenta a otra cuenta. Sin embargo, puede transferir move
saldos de una cuenta a otra cuenta con el move
comando, pero esto no requiere una transacción de bitcoin.
Luego envío 3 BTC de la primera cuenta (mirko_180603243: 2MvaEkzFyw6EcQGR2vrFWQd4rDNSiP4Qn7p) a la segunda (mirko_1169810029: 2N1DwxUDghdk2DRWee8PVLtcY9xxTM374Nj).
Creo que si lo haces:
./bitcoin-cli listaccounts
Verá algunas cuentas con saldos negativos para dar cuenta del saldo extra alto que está viendo.
Nota: "fromaccount" en el sendfrom
comando solo le dice al cliente en qué cuenta debitar cuando envía a la dirección especificada.
fcracker79