Creating, reading and writing spreadsheets with Python

With Python it’s quite easy to create, to read and write spreadsheets.

First we need to import a module named pandas. The name is derived from panel data. Then we create a dictionary with four keys: colors, items, speed and price. To each key belongs a list of values. For instance for colors the value list consists of: red, blue, yellow. Then we create a dataframe from this dictionary. A dataframe is the Python equivalent of a sheet in a spreadheet. The last step we have to make is to export the dataframe to an excel spreadsheets. For this we use the function to_excel.

Reading a spreadsheet is even easier. For this use the function read_excel. We can read the spreadsheet we created above as follows.

Other possibilities are the write a number of sheets to one spreadsheet. To add columns and rows to an existing spreadsheet. More important it is quite easy to perform statistical analysis on the sheets in a spreadsheet with Python. You can learn a lot more in our Python courses.

Deel 6 De waarde van Bitcoin

Bitcoin breekt record na record. Er wordt al tijden geroepen dat de limiet nu echt wel behaald is, maar telkens blijkt de waarde weer te stijgen. In deze blog probeer ik de waarde van Bitcoin in perspectief te brengen.

Disclaimer: De gehele cryptovalutamarkt vertoond veel verschijnselen van een bubbel en ik ga ook zeker niet ontkennen dat het een bubbel kan zijn. Ik probeer alleen in perspectief te brengen welke waarde het in onze wereld heeft.

Laten we beginnen bij de vergelijking tussen goud en Bitcoin die veelvuldig wordt gemaakt. Bitcoin en goud zijn beide schaars, gedecentraliseerd, verhandelbaar op een open markt verspreid over de hele wereld, transacties zijn anoniem en beide zijn kostbaar om te delven/minen. Daarentegen heeft goud een wereldse waarde, doordat er sieraden en andere voorwerpen van gesmeed kunnen worden. Bitcoin heeft geen directe wereldse waarde, maar eerder een digitale waarde namelijk het creëren van vertrouwen tussen twee gebruikers op het internet zonder intermediair. Er zijn dus parallellen te vinden tussen goud en Bitcoin. Hieronder ga ik dieper in op de markt van goud en Bitcoin en probeer enkele vergelijkingen te maken.

De market kapitalisatie ofwel market cap is een manier om de waarde van een bedrijf of cryptocurrency te berekenen op basis van het aantal aandelen x de prijs van de aandelen oftewel het aantal munten in omloop x de prijs van die munten. Deze methode hanteer ik hier ook voor goud om een vergelijking met Bitcoin te maken.

Market kapitalisatie goud: 7.627 Miljard  *I

Market kapitalisatie Bitcoin: 313 Miljard  *II

Zoals je ziet is de market cap van goud een factor 20 groter dan die van Bitcoin. Goud is alleen al honderden jaren een betaalmiddel en Bitcoin is pas in zijn zevende levensjaar.

De kosten om 1 kilo goud te delven beslaan gemiddeld 31.000 dollar. Gemiddeld levert 1 ton gouderts 5 gram goud op dus moet er 200 ton erts worden opgegraven om 1 kilo goud te produceren (*III). De grote hoeveelheid arbeid die nodig is om 200 ton gouderts te verwerken lijkt veel op het Proof of Work mechanisme van Bitcoin, waarbij ook grote hoeveelheid werk (computerkracht) moet worden geleverd om Bitcoins vrij te maken. De kosten om 1 Bitcoin te produceren komt neer op 2.067 dollar (*IV, let op. dit is zeer afhankelijk van geografie en hardware) en beslaan voornamelijk de energiekosten.

Waarde van 1 kilo goud: 40.351  *V

Waarde van 1 Bitcoin: 18.599  *VI (op het moment van schrijven 15-12-2017)

Totale hoeveelheid goud in omloop: 170.000 ton goud  *VII

Totale hoeveelheid Bitcoins in omloop: 16.743.888  *VIII

Ik neem voor het gemak even aan dat de kosten om 1 kilo aan goud te bewerken na delving 1000 dollar bedraagt. Dan zijn de totale kosten 32.000 dollar per kilo en komt het prijsverschil tussen de marktprijs en de kostprijs voort uit marktwerking neer op 40.351 – 32.000 = 8.351 dollar per kilo goud

Bij Bitcoin is het prijsverschil tussen de marktprijs en de kostprijs, die gedreven wordt door marktwerking, en de kostprijs 18.599 – 2.067 = 16.532 dollar per Bitcoin

Zoals je ziet is de marge per Bitcoin munt aanzienlijk hoger dan per kilo goud.

Als we nu, plat gezegd, het effect van marktwerking op de totale hoeveelheid goud en Bitcoins willen berekenen dan nemen we het prijsverschil dat net is berekend en vermenigvuldigen we dat met de totale hoeveelheid kilo goud en Bitcoins in omloop.

Totale effect van marktwerking op goud: 170.000.000 x 8.351 = 1.419.670.000.000 dollar  ook wel: 1,419e +12 dollar

Totale effect van marktwerking op Bitcoins: 16.743.888 x 16.532 =  276.809.956.416 dollar

Wanneer we de marktwerking per eenheid bekijken is de marktwerking bij Bitcoin een factor twee groter, maar als we naar de totale hoeveelheid kijken dan is de marktwerking bij goud een factor 5 groter dan bij Bitcoin.

Natuurlijk is er meer dan alleen marktwerking dat effect heeft op de prijs van Bitcoin en goud in deze vergelijking, maar grofweg geeft dit wel een idee wat de markt voor effect heeft op de hoeveelheid geld in omloop middels goud en Bitcoin. De factor tijd heb ik niet meegenomen, maar die komt zo aan bod

Bitcoin is natuurlijk geen edelmetaal, maar een infrastructuur om transacties te voorzien tussen peers in een wereldwijd netwerk. Daarom wil ik Bitcoin vergelijken met PayPal, een betalingssysteem dat wereldwijd transacties voorziet in verschillende valuta. Hieronder probeer ik de waarde van Bitcoin te schatten in vergelijking tot Paypal.

Market cap Paypal: 90,92 miljard dollar  *IX

Totaal aantal transacties per dag Paypal: 1,9 mjd per jaar = 1,9/365 = 5.205.479 transacties  *X

Totaal aantal transacties per dag Bitcoin: 337.385 transacties  *XI

