Author

Topic: Come si comportano sendfrom/move su Bitcoin Core (Linux)? (Read 2967 times)

hero member
Activity: 658
Merit: 502
Ma se utilizzi il comando "sendrawtransaction" puoi scegliere sì l'UTXO ma non l'account, poichè quel comando, come succede per "sendtoaddress", addebita la spesa solo sul bilancio del default account indipendentemente dall'account a cui è associato l'indirizzo da cui si sceglie di muovere i btc.

Quindi anche se si scegliesse specificatamente di spendere un UTXO di un indirizzo associato all'account Pippo, toccherebbe riaggiustare in seguito a mano con un "move" la situazione, altrimenti con "getbalance Pippo" (o "listaccounts") non si otterrebbe il bilancio corretto relativo all'account Pippo dopo la rawtransaction; in teoria il bilancio di Pippo non dovrebbe proprio essere toccato da una rawtransaction.

A tal proposito cito il seguente post di Andresen :




Assolutamente si, il "move" è indispensabile per pareggiare i bilanci, ed infatti serve solo a questo Smiley




FaSan
legendary
Activity: 1932
Merit: 2077
Ok capito, il mio problema probabilmente era un sorta di incompatibilità tra i comandi sendfrom e sendtoiaddress.

Se si suddivide il wallet in account infatti, meglio non usare mai sendtoaddress perché aldilà di alterare la balance dell'account "" (almeno credo) poi effettivamente non si sa da quale address di quale account partiranno i btc

Anche se usi sendfrom non si sa da quale address di quale account partiranno i btc. L'unica differenza con sendtoaddress è che nel primo caso almeno i bilanci virtuali di ogni account si aggiornano automaticamente in modo corretto.

Quote
The sendfrom method sends coins and debits the specified account. It does **not** change Bitcoin's algorithm for selecting which coins in the wallet are sent-- you should think of the coins in the wallet as being mixed together when they are received. There is no way to ask Bitcoin to "create a payment transaction using the coins received from these previously received transactions" without using the raw transactions API (which is not part of the account system.)


legendary
Activity: 1274
Merit: 1001
"shh, he's coding..."
Ok capito, il mio problema probabilmente era un sorta di incompatibilità tra i comandi sendfrom e sendtoiaddress.

Se si suddivide il wallet in account infatti, meglio non usare mai sendtoaddress perché aldilà di alterare la balance dell'account "" (almeno credo) poi effettivamente non si sa da quale address di quale account partiranno i btc
legendary
Activity: 1932
Merit: 2077
Il problema è che con Bitcon Core non si riesce, per quanto ne so, a lavorare contemporaneamente con più di 1 wallet alla volta.

Si può, indicando una datadir diversa e p2p e rpc port diverse. Chiaramente usando due datadir diverse devi avere due copie della chain sul disco.

FaSan

Sì ma così di fatto è inutilizzabile per gli scopi di TheBomber999, 1 account = 1 wallet = 1 copia della block chain fanno 30 GB per utente.
Non che il metodo con l'opzione -walletfile sia comodo e particolarmente adatto allo scopo  Smiley



Confermo quasi tutto. Il sistema è completo, il sendfrom funziona solo se l' utente ha credito attivo e non potrà mai andare in negativo. Puoi quindi usare gli account come wallet indipendenti. Se usi il QT puoi usare il coincontrol per scegliere gli address, da rpc sarebbe macchinoso, ma puoi sfruttare le UTXOs per creare una rawtx ad HOC.


Ma se utilizzi il comando "sendrawtransaction" puoi scegliere sì l'UTXO ma non l'account, poichè quel comando, come succede per "sendtoaddress", addebita la spesa solo sul bilancio del default account indipendentemente dall'account a cui è associato l'indirizzo da cui si sceglie di muovere i btc.

