Terugblik stage Blockchains en Substrate / Hamza Suwae

Blockchains en Substrate

Mijn naam is Hamza en ik ben onlangs afgestudeerd aan de Hogeschool Rotterdam. Ik besloot om mijn afstudeerstage te lopen bij OVSoftware omdat ze een gave blockchain-gerelateerd project hadden dat echt mijn aandacht trok. Ik had toen nooit eerder met blockchain gewerkt en wilde graag ervaring opdoen dus de beslissing was vrij makkelijk. Het project zelf was een project geïnitieerd door twee partijen; namelijk OVSoftware en BlockLab. Aangezien beide partijen geïnteresseerd waren in blockchain technologie, had ik de optie om bij een van de twee partijen op locatie aan de slag te gaan, dit is  BlockLab geworden. De onderzoeksvraag die ik wilde beantwoorden: Can Substrate be used as a viable SDK for Blockchain development?

Voordat we ingaan op het antwoord zal ik het eerst hebben over het vooronderzoek dat ik heb moeten doen. In zekere zin was dit project 90% onderzoeken en 10% ontwikkelen. Ik ben er vrij zeker van dat dit niet altijd het geval is, maar door een wankelende start aan het project zelf (mijn veel te grote scope) moest ik aardig wat inhalen. Om wat context op te bouwen ga ik eerst de volgende drie vragen behandelen:

Wat is een Blockchain?

Om te begrijpen waarom Substrate bestaat, is het noodzakelijk om een goed begrip te hebben van wat een blockchain is en wat er nodig is om er een te maken. Om aan de slag te gaan: een letterlijke definitie van een blockchain is zoals de naam al suggereert: een ketting van blokken. Een blockchain hoeft niet complex te zijn, het kan zo simpel zijn als een kale datastructuur die gegevensblokken met elkaar verbindt. Blockchains zijn handig omdat ze door hun ontwerp fraudebestendig zijn. Dit komt doordat elk blok in de ketting de hash van het vorige blok bevat. Een hash wordt verkregen door de informatie in het blok te verzamelen in combinatie met de hash van de parent (de parent is het vorige blok) en deze door een willekeurig hashfunctie te laten lopen die een unieke waarde terug geeft gebaseerd op de invoer. De insluiting van eerdere hashes geldt voor elk blok in de ketting tot aan het eerste blok, ook wel het genesisblok genoemd. Dus als er iets in een bepaald blok verandert, verandert de hash, wat betekent dat als een willekeurige blok N, N+1 blok(ken) voorafgaat, hun hashes opnieuw moeten worden berekend omdat de hash van de parent is veranderd. Dit zorgt ervoor dat als een blok eenmaal veel opeenvolgende blokken heeft, het niet kan worden gewijzigd zonder de opeenvolgende blokken te dwingen ook te veranderen. Zo’n herberekening zou een enorme rekenkracht vereisen en is tegenwoordig iets wat bijna onmogelijk te bereiken is. Als een ketting veel blokken heeft, wordt het steeds moeilijker om veranderingen in de ketting aan te brengen naarmate men dichter bij de origin besluit om de verandering door te voeren. Combineer dit met het feit dat blockchains van nature decentraal zijn, wat inhoudt dat meerdere computers in een netwerk dezelfde blockchain met dezelfde data bevatten. De enorme rekenkracht die de tamperer nodig had om een ketting te veranderen, zal niet worden weerspiegeld in de andere kopieën in de andere nodes, tenzij de andere meerderheid van de kettingen zich in dezelfde staat bevindt (wat dus niet kan tenzij dit een gecoördineerde aanval is). Knoeien is dus onrealistisch.

Hoe worden nieuwe Blockchains gemaakt?

Op het moment van schrijven is blockchain ontwikkeling meestal beperkt tot het uitbreiden van bestaande oplossingen zoals de populaire Bitcoin en/of Ethereum. Als je de meest populaire blockchains van vandaag bekijkt (bijv. ZCash, LiteCoin, POA-Network, etc.), zul je na wat onderzoek snel merken dat ze hoogstwaarschijnlijk bovenop Bitcoin- of Etheureum- zijn gebouwd. Dit betekent dat de beperkingen van Bitcoin- en/of Etheureum- automatisch worden overgedragen naar de nieuwe blockchains. Hoewel de logica wordt uitgebreid, blijft het feit dat er wordt gewerkt aan bestaande codebases die niet zijn ontworpen om uitbreidbaar en modulair te zijn.

Waarom een framework voor het maken van Blockchains?

Blockchains ontwikkelen is moeilijk en vereist veel expertise. De bovenstaande beschrijving is van een simpele blockchain. Blockchains zijn tot veel in staat; Ethereum maakt het bijvoorbeeld mogelijk om smart-contracts te creëren die de busines logic van derden bevatten waarmee gecommuniceerd kan worden door de blockchain community en hun portemonnee. Bitcoin daarentegen werkt als een gedecentraliseerde ledger, transactiegericht om het zo te zeggen. Om al deze dingen te kunnen doen, moet een blockchain in het algemeen de volgende dingen bevatten: networking modules, databases, consensus engines en een transactie verwerker. Dit alleen al betekent dat als je een blockchain zou willen bouwen, je experts nodig hebt op 4 verschillende gebieden. Kunnen we deze eis van totale expertise niet gewoon wegnemen en ons concentreren op alleen de business logic? Jazeker, met gebruik van een blockchain framework, Substrate!

