Decentrale website maken voor web 3.0

De huidige versie van internet wordt gedomineerd door dataverkopers en het alziend oog van de overheid. De volgende versie van internet moet daar verandering in gaan brengen. Op het web 3.0 krijgen we meer controle over onze eigen data. In deze workshop beginnen we met onze eigen decentrale website.

Op het huidige internet worden websites en andere content opgeslagen op centrale servers. Wellicht heeft een organisatie één of twee back-ups op een andere locatie, maar uiteindelijk wordt alle content centraal opgeslagen. Wanneer er een datalek is bij een centrale instantie, liggen in één keer allerlei gegevens op straat. Bovendien kan een centrale server door een ddos-aanval tijdelijk overbelast worden, waardoor diensten niet langer toegankelijk zijn.

Dit zijn twee problemen die web 3.0 moet oplossen. Het belangrijkste aspect van het decentrale web is niet zo zeer het hosten van een website, maar de wijze waarop met data van gebruikers worden omgegaan.

Hoe werkt web 3.0?

Het decentrale web gebruikt een systeem waarbij data peer-to-peer worden opgeslagen en uitgewisseld, vergelijkbaar met de wijze waarop BitTorrent werkt. Content wordt gedeeld door nodes die verspreid zijn over de gehele wereld. Bovendien kan iedereen een node opzetten. Dit maakt deze versie van het web ietwat langzamer dan dat de meeste internetgebruikers gewend zijn, maar vaak is het verschil amper merkbaar.

Op het huidige internet wordt het Domain Name System (dns) gebruikt om de locatie van content op een server vindbaar te maken via een leesbare tekst. Zodoende kan iedereen de website van PCM vinden via www.pcmweb.nl in plaats van een numeriek ip-adres.

Op het huidige internet staat een bestand op één bepaalde locatie. Deze manier van content opslaan wordt ook wel ‘location addressing’ genoemd. Bij het decentrale web wordt gebruikgemaakt van ‘content addressing’. Elk bestand krijgt een unieke verwijzing dat na het uploaden toegewezen wordt als een cryptografische hash. Hierbij maakt het niet uit op welke server of op hoeveel servers de content staat, want de content wordt immers op basis van de hash aangehaald en niet op basis van de locatie.

Website maken voor web 3.0

Het maken van een website voor het decentrale web doet op dit moment een beetje denken aan de jaren negentig. WordPress werkt niet. MySQL-databases kunnen ook niet gekoppeld worden. Websites voor het decentrale web zijn statisch en je verwijst dus altijd naar lokale content. Zo’n website kun je gewoon maken in Kladblok, maar er zijn ook tools die je daarbij kunnen helpen. Hugo is een opensource-tool om statische websites te maken, terwijl Atom een zeer fijne editor is om overzicht over je code te bewaren.

Gelukkig gaat de ontwikkeling van het decentrale web snel. Zo heeft Unstoppable Domains in samenwerking met 3Box een tool gelanceerd om een weblog te hosten. Deze is echter zeer beperkt in gebruik en zit bovendien nog vol met kinderziektes. Daarom gaan we nu even uit van een volledig zelfgemaakte website. Hierbij kun je gebruikmaken van bijvoorbeeld css en javascript. Ook is het mogelijk om React te gebruiken, waardoor niet alleen een website, maar ook apps op het decentrale web gehost kunnen worden.

Het is belangrijk om op te merken dat alle verwijzingen naar content lokaal moeten zijn. Voor dit artikel gaan wij even uit van een simpele website. Deze website heeft een index.html en één afbeelding in een map. Alle content voor de website sla je op in een map op je eigen computer.

<HTML> <BODY> <H1>Welkom PCM lezer</H1> <IMG SRC="images/afbeelding.png" width="300px"> <P>Deze website kan niemand offline halen!</P> </BODY> </HTML>

Uploaden naar IPFS

Wij gebruiken het InterPlanetary File System, beter bekend als IPFS, om de content online te krijgen. Content uploaden naar het decentrale web kan op twee manieren. Gebruikers kunnen zelf een IPFS-node opzetten of een IPFS-gateway gebruiken. De software IPFS Desktop is via Github beschikbaar voor Windows, Linux en Mac. IPFS Desktop is een gebruikersvriendelijke manier om zelf een IPFS-node op te zetten of om content op het decentrale web te bekijken. Download IPFS Desktop hier.

De meeste mensen bekijken websites echter via browsers als Chrome, Safari en Firefox. Daarom maken wij voor het gemak gebruik van een IPFS-gateway, een gebruikersvriendelijke webinterface voor het hosten van content via IPFS. Content die geüpload is via een IPFS-gateway belandt ook op het decentrale web. Het enige euvel dat een gateway heeft, is dat het een vorm van centralisatie is, maar dat nemen we nu even voor lief.

Via https://pinata.cloud krijgt iedere gebruiker standaard 1 GB gratis opslagruimte. Heb je meer ruimte nodig, daar moet maandelijks voor betaald worden.

