Codul Bitcoin Core are implementat un mecanism care îl face destul de asemănător cu banii fiat. Numit „selecția monedelor” (eng: coin selection), termenul se referă la un algoritm care hotărăște care sunt datele care, combinate, crează tranzacții. Esențialmente, codul simulează procesul prin care, să zicem, îi dai unui casier o bancnotă de 10 lei pentru un produs de 7 lei și primești rest 3 lei.

Și dacă procesul nu sună foarte complex, trebuie să rețineți că bitcoinul este un software experimental și că această funcție, chiar dacă își face treaba, nu este per total optimizată. Mai rău de atât, partea din selecția monedelor care are nevoie de modificări are impact direct asupra costurilor plătite de utilizatori.

„Algoritmul de selecția monedelor de la Bitcoin Core are nevoie de multe schimbări, mai ales în ceea ce privește comisioanele pe tranzacții. Este ineficient și în cele din urmă face o buclă ciudată ca să încearcă să ghicească ce comisioane trebuie plătite”, explică contributorul la cod Andrew Chow.

Mark Erhardt, inginer la furnizorul de portofele BitGo, este de acord. Acesta a spus într-un interviu recent la Noded, că algoritmul este „convolut”.

Așadar, dezvoltatorii au lucrat la un nou algoritm, numit „branch and bound” (ramificat și mănunchi), sau BnB, care adună datele într-un mod mai eficient și are ca rezultat o mică creștere a scalabilității și comisioane pe tranzacții mai mici.

Erhardt a propus pentru prima oară niște optimizări aproape acum doi ani, iar Chow a fost primul dezvoltator care a scris în cod schimbările.

Recent, schimbările au fost considerate pregătite să fie adăugate la cea mai populară immplementare ede software, Bitcoin Core, și așa au ajuns să fie adăugate la baza de cod. Chiar mai bine de atât pentru utilizatori, funcționalitatea ar trebui să fie disponibilă pentru utilizarea în masă, cu lansarea celei de a 17-a versiuni de software în anul care urmează.

Despre beneficiile schimbărilor, Chow a spus:

„Asta o să ne permită să facem multă ordine la selecția monedelor și ar putea să facă mai ușor pentru utilizatori să înțeleagă exact ce face algoritmul de selecția monedelor.”

Nu e nevoie neapărat să dai rest

Fiecare tranzacție bitcoin pe care un utilizator o trimite în rețea este compusă din mai multe sume mai mici de bitcoin.

Asta pentru că ai, să zicem, un bitcoin în portofel. Acest bitcoin nu este de obicei doar o porțiune de date. Este făcută din mai multe bucăți de date adunate la un loc. S-ar putea să ai una, două sau douăzeci  de bucăți de tranzacții. Fiecare dintre ele se numesc outputuri de tranzacții necheltuite (unspent transaction outputs sau UTXO)

De exemplu, legate de adresa de portofel ar putea să fie unele date care valorează 0,1BTC, altele 0,3, 0,1 și în final 0,5BTC, care împreună compun bitcoinul pe care îl ai.

La final de lună ai primit salariul – 0,5BTC, un bonus de 0,1BTC de sărbători, ai vândut un program pe 0,3BTC și ai cumpărat încă 0,1BTC. Acestea sunt tranzacțiile care compun bitcoinul pe care tu îl ai în portofel, toate necheltuite și făcute „buchet”.

Aceste bucăți se bazează pe tranzacțiile care au fost făcute înainte și pe felul cum au fost ele inițial împărțite pentru a fi trimise către portofelul tău.

Așadar,dacă trebuie să trimiți 0,2BTC, algoritmul de selecția monedelor de la Bitcoin Core ar putea să hotărascsă să pună datele în valoare de 0,3BTC în ceea ce se numește input, creând tranzacția. Apoi, vor fi două outputuri – 0,2BTC, trimise destinatarului, și 0,1BTC, sumă care este trimisă înapoi în portofelul tău ca „rest”.

Conform spuselor dezvoltatorilor, algoritmul nu e chiar atât de bun să decidă cum să selecteze monedele pentru tranzacții.

Acest algoritm crează aproape întotdeauna automat output de dat rest. Outputul nu este necesar și risipește spațiu pe blockchain, după cum explicăc Erhardt. În exemplul de mai sus, algoritmul ar putea să evite această problemă alegând două porțiuni de date în valoare de 0,1BTC și să nu trebuiască să trimită „restul” înapoi la expeditor.

A continuat prin a vorbi despre alt efect secundar nefericit:

„Nu vrei ca tranzacțiile tale să fie măcinate fin, făcute praf [așa numitele dust transacțions].”

„Dust” sunt bucățile de bitcoin care sunt atât de mici că aproape că nici nu se merită să le cheltuiești, pentru că, comisioanele ar putea să coste mai mult decât tranzacția în sine. Sunt poate asemănătoare cu fisele mici de 5 bani – costă mai mult să faci ofisă decât valoarea ei pe piață.

Cum să alegi?

Noul algoritm, BnB, evită problemele încercând să elimine cât mai multe din scenariile care rezultă în output de dat rest. Pe scurt, caută toate inputurile ca să vadă dacă există o metodă să se ajungă la exact suma de bitcoini pe care utilizatorul vrea să o trimită într-o tranzacție.

„Acest lucru ajută la micșorarea UTXO”, spune Chow. „În plus, tranzacțiile, în care se găsește o combinație exactă, vor fi în general mai mici decât cele în care se dă rest. Așa că se va face economie la comisioanele de tranzacții pentru utilizator și va elibera mai mulți bytes în spațiul pe block ca să încapă și alte tranzacții.”

Există dovezi că funcționează. Într-o simulare, Erkhardt a descoperit că, în aproximativ 40% din tranzacțiile care ar schimba în mod normal outputurile, noul algoritm a reușit să scape de datele nenecesare.

Pe lângă aceste beneficii pe care le are utilizatorul, schimbarea de cod îi ajută pe dezvoltatori. Noul algoritm este mult mai ușor de priceput din punct de vedere tehnic.

Totuși,dezvoltatorii nu au terminat de lucrat la procesul de selecția monedelor. Chow și alți coderi plănuiesc să ducă algoritmul mai departe, adăugând o așa-numită „extragere simplă aleatorie”.

Când algoritmul BnB trece prin toate UTXO-urile bitcoinilor utilizatorilor și nu poate să evite crearea unui output de dat rest, trece la procesul original de selecția monedelor. Cu ideea de extragere simplă aleatorie, algoritmul o să aleagă un UTXO la întâmplare până când ajunge la suma de bani pe care vrei să o trimiți.

Interesant este că dezvoltatorii au descoperit că alegerea aleatorie a monedelor este o metodă mai bună decât algoritmul deliberat folosit de Bitcoin Core astăzi.

Este încununarea a ani de muncă, dar conform spuselor lui Erhardt, procesul ar fi putut să fie mult mai rapid. Selecția monedelor este un „proces delicat” al codului, iar schimbarea sa ar putea să aibă, în cuvintele lui Erhardt, „consecințe globale”.

Așadar, nimeni nu vrea să se joace la această parte de cod prea mult, spune Erhadt.

„Acum am pus multă țevăraie pentru schimbările viitoare.”