20
Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018

Using Erlang in Blockchain Development - Code Sync · Using Erlang in Blockchain Development Ulf Wiger Æternity Code BEAM STO, Stockholm 1 Jun 2018. ... • Simplifies testing •

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

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 •

Ó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 •

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 •

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 •

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 •

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 •

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 •

Æ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 •

BuildandTest

• Rebar3forbuild(worksso-so)• EUnit,CommonTestfortestautomation• Dialyzertypeanalysis• Quviq QuickCheckmodels

• Python-basedacceptancetestsuite