Inmiddels kunnen we stellen dat een groot deel van de crypto-fanaten wel duidelijk heeft wat een blockchain is en hoe het werkt. Simpel en kort gezegd: door blocks (met een bepaalde inhoud) achter elkaar te plaatsen, is het onmogelijk om het verleden aan te passen. Deze ketting ‘(chain’) van blocks worden aan elkaar geregen en geverifieerd door verschillende protocollen (PoW, PoS, PoA of wat dan ook). Maar hiermee komt ook gelijk een probleem om de hoek kijken: elk block dat wordt toegevoegd, heeft een lange reeks van blocks achter zich hangen. Dit maakt de blockchain langzaam, traag en log. Hiervoor worden op dit moment verschillende oplossingen ontwikkeld. Zoals Sharding bij Ethereum, het Lightning Network van BTC en Directed Acyclic Graph (DAG). Het principe van een DAG wordt in dit artikel uitgelegd aan de hand van de Universa Blockchain. Het is zeer aan te raden om eerst te snappen hoe de smart contracts van Universa werken en hoe het PoA protocol werkt.
Disclaimer: Universa is een partner van Blockchain Stories. Dit is géén beleggingsadvies.
Directed Acyclic Graph (DAG) van Universa
In een eerdere post was ook te lezen dat er voor elk nieuw contract dat in de Universa Blockchain wordt gemaakt, een nieuwe C-Chain ontstaat. Dit staat voor Contract-Chain, waarin alle transacties van het betreffende smart contract worden opgeslagen en geverifieerd. Elk specifieke contract onderhoudt daarmee zijn eigen status, waardoor het dus kan worden uitgevoerd zonder dat het andere blocks (of beter: contracten) beïnvloedt. Dit wordt ook wel asynchronously genoemd. Elke aanpassing in de status van het smart contract samengevoegd in één chain, is dan een stukje DAG. Wat wij dus kennen als block, is in Universa dus een revisie (of geupdate versie) van het smart contract.
De moderne distributed ledger networks verkopen zichzelf liever als DAG dan als Blockchain. Voor Universa is dit anders, gezien een Directed Acyclic Graph maar gewoon een type van structuur van een blockchain is. De blockchain van Universa is ook niet een op zichzelf staande DAG, maar een groep van DAG’s waarin elk contract zijn eigen onafhankelijke DAG heeft. En de combinatie van deze Directed Acyclic Graphs noemt men de Universa Blockchain.
Verschillen met de traditionele blockchain
De werking van de Universa Directed Acyclic Graph is hierboven beschreven. Er zijn echter meer verschillen met de traditionele blockchain. In Universa is er geen publieke informatie van een block te vinden. Daarnaast worden de oude blocks niet opgeslagen en kan dit dus niet worden ingezien. Dit is enkel mogelijk met een vooraf ingestelde Time-Stamp die in het contract kan worden ingesteld, mochten de oude versies toch gewenst zijn. De vorige versie (of status) van het contract wordt overschreven waardoor het enorm veel ruimte bespaart. Dit zorg ervoor dat de anonimiteit wordt verhoogd en de prestaties van de blockchain hoog blijven. Het is dus ook niet mogelijk om met een blockexplorer wallet-adressen te bekijken. Bij de Universaexplorer kun je enkel met je contract (ID) toegang krijgen tot de status en de informatie. En het belangrijkste is dat elke block niet correspondeert als een pakket van transacties, maar enkel als een wijziging vergeleken met het origineel. De onafhankelijke contracten in de C-Chain blokkeren elkaar op geen enkele manier, waardoor het perfect schaalbaar is.
Verdieping in de techniek van DAG
Om te snappen hoe dit precies werkt kijken we naar een voorbeeld. Stel dat iemand, laten we hem Guus noemen, een nieuw Token contract maakt en registreert. Van dit smart contract krijgt Guus een key die is gekoppeld aan de ‘owner’ van het contract. In dit contract zitten de welbekende status, definitie en bijlagen.
Vervolgens stuurt Guus tien van zijn honderd tokens naar een vriend. Hiervoor worden twee nieuwe versies van dit contract gemaakt:
- Het contract van Guus met de balans minus de tien tokens
- Een contract van zijn vriend met de balans van plus tien tokens
Beide nieuwe (gereviseerde) contracten verwijzen naar de originele staat van het contract van de token die Guus heeft gemaakt waarin nog staat ‘owner: Guus, amount: 100’ . Dit is een klein stukje van de status van het contract (dat dus mag worden aangepast). De definitie en de bijlagen blijven zoals ze zijn omdat dat onveranderbaar is. Het contract van Guus en die van zijn vriend zijn nu geüpdatet met de nieuwe hoeveelheid tokens daarin.
Het is alleen mogelijk om een afgeleide versie van het originele contract te maken als je voldoet aan enkele eisen:
- Er is een verwijzing naar het originele parent contract
- Het nieuwe afgeleide contract is gemaakt zonder dat er toestemmingen rondom het contract worden geschonden. Als Guus bijvoorbeeld tien tokens verstuurd, wordt deze bewerking voor de twee nieuwe contracten ondertekend door zijn key. Met die key heeft Guus de rechten van de transactie in handen.
- De nieuwe contract(en) worden gebouwd zonder dat er iets anders in wordt geschonden. Je kunt niet vanuit het niets tokens versturen als je ze niet hebt. Als Guus bijvoorbeeld een aanpassing aan het contract wil registreren door van “owner: Guus, amount: 100″ het contract aan te passen naar “owner: vriend, amount: 10” en “owner: Guus, amount: 90” contracten, zal er worden geverifieerd of de som gelijk is met de versie van het vorige contract. Zo is het onmogelijk om een geld te creëren of te verliezen.
Proof of State
Het gaat in de Directed Acyclic Graph van Universa dus om het valideren van de status van elk contract. Élke gereviseerde versie van het contract wordt gecheckt op waarheid en echtheid. Het enige wat de nodes doen is het opslaan van de nieuwe versie in de Blockchain als ze zeker weten dat deze status daarin hoort. En dat is dus precies wat het is: Proof of State. Het leveren van het bewijs van het contract. Eigenlijk is het allemaal heel logisch…
Vragen of suggesties voor een artikel? Kom eens langs op Telegram.