Bitcoin kan dus (337.385/ 5.205.479)x100 = 6,48 procent van het aantal transacties verwerken per dag ten op zichte van Paypal. Als we deze verhouding hanteren voor de waardebepaling van Bitcoin dan komen we uit op 0,0648* 90,92 miljard = 5.892.837.950 oftewel 5,9 miljard dollar.

Als we het bovenstaande bedrag (5,9 mld dollar) vergelijken met de market cap van Bitcoin 313 miljard dollar dan is er sprake van een bubbel. Bitcoin kan op basis van alleen de transacties niet meer waarde bieden dan Paypal, omdat het simpelweg (nog) niet de capaciteit heeft van een Paypal. Hier geldt dus dat de belofte dat Bitcoin meer kan brengen dan huidige betaalsystemen de prijs van Bitcoin en daarmee de market cap omhoog stuwt.

Om een idee te krijgen in hoeverre de prijsstijging van Bitcoin gezien kan worden als normaal in de handelswereld probeer ik een vergelijking te maken met een extreme prijsstijging van het Apple aandeel.

Koersstijging Apple:

-6 Januari 2015 619 miljard dollar*XII

-24 februari 2015 769,86 miljard dollar*XII

——————————————————————————————

Dat is een stijging van 150,86 miljard dollar in 49 dagen

Per dag zou dan een gemiddelde stijging van 3,08 miljard betekenend

Koersstijging Bitcoin:

-14 november 2017 102,9 miljard dollar

-17 december 2017 321,25 miljard dollar

——————————————————————————————

Dat is een stijging van 218,35 miljard dollar in 33 dagen

per dag is dat een gemiddelde stijging van 6,62 miljard dollar betekenen.

Bitcoin heeft de laatste tijd een stijging die twee maal groter is dan die van de koers van Apple. Hierbij moet vermeld worden dat Apple een bedrijf is met kantoren, machines, mensen en voorraad die direct een waarde hebben in onze wereld. Dit is bij Bitcoin niet het geval, omdat het volledig digitaal is.

Op basis van de bovenstaande vergelijkingen zou je kunnen zeggen dat de snelheid waarmee de prijs van Bitcoin stijgt bovengemiddeld hoog is en daarom een symptoom is van een bubbel. Daarnaast kan je op basis van het aantal transacties dat het kan verwerken stellen dat de market cap veel te hoog is, maar als we kijken naar de totale waarde van Bitcoin dan valt het mee in hoeverre er sprake is van marktwerking. Er zit veel meer geld in goud dan in Bitcoin en je zou je kunnen afvragen wat goud nu werkelijk waard is, aangezien er geen/nauwelijks functionele eigenschappen zijn. Tijdens het schrijven van deze blog, dat zijn enkele dagen, is de prijs van Bitcoin gedaald met 500 dollar, waardoor alleen al de market cap met 55 miljard dollar is gedaald naar 258 miljard dollar.

Door de digitalisering ontwikkelen verschillende trends zich steeds sneller. De toegang tot de Bitcoin markt is voor iedereen open, anders dan de aandelenmarkt waarbij alleen gehandeld kan worden via een tussenpersoon, zoals een bank. Is het mogelijk dat deze vergaande digitalisering op een tempo plaats vindt dat volledig past bij het moderne tijdperk, maar wat voor ons als mens niet meer te behappen is?

Bronnen:

http://onlygold.com/Info/All-The-Gold-In-The-World.asp

II https://coinmarketcap.com/

III https://www.amsterdamgold.com/info/goudnieuws/nieuws/wat-kost-een-kilo-goud/

IV https://www.quora.com/How-much-does-it-cost-to-mine-1-Bitcoin-in-the-US

https://www.goudmarkt.nl/goudprijs-per-kilo

VI https://www.bitfinex.com/

VII https://www.hollandgold.nl/100-vragen-over-goud/hoeveel-goud-is-er-in-de-wereld

VIII https://blockchain.info/nl/charts/total-bitcoins

IX https://finance.yahoo.com/quote/PYPL/

https://www.statista.com/statistics/218495/paypals-net-number-of-payments-per-quarter/

XI https://blockchain.info/nl/charts

XII https://ycharts.com/companies/AAPL/market_cap

XIII https://coinmarketcap.com/currencies/bitcoin/

Thomas van Wieringen

Deel 5 Blockchain vs de Bank

In deze blog zal ik aandacht besteden aan de bewaarfunctie en beleggingsmogelijkheden van blockchain ten opzichte van de bank.

Ik begin bij de bewaarfunctie van de bank. De bank brengt vraag en aanbod van geld samen. Spaargeld kan bij de bank worden bewaard tegen een laag rentepercentage. De bank gebruikt het spaargeld op zijn beurt om leningen te verstrekken of te beleggen tegen een hoger rentepercentage dan het rentepercentage dat het aan spaarders uitkeert. Een dergelijke functie bestaat binnen blockchain niet, omdat er geen centrale macht aanwezig is. Als je toch een rendement wilt over spaargeld dan zal dat moeten plaatsvinden via individuele initiatieven, zoals het uitlenen van Bitcoins aan anderen tegen een afgesproken prijs.

Naast sparen kan spaargeld ook worden belegd. Veel banken dienen als intermediair bij het aankopen van aandelen. Door deze rol kunnen ze beleggers enigszins beschermen door beleggers te adviseren en bedrijven te analyseren voorafgaand aan het uitbrengen van aandelen. Vergelijkbaar met het uitbrengen van nieuwe aandelen via een IPO (inital Public Offering) bestaat er in de blockchain wereld de ICO (initiaal Coin Offering). ICO’s zijn een uitgifte van munten voor een nieuw ontwikkelde blockchain toepassing vergelijkbaar aan een IPO. In beide gevallen ontvang je een eigendomsbewijs die kan worden verhandeld. Bij ICO’s zijn de aandelen vaak tokens/munten, ook wel cryptocurrency genoemd, die onderdeel zijn van de blockchain technologie en tegen een vooraf afgesproken prijs worden verkocht. Een cryptocurrency kan zowel als aandeel dienen en als betalingsmiddel. Enkele initiatieven, zoals NEO hebben dit gescheiden door aandelen uit te geven en munten.