Na het aanmaken van een account, klik je rechtsboven in het scherm op Pinata Upload. In het nieuwe scherm selecteer je Upload Directory. Bij het uploaden moeten we namelijk zorgen dat de gehele website met alle inhoud en in zijn originele structuur in één keer wordt geüpload.

Worden de bestanden één voor één geüpload, dan krijgt elk bestand een eigen hash. In dat geval werken onderlinge verwijzingen niet meer, zoals de verwijzing naar de afbeelding in index.html.

Gateways

Zodra de upload compleet is, heeft de content – in dit geval de hele map – een unieke hash-code gekregen. Je kunt dit zien door rechtsboven in het scherm te klikken op Pin Explorer. Een hash is in dit geval een verwijzing naar specifieke content, ook wel content addressing genoemd. In dit geval verwijst de aanduiding QmTjS4zkKYeCN9U6fhd95XtiiQymPfMQqRojWD8aoyfU9Z naar de hele map waarin de website is geplaatst.

Het probleem is dat deze reeks cijfers en letters niets doet in een normale browser. Daarom bestaan er gateways. Een gateway, zoals https://pinata.cloud of https://cloudflare-ipfs.com, maakt content op het decentrale web toegankelijk voor browsers die iedereen op zijn computer of telefoon heeft. Ongeacht via welke gateway een bepaalde hash wordt aangehaald, de bijbehorende content wordt getoond. De onderstaande drie url’s tonen exact dezelfde content.

https://cloudflare-ipfs.com/ipfs/QmTjS4zkKYeCN9U6fhd95XtiiQymPfMQqRojWD8aoyfU9Z

https://gateway.pinata.cloud/ipfs/QmTjS4zkKYeCN9U6fhd95XtiiQymPfMQqRojWD8aoyfU9Z

https://ipfs.io/ipfs/QmTjS4zkKYeCN9U6fhd95XtiiQymPfMQqRojWD8aoyfU9Z

Content-ID

Deze hash, de lange reeks van cijfers en letters, wordt ook wel de content-ID of CID genoemd. Elke CID kan via een willekeurige gateway worden benaderd. Ontwikkelaars willen de overgang van het huidige web 2.0 naar web 3.0 zo soepel mogelijk maken. Via deze gateways is content op het decentrale web via elke browser te benaderen.

Dit is een tussenstap, want uiteindelijk kan een dergelijke gateway ook voor problemen zorgen. Het is immers een soort tussenpersoon tussen de content en de gebruiker, en dus zijn gateways potentiële doelwitten voor een ddos-aanval. Wanneer je content uploadt via IPFS wordt het in eerste instantie op slechts één node opgeslagen. Pas wanneer die betreffende CID in populariteit groeit, zal de content verspreid worden over meerdere nodes.

Om te zorgen dat de geüploade content niet plots verdwijnt van het decentrale web, is het verstandig om die content te ‘pinnen’. Hiermee geef je als uploader aan dat de content niet verwijderd mag worden. Verwijder je de pin, dan verdwijnt elke vorm van controle over de online geplaatste bestanden.

Zo’n gateway maakt de url al iets logischer, maar het is niet mooi en bovendien lastig te onthouden. Een andere manier om een CID te bekijken, is door gebruik te maken van een eigen domeinnaam. DNSLink maakt het mogelijk om een reguliere website te koppelen aan een CID. Dit doe je middels een dns-txt-record.

In de dns-records van je eigen domeinnaam moet een verwijzing gemaakt worden naar de CID en eentje naar de IPFS-gateway (zie onderstaande tabel). Hierbij moet {CID} vervangen worden door de hash van je eigen content.

Persoonsgebonden domeinen

Nadat de records bijgewerkt zijn, is de content op het IPFS-netwerk via je eigen domeinnaam te bekijken. Reguliere .nl- of .com-websites worden echter gereguleerd door centrale organisaties. Jaarlijks brengen die kosten in rekening, maar in sommige gevallen passen ze vormen van censuur toe. Als tegenbeweging zijn er bedrijven die werken aan het leesbaar maken van links voor het decentrale web via persoonsgebonden domeinen.

ENS Domains en Unstoppable Domains hebben respectievelijk .eth- en .crypto-domeinen op de markt gebracht. De gebruiker huurt of koopt deze blockchain-domeinen, en slaat deze vervolgens op in zijn eigen Ethereum-cryptovaluta-wallet. Deze domeinnamen zijn persoonsgebonden en de eigenaar kan aangeven waar de domeinnaam naar moet verwijzen.

Vanwege de achterliggende technologie is het ook mogelijk om één of meerdere cryptovaluta-portemonnees te koppelen. Zodoende is roberthoogendoorn.crypto niet alleen een portfolio-website, maar ook een gemakkelijk te onthouden crypto-portemonnee. Als het gaat om toegankelijkheid, is hier nog wel wat werk aan de winkel. De .eth- en .crypto-domeinen zijn momenteel alleen te bereiken via de Opera browser voor Android of na het installeren van de Chrome-extensie van Unstoppable Domains.