Quindi anche se si scegliesse specificatamente di spendere un UTXO di un indirizzo associato all'account Pippo, toccherebbe riaggiustare in seguito a mano con un "move" la situazione, altrimenti con "getbalance Pippo" (o "listaccounts") non si otterrebbe il bilancio corretto relativo all'account Pippo dopo la rawtransaction; in teoria il bilancio di Pippo non dovrebbe proprio essere toccato da una rawtransaction.

A tal proposito cito il seguente post di Andresen :

Quote
Transactions send via sendrawtransaction are always debited from the default "" account. Raw transactions and accounts are not designed to work together, use one or the other.


hero member
Activity: 658
Merit: 502

Il comando "move" invece permette di spostare la balance tra un account e l'altro non andano però a influire sugli address.

Ora quindi io mi chiedo, avendo:
Account Pippo -> 1 BTC di Balance e Address con 1 BTC
Account Pluto -> 0 BTC di Balance e Address con 0 BTC

Non potrei utilizzare il sendfrom dall'account Pluto perchè privo di fondi, quindi effettuo un:

sendfrom Pippo "to" Pluto "importo" 1 BTC
....

E' un vero peccato, perché avrebbe avuto molto più senso avere la funzionalità account "completa"

Dal mio punto di vista, per quanto non conosca a fondo tutti i dettagli della gestione della funzionalità account, il sistema mi sembra già completo così com'è. Perchè l'account Pluto dovrebbere effettuare un pagamento tramite "sendfrom" dal momento che il suo bilancio è a 0? C'è un motivo logico per cui il comando "sendfrom Pluto" nel primo caso non funzionerebbe.

Il comando "move" è utile in 2 contesti:
- se l'utente A vuole pagare l'utente B, entrambi clienti che si appoggiano allo stesso wallet, quindi si effettua una transazione virtuale tra account senza usare la blockchain e quindi senza fee
- se si vuole effettuare una transazione tra l'account di default e quello di un altro cliente (o viceversa), anche qui senza pagare fee

Ma ripeto se Pluto non ha fondi perchè dovrebbe effettuare un pagamento? Che senso ha sottrarre quei fondi allora dal bilancio dell'account di Pippo?



E' quindi impossibili suddividere gli account come se fossero dei wallet indipendenti l'uno dall'altro (ovvero facendo spendere i BTC solo da address di un determinato account)?

Secondo me come lo vuoi tu è impossibile (ma attendi il parere di qualche esperto tipo FaSan).

Se invece vuoi semplicemente usare un sistema multi-wallet, si può fare anche con Bitcoin Core ma non è proprio l'ideale (altri client come Armory hanno già integrata invece questa funzionalità mentre Bitcoin Core non è pensato per questo tipo di utilizzo). Con Bitcoin Core si possono usare più wallet tramite l'opzione -walletfile ma con qualche scocciatura tipo stoppare Bitcoin Core ogni volta che si fa lo switch tra un wallet e un altro e rilanciarlo con l'opzione -rescan --> vedi qui e qui.  


Confermo quasi tutto. Il sistema è completo, il sendfrom funziona solo se l' utente ha credito attivo e non potrà mai andare in negativo. Puoi quindi usare gli account come wallet indipendenti. Se usi il QT puoi usare il coincontrol per scegliere gli address, da rpc sarebbe macchinoso, ma puoi sfruttare le UTXOs per creare una rawtx ad HOC.


Il problema è che con Bitcon Core non si riesce, per quanto ne so, a lavorare contemporaneamente con più di 1 wallet alla volta.

Si può, indicando una datadir diversa e p2p e rpc port diverse. Chiaramente usando due datadir diverse devi avere due copie della chain sul disco.



FaSan
legendary
Activity: 1932
Merit: 2077

Il comando "move" invece permette di spostare la balance tra un account e l'altro non andano però a influire sugli address.

Ora quindi io mi chiedo, avendo:
Account Pippo -> 1 BTC di Balance e Address con 1 BTC
Account Pluto -> 0 BTC di Balance e Address con 0 BTC

Non potrei utilizzare il sendfrom dall'account Pluto perchè privo di fondi, quindi effettuo un:

