Anunțăm noul portofel MultiChain PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Anunțarea noului portofel MultiChain

Un pas important înainte pentru performanță și scalabilitate

După două luni de dezvoltare și testare intensivă, suntem mândri să lansăm cel mai recent alfa MultiChain, cu un portofel complet rescris în nod. Acest nou portofel transformă performanța și scalabilitatea creării, primirii și stocării tranzacțiilor în MultiChain.

Înainte de a intra în detalii, permiteți-mi să ofer un context. Când am început să dezvoltăm MultiChain, am luat decizia de a folosi Bitcoin Core, nodul standard pentru rețeaua publică bitcoin, ca punct de plecare. În termeni de programare, aceasta înseamnă că MultiChain este o „furcătură” a software-ului bitcoin. Raționamentul nostru principal a fost că bitcoin a fost (și continuă să fie) cel mai bine evaluat și cel mai testat ecosistem de criptomonede, într-un fel sau altul.

În plus, această decizie ne-a ajutat să ajungem rapid pe piață, în comparație cu codificarea unui nod blockchain de la zero. În ciuda numeroaselor diferențe dintre blockchain-urile publice și private, ele împărtășesc o mare cantitate de baze tehnice comune, inclusiv protocolul peer-to-peer, tranzacția și structura blocurilor, crearea și verificarea semnăturilor digitale, reguli de consens, managementul cheilor și nevoia de un nod API. Bifurcarea de la Bitcoin Core ne-a permis să-și valorificăm maturitatea și să ne concentrăm pe ceea ce adaugă MultiChain la blockchain-uri – configurabilitate, permisiune și suport nativ pentru active. Drept urmare, am reușit să lansăm primul alfa în iunie 2015, la doar 6 luni după începerea dezvoltării.

Cu toate acestea, pe lângă aceste beneficii, a trebuit să acceptăm și faptul că unele aspecte ale Bitcoin Core sunt prost proiectate. Deși funcționează foarte bine la scară mică, performanța lor se degradează dramatic pe măsură ce gradul de utilizare crește. Cu rețeaua publică Bitcoin încă limitată la câteva tranzacții pe secundă, aceasta nu va fi o problemă pentru majoritatea utilizatorilor Bitcoin Core pentru o lungă perioadă de timp. Dar cu blockchain-urile private care vizează sute sau mii de tranzacții pe secundă, știam că, mai devreme sau mai târziu, aceste blocaje ar trebui eliminate.

Portofelul Bitcoin Core

„Portofelul” din Bitcoin Core a fost întotdeauna cel mai important dintre aceste puncte dureroase. Sarcina sa este de a stoca tranzacțiile care au o relevanță deosebită pentru nod, deoarece implică o adresă blockchain pe care o deține sau un „numai ceas” adresa a cărei activitate o urmărește. De exemplu, fiecare tranzacție care trimite fonduri către sau de la un nod trebuie să fie stocată în portofelul nodului respectiv. Și de fiecare dată când un nod creează o tranzacție, trebuie să caute una sau mai multe „ieșiri necheltuite” ale tranzacțiilor anterioare cu portofel pe care noua tranzacție le va cheltui.

Deci, ce este în neregulă cu portofelul pe care l-am moștenit de la Bitcoin Core? De fapt, trei lucruri:

  • Toate tranzacțiile cu portofel sunt păstrate în memorie. Acest lucru determină timpi de pornire lenți și creșterea rapidă a utilizării memoriei.
  • Multe operațiuni efectuează o „scanare completă” ineficientă a fiecărei tranzacții din portofel, indiferent dacă este veche sau nouă.
  • Fiecare tranzacție din portofel este stocată integral, inclusiv orice „metadate” arbitrare care nu au nicio semnificație din perspectiva nodului și sunt deja stocate în blockchain pe disc. Acest lucru este foarte risipitor.

Consecința este că, cu aproximativ 20,000 de tranzacții stocate, portofelul Bitcoin Core încetinește semnificativ. După aproximativ 200,000, practic se oprește. Și mai rău, deoarece un blockchain MultiChain permite până la 8 MB de metadate per tranzacție (comparativ cu cei 80 de octeți ai bitcoin), cerințele de memorie ale portofelului pot crește rapid chiar și cu un număr mic de tranzacții.

Este important să clarificăm că aceste neajunsuri se aplică doar Bitcoin Core portofel, mai degrabă decât capacitatea sa generală de procesare a tranzacțiilor. Cu alte cuvinte, poate procesa și stoca în mod confortabil milioane (sau chiar miliarde) de tranzacții care nu se referă la propriile adrese, deoarece acestea sunt păstrate mai degrabă pe disc decât în ​​memorie. De exemplu, multe schimburi și portofele populare de bitcoin folosesc Bitcoin Core așa cum este, dar își stochează propriile tranzacții în exterior, mai degrabă decât în ​​interiorul nodului.

Noul portofel MultiChain

Am fi putut face aceeași cerere și utilizatorilor MultiChain, de a-și stoca propriile tranzacții în afara nodului. Cu toate acestea, aceasta nu s-a părut soluția potrivită, deoarece ar complica foarte mult configurarea și întreținerea pentru fiecare dintre participanții unui lanț. Așa că, în schimb, am mușcat glonțul și am rescris portofelul de la sol.