Het geld dat wordt opgehaald tijdens een ICO wordt over het algemeen gebruikt als een investering om het netwerk te onderhouden en te ontwikkelen. Helaas zijn er ook initiatieven waarbij de ontwikkelaars na het ophalen van de investering zich terugtrekken en een waardeloos netwerk achterlaten. De investeerders zijn dan in het bezit van cryptocurrencies die weinig tot niks waard zijn, omdat er geen ontwikkelingen meer plaatsvinden. Hiertegenover zijn er ook veel initiatieven die veelbelovend zijn en daadwerkelijk een unieke toevoeging hebben op het bestaande blockchainlandschap. Het is dan ook een lucratieve business om in ICO’s te stappen die wel succesvol worden. Door goed te onderzoeken wie de ontwikkelaars zijn, hoeveel ervaring ze hebben, welke betrokkenen het netwerk steunen en wat het netwerk uniek maakt proberen traders een inschatting te maken of de ICO succesvol zal zijn.

Er zijn verschillen factoren die invloed hebben op de prijs van cryptocurrency. De meeste daarvan zijn vergelijkbaar met de marktwerking bij aandelen. Zo wordt de waarde van een cryptocurrency gebaseerd op de vraag naar de tokens/munten die vrij verhandelbaar zijn en waar geen controle op is door een centrale autoriteit. De uitgifte van munten is vaak gereguleerd in de software en wordt niet aangepast op basis van inflatie. De prijs wordt dus voornamelijk bepaald door de vraag. Zo zijn er bijvoorbeeld maximaal 21 miljoen Bitcoins uit te geven door het netwerk. Hierin verschilt een cryptocurrency van fiat (euro’s/dollars), omdat fiat wordt bijgedrukt door centrale banken om de koers stabiel te houden.

De gelijkenis van cryptocurrency en fiat zit hem in het feit dat er met cryptocurrency andere crypto’s gekocht kunnen worden. Het dient dus niet alleen als eigendomsbewijs, maar het kan ook als intermediair dienen.

Er is één kenmerk van cryptocurrency die vergelijkbaar is met een dividend uitbetaling en dat is de hardfork.   De hardfork is een splitsing van het network doordat een deel van de community een update van de software doorvoert die de rest niet ondersteund. Bij een hardfork ontstaat een nieuwe munt die afgesplitst is van de originele munt. Iedereen die de originele munt in zijn bezit had op het tijdstip van de splitsing krijgt net zoveel van de nieuwe munt. Veel mensen zien dit als gratis geld, als beide koersen stijgen. Daardoor stijgt de waarde van munten vaak vlak voor de aankondiging van een hardfork, net zoals aandelen stijgen voorafgaand aan een dividenduitbetaling. Een voorbeeld van een hardfork is BitcoinCash dat een afsplitsing is van Bitcoin. Iedereen die voor de datum van de splitsing Bitcoins had heeft recht op dezelfde hoeveelheid aan BitcoinCash. Wanneer de koers van Bitcoin stabiel blijft, ondanks de splitsing, en Bitcoincash verhandeld kan worden dan ontvang je in zekere zin gratis geld.

Afsluitend zien we in cryptocurrency kenmerken van fiat en van aandelen. Het is deze mix van eigenschappen die het moeilijk maakt om het koersverloop van Bitcoin te voorspellen. Daarnaast is er (nog)geen controle rondom de handel in cryptocurrency waardoor er geen bescherming is tegen fraudeurs.

Thomas van Wieringen

MicroPython

The Python language is very popular and used on the desktop, server and smartphone. There is now also a Python version which can be used for embedded devices.
MicroPython was created by Damien George in order to run Python on microcontrollers with very limited storage space.
MicroPython doesn’t includes all standard modules of Python3 because not all modules have meaningful functionality on a microcontroller. Some modules specific for microcontrollers are added.
The number of microcontrollers which support MicroPython is expanding. We will mention a few of them.

pyboard
The board which first supported MicroPython. It was a result of a kickstarter project by Damien George.

Main features of the board are
• STM32F411RE microcontroller
• 96 MHz Cortex M4 CPU with hardware floating point
• 512KiB flash ROM and 128KiB RAM
• Micro USB connector for power and serial communication
• Micro SD card slot, supporting standard and high capacity SD cards
• 24 GPIO on left and right edges and 5 GPIO on bottom row, plus LED and switch GPIO available on bottom row
• 1x 12-bit analog to digital converter, available on 16 pins, 4 with analog ground shielding
• 4 LEDs (red, green, yellow and blue)
• 1 reset and 1 user switch
• On-board 3.3V LDO voltage regulator, capable of supplying up to 250mA, input voltage range 3.6V to 16V
• DFU bootloader in ROM for easy upgrading of firmware

pycom development platforms.
The firm pycom develops different microcontrollers which can be controlled with MicroPython.
All microcontrollers have extensive connection possibilities including bluetooth low energy, WiFi, LoRa, LTE-M

Adafruit feather HUZAA with ESP2268 Wifi
A board in the family of the Adafruit feather family equipped with an ESP2268 microcontroller. Specifications of the board are:

• Measures 2.0″ x 0.9″ x 0.28″ (51mm x 23mm x 8mm) without headers soldered in
• Light as a (large?) feather – 9.7 grams
• ESP8266 @ 80MHz with 3.3V logic/power
• 4MB of FLASH (32 MBit)
• Built in WiFi 802.11 b/g/n
• 3.3V regulator with 500mA peak current output
• CP2104 USB-Serial converter onboard with 921600 max baudrate for uploading
• Auto-reset support for getting into bootload mode before firmware upload
• 9 x GPIO pins – can also be used as I2C and SPI
• 1 x analog inputs 1.0V max
• Built in 100mA LiPoly charger with charging status indicator LED, can also cut a trace to disable the charger
• Pin #0 red LED for general purpose blinking. Pin #2 blue LED for bootloading debug & general purpose blinking
• Power/enable pin
• 4 mounting holes
• Reset button

For all above mentioned boards it is very easy to install the MicroPython interpreter on the board. For the pycom board it is already installed and it functions as the OS.

Deel 4: Blockchain mogelijkheden

In deze blog zal ik de technologische mogelijkheden van blockchain bespreken en het toekomst perspectief. Ik zal de rol van smart contracts, apps en modulaire blockchains bespreken.

Blockchain staat bekend om het betalingsmechanisme, deze faam heeft blockchain dankzij de Bitcoin, maar blockchain kan veel meer dan het uitvoeren van transacties.

