Technisch Ontwerp MAATSCHAPPELIJKE DIENSTVERLENING VERREKENEN IN DE BLOCKCHAIN VOOR DE BELASTINGDIENST Tim de Kruijf Tim Hendriksen Mike Geenacker Arthur Scheps Bas Polman Hogeschool van Arnhem en Nijmegen 14-06-2017 1
Inhoudsopgave 1 INLEIDING... 3 2 ARCHITECTUUR... 4 2.1 SOFTWARE... 4 2.2 HARDWARE... 6 3 PHYSICAL DATA MODEL... 8 4 HIGH-LEVEL COMPONENTEN... 9 4.1 DATA DATABASE... 9 4.2 TRANSACTIE DATABASE... 10 4.3 COMMAND API... 12 4.4 FRONT-END... 12 4.5 TAKENSYSTEEM... 12 4.6 PERMISSIES... 13 4.7 STREAMS... 13 4.8 APPLICATIE... 14 5 SCHERMONTWERPEN... 16 6 BIJLAGEN... 19 6.1 CDM... 20 Technisch Ontwerp SocialCoin 2
1 Inleiding De Overheid kampt met grote groepen mensen waarvan de schulden oninbaar zijn. Het gaat hierbij vaak om de Belastingdienst, CJIB of DUO. De Overheid kan deze mensen de mogelijkheid bieden om deze schulden te vereffenen door deze mensen sociaalmaatschappelijk relevant activiteiten te laten verrichten. Deze activiteiten worden in samenspraak met de gemeente uitgevoerd. De gemeente bepaalt de maatschappelijke waarde van deze activiteiten. Op basis van deze waarde wordt de schuld deels of geheel vereffent. Dit document gaat dieper in op de architectuur van de software. Er zal worden beschreven in welke omgeving het systeem en wat de structuur van het systeem is. Dit zal verduidelijkt worden aan de hand van een Architectural Overview, een Physical Data Model (PDM). Normaal gesproken zal in een Technisch Ontwerp ook een gedetailleerd UI-design opgenomen worden omdat de focus van de te ontwikkelen applicatie niet bij de front end ligt. Er zal dus minimale aandacht aan het uiterlijk van de applicatie worden besteed. Dit document heeft als doel om voor zowel het ontwikkelteam als De Belastingdienst duidelijk te maken hoe het systeem in elkaar zit en het zijn processen afhandelt. Technisch Ontwerp SocialCoin 3
2 Architectuur In dit hoofdstuk is genoteerd welke systemen benodigd zijn en de softwarepakketten. 2.1 Software We maken gebruik van Docker om MultiChain te installeren, de systemen waarvan men gebruik kan maken voor Docker zijn te zien in de platformmatrix hieronder. In de matrix kijken we naar Docker CE x86_64 en EE, de community en Enterprise versies, en kunnen we zien welke operatie systemen welke versie kan draaien. Waar de community versie gratis is, moet betaald worden om van de Enterprise versie gebruik te mogen maken. De Enterprise versie biedt meer mogelijkheden dan de community editie zoals hieronder te zien in de matrix. Technisch Ontwerp SocialCoin 4
De Community en Enterprise hebben vastgelegde momenten voor het releasen van updates. Hieronder is te zien in welke maanden beide edities updates releasen. Technisch Ontwerp SocialCoin 5
2.2 Hardware Om MultiChain op te zetten gaan we in onze situatie een Docker instantie draaien. Deze Docker instantie zal in dit geval moeten draaien op een server bij De Belastingdienst (Docker, 2017). Docker CE draait niet op Windows Servers, wel op Azure en Amazon Web Services. Docker EE draait wel op Windows Servers. De minimale eisen van Docker zijn dat de desbetreffende computer/server Hyper-V moet ondersteunen en netwerk toegang hebben, 4GB RAM, 3GB schijfruimte en 64bit moet zijn. Ook moet er bij alle deelnemende gemeenten een server staan die verbonden is met het netwerk. Deze hebben dezelfde eisen als de server die bij De Belastingdienst staat. Andere eisen zijn dat de gebruikers toegang hebben tot een webbrowser om taken aan te maken, werk te bekijken enzovoorts. Figuur 1 Architectuurontwerp Hieronder volgen de Docker systeemvereisten: Voor Linux systemen: 64-bit, ondersteunt Ubuntu 12.04+, CentOS 6.2+, Debian 7+, Fedora 15+ Voor Windows systemen: 64-bit, ondersteunt Windows 10 Andere sytemen: Microsoft Azure, Amazon Web Services Hieronder volgen de MultiChain hardware-en systeemvereisten: Voor Linux systemen: 64-bit, ondersteunt Ubuntu 12.04+, CentOS 6.2+, Debian 7+, Fedora 15+, RHEL 6.2+. Voor Windows systemen: 64-bit, supports Windows 7, 8, 10, Server 2008 or later. 512 MB aan RAM 1 GB aan schijfruimte Wrappers voor MultiChain API: Ruby, Python, PHP, Javascript, Java, C# (MultiChain, 2017) Technisch Ontwerp SocialCoin 6
In het onderstaande figuur is het deployment diagram weergegeven: Figuur 2: Deployment Diagram Technisch Ontwerp SocialCoin 7
3 Physical Data Model Binnen het hoofdstuk Physical Data Model is het datamodel naar aanleiding van het CDM, te vinden in bijlage 7.1 Figuur 3: Physical Data Model Technisch Ontwerp SocialCoin 8
4 High-level componenten Om een goed beeld te geven hoe ons systeem in elkaar zit, is het belangrijk om op hoog niveau een onderscheid te maken tussen de databases die gebruikt worden. Op het hoogste niveau bestaat de applicatie uit 4 onderdelen. 4.1 Data Database Dit is de database waar alle applicatie data wordt opgeslagen. Dit is in essentie een key/value pair database. Adressen worden gebruikt om data in de adressen op te halen, deze data kan van alles zijn van JSON data voor onze objecten tot user objecten en permissielijsten. Ook wordt de assets onder een adres opgeslagen. Deze database zal vanaf nu gewoon de database genoemd worden. Verandering in deze database worden gefaciliteerd door de transactie database. Het is dus niet gewenst om veranderingen direct in deze database te maken. Key Value WAL324IGJF {Type: Wallet, asset: socialcoin, balance: 100, owner: USR892GN5} STRF9849JD {Type: Stream, naam: Rozen Snoeien, streamitems: 2, publishers: 2, open: false, Creator: USR892GN5} STIFGR8349 {Type: Streamitem, publisher: USR892GN5, Data: Rozen snoeien, Added: 2017-06-13 13:46:25 GMT } USR892GN5 {Type: User, name: Label: Gemeentenode, Permissions: PRMTGRFOT} PRMTGRFOT {Type: Permission, ForAddress: USR892GN5, PermissionType: Send } Key Value WAL324IGJF {Type: Wallet, asset: socialcoin, balance: 90, owner: USR892GN5} WALFHT561 {Type: Wallet, asset: socialcoin, balance: 10, owner: USR892GN5} STRF9849JD {Type: Stream, naam: Rozen Snoeien, streamitems: 2, publishers: 2, open: false, Creator: USR892GN5} STIFGR8349 {Type: Streamitem, publisher: USR892GN5, Data: Rozen snoeien, Added: 2017-06-13 13:46:25 GMT } USR892GN5 {Type: User, name: Label: Gemeentenode, Permissions: PRMTGRFOT} PRMTGRFOT {Type: Permission, ForAddress: USR892GN5, PermissionType: Send } Transactie(tx ) Database Technisch Ontwerp SocialCoin 9
4.2 Transactie Database De transactie database, vanaf nu TxDatabase, wordt gebruikt om alle verandering te recorden die op de database gedaan worden. Als je een asset vanaf adres 1x naar adres 2x wil verplaatsen moet dit met een transactie gedaan worden. Transactie 1 txid 3301 from 3300 vout WAL324IGJF data Asset : SocialCoin, Amount : 10 Transactie 2 txid 3302 from 3301 vout WALFHT561 data Asset : SocialCoin, Amount : 10 Al deze transacties worden dan in een Block samengevoegd en gevalideerd door de validators op het netwerk. Block 4123 Transacti e 1 Transacti e txid 3305 txid 3306 from 1337 from 3305 vout WALAQW159 vout WAL324IGJF data Asset : SocialCoin, Amount : 12 Block 4122 Transacti e 1 Transacti e 2 data Asset : SocialCoin, Amount : 12 txid 3303 txid 3304 from 3302 from 3303 vout WALFHT561 vout WAL324IGJF data Asset : SocialCoin, Amount : 5 data Asset : SocialCoin, Amount : 5 2 Block 4121 Transactie 1 Transactie 2 txid 3301 txid 3302 from 3300 from 3301 vout WAL324IGJF vout WALFHT561 data Asset : SocialCoin, Amount : 10 data Asset : SocialCoin, Amount : 10 Technisch Ontwerp SocialCoin 10
Figuur 4: Transactiedatabase Technisch Ontwerp SocialCoin 11
4.3 Command API Dit is het aanspreekpunt voor de eerdere TxDatabase. Hier kunnen via RPC calls commando's worden doorgevoerd naar de TxDatabase die er vervolgens transacties van maakt en de verandering opslaat in de database. De 3 voorgaande delen worden samengevoegd in 1 pakket. Dit noemen we een MultiChain Server 4.4 Front-End Dit is een NodeJS server die op dezelfde fysieke server leeft als de 3 eerdere onderdelen. De server maakt RPC calls naar de Command API en haalt hier ook de resultaten vandaan om ze vervolgens te serveren met de relevante html/css. Deze 4 onderdelen vormen samen een MultiChain node die bij een stakeholder kan worden neergezet (gemeente). 4.5 Takensysteem Centraal binnen ons systeem is de mogelijkheid om met taken te werken. Onder taken zien wij objecten die door gemeentes worden aangemaakt en aan een schuldhebbende wordt gekoppeld. Deze taak wordt vervolgens gedaan en hiervan wordt de status aangepast. Als de taak compleet is wordt hier de desbetreffende beloning door de gemeente overgemaakt naar de wallet van de schuldhebbende. Omdat we te maken hebben met een append-only database kunnen we niet de documenten van de taken rechtstreeks aanpassen, daarom hebben we er voor gekozen om per taak een stream aan te maken en hierin een taakgeschiedenis systeem aan te maken, waar iedere nieuwe item een verandering voor stelt. Taak Item Items inhoud Datum Buurtfeest Arnhem Buurtfeest Arnhem Buurtfeest Arnhem Buurtfeest Arnhem 4 {"beschrijving":"als maar meer VEGEN!""voortgang":"20"} 2017-06-13 13:04:03 GMT 3 {"beschrijving":"meer VEGEN!"} 2017-06-13 12:33:17 GMT 2 {"status":"toegewezen"} 2017-06-13 11:39:44 GMT 1 {"schuldhebbende":"1t4ip6sfhjhcbdrcwkecocq ZZWKUpcZTM4KPH4, "beschrijving":"vegen!", "beloning":"10","looptijd":"2","status":"open","voo rtgang":"0"} 2017-06-13 11:39:44 GMT Technisch Ontwerp SocialCoin 12
4.6 Permissies Ieder user adres heeft permissies binnen de blockchain, deze permissies zijn: - Connect Permissie om te kunnen verbinden met andere nodes in de blockchain en de inhoud van de blockchain te kunnen zien. - Send Assets kunnen sturen binnen de blockchain. In principe de mogelijk om de input (from) van een transactie te kunnen ondertekenen. - Receive "Dingen" kunnen ontvangen binnen de blockchain. In principe de mogelijkheid om in een output(vout) van een transactie genoemd te kunnen worden. - Issue De input kunnen ondertekenen van transacties die nieuwe assets aanmaken. - Create De input kunnen ondertekenen van transacties die nieuwe streams aanmaken. - Mine De mogelijkheid om transacties te kunnen valideren. - Activate Om connect, send en receive permissies aan andere adressen toe te kennen. In principe de mogelijkheid om inputs te ondertekenen van transacties die deze permissies toekennen. - Admin Om alle permissies aan andere adressen toe te kennen, inclusief issue, mine en active. In principe de mogelijkheid om inputs te ondertekenen van transacties die deze permissies toekennen. Wanneer je permissies zonder entity meegeeft dan worden dit global permissies. Dit zijn permissies die het open deel van de blockchain van toepassing zijn. Wat niet onder het open deel valt zijn de streams. 4.7 Streams Streams is een concept binnen MultiChain dat een deel van de database afschermt en hierop speciale permissies toe past. Zo zou je eens stream kunnen aanmaken waar alleen een zekere user op mag schrijven. Om deze permissie te geven moet je de permissie prefixen met de naam van de stream. Bijvoorbeeld: send > streamnaam.send. In ons systeem geldt 1 taal = 1 stream. Technisch Ontwerp SocialCoin 13
4.8 Applicatie Om de communicatie tussen de applicatie en de MultiChain node te modelleren hebben wij gebruik gemaakt van een aantal SSD s. Deze SSD s staan met meerderen weergegeven binnen één afbeelding. Deze SSD s reflecteren niet exact de structuur van de applicatie, maar proberen de communicatie tussen de NodeJS- en de MultiChain Server in kaart te brengen De actor Gemeente geeft aan een taak te willen maken. De NodeJS applicatie voert vervolgens de volgende acties uit: aanmaken stream, subscriben op de stream, permissies zetten, en een item aanmaken op de stream. Dit item wordt vervolgens teruggegeven. De actor Schuldhebbende geeft aan een taak te willen bekijken. De NodeJS applicatie vraagt de gegevens op van de taak, waarop de MultiChain Server deze gegevens terugstuurt naar de Schuldhebbende De actor Gemeente geeft aan een taak te willen wijzigen. De NodeJS applicatie maakt een nieuw item aan op de stream die deze veranderingen weergeeft. Technisch Ontwerp SocialCoin 14
De actor Gemeente geeft aan een nieuw adres aan te willen maken. De NodeJS applicatie vraagt een nieuw adres op van de MultiChain Server en geeft deze vervolgens aan de Gemeente. De actor Gemeente of de actor Schuldhebbende geeft aan in te willen loggen. Beide geven hun adres op, waarop de MultiChain Server controleert of dat adres bestaat. De localstorage wordt geïnstantieerd en de Gemeente/Schuldhebbende is ingelogd. Technisch Ontwerp SocialCoin 15
5 Schermontwerpen Binnen dit hoofdstuk worden de schermontwerpen van de applicatie weergegeven: Bovenstaande afbeelding geeft de structuur van de website weer zoals die is ontworpen. Men begint op de hoofdpagina, SocialChain Home, die in de afbeelding rechts weergegeven staat. Op de hoofdpagina is de keuze tussen gemeente en schuldhebbende te zien. Ook staan er onder en rechts op de pagina twee blokken weergegeven die, respectievelijk, de dichtstbijzijnde taken en het nieuws weergegeven. Vanaf de hoofdpagina kan de gebruiker kiezen bij welke partij hij hoort: gemeente of schuldhebbende. Is hij van de gemeente, dan moet hij inloggen met zijn gegevens om te verifiëren dat hij bij de gemeente hoort, en wordt hij doorverwezen naar de gemeentepagina, die op de volgende pagina te zien is. Technisch Ontwerp SocialCoin 16
Op deze pagina kan de gemeentemedewerker kiezen uit vier opties: Taak aanmaken, Taak bekijken, wallet aanmaken en wallets bekijken. Ondanks dat dit verkeerd staat aangegeven in de afbeelding, is dit wel hoe de pagina is ontworpen. Bij het aanmaken en bekijken van de wallets wordt de medewerker doorverwezen naar een overzichtspagina die simpelweg een lijst met wallets toont. Elke wallet is een clickable link die de medewerker naar een detailpagina stuurt. Hierop wordt het saldo en de permissies van de wallet weergegeven. Bij het aanmaken van een wallet wordt de medewerker doorverwezen naar een aanmaakpagina. Hier kan de medewerker op een knop klikken om automatisch een wallet te genereren. Wanneer dat gedaan wordt, wordt het adres van de wallet weergegeven op het scherm en is de wallet aangemaakt. Wanneer de medewerker alle taken wilt bekijken zal hij, net zoals bij wallets bekijken, doorverwezen worden naar een overzicht pagina waar alle taken in een lijst worden weergegeven. Ook hier zijn de taken een clickable link die naar een detailpagina leidt. Per taak worden de naam, degene die de taak heeft aangemaakt, het aantal gebeurtenissen en het aantal personen die een gebeurtenis hebben geplaatst, weergegeven. Per gebeurtenis staat: degene die het geplaatst heeft, de beschrijving van de taak, de datum van toevoeging en de key weergegeven. Bij het aanmaken van een taak wordt de medewerker doorverwezen naar een aanmaakpagina met invulvelden waar de eerder opgenoemde gegevens door de gemeentemedewerker worden ingevuld. De taak wordt vervolgens aangemaakt. Technisch Ontwerp SocialCoin 17
Wanneer een gebruiker aangeeft dat hij een schuldhebbende is wordt hij verzocht om het adres van zijn wallet in te vullen om daarmee in te loggen. Hij wordt dan doorverwezen naar de hoofdpagina voor schuldhebbende. Hier kan hij kiezen uit twee opties: het bekijken van zijn saldo en het bekijken van zijn taken. Wanneer hij zijn taken wilt bekijken krijgt hij, net zoals de gemeentemedewerker, een overzicht van taken te zien die in een lijst onder elkaar staan weergegeven waarbij elke taak een clickable link is die doorverwijst naar een detailpagina. Het enige verschil is dat de schuldhebbende alleen taken krijgt te zien waar hij aan is gekoppeld. Wanneer een schuldhebbende kiest om zijn saldo te bekijken, wordt hij doorverwezen naar een pagina waar zijn saldo te zien is. Ook staat er op die pagina in procenten in hoeverre hij zijn schuld heeft afgelost. Technisch Ontwerp SocialCoin 18
6 Bibliografie Docker. (2017). Docker. Opgehaald van Docker: docker.com MultiChain. (2017). JSON-RPC-API. Opgehaald van MultiChain: http://www.multichain.com/developers/json-rpc-api/ Technisch Ontwerp SocialCoin 19
7 Bijlagen 7.1 PDM Het PDM is in de map bijlagen onder de naam PDM.png bijgevoegd. Technisch Ontwerp SocialCoin 20