Tutvustame uut MultiChaini rahakotti PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Uue MultiChaini rahakoti väljakuulutamine

Oluline samm jõudluse ja mastaapsuse osas

Pärast kahekuulist intensiivset arendust ja testimist anname uhkusega välja uusima MultiChaini alfa koos täielikult ümber kirjutatud sõlmesisese rahakotiga. See uus rahakott muudab MultiChainis tehingute loomise, vastuvõtmise ja salvestamise jõudlust ja mastaapsust.

Enne üksikasjadesse laskumist lubage mul esitada kontekst. Kui alustasime MultiChaini arendamist, otsustasime seda kasutada Bitcoin Core, avaliku bitcoini võrgu standardsõlm, lähtepunktiks. Programmeerimise mõttes tähendab see, et MultiChain on bitcoini tarkvara "kahvel". Meie peamine põhjendus oli, et bitcoin oli (ja on jätkuvalt) kõrgeima väärtusega ja lahingutes testitud krüptovaluutade ökosüsteem.

Positiivne on see, et see otsus aitas meil kiiresti turule jõuda, võrreldes plokiahela sõlme nullist üles kodeerimisega. Vaatamata paljudele erinevustele avalike ja privaatsete plokiahelate vahel on neil suur hulk tehnilisi ühisosasid, sealhulgas peer-to-peer protokoll, tehingu- ja ploki struktuur, digitaalallkirjade loomine ja kontrollimine, konsensuse reeglid, võtmehaldus ja vajadus sõlme API. Bitcoin Core'ist eraldamine võimaldas meil kasutada selle küpsust ja keskenduda sellele, mida MultiChain plokiahelatele lisab – konfigureeritavus, lubade andmine ja natiivsete varade tugi. Selle tulemusena saime esimese alfa välja anda 2015. aasta juunis, vaid 6 kuud pärast arenduse alustamist.

Kuid nende eeliste kõrval pidime leppima ka tõsiasjaga, et Bitcoin Core'i mõned aspektid on halvasti üles ehitatud. Kuigi need töötavad väikestes mastaapides suurepäraselt, halveneb nende jõudlus kasutamise kasvades dramaatiliselt. Kuna avalik bitcoinivõrk on endiselt piiratud mõne tehinguga sekundis, ei ole see enamiku Bitcoin Core'i kasutajate jaoks pikka aega probleemiks. Kuid privaatsete plokiahelate puhul, mille eesmärk on teha sadu või tuhandeid tehinguid sekundis, teadsime, et varem või hiljem tuleb need kitsaskohad kõrvaldada.

Bitcoin Core'i rahakott

Bitcoin Core'i rahakott oli alati nendest valupunktidest kõige olulisem. Selle ülesanne on salvestada tehingud, mis on sõlme jaoks eriti olulised, kuna need hõlmavad sellele kuuluvat plokiahela aadressi või "ainult vaatamiseks” aadress, kelle tegevust see jälgib. Näiteks iga tehing, mis saadab raha sõlme või sõlmest, tuleb salvestada selle sõlme rahakotti. Ja iga kord, kui sõlm loob tehingu, peab ta otsima ühte või mitut eelmiste rahakotitehingute "kasutamata väljundit", mida uus tehing kulutab.

Mis siis Bitcoin Core'ilt päritud rahakotil viga on? Tegelikult kolm asja:

  • Kõik rahakotitehingud salvestatakse mällu. See põhjustab aeglaseid käivitusaegu ja kiiresti kasvavat mälukasutust.
  • Paljud toimingud teostavad ebaefektiivset "täielikku skannimist" iga rahakoti tehingu kohta, olgu see siis vana või uus.
  • Kõik rahakotis olevad tehingud salvestatakse täielikult, sealhulgas suvalised metaandmed, millel pole sõlme vaatenurgast mingit tähendust ja mis on juba kettal plokiahelas salvestatud. See on väga raiskav.

Tagajärjeks on see, et umbes 20,000 200,000 tehingu salvestamisega aeglustub Bitcoin Core'i rahakott märkimisväärselt. Umbes 8 80 pärast hakkab see praktiliselt seisma. Veelgi hullem, kuna MultiChaini plokiahel võimaldab kuni XNUMX MB metaandmeid tehingu kohta (võrreldes bitcoini XNUMX baidiga), võivad rahakoti mälunõuded kiiresti kasvada isegi väikese tehingute arvu korral.

Oluline on selgitada, et need puudused kehtivad ainult Bitcoin Core'i kohta rahakott, mitte selle üldise tehingute töötlemise võime. Teisisõnu saab see mugavalt töödelda ja salvestada miljoneid (või isegi miljardeid) tehinguid, mis ei ole seotud tema enda aadressidega, kuna neid hoitakse pigem kettal kui mälus. Näiteks kasutavad paljud populaarsed bitcoini börsid ja rahakotid Bitcoin Core'i sellisel kujul, nagu nad on, kuid salvestavad oma tehingud pigem väliselt kui sõlme sees.

MultiChaini uus rahakott

Oleksime võinud esitada MultiChaini kasutajatele sama nõudmise, et nad salvestaksid oma tehingud väljaspool sõlme. Kuid see ei tundunud õige lahendus, sest see raskendaks oluliselt iga ketis osaleja seadistamist ja hooldust. Nii et selle asemel hammustsime kuuli ja kirjutasime rahakoti maast madalast ümber.

