Annoncering af den nye MultiChain-pung PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Annoncerer den nye MultiChain-tegnebog

Et vigtigt skridt fremad for ydeevne og skalerbarhed

Efter to måneders intensiv udvikling og test er vi stolte af at frigive den seneste alfa fra MultiChain med en fuldstændig omskrevet in-node-pung. Denne nye tegnebog transformerer ydeevnen og skalerbarheden ved oprettelse, modtagelse og lagring af transaktioner i MultiChain.

Inden vi kommer ind i detaljerne, lad mig give lidt kontekst. Da vi begyndte at udvikle MultiChain, tog vi beslutningen om at bruge Bitcoin Core, standardknudepunktet for det offentlige bitcoin-netværk, som udgangspunkt. I programmeringstermer betyder det, at MultiChain er en "gaffel" af bitcoin-softwaren. Vores primære begrundelse var, at bitcoin var (og fortsætter med at være) det højest værdsatte og mest kamptestede kryptovaluta-økosystem på nogen måde.

På plussiden hjalp denne beslutning os med at komme hurtigt på markedet sammenlignet med at kode en blockchain-knude fra bunden. På trods af de mange forskelle mellem offentlige og private blockchains deler de en stor mængde teknisk fælles grundlag, herunder peer-to-peer-protokollen, transaktions- og blokstruktur, oprettelse og verifikation af digital signatur, konsensusregler, nøglestyring og behovet for en node API. Forking fra Bitcoin Core gav os mulighed for at udnytte dens modenhed og fokusere på, hvad MultiChain tilføjer til blockchains – konfigurerbarhed, tilladelser og native asset support. Som et resultat var vi i stand til at frigive den første alfa i juni 2015, kun 6 måneder efter start af udvikling.

Men ud over disse fordele måtte vi også acceptere det faktum, at nogle aspekter af Bitcoin Core er dårligt udformet. Selvom de fungerer fint i små skalaer, forringes deres ydeevne dramatisk, efterhånden som forbruget vokser. Med det offentlige bitcoin-netværk stadig begrænset til et par transaktioner pr. sekund, vil dette ikke være et problem for de fleste Bitcoin Core-brugere i lang tid. Men med private blockchains, der sigter mod hundreder eller tusinder af transaktioner i sekundet, vidste vi, at før eller siden skulle disse flaskehalse fjernes.

Bitcoin Cores tegnebog

"Pungen" i Bitcoin Core var altid den mest afgørende af disse smertepunkter. Dens opgave er at gemme de transaktioner, der er af særlig relevans for noden, fordi de involverer en blockchain-adresse, som den ejer eller en "kun se” adresse, hvis aktivitet den sporer. For eksempel skal enhver transaktion, der sender penge til eller fra en node, gemmes i nodens tegnebog. Og hver gang en node opretter en transaktion, skal den søge efter en eller flere "ubrugte output" af tidligere tegnebogstransaktioner, som den nye transaktion vil bruge.

Så hvad er der galt med den tegnebog, vi har arvet fra Bitcoin Core? Faktisk tre ting:

  • Alle pungtransaktioner gemmes i hukommelsen. Dette forårsager langsomme opstartstider og hurtigt stigende hukommelsesforbrug.
  • Mange operationer udfører en ineffektiv "fuld scanning" af hver transaktion i tegnebogen, uanset om den er gammel eller ny.
  • Hver transaktion i tegnebogen er gemt i sin helhed, inklusive eventuelle vilkårlige "metadata", som ikke har nogen betydning fra nodens perspektiv og allerede er gemt i blockchainen på disken. Dette er meget spild.

Konsekvensen er, at med omkring 20,000 lagrede transaktioner bremses Bitcoin Cores tegnebog betydeligt. Efter 200,000 eller deromkring går det næsten i stå. Endnu værre, da en MultiChain blockchain tillader op til 8 MB metadata pr. transaktion (sammenlignet med bitcoins 80 bytes), kan tegnebogens hukommelseskrav flyde hurtigt selv med et lille antal transaktioner.

Det er vigtigt at præcisere, at disse mangler kun gælder for Bitcoin Core's pungsnarere end dens generelle transaktionsbehandlingskapacitet. Med andre ord kan den nemt behandle og gemme millioner (eller endda milliarder) af transaktioner, som ikke vedrører dens egne adresser, da disse opbevares på disken i stedet for i hukommelsen. For eksempel bruger mange populære bitcoin-børser og tegnebøger Bitcoin Core, som de er, men gemmer deres egne transaktioner eksternt i stedet for inde i noden.

MultiChains nye pung

Vi kunne have stillet samme krav til MultiChain-brugere om at gemme deres egne transaktioner uden for noden. Dette føltes dog ikke som den rigtige løsning, fordi det i høj grad ville komplicere opsætningen og vedligeholdelsen for hver af en kædes deltagere. Så i stedet bed vi i spidsen og omskrev tegnebogen fra bunden.