Cum diferă noul portofel? Dacă aveți experiență cu bazele de date, răspunsurile pot fi evidente:

  • În loc să păstreze tranzacțiile din portofel în memorie, acestea sunt stocate pe disc într-un format adecvat, tranzacțiile de interes fiind recuperate atunci când este necesar.
  • În loc să efectueze scanări complete ale portofelului, tranzacțiile sunt „indexate” în diferite moduri pentru a permite localizarea rapidă a celor care îndeplinesc anumite criterii.
  • Orice parte a metadatelor tranzacției care este mai mare de 256 de octeți nu este stocată în portofel. În schimb, portofelul conține un indicator către poziția acelei metadate în blockchain-ul în sine.

Cu alte cuvinte, am reconstruit portofelul din nod pentru a fi condus corect de baza de date (folosind LevelDB), în loc să se bazeze pe o structură naivă în memorie care nu poate fi căutată eficient. Deloc surprinzător, diferența (măsurată pe un Intel Core i3.4 de 7 GHz) este destul de dramatică:

Debitul tranzacțiilor cu portofel MultiChain

Folosirea memoriei

Graficele arată că, odată ce vechiul portofel conține 250,000 de tranzacții, rata sa de trimitere scade la 3 tx/sec și adaugă 600 MB la utilizarea memoriei nodului. În schimb, noul portofel susține peste 100 tx/sec și adaugă doar 90 MB. Am încetat să mai testăm vechiul portofel în acest moment, dar chiar și cu 6-8 milioane de tranzacții stocate, noul portofel continuă să trimită peste 100 tx/sec și depășește aproximativ 250 MB de RAM utilizată (datorită memoriei cache a bazei de date).

Aceste teste au fost efectuate în condiții realiste, cu mai multe adrese și active (și, prin urmare, multe rezultate ale tranzacțiilor necheltuite) în portofelul nodului. Într-un scenariu idealizat (o adresă, un activ, câteva UTXO), rata de trimitere susținută a fost de peste 400 tx/s. În orice caz, ca parte a acestei rescrieri, am extras în mod corespunzător și toate funcționalitățile portofelului din spatele unei interfețe interne curate. Acest lucru va facilita sprijinirea altor motoare de baze de date în viitor, pentru o robustețe și viteză și mai mari.

Pentru a reitera, toate aceste numere se referă la rata la care un nod poate crea, trimite și stoca tranzacții în portofelul său local, mai degrabă decât la randamentul său în ceea ce privește procesarea tranzacțiilor create de alții. Pentru debitul general al rețelei, MultiChain poate procesa în prezent 200 până la 800 tx/sec, în funcție de hardware-ul pe care rulează. (Fii sceptic cu privire la orice software blockchain care promiță numere precum 100,000 tx/sec pe hardware-ul obișnuit, deoarece blocajul este verificarea semnăturii digitale, care durează timp real pentru a se efectua. Dacă nodurile nu verifică semnăturile tranzacțiilor individuale, un blockchain nu poate fi utilizat în întreaga încredere. limite, ceea ce o face cu nimic mai bună decât o bază de date distribuită obișnuită.)

Pentru a încheia, aș dori să menționez următoarea caracteristică majoră care vine la MultiChain, care a necesitat această rescriere a portofelului. Această caracteristică, numită fluxuri, oferă o abstractizare la nivel înalt și un API pentru stocarea datelor de uz general pe un blockchain. Vă puteți gândi la un flux ca la o serie de timp sau o bază de date cheie-valoare, cu beneficiile adăugate legate de blockchain ale descentralizării, semnăturilor digitale, marcajului temporal și imuabilității. Cunoaștem multe cazuri de utilizare blockchain care ar putea folosi această funcționalitate și ne străduim deja să o construim. Priveste acest spatiu.

Vă rugăm să postați comentarii pe LinkedIn.

Addendum tehnic

Începând cu MultiChain alpha 22, puteți verifica ce versiune a portofelului rulează în prezent examinând walletdbversion câmpul getinfo or getwalletinfo Apeluri API. O valoare de 1 înseamnă portofelul original Bitcoin Core și 2 înseamnă noul portofel MultiChain.

Dacă rulați noua versiune de MultiChain pe un lanț existent, acesta nu va trece imediat la noul portofel. Puteți actualiza portofelul oprind nodul și apoi reluând multichaind cu parametrii -walletdbversion=2 –rescan. Puteți face downgrade în mod similar folosind –walletdbversion=1 –rescan.

În mod implicit, atunci când porniți un nod pe un lanț nou, acesta va folosi automat noul portofel. Puteți schimba acest lucru rulând multichaind pentru prima dată cu parametrul –walletdbversion=1.

Cu noul portofel, toate API-uri MultiChain funcționează exact la fel ca înainte, cu excepția vechilor API-uri de interogare a tranzacțiilor getreceivedbyaddress, listreceivedbyaddress și listtransactions (utilizare listwallettransactions or listaddresstransactions in schimb). În plus, noul portofel nu acceptă apeluri API și parametri referitori la mecanismul de „conturi” prost implementat și care va fi în curând depreciat al Bitcoin Core, care nu a fost niciodată acceptat corespunzător de MultiChain. Aceste apeluri sunt dezactivate în siguranță cu un mesaj de eroare.

Sursa: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Timestamp-ul:

Mai mult de la multicatenari