Aankondiging van de nieuwe MultiChain-portemonnee PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Aankondiging van de nieuwe MultiChain-portemonnee

Een belangrijke stap voorwaarts voor prestaties en schaalbaarheid

Na twee maanden van intensieve ontwikkeling en testen, zijn we trots om de nieuwste alpha van MultiChain uit te brengen, met een volledig herschreven in-node wallet. Deze nieuwe portemonnee transformeert de prestaties en schaalbaarheid van het creรซren, ontvangen en opslaan van transacties in MultiChain.

Voordat we ingaan op de details, wil ik eerst wat context geven. Toen we begonnen met het ontwikkelen van MultiChain, hebben we de beslissing genomen om te gebruiken Bitcoin Core, het standaardknooppunt voor het openbare bitcoin-netwerk, als uitgangspunt. Programmatisch betekent dit dat MultiChain een 'fork' is van de bitcoin-software. Onze primaire redenering was dat bitcoin op de een of andere manier het hoogst gewaardeerde en meest geteste cryptocurrency-ecosysteem was (en blijft).

Aan de positieve kant hielp deze beslissing ons om snel op de markt te komen, vergeleken met het helemaal opnieuw coderen van een blockchain-knooppunt. Ondanks de vele verschillen tussen publieke en private blockchains, delen ze een grote hoeveelheid technische raakvlakken, waaronder het peer-to-peer-protocol, transactie- en blokstructuur, creatie en verificatie van digitale handtekeningen, consensusregels, sleutelbeheer en de behoefte aan een knooppunt-API. Door te forceren van Bitcoin Core konden we de volwassenheid ervan benutten en ons concentreren op wat MultiChain toevoegt aan blockchains - configureerbaarheid, toestemming en native asset-ondersteuning. Hierdoor konden we de eerste alpha in juni 2015 uitbrengen, slechts 6 maanden na het starten van de ontwikkeling.

Naast deze voordelen moesten we echter ook accepteren dat sommige aspecten van Bitcoin Core slecht zijn ontworpen. Hoewel ze prima werken op kleine schaal, nemen hun prestaties dramatisch af naarmate het gebruik toeneemt. Met het openbare bitcoin-netwerk nog steeds beperkt tot een paar transacties per seconde, zal dit voor de meeste Bitcoin Core-gebruikers lange tijd geen probleem zijn. Maar met privรฉ-blockchains die op honderden of duizenden transacties per seconde mikten, wisten we dat vroeg of laat deze knelpunten moesten worden weggenomen.

De portemonnee van Bitcoin Core

De 'portemonnee' binnen Bitcoin Core was altijd de meest cruciale van deze pijnpunten. Het is zijn taak om de transacties op te slaan die van bijzonder belang zijn voor het knooppunt, omdat het een blockchain-adres betreft dat het bezit of een "alleen kijkenโ€Adres waarvan de activiteit wordt bijgehouden. Elke transactie die geld naar of van een knooppunt stuurt, moet bijvoorbeeld worden opgeslagen in de portemonnee van dat knooppunt. En elke keer dat een knooppunt een transactie maakt, moet het zoeken naar een of meer "niet-uitgegeven outputs" van eerdere portefeuilletransacties die de nieuwe transactie zal uitgeven.

Dus wat is er mis met de portemonnee die we hebben geรซrfd van Bitcoin Core? Drie dingen eigenlijk:

  • Alle portefeuilletransacties worden in het geheugen bewaard. Dit zorgt voor trage opstarttijden en een snel toenemend geheugengebruik.
  • Veel bewerkingen voeren een inefficiรซnte "volledige scan" uit van elke transactie in de portefeuille, zowel oud als nieuw.
  • Elke transactie in de wallet wordt volledig opgeslagen, inclusief willekeurige "metadata" die vanuit het oogpunt van de node geen betekenis heeft en al op de blockchain op schijf is opgeslagen. Dit is erg verkwistend.

Het gevolg is dat de portefeuille van Bitcoin Core met ongeveer 20,000 opgeslagen transacties aanzienlijk vertraagt. Na ongeveer 200,000 komt het praktisch tot stilstand. Erger nog, aangezien een MultiChain-blockchain tot 8 MB metadata per transactie toestaat (vergeleken met de 80 bytes van bitcoin), kunnen de geheugenvereisten van de portemonnee snel stijgen, zelfs met een klein aantal transacties.

Het is belangrijk om te verduidelijken dat deze tekortkomingen alleen van toepassing zijn op die van Bitcoin Core portemonnee, in plaats van de algemene transactieverwerkingscapaciteit. Met andere woorden, het kan gemakkelijk miljoenen (of zelfs miljarden) transacties verwerken en opslaan die geen betrekking hebben op zijn eigen adressen, omdat deze op schijf worden bewaard in plaats van in het geheugen. Veel populaire bitcoin-uitwisselingen en wallets gebruiken bijvoorbeeld Bitcoin Core zoals het is, maar slaan hun eigen transacties extern op in plaats van in het knooppunt.

De nieuwe portemonnee van MultiChain

We hadden dezelfde vraag van MultiChain-gebruikers kunnen stellen om hun eigen transacties buiten het knooppunt op te slaan. Dit voelde echter niet als de juiste oplossing omdat het de installatie en het onderhoud voor elk van de deelnemers van een keten enorm zou bemoeilijken. Dus in plaats daarvan hebben we de kogel beet en de portemonnee vanaf de grond opnieuw herschreven.