sendfrom Pippo "to" Pluto "importo" 1 BTC
....

E' un vero peccato, perché avrebbe avuto molto più senso avere la funzionalità account "completa"

Dal mio punto di vista, per quanto non conosca a fondo tutti i dettagli della gestione della funzionalità account, il sistema mi sembra già completo così com'è. Perchè l'account Pluto dovrebbere effettuare un pagamento tramite "sendfrom" dal momento che il suo bilancio è a 0? C'è un motivo logico per cui il comando "sendfrom Pluto" nel primo caso non funzionerebbe.

Il comando "move" è utile in 2 contesti:
- se l'utente A vuole pagare l'utente B, entrambi clienti che si appoggiano allo stesso wallet, quindi si effettua una transazione virtuale tra account senza usare la blockchain e quindi senza fee
- se si vuole effettuare una transazione tra l'account di default e quello di un altro cliente (o viceversa), anche qui senza pagare fee

Ma ripeto se Pluto non ha fondi perchè dovrebbe effettuare un pagamento? Che senso ha sottrarre quei fondi allora dal bilancio dell'account di Pippo?



E' quindi impossibili suddividere gli account come se fossero dei wallet indipendenti l'uno dall'altro (ovvero facendo spendere i BTC solo da address di un determinato account)?

Secondo me come lo vuoi tu è impossibile (ma attendi il parere di qualche esperto tipo FaSan).

Se invece vuoi semplicemente usare un sistema multi-wallet, si può fare anche con Bitcoin Core ma non è proprio l'ideale (altri client come Armory hanno già integrata invece questa funzionalità mentre Bitcoin Core non è pensato per questo tipo di utilizzo). Con Bitcoin Core si possono usare più wallet tramite l'opzione -walletfile ma con qualche scocciatura tipo stoppare Bitcoin Core ogni volta che si fa lo switch tra un wallet e un altro e rilanciarlo con l'opzione -rescan --> vedi qui e qui.  
Il problema è che con Bitcon Core non si riesce, per quanto ne so, a lavorare contemporaneamente con più di 1 wallet alla volta.


legendary
Activity: 1274
Merit: 1001
"shh, he's coding..."
@arulbero
Grazie per la spiegazione. E' quindi impossibili suddividere gli account come se fossero dei wallet indipendenti l'uno dall'altro (ovvero facendo spendere i BTC solo da address di un determinato account)?
E' un vero peccato, perché avrebbe avuto molto più senso avere la funzionalità account "completa"
legendary
Activity: 1932
Merit: 2077
Il comando "sendfrom" permette di scegliere da quale account (non address) inviate i propri bitcoin.
Tecnicamente ogni account ha i propri address, quindi dovrebbe pescare da uno o più address a disposizone di quell'account per l'invio.

Il comando "move" invece permette di spostare la balance tra un account e l'altro non andano però a influire sugli address.

Ora quindi io mi chiedo, avendo:
Account Pippo -> 1 BTC di Balance e Address con 1 BTC
Account Pluto -> 0 BTC di Balance e Address con 0 BTC

Non potrei utilizzare il sendfrom dall'account Pluto perchè privo di fondi, quindi effettuo un:

sendfrom Pippo "to" Pluto "importo" 1 BTC

A questo punto avremo:
Account Pippo -> 0 BTC di Balance e Address con 1 BTC
Account Pluto -> 1 BTC di Balance e Address con 0 BTC

Attualmente quindi l'account Pluto ha una balance di 1 BTC ma i suoi address invece hanno 0 BTC.
Se faccio un "sendfrom" Pluto, la transazioen parte attingendo dall'address di Pippo oppure non parte nemmeno?

Se non parte, a che caiser serve il comando move?
Se parte invece viene quindi coinvolto l'address di Pippo anche se il sendfrom specifica che l'account dal quale inviare i picci era Pluto?

Spero di essermi spiegato Smiley

Sto cercando anch'io di capire meglio questa storia degli "account".