Echt wijdverspreid is de technologie dus nog niet. Ondertussen worden de domeinnamen wel door veel verschillende crypto-portemonnees ondersteund, waaronder Coinbase, Trust, Coinomi en MyEtherWallet.

Ethereum-wallet

Voordat we een eigen blockchain-domeinnaam kunnen kopen, is het verstandig eerst de Metamask-app voor Chrome te downloaden. In Metamask kan een bestaande Ethereum-wallet geïmporteerd of een nieuwe wallet aangemaakt worden. Zo’n portemonnee ziet er als volgt uit: 0x123456abcdef12345abcdef12345abcdef12345a. Dit is een publiek adres. De bijbehorende privésleutel moet je goed bewaren.

Vervolgens moet er op unstoppabledomains.com een account aangemaakt worden, waarna je een domeinnaam kunt uitkiezen. Klik Add to cart als de keuze is gemaakt en op Checkout om te betalen met PayPal, creditcard of cryptomunten.

De verkregen .crypto-domeinnaam wordt als token opgeslagen in de crypto-portemonnee van de eigenaar. Vervolgens kan de eigenaar via Unstoppable Domains de domeinnaam doorverwijzen naar de eerder geüploade CID.

Kies My Domains en klik op Manage naast de domeinnaam. Ga vervolgens naar Website en zet de CID in het veld IPFS Hash. Druk daarna op Save Changes om alles op te slaan. Zodra de blockchain de wijzigingen heeft verwerkt, is de website te bekijken via de nieuwe .crypto-domeinnaam.

Download de Chrome-extensie van Unstoppable Domains en surf naar nederob.crypto. Je zult wederom dezelfde website te zien krijgen.

Haken en ogen

Het hosten van een website via IPFS heeft wat meer voeten in de aarde, maar het werkt wel. Toch zitten er wat haken en ogen aan. Wanneer je bijvoorbeeld ziet dat je een typefout hebt gemaakt, is het niet mogelijk om de site even snel aan te passen. Als websitebeheerder moet je dan eerst de content op je eigen pc aanpassen en daarna alles opnieuw uploaden. Vervolgens krijgt de nieuwe versie van de website ook weer een nieuwe CID. Dit betekent dus ook dat de verwijzing vanuit de domeinnaam moet worden aangepast. Kortom, het aanpassen van content is een flinke klus.

Bovendien is het lastig om je website te promoten. Content op het decentrale web wordt niet geïndexeerd door Google. Op dit moment is er met Blockscan één heel simpele zoekmachine voor het decentrale web, maar het mag geen naam hebben. Vooralsnog is het opzetten van een dergelijke website iets voor hobbyisten en pioniers.

En ook blijft het mogelijk om censuur toe te passen. Content zelf is op het decentrale web misschien niet te censureren, maar domeinnamen op dns-niveau zijn aan te pakken door bijvoorbeeld een overheid. Hier spelen de eerdergenoemde blockchain-domeinnamen een rol. Ook kunnen overheden toegang tot bepaalde online content beperken of blokkeren op basis van de geolocatie van bezoekers.

Dit is iets wat een vpn-verbinding kan omzeilen, maar het is maar om aan te geven dat vormen van censuur nog steeds mogelijk zijn.

Nog niet heel toegankelijk

Het decentrale web zit echt nog in zijn beginfase. Het probeert niet alleen iets tegen censuur te doen, maar stelt bovendien iedereen in staat om een steentje bij te dragen. Door schijfruimte beschikbaar te stellen, kan iedereen meehelpen en daar eventueel een zakcentje aan overhouden.

Heel toegankelijk is deze nieuwe versie van het internet nog niet. Hoewel meerdere browsers overwegen om ipfs:// te ondersteunen, is Opera voor Android momenteel de enige. De browserextensie voor alle Chromium-browsers van Unstoppable Domains, maakt het al iets makkelijker. Dan praten we alleen nog maar over de ondersteuning van ipfs://, en nog niet over sia:// en btfs://. Het zou zo maar kunnen dat .crypto-domeinnamen deze andere peer-to-peer-netwerken ook gaan ondersteunen, maar dat is koffiedik kijken.

Er moet dus nog veel gebeuren. Toch is er nu al sprake van een serieuze groei van het decentrale web. Videoplatform Dtube, de OpenBazaar-marktplaats en chatapplicatie Orbit zijn slechts enkele voorbeelden van apps die werken via IPFS. Ook Microsoft is met deze technologie bezig. Wellicht kunnen we binnenkort ook jouw website of app toevoegen aan dit rijtje?

Tekst: Robert Hoogendoorn

Geschreven door: Redactie PCM op

Category: Workshop, Algemeen, Algemeen

Tags: internet, crypto, web3.0