![Page 1: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/1.jpg)
UsingErlang inBlockchainDevelopment
UlfWigerÆternity
CodeBEAMSTO,Stockholm1Jun2018
![Page 2: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/2.jpg)
Stopalltheclocks,cutoffthetelephone,Preventthedog frombarkingwiththejuicybone.Silencethepianosand,withmuffleddrum,Bringoutthecoffin.Letthemourners come.
What'stheBestLanguageforPoetry?
Ja nog är det svårt när droppar faller.Skälvande av ängslan tungt de hänger,klamrar sig vid kvisten, sväller, glider –tyngden drar dem neråt, hur de klänger.
![Page 3: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/3.jpg)
ExpressingComplexIdeas
• Languagesareshapedbycultureandexperience• Thelanguageshapestheexpressionofcomplexideas• Universalgrammar(Chomsky2000)
![Page 4: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/4.jpg)
TranslatingComplexIdeas
Furu ike yakawazu tobikomumizu no oto
Old pond — frogs jumped in — sound of water.
A lonely pond in age-old stillness sleeps . . .Apart, unstirred by sound or motion . . . tillSuddenly into it a lithe frog leaps.
Into the ancient pondA frog jumpsWater’s sound!
Theoldpond,Afrogjumps in:Plop!
http://www.bopsecrets.org/gateway/passages/basho-frog.htm
![Page 5: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/5.jpg)
OpinionatedProgrammingLanguagesInstruction-level
Math-oriented
Everything'sanobject
Concurrent/functional
![Page 6: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/6.jpg)
TheModernDivide
• PerformancevsProductivity• High-Levellanguages—slowerbutsome10xmoreproductive
• Erlang,Python,Scala,Haskell,Clojure,...• Low-Level—detailed,lowoverhead
• C/C++,linkable• Java,etc.non-linkable
• Performanceincomplexsystemsisadifferentbeast• HLlanguages maywellbefasteronsometasks,e.g.
• Complexmemorymanagement• Complexconcurrency
![Page 7: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/7.jpg)
TheModernDivide(2)
• Concurrency• Strongconcurrencybydesign
• Erlang,Clojure,Haskell,GO(Rust?)...• Concurrencyasanafterthought
• C/C++,Python,(Java),...
• Fault-tolerance• Bydesign
• Erlang,Akka,CloudHaskell...• DIY
• Mostoftherest
![Page 8: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/8.jpg)
WhatAboutBlockchains?
• Fewpartsareperformancecritical(today)• MainlyProofofWork,hashing,signatures• TreatasanexternalserviceorBIFs(potentiallyspecifichardware)
• Lotsofnetworking• Movingtarget• Algorithms/featuresstillevolving
![Page 9: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/9.jpg)
HowDoesErlang Help?
• Looselycoupledcomponents• Simplifiesparalleldevelopment• Simplifiesreuse• Flexibleevolution
• ConcurrencyDoneRight• Protocolaspectsisolatedfromprogramlogic• Easytochange/evolveprotocols• Networkingscalabilitynotabigconcern• (we'renotusingDistributedErlang)• Complexstatemachinesupport(morelater)
![Page 10: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/10.jpg)
HowDoesErlang Help?(2)
• FunctionalProgramming• Simplifiestesting• Code,oncecorrect,tendstostay correct• Reducessurprisingside-effects• Powerfulforblockchain statemanagement
• Carrier-ClassProductMentality• Stellarbackwardcompatibility• Rock-solidVM• No"dependencyhell"• Basically'attack-proof' networkingsupport
![Page 11: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/11.jpg)
Challenges?
• Fewotherblockchain projectsuseErlang• Feweropportunitiesfordirectreuse• Thenagain,re-writing/portingaidsunderstanding;-)
• Doesn'trunoniOSorAndroid• Notnecessarilymuchofadisadvantage
![Page 12: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/12.jpg)
StatechannelsinErlang
• Purpose:Establish"off-chain"channelsforfastandcheaptransactions• On-chainactivityonlywhenopeningandclosingchannel• Fundslockedintothechannelcanbetransferredinco-signedtransactions"forfree"• "Trustbutverify"off-chain,Mutualcloseordisputeresolutionon-chain
![Page 13: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/13.jpg)
Ónen i-Estel Edain.Ú-chebin Estel anim
• Designdecision: SCdaemonwithasimplifiedWebSocket API• Complicatesthestatemachine• HopefullysimplifiesclientAppdesign
{Transfer,From,To,Amt}
{sign,NewStateTx}
{signed, SignedTx}
{update,SignedTx}{sign, SignedTx}
{signed, CoSignedTx}
{update_ack,CoSignedTx}{info, CoSignedTx}
Awaiting_signature
Awaiting_update_ack Awaiting_signature
Transitionstates!
![Page 14: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/14.jpg)
AvoidDeathbyAccidentalComplexity
• https://www.infoq.com/presentations/Death-by-Accidental-Complexity(2010talk,basedonStructuredNetworkProgramming EUC2005)
• Mustavoidhavingtohandleallpossibleorderingsofincomingmessages• Otherwise,complexityexplosionintransitionstates
![Page 15: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/15.jpg)
StateMachineprogramminginErlang
• Old-school:textbookErlang• Simpleandbeautiful• Noautomaticsupportforsystems(OTP)functionality• plain_fsm – acludgyway of getting both
• Oldbehavior:gen_fsm• SupportsOTPfunctionality• Doesn'thandleFSMcomplexity(noselectivereceive)
• Newbehavior:gen_statem• SupportsOTPfunctionality• Supportsselective receive
![Page 16: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/16.jpg)
Erlang paysoff—FSMprogramminginpractice• Asmanyprocessesaslogicallyconvenient• Separateconcerns• Linkedtogetherforfailurehandling
noisesession(gen_server)
noisesession(gen_server)
SCfsm(gen_statem)
SCfsm(gen_statem)
WShandler(cowboycallback)
WShandler(cowboycallback)
Chainwatcher(gen_server)
Chainwatcher(gen_server)
![Page 17: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/17.jpg)
Transitionstatehandlingingen_statem
Validevents,butshouldnotbehandledhere
Pattern-matchassertingthatwegottheeventwewerewaitingfor
Invalidevents(fornow)handledbydefault
![Page 18: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/18.jpg)
Insummary
• Notalwayseasytosaywhy alanguageisinitiallychosen• Languages(esp.opinionated ones)shapeyourthinking• Erlang wellsuitedtoblockchain development• Brilliantforstatechannelprogramming!
• Thegen_statembehaviorisanexcellentadditiontoOTP
![Page 19: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/19.jpg)
Æternity epochDependencies
• OTPcomponentsused• Mnesia (DBMS)• ssl,inets,asn1(comms)• runtime_tools (tracing)
• Æternity coreapps• Coresvcs,mining,chain,txs,...• HTTP-,Websocket API,Gossip• SmartContracts,AEVM• NamingService• Oracles
• Externalcomponents• Cuckoocycle(C++,ownwrapper)• RocksDb (mnesia backend)• Exometer (metrics)• Cowboy(webserver)• Jsx,yamerl,base58,msgpack• Jesse(JSON-Schemavalidation)• IDNA• enacl,sha3• gproc,jobs,lager,poolboy,...
![Page 20: Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •](https://reader036.vdocuments.mx/reader036/viewer/2022062306/5ee16b96ad6a402d666c4fa0/html5/thumbnails/20.jpg)
BuildandTest
• Rebar3forbuild(worksso-so)• EUnit,CommonTestfortestautomation• Dialyzertypeanalysis• Quviq QuickCheckmodels
• Python-basedacceptancetestsuite