Coin selection

Difficoltà: intermedio

Argomento: tecnologia


DEFINIZIONE

Con Coin Selection, in italiano letteralmente tradotto in selezione delle monete, si intende la scelta delle coin o UTXO come input in una transazione.

Il saldo del wallet, anche se visualizzato come importo unico, può essere diviso in diversi UTXO, analogamente a un portafoglio che contiene diverse banconote e monete.
Questo insieme di UTXO viene chiamato pool UTXO del wallet.

Quando si effettua una transazione, il wallet deve selezionare le monete necessarie dal pool UTXO.
La selezione degli UTXO può avvenire automaticamente o manualmente da parte dell'utente nei wallet che offrono questa funzione. In tal caso il termine Coin Selection è sinonimo di CoinControl.

Gli UTXO che vengono selezionati come input in una transazione vengono chiamati input set.

La maggior parte dei primi wallet Bitcoin implementava strategie di selezione delle monete relativamente semplici, come spendere gli UTXO nell'ordine in cui sono stati ricevuti (first-in, first-out). Tuttavia, poiché le commissioni sono diventate più significative, alcuni wallet hanno adottato algoritmi più avanzati per ridurre le dimensioni delle transazioni e pagare fee più basse.

Le strategie di selezione delle monete possono essere utilizzate anche per migliorare la privacy onchain cercando di evitare l’uso di UTXO associati a transazioni precedenti in transazioni successive non correlate.

Ci sono diverse strategie o algoritmi per la coin selection, tra cui:

  • CoinGrinder
  • Branch and Bound

La scelta di un algoritmo può influenzare le dimensioni della transazione, le relative commissioni e la frammentazione degli UTXO dopo la transazione.

Con fee basse e un wallet con UTXO frammentati, può essere utile selezionare il maggior numero di input di piccole dimensioni per consolidare le monete in una transazione, cosa che con fee alte risulterebbe antieconomica. Viceversa, con fee alte, è conveniente selezionare gli input più grandi necessari per raggiungere l'importo richiesto dalla transazione.

L'algoritmo CoinGrinder cerca l’input set con peso minimo.
Prima dell'introduzione di CoinGrinder, Bitcoin Core utilizzava un algoritmo di coin selection basato su un semplice ordinamento delle UTXO in base al loro valore. Questo algoritmo era semplice da implementare ma poco efficiente e poteva generare transazioni con commissioni elevate.

Dalla sua introduzione, CoinGrinder è diventato l'algoritmo di coin selection predefinito in Bitcoin Core ed è utilizzato dalla maggior parte dei wallet Bitcoin.

Il wallet Bitcoin Core ha il parametro consolidatefeerate che stabilisce la fee massima (in BTC/kvB, di default a 0,00001) alla quale la creazione delle transazioni può utilizzare più input di quelli strettamente necessari, in modo da ridurre il pool UTXO del wallet.

Dalla versione 27.0 di Bitcoin Core, CoinGrinder è attivo solo quando le fee sono considerate elevate (sulla base del parametro -consolidatefeerate predefinito: 30+sat/vB, basato sul parametro × 3).
L'algoritmo Branch And Bound verrà disabilitato quando viene utilizzata la funzione di sottrazione delle fee dagli output.


aggiornato il 2023-11-03