Laten we beginnen bij Ethereum. Ethereum stelt de gebruiker in staat om smart contracts in een blockchain te plaatsen. Smart contracts kunnen gebruikt worden ter vervanging of ondersteuning van “papieren ” contracten. Zo zou men een hypotheek, crowdfunding of investering via een smart contract kunnen laten verlopen. In dit contract wordt gespecificeerd wat de rente is, de terugbetalingstermijn en andere zaken die van belang zijn. Andere gebruikers kunnen dan een bedrag overmaken naar keus en verbinden zich zo aan de voorwaarden die gesteld zijn. De rol van de bank kan dan verschuiven naar monitoren, adviseren en kredietwaardigheid ratings verkopen. Zo kan ondanks de anonimiteit toch worden gewaarborgd dat je te maken hebt met iemand die kredietwaardig is.

Daarnaast kunnen deze contracten worden gebruikt voor vrij simpele taken, zoals het controleren van een weddenschap (de conditie) en het faciliteren van de uitbetaling (actie).
Een smart contract kan ook aan een device worden gekoppeld, zoals een computer, smartphone of een slim huishoudelijk apparaat bijvoorbeeld een koelkast. In het contract kan gespecificeerd worden wat een apparaat moet doen naar aanleiding van een vooraf gedefinieerde conditie(s).

Voorbeeld:
Er kan in smart contract worden gezet dat er een lampje moet gaan branden (actie) op een device als er een bedrag groter dan 1 ether (munteenheid van ethereum) wordt ontvangen (conditie).

Dit is erg basaal, nu gaan we een stap verder.

Voorbeeld: Bij het binnekomen van een geregistreerde betaling bij AH thuisbezorgen wordt er een computer voorzien van het bijbehorende boodschappenlijstje dat online is ingevuld door een klant. Gelijktijdig wordt er een robot + een zelfsturende auto voorzien van de taak om boodschappen in te pakken en naar het gespecificeerde huis te brengen. De zelfrijdende auto levert het af aan een koelkast/kluis/afhaalpunt dat op zijn beurt weer naar aanleiding van een smartcontract de boodschappen controleert en een akkoord geeft aan AH thuisbezorgen + een notificatie aan de gebruiker dat de boodschappen zijn afgeleverd. De acties en condities kunnen vooraf gespecificeerd worden en worden automatisch gecontroleerd door het systeem.

Smart contracts kunnen hiermee het ontwikkelen van slimme apparaten (internet of things) ondersteunen, doordat taken/acties vooraf gespecificeerd kunnen worden met bijbehorende condities of voorwaarden.

Andere toepassingen die geplaatst kan worden op een blockchain zijn apps. Smart contracts vallen ook in deze categorie, maar zij hebben naar mijn inziens een uitzonderlijke rol ten opzichte van andere applicaties, omdat er duidelijk gewerkt wordt met een vooraf vastgelegde conditie en een actie. De apps zouden gezien kunnen worden als meer autonoom. Zo is het mogelijk om een document of andere intellectueel eigendom te registreren tegen betaling. Het document wordt niet online geplaatst, maar een een hash van het document. Zodra er twijfel is over het eigendom dan kan door middel van de hash worden aangetoond dat je dat document, bijvoorbeeld een patent, hebt laten registreren. Op deze manier wordt het beschermen van eigendom een stuk makkelijker.

Ik heb mij tot nu toe gericht op één enkele blockchain, maar de laatste ontwikkelingen zijn gericht op modulaire blockchains. Men ziet in dat de toekomst ligt in een veelvoud van specialistische blockchains, zowel prive-, openbaar- en hybridenetwerken, die gekoppeld kunnen worden. Hierdoor kunnen blockchainnetwerken zo worden ontworpen dat ze heel goed zijn in het uitvoeren van één taak en waarborgen daarmee efficiëntie. Hieronder volgt een voorbeeld van een koppeling van blockchains.

Voorbeeld: Ik wil een zeecontainer vol met computers verschepen naar Engeland, verzekert tegen de aanschafwaarde en er moet betaald worden zodra hij op de truck wordt geladen van de afnemer. Eén blockchainnetwerk registreert de zeecontainer als eigendom van mij en dat hij geladen is op boot X. Een ander blockchain heeft mijn verzekering geregistreerd staan die door de kapitein geverfifieerd kan worden door middel van een code op de container (een hash), en weer een ander blockchain verzorgt de betaling van de afnemer naar mij zodra de container op zijn truck is geladen, dit kan worden bevestigd doordat er bij het aflossen wordt geregistreerd dat de container is aangekomen.

Zo ver als in het bovengenoemde voorbeeld zijn we nog lang niet, maar het geeft wel aan wat er allemaal mogelijk is en dat er geen holy grail is als het om blockchains gaat. Een initiatief dat zich richt op modulaire blockchains is Fabric van Hyperledger (een samenwerkingsverband tussen Linux, IBM en Intel). Met Fabric proberen ze een platform te creëren waarop men blockchains kan ontwikkelen en op elkaar kan aansluiten.

Mocht je naar aanleiding van mijn blog vragen hebben of wil je meer weten van blockchain stuur mij dan een bericht. Ik vertel er graag meer over!

In mijn volgende blog reeks genaamd, blockchain vs de bank, zet ik uiteen hoe blockchain kan concurreren met de bank en hoe realistisch dat nu is.

Thomas van Wieringen

Deel 3: Mining

Dit is deel 3 van een serie blogs over de blockchain technologie. Deel 2 vind je hier:Bitcoins, ethers en meer

In mijn vorige blog heb ik de rol van de gebruiker binnen het blockchain netwerk toegelicht. In deze blog zal ik dieper ingaan op de rol van miners en de beveiliging van een blockchain netwerk.

 

Eerder heb ik het al gehad over de bescherming tegen hackers door middel van de kettingstructuur in combinatie met de blockstructuur die ervoor zorgt dat er altijd een verwijzing is naar de positie van het block, de parent block (voorgaand block) en een timestamp wanneer het block is gemaakt. Door deze structuur is het niet mogelijk om één block aan te passen, immers is er een directe koppeling met de ketting die vereist dat de gehele ketting kloppend is. Het tweede mechanisme dat ik heb genoemd is dat de blockchain staat opgeslagen op duizenden computers die continu worden geüpdatet met de nieuwste blocks. Door het consensus mechanisme van het netwerk moet de informatie  op al deze computers overeenkomen, anders doet het systeem een rollback, wat betekent dat het systeem terug gaat naar de meest recente versie waarover consensus was in het systeem. Er is nog een derde mechanisme dat ik nog niet heb besproken dat zorgt voor een drempel die zo hoog is voor hackers dat ze niet geacht worden in staat te zijn om een blockchain te hacken. Dit mechanisme heet het hashing algoritme ook wel Proof of Work genoemd, wat je letterlijk mag vertalen als bewijs van werk.

 