Se ho ben capito un portafoglio può avere più account, più precisamente ogni indirizzo ( o gruppo di indirizzi ) di un wallet può essere associato a un account.
L'associazione funziona solo in ricezione però, nel senso che ogni volta che un indirizzo associato a un account A riceve dei bitcoin si aggiorna (in positivo) il bilancio dell'account A.
Il discorso cambia invece se si vogliono spendere dei btc, utilizzando il comando "sendfrom A indirizzo_destinatario 10.00" quei 10 btc vengono scalati dal bilancio di A ma non si sa da quali indirizzi vengano effettivamente prelevati i 10 btc, poichè l'algoritmo Coin Selection lavora a livello di wallet e non di account.

Quindi è chiaro che l'associazione indirizzo-account non è valida se mi serve stabilire il bilancio dell'account A, nel senso che il bilancio di A non è dato in generale dalla somma dei bilanci di tutti gli indirizzi associati ad A (ad esempio un indirizzo "di A" potrebbe essere stato svuotato a causa di un "sendfrom B", anche se gli indirizzi "di B" avevano fondi sufficienti, poichè in un indirizzo di A c'era un UTXO che corrispondeva esattamente alla somma che B doveva pagare, e l'algoritmo Coin Selection tenta sempre prima questa strada).

Il concetto di account serve evidentemente solo se una persona vuole istituire un wallet che funzioni come una specie di banca, che raccolga cioè i fondi di tante altre persone. Alla fine sapere "dove" sono esattamente i soldi, e soprattutto sapere con "quali" soldi si effettuano i pagamenti di un account non ha senso.

Per tornare alla domanda di TheBomber999, secondo me la transazione "sendfrom Pluto" parte senz'altro perchè la condizione "fondi sufficienti sull'account" è soddisfatta; questa transazione spende il btc dell'address associato all'account di Pippo poichè l'associazione address-account ripeto vale solo in ricezione, non per l'invio: in realtà "quel" btc non è mai stato "di" Pippo.  

Ulteriori informazioni si possono trovare in questo wiki Account explained. Tra le altre cose non ho capito se l'unico account che può andare in negativo è il Default Account (questo può succedere se si inviano dei btc con il comando "sendtoaddress" al posto di "sendfrom") o se possono diventare negativi (in quali casi?) anche gli altri account.


hero member
Activity: 658
Merit: 502
Il "move" serve solo per compensare i balance tra gli account, ma non influisce affatto sugli address e non invia nessuna transazione. Capisci da te che senza transazione non è possibile muovere coin tra address inquanto tutto deve filare nella blockchain.



FaSan

Infatti è quello che ho detto. Però appunto il sendfrom, manda ada un account, non da un address. Ma com'è possibile se le balance degli account sono "fittizi" in quando gli address col move non vengono riempiti?


Manda dagli address di un certo account, se c'è la disponibilità sugli stessi, indipendentemente dal bilancio visualizzato in rpc. Il bilancio x accounts è del tutto indicativo, e serve per farti mantenere un certo ordine. In realtà nel protocollo non esistono gli account, ma solo gli address.



FaSan

Esattamente, secondo me la balance sugli account andrebbe abolita o visualizzata per la somma delle balance degli address di quei determinati account. Altrimenti è fuorviante


In alcune alt-coin, infatti, gli accounts sono deprecated e si possono attivare solo definendo un comando nel file conf.

Io sinceramente non mi pongo troppo il problema, e anzi, trovo utili gli account per il "listreceivedbyaccount", che uso spesso nei tool di pagamento che realizzo. Usare sempre un solo address in alcune circostanze non è ottimale, e averne n divisi per account doventa utile per risparmiare queries in mysql per esempio.



FaSan
legendary
Activity: 1274
Merit: 1001
"shh, he's coding..."
Il "move" serve solo per compensare i balance tra gli account, ma non influisce affatto sugli address e non invia nessuna transazione. Capisci da te che senza transazione non è possibile muovere coin tra address inquanto tutto deve filare nella blockchain.