Wat is Substrate?

Substrate is een uitbreidbaar en modulair framework voor het bouwen van blockchains. Substrate biedt ontwikkelaars verschillende kerncomponenten die nodig zijn om een gedistribueerd netwerk op te bouwen, namelijk een database, netwerkfunctionaliteiten, verschillende consensus-engines en een transactie queue. Elk van deze componenten is uitbreidbaar, wat betekent dat als uw team experts op deze gebieden bevat, dingen anders gedaan kunnen worden. Met al deze overhead uit de weg, kunt u zich als ontwikkelaar daadwerkelijk concentreren op het ontwikkelen van de business logic, in Substrate’s geval, de runtime. Standaard werken Substrateontwikkelaars aan de state transition function (AKA de runtime) die gegevensmanipulatie tussen blok A en B dekt. Deze runtime kan op elk willekeurig moment gebruik maken van een verzameling van modules(Runtime Module Library). Over het algemeen beginnen gebruikers met een basissysteem dat niets anders kan dan een “Hello World” -bericht te weergeven. Deze modules die door Substrate worden geleverd, zijn modules die functionaliteiten bevatten die vaak voorkomen in andere blockchains, bijvoorbeeld smart-contracts, een generieke (reserveerbare / vergrendelbare) valuta, lidmaatschap of identiteitsbeheer enz. Deze complete set van modules heet FRAME (Framework for Runtime Aggregation of Modularized Entities). Deze modules kunnen worden gezien als uitbreidbare modules die gemakkelijk in ieders runtime kunnen worden geïntegreerd.

Wat heb ik gemaakt tijdens mijn afstudeerstage?

Om een goed begrip te krijgen van wat Substrate te bieden had, kreeg ik de taak om een gedecentraliseerd veilingsysteem op te zetten. Het creëren van dit systeem vereiste gebruik van verschillende kerncomponenten van Substrate; met name de API. Hierdoor kon ik tot een goede conclusie komen over de vraag of Substrate wel of niet een goede tool is.

Het veilingsysteem op zich is vrij eenvoudig, de business logic heeft vooral te maken met de veilingen zelf. Elke gebruiker kan een veiling maken en op deze veiling kunnen biedingen worden geplaatst. Afhankelijk van wanneer de veiling eindigt, worden valuta’s gereserveerd, geruild, terugbetaald of geslashed. Naast deze core business logica zijn er ook de RPC’s (remote procedure calls). Door RPC’s te gebruiken, kunnen externe programma’s / API’s de blockchain aanroepen om informatie op te vragen. Deze RPC’s gaan hand in hand met de API die ik voor het systeem heb ontwikkeld. De API stuurt de oproepen in zekere zin door naar de RPC’s. De RPC’s kunnen dan de staat van de blockchain wijzigen. Al in al heb ik de meeste tijd aan het onderzoek besteed. Hoewel dit systeem er eenvoudig uitziet in termen van de functionaliteiten, was het implementeren van deze behoorlijk lastig vanwege het gebrek aan documentatie en voorbeelden.

Substrate’s plus en minpunten.
 
Pluspunten: de system module library, het feit dat Substrate open-source is, native integratie met Polkadot.

Minpunten: het upgraden van de blockchain is moeilijk, de syntax die tijdens de ontwikkeling wordt gebruikt kan verwarrend zijn (macro’s), foutmeldingen zijn over het algemeen verwarrend, er ontbreekt erg veel documentatie, het maken van de API was behoorlijk moeilijk. Dit klinkt misschien raar, maar als een blockchain geen API heeft betekent het dat de blockchain niet geïntegreerd kan worden in een front-end.

Aan het einde van de dag ben ik een onervaren blockchain-ontwikkelaar. De bovenstaande punten zijn in geen geval feitelijk, het zijn mijn persoonlijke meningen. De minpunten hebben mij in zekere zin veel geleerd. Door de wat moeilijkere obstakels ben ik erin geslaagd bij te dragen aan de Substrate-codebase (most notably de API in node_template). Dit leerde mij dat wanneer je bijdraagt aan een open-sourceproject, je altijd de hulp van de beheerders hebt, wat buitengewoon bemoedigend is.


Conclusie

Ik ben er vrij zeker van dat ik zonder Substrate nooit een blockchain had kunnen maken, laat staan een blockchain waarop veilingen draaien die kunnen communiceren met de buitenwereld. Maar aangezien de codebasis met de dag verandert, vind ik persoonlijk nog steeds dat het te vroeg is om Substrate een viable SDK te noemen. Hoewel het veel biedt, zijn er nog steeds veel nadelen. Substrate heeft een groot potentieel (kijk naar Polkadot), dus ik ben benieuwd hoever het zal gaan komen!