MultiChain 2.1: variabelen en bibliotheken

Bronknooppunt: 1587135

Slimme filters een stuk slimmer maken

Vandaag zijn we verheugd om MultiChain 2.1 uit te brengen, met twee belangrijke nieuwe functies voor MultiChain-ontwikkelaars.

Anderhalf jaar geleden werd MultiChain 2.0 geïntroduceerd Slimme filters, waarmee aangepaste logica kan worden ingebed in een blockchain voor het valideren van transacties en gegevens. Slimme filters zijn conceptueel vergelijkbaar met de "slimme contracten" die worden aangeboden door andere blockchain-platforms, maar hebben een ander ontwerp om te passen bij het snellere transactiemodel van MultiChain.

Smart Filters zijn er in twee varianten: transactiefilters en streamfilters. Een transactiefilter valideert on-chain transacties in hun geheel, door hun inputs, outputs en metadata te onderzoeken. Als een transactie niet door het filter komt, wordt deze door elk knooppunt in het netwerk geweigerd. Een stroomfilter valideert individuele items die naar een MultiChain-stream, kijkend naar hun sleutel(s), uitgever(s) en on-chain of off-chain data, in JSON, tekst of binair formaat. Als een item niet door het filter komt, wordt het als ongeldig gemarkeerd en worden de gegevens ervan verborgen door elk knooppunt dat op de stream is geabonneerd.

Beide soorten Smart Filter zijn geschreven in JavaScript en draaien binnen een deterministische versie van die van Google V8, de supersnelle JavaScript-engine die Chrome, Node.js en vele andere platforms aandrijft. Eenvoudige filters zijn eenvoudig te coderen en te begrijpen. Hier is bijvoorbeeld een stroomfilter dat valideert dat items ten minste twee sleutels hebben:

functie filterstreamitem() {var item=getfilterstreamitem(); // callback-functie als (item.keys.length2) retourneert "Ten minste twee sleutels vereist"; }

Over het algemeen hebben we geweldige feedback gekregen over slimme filters, maar we hebben ook herhaaldelijk gehoord over twee manieren waarop we ze nog beter kunnen maken. Ten eerste willen veel gebruikers filters die informatie kunnen lezen die op de blockchain staat, maar niet binnen de transactie of het stroomitem dat wordt gevalideerd. Gebruiksvoorbeelden zijn onder meer een veranderende lijst van toegestane landen, wisselkoersen die worden verstrekt door een extern "orakel" of een schakelaar om bepaalde regels om te schakelen.

Ten tweede willen sommige ontwikkelaars een set JavaScript-functies in meerdere filters gebruiken, zonder code te dupliceren. Ze willen deze functies ook kunnen updaten, een bug repareren of een aantal nieuwe situaties dekken, zonder hun bestaande filters uit te schakelen en nieuwe in hun plaats te maken. Gedeelde code kan bijvoorbeeld toepassingsspecifieke logica bevatten, een bibliotheek van derden voor het valideren van JSON's of het parseren van de inhoud van een pdf.

MultiChain 2.1 introduceert twee nieuwe soorten on-chain entiteiten, variabelen en bibliotheken, om aan deze behoeften te voldoen.

Variabelen

Laten we beginnen met MultiChain-variabelen. Deze werken ongeveer zoals die in reguliere programmeertalen, maar met een blockchain-twist. Elk aantal benoemde variabelen kan op de blockchain worden gemaakt. Elke variabele heeft een dynamische set adressen waarvan de waarde mag worden bijgewerkt, en deze set wordt beheerd door een of meer variabelebeheerders (standaard alleen de maker van de variabele). Variabelen worden gemaakt of bijgewerkt in een blockchain-transactie, die kan worden verzonden met behulp van een eenvoudige API-opdracht op hoog niveau. Als alternatief kunnen API's op een lager niveau worden gebruikt om complexe transacties te bouwen die atomisch een of meer variabelen instellen, streamitems schrijven, activa overdragen, machtigingen wijzigen, enzovoort.

De waarde van de variabele zelf kan elke JSON-structuur bevatten, inclusief getallen, strings, booleans, geneste objecten en arrays, en wordt on-chain opgeslagen in de efficiënte UBJSON serialisatie formaat. Natuurlijk kan Smart Filters de huidige waarde van een variabele opvragen met behulp van een eenvoudige callback-functie. Maar omdat dit een blockchain is, is ook de volledige geschiedenis van de waarden en schrijvers van de variabele beschikbaar en kan deze geheel of gedeeltelijk worden opgehaald met een andere callback-functie. Om de ontwikkeling te vergemakkelijken, zijn deze callbacks ook beschikbaar via de applicatiegerichte API.

bibliotheken

Laten we verder gaan met bibliotheken, de grotere broer van variabelen. Net als bij variabelen kan een onbeperkt aantal benoemde bibliotheken op de blockchain worden gemaakt. Maar bibliotheken hebben een uitgebreider updatemodel, met drie beschikbare modi: onveranderlijk, moment en onder voorbehoud van goedkeuring.

Eenmaal een onveranderlijk bibliotheek is gemaakt, kan de code nooit worden gewijzigd. Een bibliotheek met moment updates kunnen worden gewijzigd als een variabele, met een reeks adressen die afzonderlijk de code kunnen vervangen. Maar in een bibliotheek met onder voorbehoud van goedkeuring updates, wordt een update pas toegepast nadat deze is goedgekeurd door een bepaald deel van de wereldwijde beheerders van de blockchain. Deze laatste modus biedt een goede afweging tussen veiligheid en flexibiliteit.

De code voor een bibliotheek is geschreven in regulier JavaScript en definieert een of meer functies die Smart Filters kunnen gebruiken. Net als bij variabelen worden bibliotheken gemaakt of bijgewerkt in een speciale transactie, eenvoudig verzonden met behulp van de API. Wanneer een Smart Filter wordt gemaakt, worden de vereiste bibliotheken geleverd in een optionele parameter. Een bibliotheek draait altijd in de context van het filter waarvoor het nodig is, zodat het waar nodig Smart Filter-callbacks kan gebruiken. MultiChain biedt uitgebreide functionaliteit voor het lokaal testen (en terugdraaien) van bibliotheken en hun updates, alvorens een wijziging aan te brengen in de blockchain.

Inpakken

Zoals met alle functies met betrekking tot de regels van de blockchain, zijn variabelen en bibliotheken beschikbaar in zowel de Community- als Enterprise-edities van MultiChain 2.1. Onze documentatie voor ontwikkelaars biedt een gedetailleerde beschrijving van het nieuwe JSON-RPC API's en Smart Filter-terugbelverzoeken beschikbaar. Om de nieuwe functies te gebruiken op een blockchain die al actief is, migreert u eerst de knooppunten naar MultiChain 2.1 en daarna upgrade het protocol van de keten naar versie 20012.

Dus wat nu? De komende maanden zullen we ons concentreren op gedetailleerd en intensief werk onder de motorkap, om de prestaties en gelijktijdigheid van MultiChain te verbeteren terwijl het onder aanzienlijke belasting staat. Dit zal de responsiviteit verhogen van applicaties die een node moeten opvragen terwijl deze honderden of duizenden nieuwe transacties per seconde blijft verwerken.

In de tussentijd wensen wij allemaal van het MultiChain-team onze gebruikers en klanten gezondheid en gezond verstand voor het komende jaar. We weten dat dit voor iedereen moeilijke tijden zijn en we kijken ernaar uit om, zodra het veilig is, weer terug te keren naar het normale ritme van vergaderingen en conferenties.

Plaats eventuele opmerkingen op LinkedIn.

Tijdstempel:

Meer van Multichain