Mille poolest uus rahakott erineb? Kui teil on andmebaasidega kogemusi, võivad vastused olla ilmsed:

  • Rahakoti tehingute mällu hoidmise asemel salvestatakse need sobivas vormingus kettale, kust huvipakkuvad tehingud vajadusel välja otsitakse.
  • Selle asemel, et teha täielikku rahakoti skannimist, "indekseeritakse" tehingud mitmel viisil, et võimaldada teatud kriteeriumidele vastavad tehingud kiiresti tuvastada.
  • Rahakotti ei salvestata tehingute metaandmeid, mis on suuremad kui 256 baiti. Selle asemel sisaldab rahakott osutit selle metaandmete asukohale plokiahelas endas.

Teisisõnu oleme sõlmesisese rahakoti ümber ehitanud, et see oleks korralikult andmebaasipõhine (kasutades TaseDB), selle asemel, et tugineda naiivsele mälustruktuurile, mida ei saa tõhusalt otsida. Pole üllatav, et erinevus (mõõdetuna 3.4 GHz Intel Core i7 puhul) on üsna dramaatiline:

MultiChaini rahakoti tehingute läbilaskevõime

Memory Usage

Graafikud näitavad, et kui vana rahakott sisaldab 250,000 3 tehingut, langeb selle saatmiskiirus 600 tx/sek ja see lisab sõlme mälukasutusele 100 MB. Seevastu uus rahakott toetab üle 90 tx/s ja lisab ainult 6 MB. Lõpetasime selleks hetkeks vana rahakoti testimise, kuid isegi 8–100 miljoni salvestatud tehinguga jätkab uus rahakott üle 250 tx/sek saatmist ja selle tipus on kasutatud RAM-i umbes XNUMX MB (andmebaasi vahemällu salvestamise tõttu).

Need testid viidi läbi realistlikes tingimustes, kus sõlme rahakotis oli mitu aadressi ja vara (ja seega palju kulutamata tehinguväljundeid). Idealiseeritud stsenaariumi korral (üks aadress, üks vara, mõned UTXO-d) oli püsiv saatmiskiirus üle 400 tx/s. Mõlemal juhul oleme selle ümberkirjutamise osana puhta sisemise liidese taga korralikult koondanud kõik rahakoti funktsioonid. See muudab teiste andmebaasimootorite toetamise tulevikus veelgi suurema töökindluse ja kiiruse jaoks lihtsaks.

Kordame veel kord, kõik need numbrid viitavad kiirusele, millega sõlm saab oma kohalikus rahakotis tehinguid luua, saata ja talletada, mitte aga teiste loodud tehingute töötlemise kiirusele. Üldise võrgu läbilaskevõime jaoks suudab MultiChain praegu töödelda 200–800 tx/s, olenevalt riistvarast, millel see töötab. (Olge skeptiline mis tahes plokiahela tarkvara suhtes, mis lubab tavalise riistvara puhul selliseid numbreid nagu 100,000 XNUMX tx/sek, sest kitsaskoht on digitaalallkirja kontrollimine, mille teostamine võtab reaalajas. Kui sõlmed ei kontrolli üksikute tehingute allkirju, ei saa plokiahelat kasutada üle usalduse. piirid, mis ei ole parem kui tavaline hajutatud andmebaas.)

Lõpetuseks tahaksin mainida järgmist MultiChaini suuremat funktsiooni, mis nõudis selle rahakoti ümberkirjutamist. See funktsioon, mida nimetatakse voogudeks, pakub kõrgetasemelist abstraktsiooni ja API-d üldotstarbeliseks andmete salvestamiseks plokiahelas. Voogu võib pidada aegridade või võtmeväärtuste andmebaasiks, millele on lisatud plokiahelaga seotud eelised: detsentraliseerimine, digitaalallkirjad, ajatempli ja muutumatus. Teame paljusid plokiahela kasutusjuhtumeid, mis võiksid seda funktsiooni kasutada, ja teeme juba kõvasti tööd selle loomise kallal. Vaadake seda ruumi.

Palun postitage kõik kommentaarid LinkedIn.

Tehniline lisa

Alates versioonist MultiChain alfa 22 saate kontrollida, milline rahakoti versioon praegu töötab, uurides walletdbversion väli getinfo or getwalletinfo API kõned. Väärtus 1 tähendab algset Bitcoin Core rahakotti ja 2 tähendab uut MultiChaini rahakotti.

Kui käivitate MultiChaini uue versiooni olemasolevas ketis, ei lülitu see kohe uuele rahakotile. Saate rahakoti uuendada, peatades sõlme ja käivitades seejärel uuesti multichaind koos parameetritega -walletdbversion=2 –rescan. Saate alandada samamoodi kasutades –walletdbversion=1 –rescan.

Vaikimisi, kui käivitate uue ahela sõlme, kasutab see automaatselt uut rahakotti. Saate seda muuta, käivitades multichaind esimest korda parameetriga –walletdbversion=1.

Uue rahakotiga kõik MultiChain API-d töötavad täpselt samamoodi nagu varem, välja arvatud vanad tehingute päringu API-d getreceivedbyaddress, listreceivedbyaddress ja listtransactions (kasutamine listwallettransactions or listaddresstransactions selle asemel). Lisaks ei toeta uus rahakott API-kõnesid ega parameetreid, mis on seotud Bitcoin Core'i halvasti rakendatud ja peagi kasutusest loobuva kontode mehhanismiga, mida MultiChain kunagi korralikult ei toetanud. Need kõned on veateate korral ohutult keelatud.

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

Ajatempel:

Veel alates Mitmeharuline