FaSan

Infatti è quello che ho detto. Però appunto il sendfrom, manda ada un account, non da un address. Ma com'è possibile se le balance degli account sono "fittizi" in quando gli address col move non vengono riempiti?


Manda dagli address di un certo account, se c'è la disponibilità sugli stessi, indipendentemente dal bilancio visualizzato in rpc. Il bilancio x accounts è del tutto indicativo, e serve per farti mantenere un certo ordine. In realtà nel protocollo non esistono gli account, ma solo gli address.



FaSan

Esattamente, secondo me la balance sugli account andrebbe abolita o visualizzata per la somma delle balance degli address di quei determinati account. Altrimenti è fuorviante
hero member
Activity: 658
Merit: 502
Il "move" serve solo per compensare i balance tra gli account, ma non influisce affatto sugli address e non invia nessuna transazione. Capisci da te che senza transazione non è possibile muovere coin tra address inquanto tutto deve filare nella blockchain.



FaSan

Infatti è quello che ho detto. Però appunto il sendfrom, manda ada un account, non da un address. Ma com'è possibile se le balance degli account sono "fittizi" in quando gli address col move non vengono riempiti?


Manda dagli address di un certo account, se c'è la disponibilità sugli stessi, indipendentemente dal bilancio visualizzato in rpc. Il bilancio x accounts è del tutto indicativo, e serve per farti mantenere un certo ordine. In realtà nel protocollo non esistono gli account, ma solo gli address.



FaSan
legendary
Activity: 1274
Merit: 1001
"shh, he's coding..."
Il "move" serve solo per compensare i balance tra gli account, ma non influisce affatto sugli address e non invia nessuna transazione. Capisci da te che senza transazione non è possibile muovere coin tra address inquanto tutto deve filare nella blockchain.



FaSan

Infatti è quello che ho detto. Però appunto il sendfrom, manda ada un account, non da un address. Ma com'è possibile se le balance degli account sono "fittizi" in quando gli address col move non vengono riempiti?
hero member
Activity: 658
Merit: 502
Il "move" serve solo per compensare i balance tra gli account, ma non influisce affatto sugli address e non invia nessuna transazione. Capisci da te che senza transazione non è possibile muovere coin tra address inquanto tutto deve filare nella blockchain.


Un esempio pratico è quando ti ritrovi l' account primario in negativo per aver inviato senza definire il "from", a quel punto puoi muovere il balance dei vari address per compensare il negativo.



FaSan
legendary
Activity: 1274
Merit: 1001
"shh, he's coding..."
Il comando "sendfrom" permette di scegliere da quale account (non address) inviate i propri bitcoin.
Tecnicamente ogni account ha i propri address, quindi dovrebbe pescare da uno o più address a disposizone di quell'account per l'invio.

Il comando "move" invece permette di spostare la balance tra un account e l'altro non andano però a influire sugli address.

Ora quindi io mi chiedo, avendo:
Account Pippo -> 1 BTC di Balance e Address con 1 BTC
Account Pluto -> 0 BTC di Balance e Address con 0 BTC

Non potrei utilizzare il sendfrom dall'account Pluto perchè privo di fondi, quindi effettuo un:

sendfrom Pippo "to" Pluto "importo" 1 BTC

A questo punto avremo:
Account Pippo -> 0 BTC di Balance e Address con 1 BTC
Account Pluto -> 1 BTC di Balance e Address con 0 BTC

Attualmente quindi l'account Pluto ha una balance di 1 BTC ma i suoi address invece hanno 0 BTC.
Se faccio un "sendfrom" Pluto, la transazioen parte attingendo dall'address di Pippo oppure non parte nemmeno?

Se non parte, a che caiser serve il comando move?
Se parte invece viene quindi coinvolto l'address di Pippo anche se il sendfrom specifica che l'account dal quale inviare i picci era Pluto?

Spero di essermi spiegato Smiley
Jump to: