@Ruggito :
Non so in che ordine vengano presi i soldi dal tuo portafoglio, se escano in ordine cronologico (le transazioni più vecchie escono per prime) e se si sommano transazioni fino a che non si raggiungere il valore di pagamento richiesto.
Cioè nell'esempio che sto facendo io :
Ricevo T1 : 1 BTC
Ricevo T2 : 2 BTC
Ricevo T3 : 3 BTC
Ricevo T4 : 4 BTC
Ricevo T5 : 1 BTC
Ricevo T6 : 0,5 BTC
Ho 11,5 BTC sul portafoglio
Devo pagare 6,5
6,5 viene calcolato come T1+T2+T3+T4 di cui 3,5 di T4 mi tornano su un indirizzo di resto.
Oppure se vengano prese in maniera intelligente tipo T4 + T2 + T6 = 6.5
L'algoritmo di selezione degli UTXO dal proprio portafoglio (Coin Select Algorithm), almeno per Bitcoin Core dovrebbe funzionare così:
1) Se uno degli UTXO del wallet corrisponde esattamente al pagamento da effettuare, viene selezionato quello
2) Se la somma di tutti gli UTXO minori del pagamento corrisponde esattamente al pagamento, vengono selezionati quelli
3) Se la somma di tutti gli UTXO minori del pagamento è inferiore al pagamento, viene selezionato allora il minore tra gli UTXO che eccede il pagamento ( generando così un resto più piccolo possibile )
4) Come ultima opzione viene effettuato un ciclo di 1000 combinazioni casuali degli UTXO presenti nel wallet, se una di queste combinazioni corrisponde esattamente alla cifra da inviare, il ciclo si interrompe e viene scelta quella combinazione di UTXO, altrimenti viene scelta la minore tra
- la minore, all'interno del gruppo di 1000, tra le combinazioni che eccedono la cifra da inviare
- il minore tra i singoli UTXO che eccedono la cifra da inviare
I vantaggi di questo criterio di selezione sono che spesso si hanno transazioni con pochi UTXO ( quindi basse fee), ogni tanto vengono riuniti molti piccoli UTXO, c'è un minimo di protezione della privacy perchè non è facile capire dall'esterno quali indirizzi appartengono allo stesso wallet. L'algoritmo, che è stato concepito per minimizzare l'entità dei resti, come svantaggio produce però alla lunga molti UTXO "piccoli".
Per avere una descrizione più precisa di questo algoritmo con l'aggiunta di qualche esempio basta leggersi la seguente
spiegazione.
Da notare che l'intero processo è applicato prima solo all'insieme degli UTXO che hanno almeno 6 conferme (oppure 1 conferma per i btc che sono stati "mossi" all'interno dello stesso wallet), e in seguito, se questo insieme è vuoto/insufficiente a coprire il pagamento, l'insieme degli UTXO su cui l'algoritmo va a cercare i fondi viene allargato in 2 passaggi successivi. I dettagli si trovano implementati nel codice sorgente in
wallet.cpp nella funzione SelectCoins.