Dit mechanisme berust op een rekensom die ontzettend complex is en heel veel computerkracht vereist. De uitkomst van de rekensom wordt bepaald door de input. Als de input ook maar een heel klein beetje wordt veranderd dan is de uitkomst totaal anders. Hieronder zie je een voorbeeld waarbij de input Coindesk rocks wordt aangepast naar Coindesk rocks!. De toevoeging van een uitroepteken zorgt voor een totaal andere uitkomst. De gehele code van cijfers en getallen  die je ziet wordt hash genoemd.

 

hash(“CoinDesk rocks”)              =>          7ae26e64679abd1e66cfe1e9b93a9e85

hash(“CoinDesk rocks!”)            =>           6b1f6fde5ae60b2fe1bfe50677434c88

 

Geplakt uit <https://www.coindesk.com/bitcoin-hash-functions-explained/>

 

De computerkracht voor deze berekeningen wordt geleverd door de Miners. Deze groep gebruikers werkt vaak samen in zogenaamde  pools om hun rekenkracht te bundelen, simpelweg omdat het anders te lang duurt om een block te produceren. De input voor de rekensom zijn de transacties die de Miners kiezen om te versleutelen met de bijbehorende gegevens, zoals de timestamp , het blocknummer en het parentblock.  De hash is de unieke code waar een block aan kan worden geïdentificeerd. Het blockchain netwerk past continu de moeilijkheidsgraad aan, zodat de drempel om een hash te produceren even hoog blijft, ongeacht de hoeveelheid computerkracht aangesloten op het netwerk. In Bitcoin is de gemiddelde hashtijd tien minuten.  Het Bitcoin netwerk past elke 2016 blocken (ongeveer elke 6 uur) de hashrate aan. Als het netwerk merkt dat veel hashes sneller worden geproduceerd dan stelt het de moeilijkheidsgraad naar boven bij. Zodra een hash is geproduceerd en daarmee het block klaar is om aangeboden te worden aan het netwerk moet er gevalideerd worden of de hash wel juist is. Het valideren wordt gedaan door andere miners doordat zij een block aanbieden dat voortbouwt op het nieuw gecreëerde block. Het is dan ook van belang om te valideren als miner, omdat zij zelf voortbouwen op een gevalideerd block. Het valideren is een stuk makkelijker dan het versleutelen. Het is net als bij een puzzel. Alle stukjes vinden en op de juiste plek leggen kost veel tijd, maar als het af is dan kan iemand in één oogopslag zien dat de puzzel klopt. Mocht een block niet kloppend zijn dan draait het netwerk alles terug naar het laatste block dat wel gevalideerd is.

 

Indien het block wel wordt geaccepteerd dan ontvangen de miners die het block hebben gemaakt een vergoeding vanuit het netwerk en van de gebruikers die de transacties hebben aangeboden. Het netwerk distribueert zelf nieuwe coins als beloning voor de miners. Veel netwerken hebben een limiet op de hoeveelheid coins die in omloop worden gebracht. Zo geeft op dit moment het Bitcoin netwerk 12,5 bitcoins voor het genereren van een block. Elke 210.000 blocks wordt het aantal Bitcoins dat verdient kan worden gehalveerd. Dit heeft als gevolg dat het totaal aantal Bitcoins niet meer dan 21 miljoen zal worden. Bij andere netwerken is de halveringstijd of halveringswaarde anders. Er zijn zelfs netwerken waar een oneindig aantal coins in omloop gebracht kan worden.

 

De transactiekosten die de gebruiker betaald worden op verschillende manieren berekend. Zo maakt Bitcoin gebruik van een fee, een bedrag dat een wallet aanbiedt aan de miners. Zodra de transactie succesvol is verwerkt krijgt de miner de gehele fee. Hoe hoger de fee hoe sneller miners de transactie zullen kiezen om te verwerken. Ethereum maakt gebruik van een systeem waarin een product van fee en gas, letterlijk de hoeveelheid energie die miners gebruiken voor het versleutelen, de uiteindelijke opbrengsten bepaalt. Doordat het systeem gebaseerd is op het aanbieden van transacties die gekozen kunnen worden door miners om te versleutelen kan de prijs van een transactie variëren. Daarnaast is er een fluctuerende waarde van zowel Bitcoin en Ethereum. Als gevolg kan de prijs van een transactie fluctueren. Hieronder zie je de prijs van een transactie  in het Bitcoin systeem. Deze prijs is opgelopen naar 5 dollar. Dit is een serieus probleem voor de uitbreiding van Bitcoin en om te concurreren met banken. Veel van de doorgevoerde updates zijn gericht op vergoten/versnellen van het aantal transacties.

 

Prijs transactie Bitcoin.jpg

 

Een prijsstijging van een cryptocurrency is van een andere aard dan bij een harde valuta, zoals de euro. Dit komt enerzijds, doordat de netwerken de hoeveelheid munten die in omloop zijn volledig geautomatiseerd distribueren. Er is geen controlerend orgaan, dus heeft ook niemand invloed op de distributie van munten. Daarnaast kan een cryptocurrency worden verhandelt op 0,0000001 Bitcoin, ook wel een Satoshi (de naam van de bedenker van Bitcoin). Schaarste is daardoor minder problematisch dan bij de euro. De prijs van een transactie daarentegen is bepalend in welke mate een blockchain netwerk kan concurreren met huidige bank systemen en daarmee is het van grote invloed op het succes van een blcokchain.

Thomas van Wieringen

Deel 2: Bitcoins, ethers en meer

Dit is deel 2 van een serie blogs over de blockchain technologie. Deel 1 vind je hier:Blockchain introductie

Bitcoin, blockchain, ethereum, zomaar wat termen die je de laatste tijd wat vaker hebt gehoord. Wat zijn die dingen eigenlijk en hoe zijn ze aan elkaar gerelateerd?

 

In mijn blog schrijf ik over Blockchain, omdat ik merk dat veel mensen geen goed beeld hebben wat de technologie inhoudt en wat de impact kan zijn voor de financiële wereld. Zelf ben ik onlangs begonnen met het bouwen van een “super computer” om het netwerk te ondersteunen en zodoende heb ik veel geleerd over blockchain.

 

De basis voor het succes van een blockchain is het achterliggende netwerk van gebruikers, aangezien de gebruikers in het netwerk het netwerk in zekere zin zelf in stand houden. In deze blog zal ik verder ingaan op de structuur van het netwerk, de rol van de gebruikers en het gebruik van de wallet.

 

Netwerken bestaan uit gebruikers die informatie uitwisselen dit kan een bericht, een transactie of zelfs een contract zijn. Er zijn grofweg drie smaken: gecentraliseerd, gedecentraliseerd en gedistribueerd.  Het netwerk van een bank is gecentraliseerd. Elke gebruiker is verbonden aan de bank en de bank kan op zijn beurt weer zorgen dat een transactie naar een tweede gebruiker verloopt. Kijken we naar alle (Nederlandse) banken dan hebben we het over een gedecentraliseerd netwerk waarbij de verschillende banken de “knoop” van zijn eigen netwerk zijn. Om alle gedecentraliseerde netwerken van de afzonderlijke banken als een geheel te laten werken is er een centraal punt gecreëerd, namelijk Equens het bedrijf dat alle transacties tussen banken controleert. Je zou dus kunnen zeggen dat alle banken tezamen weer een gecentraliseerd netwerk vormen. Afhankelijk op welk niveau je naar een bank kijkt valt het in gecentraliseerd of gedecentraliseerd netwerk. Bij een gecentraliseerd of gedecentraliseerd netwerk ligt de controle en dus ook de beveiliging bij een één of enkele gebruikers. Het blockchain netwerk kenmerkt zich als een gedistribueerd netwerk. Dat wil zeggen dat iedere gebruiker, ook wel knoop of node genoemd, in contact staat met elke andere gebruiker. Als gevolg hiervan is het netwerk volledig transparant en ligt de controle van het systeem bij de gebruikers. Dat betekent ook dat beveiliging door het systeem zelf wordt verzorgt, er is geen partij die jou privacy waarborgt.   Hieronder volgt een afbeelding waarin de drie type netwerken zijn afgebeeld.

 

 

Drie typen netwerken.png

 

Een overzicht van de drie typen netwerken. t <https://en.wikipedia.org/wiki/Distributed_economy>

 

Een transactie verplaatst zich in een blockchain netwerk langs verschillende knopen, dit wordt een peer-to-peer systeem genoemd. De transactie wordt door de gebruikers zelf vastgelegd in een soort grootboek dat continu wordt geüpdate, gevalideerd en opgeslagen door gebruikers. Dit verschilt van de werkwijze van een bank, omdat een bank gebruik maakt van één of enkele databases en zelf validaties uitvoert. Hoe dit kan functioneren en wat de rol van de gebruiker is leg ik uit in de volgende alinea. Hieronder volgt een afbeelding met een visualisatie van een transactie.

Transactie over het netwerk.png 

Links  het transactieverzoek aan het netwerk. Rechts de route die het verzoek volgt over het netwerk.   <https://medium.com/@micheledaliessi/how-does-the-blockchain-work-98c8cd01d2ae>

 

Gebruikers/Knopen/Nodes

Alle gebruikers in een blockchain netwerk zijn gelijk, dat wil zeggen dat ze in principe evenveel invloed kunnen uitoefenen. Hoeveel invloed een gebruiker uitoefent hangt af van vier functies die een gebruiker kan uitvoeren genaamd: Miner, Wallet, Full Blockchain en Network Routing Node.

1.Miner, dit is een functie waarbij een gebruiker zijn computerkracht gebruikt om het netwerk te ondersteunen door berekeningen in de vorm van versleutelingen te laten doen (hier zal ik in blog 3 dieper op ingaan).

2. Wallet, is een functie waarbij een gebruiker een wallet heeft om transacties te versturen en ontvangen. Hoe een wallet werkt leg ik in de volgende alinea uit.

3.Full blockchain, dit is een functie waarbij een gebruiker een kopie van de gehele blockchain op zijn computer heeft staan.

4.Network Routing Node, dit is een functie waarbij een gebruiker transacties en blocks valideert en ook connecties legt naar nieuwe gebruikers.

vier type functionaliteiten.png Een overzicht van de vier functies in een blockchain  <http://chimera.labs.oreilly.com/books/1234000001802/ch06.html>

Een gebruiker kan meerdere functies uitvoeren. Hieronder is een afbeelding met daarin alle verschillende gebruikers. ik bespreek hier alleen de belangrijkste van.

 

Network Routing Node is een functie die alle gebruikers uitvoeren. Zodra een gebruiker verbonden is aan het netwerk dan voer je “onbewust” deze functie uit, omdat je als knoop in het netwerk mee werkt aan het leggen van verbindingen met andere gebruikers en die verbindingen kunnen gebruikt worden voor het valideren van het netwerk.

 

Wanneer iemand de functie full blockchain uitvoert wordt hij een Full Node genoemd. Deze gebruikers zijn van belang, omdat zij ervoor zorgen dat er geen centrale database nodig is, zoals waar wij als bank van gebruik maken. Het aantal Full Nodes voor zowel Bitcoin als Ethereum is ergens in de tienduizenden. Doordat de gehele blockchain op zo veel verschillende computers is opgeslagen is er een zekere vorm van bescherming tegen hackers. Immers, hoeft er niet maar één of een paar databases gehackt te worden, zoals bij een bank, om de data te manipuleren. Daarentegen betekent het wel dat alle data openbaar beschikbaar is en zelfs lokaal staat opgeslagen bij duizenden mensen.  De Bitcoin blockchain beslaat inmiddels al bijna 130 GB die op duizenden computers ligt opgeslagen.  Het feit dat de data zo verspreid is opgeslagen is op zich geen bescherming tegen hackers, maar de consensus die het netwerk vereist wel. Het netwerk eist dat er altijd overeenstemming is binnen het netwerk om tot nieuwe transacties of veranderingen te komen. Mocht een hacker in staat zijn om een paar honderd computers te hacken dan zal het netwerk niet tot consensus komen en zullen aanpassingen aan het netwerk niet worden geaccepteerd. Men acht zelfs de snelste super computer Quantum niet tot nauwelijks in staat om het Bitcoin of Ethereum netwerk te hacken, vanwege de grote hoeveelheid computers die op hetzelfde moment gehackt zouden moeten worden.

 

De meeste gebruikers vallen in de categorie Lightweight wallet. Dit zijn gebruikers die enkel transacties willen verzenden en/of ontvangen. Om toegang te krijgen tot het netwerk heb je een wallet nodig, een soort rekeningnummer. Om een transactie te doen moet je altijd aangeven van/naar welke wallet de transactie moet plaatsvinden. Het aanmaken van een wallet kan anoniem worden gedaan, is kosteloos en er staat ook geen limiet op. Hier maken sommige gebruikers misbruik van om anoniem illegale aankopen te doen op het darknet.  Middels zoek en speurwerk is te achterhalen wie welke wallet beheert. Daarom proberen deze “misbruikers” steeds weer nieuwe wallets aan te maken om zo de autoriteiten voor te blijven. Zelf heb ik mij geïdentificeerd bij het aankopen van cryptovaluta bij het bedrijf dat  euro’s omwisselt voor cryptovaluta, maar dit is niet verplicht. Mijn privacy is dus enkel gewaarborgd door dat bedrijf, want iedereen kan zien welke transacties verbonden zijn aan mijn wallet. Online kan iedereen alle transacties die worden gedaan met de bijbehorende wallets continu volgen.

 

                                                                                

Vier typen gebruikers.pngDe vier typen gebruikers. http://chimera.labs.oreilly.com/books/1234000001802/ch06.html#_the_extended_bitcoin_network

 

 

Wallet

Ik zal het principe van de wallet verder uitlichten, omdat het concept fundamenteel verschilt van een rekeningnummer. Zo staat er geen bedrag opgeslagen op een wallet. Het systeem berekent de balans op basis van alle eerdere transacties die verstuurd of ontvangen zijn door de wallet. Mocht je dus een nieuwe transactie willen uitvoeren dan wordt ontzettend snel berekent of het saldo voldoet op basis van alle eerdere transacties die je hebt ontvangen en verzonden. Daarnaast bestaat een wallet uit een twee-handtekeningen structuur. Een pubkic key, publieke handtekening, en een private key ,privé handtekening. De public key wordt gedeeld met de gebruiker die een transactie ontvangt. Met de private key kan een bericht worden versleuteld die met behulp van de public key kan worden ontcijferd en zodoende bevestigd dat jij degene bent die het bericht heeft verstuurd. Jij als gebruiker bent de enige die de private key kent. Hieronder is weergeven hoe het versleutelen in algemene zin werkt.

public_private key.pngEen globaal overzicht van het public/private key mechanisme <https://medium.com/@micheledaliessi/how-does-the-blockchain-work-98c8cd01d2ae>

 

Stemmen

In blockchain zijn de gebruikers de baas. Dat betekent dat alle beslissingen genomen worden door de gebruikers. Elke gebruiker heeft evenveel stemrecht, ongeacht hoe actief de gebruiker is of hoeveel hij bijdraagt aan het netwerk. Het stemmen gaat eigenlijk op dezelfde manier als het versturen van een transactie. Bij het stemmen wordt namelijk ook gebruik gemaakt van het twee handtekeningen principe. Op deze manier kan altijd worden herleid dat een stem uniek is en toebehoort een  bepaalde gebruiker. Veranderingen aan het netwerk worden dan ook altijd pas doorgevoerd na een stemming. Om te kunnen stemmen in het Ethereum netwerk gebruikt men een token, wat gezien kan worden als een digitale munt die één stem vertegenwoordigd. Deze token moet door de gebruiker naar een adres gekenmerkt als “voor” de stemming of een adres gekenmerkt als  “tegen” worden gestuurd. Een probleem waar elke blockchain anders mee omgaat is hoe je er voor kan zorgen dat iedereen maar één keer stemt en alleen een menselijke gebruiker kan stemmen. Immers kan iedereen zoveel wallets aanmaken als hij wilt. Enkele oplossingen zijn:

– Het gewicht van de stem af te laten hangen van de waarde die verbonden is aan de wallet. Over hoeveel wallets men dan het vermogen spreid de totale waarde van de wallets wordt niet hoger dan één enkele wallet en daarmee blijft het gewicht van de stem ook gelijk. Belangrijk hierbij is wel dat transacties worden bevroren tijdens een stemming om te voorkomen dat vermogen snel wordt verplaatst na een stem.

-Alleen actieve wallets laten stemmen. Hierdoor worden gebruikers geforceerd transacties te spreiden en te onderhouden over al hun wallets. Hierdoor wordt het zeer tijdrovend om heel veel wallets te maken en daarmee het stemmen te beïnvloeden.

-Gebruik maken van een smart contract, dat is een contract dat vast wordt gelegd in de blockchain, waarin men zijn stem (voor/tegen) moet aangeven en een bepaalde input moeten geven. Het smart contract vraagt meerdere keren om de stem van de gebruiker met een veranderende input. Indien de gebruiker meerdere keren de juiste input geeft en steeds dezelfde voorkeur dan wordt de stem geteld. Hierdoor worden gebruikers gedwongen om actief input te leveren en daarmee wordt de kans verkleind dat er een machine voor de gebruiker stemt. Daarbij wordt er een drempel gecreeerd om als persoon via heel veel wallets te stemmen, omdat dit simpelweg te veel tijd zou gaan kosten.

 

Het gevaar in het stemmen zit hem in het feit dat er consensus moet zijn onder de gebruikers. Wanneer dit niet het geval is dan komt het wel eens voor dat de gebruikers met de minderheid van de stemmen zich afscheiden van de rest, een dergelijk actie heet een hard fork. Dat wil zoveel zeggen als een splitsing in het netwerk die met opzet is doorgevoerd. Onlangs heeft dit plaatsgevonden bij de Bitcoin wat ertoe heeft geleid dat er nu een Bitcoin bestaat en Bcash (de minderheid van de gebruikers).

Thomas van Wieringen

Deel 1: Blockchain introductie

Bitcoin, blockchain, ethereum, zomaar wat termen die je de laatste tijd wat vaker hebt gehoord. Wat zijn die dingen eigenlijk en hoe zijn ze aan elkaar gerelateerd?

 