Hoe verschilt de nieuwe portemonnee? Als je ervaring hebt met databases, kunnen de antwoorden voor de hand liggen:

  • In plaats van de portefeuilletransacties in het geheugen te bewaren, worden ze op schijf in een geschikt formaat opgeslagen, waarbij transacties van belang indien nodig worden opgehaald.
  • In plaats van volledige portefeuillescans uit te voeren, worden de transacties op verschillende manieren "geรฏndexeerd", zodat transacties die aan bepaalde criteria voldoen, snel kunnen worden gelokaliseerd.
  • Transactiemetagegevens die groter zijn dan 256 bytes, worden niet opgeslagen in de portemonnee. In plaats daarvan bevat de portemonnee een aanwijzer naar de positie van die metadata in de blockchain zelf.

Met andere woorden, we hebben de in-node-portemonnee opnieuw opgebouwd om goed database-gestuurd te zijn (met behulp van NiveauDB), in plaats van te vertrouwen op een naรฏeve in-memory structuur die niet efficiรซnt kan worden doorzocht. Het is niet verwonderlijk dat het verschil (gemeten op een 3.4 GHz Intel Core i7) nogal dramatisch is:

Doorvoer van multiChain-portefeuilletransacties

Geheugengebruik

De grafieken laten zien dat, zodra de oude portefeuille 250,000 transacties bevat, de verzendsnelheid daalt tot 3 tx / sec en 600 MB toevoegt aan het geheugengebruik van de node. De nieuwe portemonnee ondersteunt daarentegen meer dan 100 tx / sec en voegt slechts 90 MB toe. We zijn op dit moment gestopt met het testen van de oude portemonnee, maar zelfs met 6-8 miljoen opgeslagen transacties, blijft de nieuwe portemonnee meer dan 100 tx / sec verzenden, en het komt uit op ongeveer 250 MB RAM-geheugen (vanwege databasecaching).

Deze tests zijn uitgevoerd onder realistische omstandigheden, met meerdere adressen en activa (en dus veel niet-uitgegeven transactie-output) in de portemonnee van de node. In een geรฏdealiseerd scenario (รฉรฉn adres, รฉรฉn item, weinig UTXO's) was de aanhoudende verzendsnelheid meer dan 400 tx / s. Hoe dan ook, als onderdeel van deze herschrijving hebben we ook alle functionaliteit van de portemonnee goed geabstraheerd achter een schone interne interface. Dit zal het in de toekomst gemakkelijk maken om andere database-engines te ondersteunen, voor een nog grotere robuustheid en snelheid.

Nogmaals, al deze nummers verwijzen naar de snelheid waarmee een knooppunt transacties in zijn lokale portemonnee kan maken, verzenden en opslaan, in plaats van de doorvoer ervan in termen van verwerkingstransacties die door anderen zijn gemaakt. Voor algemene netwerkdoorvoer kan MultiChain momenteel 200 tot 800 tx / sec verwerken, afhankelijk van de hardware waarop het draait. (Wees sceptisch over alle veelbelovende cijfers van blockchain-software zoals 100,000 tx / sec op gewone hardware, want het knelpunt is verificatie van digitale handtekeningen, die in realtime wordt uitgevoerd. Als knooppunten de afzonderlijke handtekeningen van transacties niet verifiรซren, kan een blockchain onmogelijk worden gebruikt voor vertrouwen) grenzen, waardoor het niet beter is dan een reguliere gedistribueerde database.)

Om te eindigen, zou ik de volgende belangrijke functie willen noemen die naar MultiChain komt, waarvoor deze portemonnee moest worden herschreven. Deze functie, streams genaamd, biedt een abstractie op hoog niveau en een API voor algemene gegevensopslag op een blockchain. Je kunt een stream zien als een tijdreeks- of sleutelwaarde-database, met de toegevoegde blockchain-gerelateerde voordelen van decentralisatie, digitale handtekeningen, tijdstempels en onveranderlijkheid. We kennen veel use-cases voor blockchain die deze functionaliteit zouden kunnen gebruiken, en we zijn al druk bezig met het bouwen ervan. Bekijk deze ruimte.

Plaats eventuele opmerkingen op LinkedIn.

Technisch addendum

Vanaf MultiChain alpha 22 kunt u controleren welke versie van de wallet momenteel wordt uitgevoerd door de walletdbversion gebied van de getinfo or getwalletinfo API-aanroepen. Een waarde van 1 betekent de originele Bitcoin Core-portemonnee, en 2 betekent de nieuwe MultiChain-portemonnee.

Als u de nieuwe versie van MultiChain op een bestaande ketting uitvoert, zal deze niet onmiddellijk overschakelen naar de nieuwe portemonnee. U kunt de portemonnee upgraden door het knooppunt te stoppen en vervolgens opnieuw uit te voeren multichaind met de parameters -walletdbversion=2 โ€“rescan. U kunt op dezelfde manier downgraden met โ€“walletdbversion=1 โ€“rescan.

Wanneer u een knooppunt in een nieuwe keten start, wordt standaard automatisch de nieuwe portemonnee gebruikt. Je kunt dit veranderen door te rennen multichaind voor het eerst met de parameter โ€“walletdbversion=1.

Met de nieuwe portemonnee allemaal MultiChain-API's werken op precies dezelfde manier als voorheen, met uitzondering van de oude transactievraag-API's getreceivedbyaddress, listreceivedbyaddress en listtransactions (gebruik listwallettransactions or listaddresstransactions in plaats daarvan). Bovendien ondersteunt de nieuwe portemonnee geen API-aanroepen en parameters met betrekking tot het slecht geรฏmplementeerde en binnenkort verouderde 'accounts'-mechanisme van Bitcoin Core, dat nooit goed werd ondersteund door MultiChain. Deze oproepen zijn veilig uitgeschakeld met een foutmelding.

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

Tijdstempel:

Meer van Multichain