Deze week gaan we wat dieper in op de techniek achter een Smart Contract van Universa. Deze Smart Contracts zijn geschreven in een structured format, van YAML, XML ofJSON. Om precies te snappen hoe dit allemaal werkt moeten we het totale plaatje in verschillende onderdelen breken. Smart contracts zijn slimmer dan je denkt en de smart contracts van Universa zijn hierin nog nog meer bijzonder dan het Smart Contract van bijvoorbeeld Ethereum.
Eigenaar van het contract
Iedere deelnemer in het Universa netwerk is vertegenwoordigd met een opmerking over het eigendomschap (of ook wel party) van het contract. Deze party kan volledig anoniem worden geïdentificeerd in de blockchain, maar dit kan ook gewoon met een identiteit zijn. Deze groepen kunnen op twee manieren worden geïdentificeerd:
- Door een public key, die is genoemd in de body van het contract. Dit kan bijvoorbeeld de uitgever of de eigenaar van het contract zijn.
- Met een anonieme ID van deze openbare sleutel. Hiermee kan de specifieke party die het contract maakt om de public key te bekijken zijn, zonder dat de identiteit van deze party bekend gemaakt wordt.
De party kan overige persoonsgegevens van zichzelf (naam, nickname, of paspoortnummer, wat dan ook) toevoegen aan de contract.
Onderdelen in het smart contract
Om de onderdelen van het smart contract te snappen, is het goed om te weten hoe dit werkt. Een contract kan door de nodes op twee manieren worden beoordeeld: Approved (contract is valid) of Unknown (contract is verlopen, onecht of onbekend). De nodes nemen wijzigingen in het contract waar en dat is waar het PoA protocol op is gebaseerd. Mocht je dat onderdeel nog niet duidelijk hebben, lees onze eerdere post over het Universa protocol.
Binnenin het contract zijn er in totaal drie verschillende onderdelen die er toe doen:
Definitie
Dit is het onveranderlijk deel in het contract dat niet kan worden gewijzigd in nieuwere versies van het contract. Het bevat de uitgever (de party), een tijdstempel, machtigingen (sommige machtigingen kunnen ook naar de staat worden verplaatst) en alle gegevens die de creator van het contract zichtbaar wil hebben. Deze data zal altijd hetzelfde blijven, wat er ook gebeurt rondom (de vernieuwingen van de status van) het contract.
Staat
Dit is de sectie binnen het contract dat kan worden aangepast. Dit is het onderdeel waar het principe van Proof of Authority in plaats vindt, namelijk dat de verandering van staat door de nodes wordt genoteerd en geregistreerd. Naast het nieuwe stukje contract bevat dit onderdeel ook een revisienummer, de creator, het tijdstip en een verwijzing naar de originele en vorige versie van het contract. Verder moet je hier ook denken aan de veranderbare eigendomspapieren (waardoor het contract kan worden overgegeven aan een nieuwe eigenaar) en (zelden) toegang tot het contract door middel van en veranderbare klantgegevens.
Bijlagen
De bijlagen zijn een type bestand met daarbij een ondertekende verwijzing (signature) naar de (vaste) definitie of (aanpasbare) staat van het contract.
Toegang tot het contract
Waar er dus al anonieme partys kunnen zijn in de definitie van het contract, is er nog een reden waarom het contract compleet vertrouwelijk is. Het Universa netwerk kan enkel toegang krijgen tot de inhoud van de definitie en de staat. Alle andere onderdelen uit de bijlagen (de files die maximaal 1GB kunnen zijn) worden nooit over het netwerk verzonden. Dit is ook precies waarom de Universa Blockchain zo snel is. Elk contract krijgt haar eigen Contract Chain (C-Chain) binnen de Universa Blockchain, waarbij de bijlagen in de CryptoCloud staan. Vaak bevatten de files privé of vertrouwelijke informatie. Deze informatie is dus goed beschermd door de signature gekoppeld is aan de staat en/of definitie van het contract. Het is dus zelfs zó goed beschermd, dat deze vertrouwelijke informatie binnen de Universa Blockchain gewoonweg niet bestaat, maar puur in de bijlage in de CryptoCloud staat.
Het volledige contract bestaat dus alleen maar uit een uitwisseling van data tussen parties die betrokken zijn bij de wijziging van diezelfde  data. En deze uitwisseling van data kan veel verschillende soorten van transport zijn; e-mails, berichten, betalingsverkeer, clouds of gewoon simpel flash geheugen. De onveranderlijkheid van de bijlagen wordt gegarandeerd door de singatures naar het contract, die op hun beurt worden ondertekend door de parties en goedgekeurd door het netwerk.
Universa is ’the most secure blockchain’
Dus in het kort, Universa is een van de veiligste blockchains omdat;
- Universa-netwerk keurt de nieuwe staat van het contract goed, en verstrekt de onveranderlijkheid van de staat en de definitie. De echte inhoud wordt dus niet gecontroleerd of genoteerd.
- Partijen die de herziening hebben ondertekend, keuren (door deze te ondertekenen)de staat en de definitie goed en stemmen er mee in dat ze alle gevoegde bijlagen bezitten en het met hen eens zijn wat daarin staat.
- Het is onmogelijk om de files uit de bijlagen op welke manier dan ook aan te passen.
Scripts
Eigenlijk klinkt alles hierboven nog heel simpel. Niet alles is uitleesbaar en niet alles is veranderbaar. Maar Universa brengt het smart contract nog een stapje verder.
Een smart contract zou niet slim genoeg zijn als het geen Javascript zou kunnen bevatten die als bijlage kan worden ingevoegd. Het script kan acties implementeren (die door klanten worden uitgevoerd), nieuwe contracten genereren en gebeurtenissen verwerken op een volledig geautomatiseerde manier. De 3e generatie van de Universa-client kan net zo draaien als een autonome webservice of webtoepassing voor bijvoorbeeld workflowautomatisering.
Lokale uitvoering van het script
De bijgevoegde scripts worden uitgevoerd door de client in de omgeving van de klant. Het Universa-netwerk ziet het script nooit, maar controleert altijd of het resultaat overeenkomt met de contractdefinitie en -staat die is vastgesteld. Dit betekent zelfs dat als een script een bepaalde verboden bewerking uitvoert, het netwerk het resultaat niet accepteert. Nu is ook goed te snappen hoe de samenwerkingen met Novotrans (transportbedrijf) of Lanit (IT bedrijf) in elkaar steekt. Lanit heeft ter plekke een eigen Javascript lopen waar lokaal wijzigingen in worden doorgevoerd. Deze wijzigingen komen terecht in de Universa Blockchain omdat dit Javascript in de bijlage van een Smart Contract zit.
Op dit moment werkt zo’n script als volgt: de scripts worden geactiveerd door de gebruiker of een bepaalde gebeurtenis. Zo’n gebeurtenis kan een binnenkomend contract zijn of bijvoorbeeld een betaling die wordt uitgevoerd. Het script wordt vervolgens uitgevoerd, en de status daarvan gewijzigd. (Een node van) Universa neemt deze wijziging waar (in de staat van het contract) en keurt vervolgens alles goed. De nieuwe versie van het contract wordt opgeslagen in de Universa Blockchain.
Beveiliging
Elk smart contract is verpakt in de zwaar beschermde verpakking – de capsule. De capsule bestaat uit een body en een reeks met ingewikkelde handtekeningen. De body bevat een gecomprimeerd binair contract en een reeks met signatures. Elke signature ondertekent in de body haar eigen onderdeel van het contract. Het kan de tijdsdrempel, de eigenaar of een mark van het contract zijn. De corresponderende public keys (of anonieme ID’s) worden vermeld in de contracttekst zodat het systeem kan controleren of de genoemde signatures die werden gebruikt juist zijn. De capsule bevat dus geen inhoudelijke onderdelen van het contract maar enkel de signatures. Hiermee krijgt Universa dus op geen enkele manier toegang tot deze informatie.
Meer over Universa? Check onze Universapagina.