Tillkännage den nya MultiChain-plånboken PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Tillkännager den nya MultiChain plånboken

Ett viktigt steg framåt för prestanda och skalbarhet

Efter två månaders intensiv utveckling och testning, är vi stolta över att släppa den senaste alfa av MultiChain, med en helt omskriven in-node plånbok. Denna nya plånbok förändrar prestanda och skalbarhet för att skapa, ta emot och lagra transaktioner i MultiChain.

Innan vi går in på detaljerna, låt mig ge lite sammanhang. När vi började utveckla MultiChain tog vi beslutet att använda Bitcoin Core, standardnoden för det offentliga bitcoin -nätverket, som utgångspunkt. I programmerings termer betyder detta att MultiChain är en "gaffel" av bitcoin -programvaran. Vårt främsta resonemang var att bitcoin var (och fortsätter att vara) det högst värderade och mest stridsprövade kryptovalutaekosystemet, på något sätt.

På den positiva sidan hjälpte detta beslut oss att snabbt komma till marknaden, jämfört med att koda upp en blockchain -nod från grunden. Trots de många skillnaderna mellan offentliga och privata blockchains delar de en stor mängd teknisk gemensam grund, inklusive peer-to-peer-protokoll, transaktions- och blockstruktur, skapande och verifiering av digitala signaturer, konsensusregler, nyckelhantering och behovet av ett nod -API. Forking från Bitcoin Core gjorde det möjligt för oss att dra nytta av dess mognad och fokusera på vad MultiChain lägger till i blockchains - konfigurerbarhet, tillstånd och inbyggt tillgångsstöd. Som ett resultat kunde vi släppa den första alfan i juni 2015, bara 6 månader efter att utvecklingen startade.

Men vid sidan av dessa fördelar var vi också tvungna att acceptera det faktum att vissa aspekter av Bitcoin Core är dåligt arkitekterade. Även om de fungerar bra i små vågar, försämras deras prestanda dramatiskt när användningen ökar. Eftersom det offentliga bitcoin -nätverket fortfarande är begränsat till några få transaktioner per sekund kommer detta inte att vara ett problem för de flesta Bitcoin Core -användare på länge. Men med privata blockchains som syftar till hundratals eller tusentals transaktioner per sekund, visste vi att dessa flaskhalsar förr eller senare skulle behöva tas bort.

Bitcoin Core plånbok

"Plånboken" i Bitcoin Core var alltid den mest avgörande av dessa smärtpunkter. Dess uppgift är att lagra transaktioner som är särskilt relevanta för noden, eftersom de involverar en blockchain -adress som den äger eller en "endast klocka”Adress vars aktivitet den spårar. Till exempel måste varje transaktion som skickar pengar till eller från en nod lagras i den nodens plånbok. Och varje gång en nod skapar en transaktion måste den söka efter en eller flera "outnyttjade utdata" från tidigare plånbokstransaktioner som den nya transaktionen kommer att spendera.

Så vad är det för fel på plånboken som vi ärvde från Bitcoin Core? Egentligen tre saker:

  • Alla plånbokstransaktioner sparas i minnet. Detta orsakar långsam starttid och snabbt ökande minnesanvändning.
  • Många operationer utför en ineffektiv ”fullständig genomsökning” av varje transaktion i plånboken, oavsett om den är gammal eller ny.
  • Varje transaktion i plånboken lagras i sin helhet, inklusive godtyckliga "metadata" som inte har någon mening ur nodens perspektiv och redan är lagrade i blockchain på disken. Detta är mycket slöseri.

Konsekvensen är att med cirka 20,000 200,000 transaktioner lagrade, saktar Bitcoin Core plånbok avsevärt. Efter cirka 8 80 stannar det praktiskt taget. Ännu värre, eftersom en MultiChain -blockchain tillåter upp till XNUMX MB metadata per transaktion (jämfört med bitcoins XNUMX byte), kan plånbokens minneskrav ballong snabbt även med ett litet antal transaktioner.

Det är viktigt att klargöra att dessa brister endast gäller Bitcoin Core plånbok, snarare än dess allmänna transaktionshanteringskapacitet. Med andra ord kan den bekvämt bearbeta och lagra miljoner (eller till och med miljarder) transaktioner som inte relaterar till sina egna adresser, eftersom dessa lagras på hårddisken snarare än i minnet. Till exempel använder många populära bitcoin-börser och plånböcker Bitcoin Core som de är, men lagrar sina egna transaktioner externt snarare än inuti noden.

MultiChains nya plånbok

Vi kunde ha ställt samma krav från MultiChain -användare att lagra sina egna transaktioner utanför noden. Detta kändes dock inte som den rätta lösningen eftersom det skulle komplicera installationen och underhållet för var och en av kedjans deltagare. Så istället bet vi i kula och skrev om plånboken från grunden.

Hur skiljer sig den nya plånboken? Om du har erfarenhet av databaser kan svaren vara uppenbara:

  • I stället för att behålla plånbokstransaktionerna i minnet, lagras de på disken i ett lämpligt format, med transaktioner av intresse som hämtas vid behov.
  • Istället för att genomföra fullständiga plånbokssökningar, indexeras transaktionerna på olika sätt för att snabbt kunna hitta de som uppfyller särskilda kriterier.
  • Alla transaktionsmetadata som är större än 256 byte lagras inte i plånboken. Istället innehåller plånboken en pekare till metadatans position i själva blockchain.

Med andra ord har vi byggt om in-node-plånboken för att vara korrekt databasdriven (med NivåDB), snarare än att förlita sig på en naiv struktur i minnet som inte kan sökas effektivt. Inte överraskande är skillnaden (mätt på en 3.4 GHz Intel Core i7) ganska dramatisk:

Transaktionsflöde för MultiChain -plånbok

Minnesanvändning

Graferna visar att när den gamla plånboken innehåller 250,000 3 transaktioner sjunker sändningshastigheten till 600 tx/sek och den lägger till 100 MB till nodens minnesanvändning. Däremot håller den nya plånboken över 90 tx/sek och lägger bara till 6 MB. Vi slutade testa den gamla plånboken vid denna tidpunkt, men även med 8-100 miljoner lagrade transaktioner fortsätter den nya plånboken att skicka över 250 tx/sek, och den toppar med cirka XNUMX MB RAM-minne som används (på grund av databascachning).

Dessa tester utfördes under realistiska förhållanden, med flera adresser och tillgångar (och därför många outnyttjade transaktionsutgångar) i nodens plånbok. I ett idealiserat scenario (en adress, en tillgång, några UTXO) var den uthålliga sändningsfrekvensen över 400 tx/s. Hur som helst, som en del av denna omskrivning, har vi också abstraherat all plånbokens funktionalitet ordentligt bakom ett rent internt gränssnitt. Detta kommer att göra det enkelt att stödja andra databasmotorer i framtiden, för ännu större robusthet och snabbhet.

För att upprepa, hänvisar alla dessa nummer till den hastighet med vilken en nod kan skapa, skicka och lagra transaktioner i sin lokala plånbok, snarare än dess genomströmning när det gäller bearbetningstransaktioner som skapats av andra. För allmän nätverksgenomströmning kan MultiChain för närvarande bearbeta 200 till 800 tx/sek, beroende på hårdvaran den körs på. (Var skeptisk till alla blockchain -programvaror som lovar siffror som 100,000 XNUMX tx/sek på vanlig hårdvara, eftersom flaskhalsen är digital signaturverifiering, vilket tar realtid att utföra. Om noder inte verifierar enskilda transaktionssignaturer kan en blockchain omöjligt användas över förtroende gränser, vilket gör det inte bättre än en vanlig distribuerad databas.)

För att avsluta vill jag nämna nästa stora funktion som kommer till MultiChain, vilket krävde att denna plånbok skrevs om. Denna funktion, kallad strömmar, ger en abstraktion på hög nivå och API för datalagring för allmänna ändamål på en blockchain. Du kan tänka dig en ström som en tidsserie eller nyckelvärdesdatabas, med de extra blockchain-relaterade fördelarna med decentralisering, digitala signaturer, tidsstämpling och oföränderlighet. Vi känner till många blockchain -användningsfall som kan använda den här funktionen, och vi arbetar redan hårt med att bygga den. Övervaka den här ytan.

Skicka eventuella kommentarer på Link.

Tekniskt tillägg

Från och med MultiChain alpha 22 kan du verifiera vilken version av plånboken som för närvarande körs genom att undersöka walletdbversion fältet av getinfo or getwalletinfo API -anrop. Ett värde av 1 betyder den ursprungliga Bitcoin Core -plånboken och 2 betyder den nya MultiChain -plånboken.

Om du kör den nya versionen av MultiChain på en befintlig kedja går den inte omedelbart över till den nya plånboken. Du kan uppgradera plånboken genom att stoppa noden och sedan köra om multichaind med parametrarna -walletdbversion=2 –rescan. Du kan nedgradera på liknande sätt med –walletdbversion=1 –rescan.

Som standard, när du startar en nod på en ny kedja, kommer den automatiskt att använda den nya plånboken. Du kan ändra detta genom att köra multichaind för första gången med parametern –walletdbversion=1.

Med den nya plånboken, allt MultiChain API: er fungerar exakt på samma sätt som tidigare, med undantag för de gamla API: erna för transaktionsfrågor getreceivedbyaddress, listreceivedbyaddress och listtransactions (använda sig av listwallettransactions or listaddresstransactions istället). Dessutom stöder den nya plånboken inte API-anrop och parametrar relaterade till Bitcoin Cores dåligt implementerade och snart utfasade ”konton” -mekanism, som aldrig stöddes korrekt av MultiChain. Dessa samtal inaktiveras säkert med ett felmeddelande.

Källa: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Tidsstämpel:

Mer från Multikedja