Hvordan adskiller den nye tegnebog sig? Hvis du har nogen erfaring med databaser, kan svarene være indlysende:

  • I stedet for at opbevare tegnebogens transaktioner i hukommelsen, gemmes de på disken i et passende format, hvor transaktioner af interesse hentes, når det er nødvendigt.
  • I stedet for at udføre fulde tegnebogsscanninger, "indekseres" transaktionerne på forskellige måder for at gøre det muligt hurtigt at lokalisere dem, der opfylder bestemte kriterier.
  • Et stykke transaktionsmetadata, der er større end 256 bytes, gemmes ikke i tegnebogen. I stedet indeholder tegnebogen en pointer til den pågældende metadatas position i selve blockchainen.

Med andre ord, vi har genopbygget in-node tegnebogen til at være korrekt databasedrevet (vha. NiveauDB), i stedet for at stole på en naiv struktur i hukommelsen, som ikke kan søges effektivt. Ikke overraskende er forskellen (målt på en 3.4 GHz Intel Core i7) ret dramatisk:

MultiChain tegnebogstransaktionsgennemstrømning

Hukommelsesanvendelse

Graferne viser, at når først den gamle tegnebog indeholder 250,000 transaktioner, falder dens sendehastighed til 3 tx/sek, og den tilføjer 600 MB til nodens hukommelsesforbrug. Derimod holder den nye tegnebog over 100 tx/sek og tilføjer kun 90 MB. Vi stoppede med at teste den gamle tegnebog på dette tidspunkt, men selv med 6-8 millioner lagrede transaktioner, fortsætter den nye tegnebog med at sende over 100 tx/sek., og den fylder på omkring 250 MB brugt RAM (på grund af databasecaching).

Disse tests blev udført under realistiske forhold med flere adresser og aktiver (og derfor mange ubrugte transaktionsoutput) i nodens tegnebog. I et idealiseret scenario (én adresse, et aktiv, få UTXO'er) var den vedvarende sendehastighed over 400 tx/s. Uanset hvad, som en del af denne omskrivning, har vi også korrekt abstraheret al tegnebogens funktionalitet bag en ren intern grænseflade. Dette vil gøre det nemt at understøtte andre databasemotorer i fremtiden, for endnu større robusthed og hastighed.

For at gentage, refererer alle disse tal til den hastighed, hvormed en node kan oprette, sende og gemme transaktioner i sin lokale tegnebog, snarere end dens gennemstrømning i form af behandling af transaktioner skabt af andre. For generel netværksgennemstrømning kan MultiChain i øjeblikket behandle 200 til 800 tx/sek, afhængigt af den hardware, den kører på. (Vær skeptisk over for enhver blockchain-software, der lover tal som 100,000 tx/sek på almindelig hardware, fordi flaskehalsen er verifikation af digital signatur, som tager realtid at udføre. Hvis noder ikke verificerer individuelle transaktionssignaturer, kan en blockchain umuligt bruges på tværs af tillid grænser, hvilket gør den ikke bedre end en almindelig distribueret database.)

Til slut vil jeg gerne nævne den næste store funktion, der kommer til MultiChain, som krævede denne tegnebogs omskrivning. Denne funktion, kaldet streams, giver en abstraktion på højt niveau og API til generel datalagring på en blockchain. Du kan tænke på en stream som en tidsserie- eller nøgleværdidatabase med de ekstra blockchain-relaterede fordele ved decentralisering, digitale signaturer, tidsstempling og uforanderlighed. Vi kender til mange blockchain use cases, der kunne bruge denne funktionalitet, og vi arbejder allerede hårdt på at opbygge den. Hold øje med dette rum.

Skriv eventuelle kommentarer på LinkedIn.

Teknisk tillæg

Startende i MultiChain alpha 22 kan du kontrollere, hvilken version af tegnebogen der kører i øjeblikket ved at undersøge walletdbversion felt af getinfo or getwalletinfo API-kald. En værdi på 1 betyder den originale Bitcoin Core tegnebog, og 2 betyder den nye MultiChain tegnebog.

Hvis du kører den nye version af MultiChain på en eksisterende kæde, vil den ikke umiddelbart skifte til den nye pung. Du kan opgradere tegnebogen ved at stoppe noden og derefter køre den igen multichaind med parametrene -walletdbversion=2 –rescan. Du kan nedgradere på samme måde vha –walletdbversion=1 –rescan.

Som standard, når du starter en node på en ny kæde, vil den automatisk bruge den nye tegnebog. Du kan ændre dette ved at køre multichaind for første gang med parameteren –walletdbversion=1.

Med den nye pung, alt sammen MultiChain API'er fungerer nøjagtigt på samme måde som før, med undtagelse af de gamle transaktionsforespørgsels-API'er getreceivedbyaddress, listreceivedbyaddress , listtransactions (brug listwallettransactions or listaddresstransactions i stedet). Derudover understøtter den nye tegnebog ikke API-kald og parametre relateret til Bitcoin Cores dårligt implementerede og snart forældede "konti"-mekanisme, som aldrig blev korrekt understøttet af MultiChain. Disse opkald er sikkert deaktiveret med en fejlmeddelelse.

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

Tidsstempel:

Mere fra multikæde