In mijn blog schrijf ik over Blockchain, omdat ik merk dat veel mensen geen goed beeld hebben wat de technologie inhoudt en wat de impact kan zijn voor de financiele wereld. Zelf ben ik onlangs begonnen met het bouwen van een “super computer” om het netwerk te ondersteunen en zodoende heb ik veel geleerd over blockchain.

 

Bitcoin is de eerste succesvolle implementatie van de blockchaintechnologie en stelt ons in staat om transacties te doen met de digitale valuta Bitcoin. Ethereum is net zoals Bitcoin een blockchaintechnologie en onderscheidt zich van Bitcoin doordat het naast betalingen, met de digitale valuta ether, ook contracten kan digitaliseren en zelfs laten uitvoeren.

 

Laten we bij de gemeenschappelijke deler beginnen. Wat is blockchain? Blockchain is een technologie die ons in staat stelt om via een gedecentraliseerd netwerk transacties te doen. Transacties kunnen te maken hebben met een valuta, maar ook het delen van informatie, zoals bezit of contracten kunnen via dit netwerk gedeeld worden. Anders dan het bankennetwerk waar het netwerk gecontroleerd wordt door één of een kleine groep van spelers ligt in het blockchain netwerk de macht en de controle bij de gebruikers. Het is dan ook mogelijk om zonder intermediair transacties uit te voeren. Dit is één van de aspecten waarom blockchain in potentie de bank kan vervangen. In mijn volgende blog zal ik hier verder op ingaan.

 

Een blockchain netwerk maakt gebruik van de computerkracht van de gebruikers om het netwerk up en running te houden. Het netwerk is dan ook 24/7 online. De gebruikers die hun computerkracht ten gunste van het netwerk stellen worden miners genoemd. De miners krijgen een kleine vergoeding voor het ten gebruik stellen van hun computerkracht. Er zijn inmiddels al gebruikers die gespecialiseerde computers hebben ontwikkeld speciaal om het netwerk zo goed mogelijk te ondersteunen. Hoe de miners geld kunnen verdienen leg ik in blog 3 uit. De computerkracht wordt voornamelijk gebruikt voor het versleutelen van de transacties. Dit gebeurt in een zogenaamd “block”.

 

De veiligheid van het netwerk wordt gewaarborgd door de versleutelde block structuur te combineren met een ketting structuur. In de blockstructuur wordt een aantal transacties gezamenlijk opgeslagen en versleuteld. Verder registreert het block nog enkele gegevens, zoals het blocknummer, een verwijzing naar zijn “parent” block ook wel het voorgaande block, een tijdsstempel wanneer het gemaakt is, de grootte van het block en de hash. Een hash is een langere reeks cijfers en letters die door heel veel berekeningen tot stand is gekomen. Het is dan ook nagenoeg onmogelijk om de hash te ontcijferen.  Doordat het block een tijdsstempel heeft wanneer het gemaakt is, het een blocknummer heeft wat naar zijn positie verwijst en er een verwijzing is naar zijn parent ontstaat een kettingstructuur waarin alle blocken te herleiden zijn. Dit heeft als resultaat dat het hacken van één block niet genoeg is om het systeem te misleiden. Het onderstaande figuur laat zien hoe de ketting structuur eruitziet.

 

bitcoin-block-chain-small.png

Geplakt uit <Blockchain blokstructuur >

De ketting ziet er dan ongeveer zo uit. Een header met het blockchain nummer, een proof of work (hash) een versleuteling die veel reken werk vereist, een verwijzing naar het vorige block (parent block) en een hoeveelheid transacties.

 

Indien iemand al in staat is om één block te veranderen ten gunste van zichzelf dan zou hij ook het block daarvoor moeten aanpassen om de “ketting” nog kloppend te laten zijn. Immers heeft elk block een verwijzing naar een voorgaand block en staan alle transacties geregistreerd. Zodra het netwerk ziet dat er iets niet overeenkomt met de informatie uit voorgaande blocken dan zal het netwerk het “nieuwe” block niet accepteren. In blog 4 zal ik verder ingaan op de structuur en versleuteling.

 

Het netwerk accepteert een block als hij door zes knopen, een knoop komt grofweg overeen met een (groep) gebruikers, wordt gevalideerd. Onderdeel van de validatie is of dezelfde transacties niet al in een ander block zijn opgenomen. Dit moet voorkomen dat een transactie twee keer wordt geregistreerd. Er geldt dan ook dat het block dat als eerste wordt gegenereerd vaak de validatie wint. Dit “winnen” is van belang voor de miners, omdat zij op die manier erkent worden als de schepper van het block. Zodra een block is gevalideerd is de transactie onomkeerbaar en staat voor altijd vastgelegd.

Thomas van Wieringen.

CPython video’s

Do you want to learn more about the CPyhon implementation of the Python programming language. There are nine (yes 9!) videos on Youtube showing the details of the CPython implementation. The presenter of the video’s is Philip Guo, assistant professor in cognitive science at the university of San Diego. The video’s are fascinating to watch and after watching the video’s you have learned a lot. My personal opinion is that you become a better Python programmer knowing the implementation details of CPython.

 

 

CPython

Python is a specification of the syntax and semantics of a programming language. To run the language on a computer an implementation is needed. The most well know implementation is the CPython interpreter, written in C. CPython is the standard and most available implementation of Python. But there others

  • PyPy, an implementation using a subset of Pthon.
  • Jython, an implementation of the interpretor in Java.
  • IronPython, using the .NET framework.
  • MicroPython, using a different interpreter implementation in the C language, meant for embedded devices with severe memory and processing constraints.
  • And there are more.

In general Python is known as an interpreted language. This is not correct. A Python program is first compiled to Python byte code and this code is then interpreted by the Python interpreter. We see the following steps before a Python programs runs using the standard CPython implementation

  • Tokenizing
  • Parsing
  • Creating an Abstract Syntax Tree
  • Compling to byte code
  • Interpreting the byte code.

The byte code itself is not difficult to understand. The c code behind this opcodes is more difficult to read.

To see the byte code you need to import the dis module.

import dis
def add(x,y):
 z = x + y
 return z
dis.dis(add)
 0 LOAD_FAST 0 (x)
 2 LOAD_FAST 1 (y)
 4 BINARY_ADD
 6 STORE_FAST 2 (z)

 8 LOAD_FAST 2 (z)
 10 RETURN_VALUE