A presentation at Ethereum DevCon in in Osaka, Osaka Prefecture, Japan by Brooklyn Zelenka
SMART CONTRACTS AS A SERVICE USING MESSAGES TO SHARE CODE
SMART CONTRACTS AS A SERVICE B R O O K LY N Z E L E N K A , @ e x p e d e
SMART CONTRACTS AS A SERVICE B R O O K LY N Z E L E N K A , @ e x p e d e • Cofounder/CTO at Fission — https://fission.codes • It is so incredibly good to be back in Osaka 🎉 • PLT & VM enthusiast • Prev. Ethereum R&D, now visiting from IPFS-land 🚀🌖 • EIPs • 615: EVM Subroutines & Static Jumps • 902: Token Permissions / Validation • 1066: Standardized Status Codes • Dependency for security token standards (ERC-1400), &c • 1444: Permissionless On-Chain Translation • ECIP 1050
WEB OF CONTRACTS
WEB OF CONTRACTS 🕷
WEB OF CONTRACTS B I G , H A I RY, AU D A C I O U S G O A L
WEB OF CONTRACTS B I G , H A I RY, AU D A C I O U S G O A L • Write fewer lines of code 🕑
WEB OF CONTRACTS B I G , H A I RY, AU D A C I O U S G O A L • Write fewer lines of code 🕑 • Have higher confidence 🚀
WEB OF CONTRACTS B I G , H A I RY, AU D A C I O U S G O A L • Write fewer lines of code 🕑 • Have higher confidence 🚀 • Make Ethereum more accessible &
WEB OF CONTRACTS HTTP → ETH
WEB OF CONTRACTS HTTP → ETH 🖥 404 💻
WEB OF CONTRACTS HTTP → ETH 🖥 404 💻 0xC4
WEB OF CONTRACTS HTTP → ETH 🖥 404 💻 0xC4
WEB OF CONTRACTS HTTP → ETH 🖥 404 💻 0xC4 2
WEB OF CONTRACTS A F U T U R E A LO N G S I D E U N I X & H T T P 🚀
WEB OF CONTRACTS A F U T U R E A LO N G S I D E U N I X & H T T P 🚀 • What do Unix and HTTP have in common? Composition! • Ethereum is a shared system — can we leverage each other’s contacts? • Can high value data & utilities make money on-chain?
WEB OF CONTRACTS ON-CHAIN MICROSERVICES
WEB OF CONTRACTS ON-CHAIN MICROSERVICES dApp ERC902 ACL ERC20 ERC721 Storage DEX ERC1337
WEB OF CONTRACTS ON-CHAIN MICROSERVICES • “Web of contracts” • Leverage shared infrastructure (pluggable) dApp ERC902 ACL ERC20 ERC721 DEX • High quality smart contracts • Efficient, reviewed, security hardened • Compose new protocols • Biz models for high-value service contracts Storage ERC1337
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
WEB OF CONTRACTS THE CORE TECHNICAL IDEA
S T R U C T U R E D S TAT U S C O D E S
S T R U C T U R E D S TAT U S C O D E S SO SIMPLE A MACHINE CAN USE IT 🤖👍 (HUMANS, TOO 😁👍)
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 0100 0001
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001 Reason
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001 Reason
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001 Reason
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001 Reason 0x0B
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001 Reason 0x0B 0000 1011
S T R U C T U R E D S T AT U S C O D E S TA S T Y N I B B L E S 🐭 🧀 0x41 Category 0100 0001 Reason 0x0B 0000 1011 (0x0* General is same as just the reason alone)
S T R U C T U R E D S T AT U S C O D E S C O D E TA B L E
S T R U C T U R E D S T AT U S C O D E S C O D E TA B L E 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 2 3 4 5 6 7 8 9 A B C D E F
S T R U C T U R E D S T AT U S C O D E S C O D E TA B L E Category Time Range Auth Agreements Off Chain … 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 2 3 4 5 6 7 8 9 A B C D E F
Category S T R U C T U R E D S T AT U S C O D E S Time C O D E TA B L E Auth Agreements Off Chain … 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 Reason 2 3 Fail Ok Accepted/Started Action Required … Range 4 5 6 7 8 9 A B C D E F
Category S T R U C T U R E D S T AT U S C O D E S Time C O D E TA B L E Range Agreements Off Chain … 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 4 5 6 7 8 9 A B C D E F SEARCH / MATCH Reason 2 3 Fail Ok Accepted/Started Action Required … Auth
Category S T R U C T U R E D S T AT U S C O D E S Time C O D E TA B L E Range Auth Agreements … 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 AWA I T I N G 4 5 6 7 8 9 A B C D E F SEARCH / MATCH Reason 2 3 Fail Ok Accepted/Started Action Required … Off Chain
Category S T R U C T U R E D S T AT U S C O D E S Time C O D E TA B L E Range Auth Agreements … 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 AWA I T I N G 4 5 6 7 8 9 A B C D E F SEARCH / MATCH Reason 2 3 Fail Ok Accepted/Started Action Required … Off Chain
Category S T R U C T U R E D S T AT U S C O D E S Time C O D E TA B L E Auth Agreements Off Chain … 0* 1* 2* 3* 4* 5* 6* 7* 8* 9* A* B* C* D* E* F* 0 1 0x23 Awaiting Match 2 3 AWA I T I N G 4 5 6 7 8 9 A B C D E F SEARCH / MATCH Reason Fail Ok Accepted/Started Action Required … Range
S T R U C T U R E D S T AT U S C O D E S HELPER LIBRARY 🛠 npmjs.com/package/fission-codes
S T R U C T U R E D S T AT U S C O D E S HELPER LIBRARY 🛠 npmjs.com/package/fission-codes
S T R U C T U R E D S T AT U S C O D E S HELPER LIBRARY 🛠 npmjs.com/package/fission-codes Combine (inclusions)
S T R U C T U R E D S T AT U S C O D E S HELPER LIBRARY 🛠 npmjs.com/package/fission-codes Combine (inclusions) Pull Apart (projections)
S T R U C T U R E D S T AT U S C O D E S HELPER LIBRARY 🛠 npmjs.com/package/fission-codes Combine (inclusions) Pull Apart (projections) Automatic require with (hardcoded) message*
TOY FLOW FOR CONTRACT MESSAGING
TOY FLOW FOR CONTRACT MESSAGING 🧸💌💰
TOY FLOW N OT FO R S A L E … Y E T
TOY FLOW N OT FO R S A L E … Y E T 💰 💱 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 💱 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 💱 buy(💰, 10) ✉ 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 buyFor(🤖, 10) ✉ 💱 buy(💰, 10) ✉ 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 buyFor(🤖, 10) 🕚💱 ✉ 💱 buy(💰, 10) ✉ 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 buyFor(🤖, 10) 🕚💱 ✉ 0x43 I’ll call you back when ready ✉ 💱 buy(💰, 10) ✉ 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 💱 buy(💰, 10) buyFor(🤖, 10) 🕚💱 ✉ 0x43 I’ll call you back when ready ✉ 🕚💰🤖 ✉ 🤖
TOY FLOW N OT FO R S A L E … Y E T 💰 💱 buy(💰, 10) ✉ buyFor(🤖, 10) 🕚💱 ✉ 0x43 I’ll call you back when ready ✉ 🕚💰🤖 0x43 I’ll call you back when ready ✉ 🤖
TOY FLOW I M PAT I E N C E 💰 🕚💱 💱 🕚💰🤖 🤖
TOY FLOW I M PAT I E N C E 💰 🕚💱 💱 🤖 🕚💰🤖 isDoneYet(💰) ✉
TOY FLOW I M PAT I E N C E 💰 🕚💱 💱 🤖 🕚💰🤖 isDoneYet(💰) ✉ 0x43 I’ll call you back when ready ✉ 💔
TOY FLOW K I C K- O F F 💰 🕚💱 💱 🕚💰🤖🧙 🤖
TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 💱 🕚💰🤖🧙 🤖
TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 Ready! ✉ 💱 🕚💰🤖🧙 🤖
TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ buyFor([🤖,🧙], 10) ✉ ✉✉✉ 🕚💰🤖🧙 🤖
TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ buyFor([🤖,🧙], 10) ✉ ✉✉✉ (0x31, [🤖,🧙], 10) Agreed & complete ✉ 🕚💰🤖🧙 🤖
TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ 🤖 🕚💰🤖🧙 buyFor([🤖,🧙], 10) ✉ ✉✉✉ (0x31, [🤖,🧙], 10) Agreed & complete ✉ (0x31, 💰, 10) Agreed & complete ✉
TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ 🤖 🕚💰🤖🧙 buyFor([🤖,🧙], 10) ✉ ✉✉✉ (0x31, [🤖,🧙], 10) Agreed & complete ✉ (0x31, 💰, 10) Agreed & complete ✉ 🎉💁 ✉
S T AT E L E S S S E R V I C E C O N T R A C T S
S T AT E L E S S S E R V I C E C O N T R A C T S AUDITED, EFFICIENT LIBRARY CODE ✨
S TA T E L E S S S E R V I C E C O N T R A C T S SAFE , AUDITED LIBRARIES
S TA T E L E S S S E R V I C E C O N T R A C T S SAFE , AUDITED LIBRARIES • Overriding functions and redeploying can be dangerous • On-chain libraries can be verified & trusted • Why redeploy SafeMath? • It’s impractical when JUMP is so cheap • What about more complex, or security-critical functions?
S TA T E L E S S S E R V I C E C O N T R A C T S S E PA R AT I O N O F C O N C E R N S
S TA T E L E S S S E R V I C E C O N T R A C T S S E PA R AT I O N O F C O N C E R N S MyToken name = “MyToken” totalSupply = 1000000 …
S TA T E L E S S S E R V I C E C O N T R A C T S S E PA R AT I O N O F C O N C E R N S ERC20’ Stateless Functions ERC902 Transfer Restrictions MyToken name = “MyToken” totalSupply = 1000000 …
S TA T E L E S S S E R V I C E C O N T R A C T S S E PA R AT I O N O F C O N C E R N S ERC20’ Stateless Functions ERC902 Transfer Restrictions 0x21 In Range MyToken name = “MyToken” totalSupply = 1000000 …
S TA T E L E S S S E R V I C E C O N T R A C T S S E PA R AT I O N O F C O N C E R N S ERC20’ Stateless Functions ERC902 Transfer Restrictions 0x21 In Range MyToken name = “MyToken” totalSupply = 1000000 … 0x16 Banned
S T AT E F U L S E R V I C E C O N T R A C T S
S T AT E F U L S E R V I C E C O N T R A C T S D ATA CA N B E A N E N D I N I TS E L F 🤖
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N 💰
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N 💰 9
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N 💰 ✉ 🤔 9
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N 💰 ✉ 🤔 9 9 ;
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 💰 ✉ 🤔 9 9 ;
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ;
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 =
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 = 9 ?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 = ✉ 🤔 9 ?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 = ✉ 🤔 9 ? 💂?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 = ✉ 🤔 9 ? ✉ 🤔 💂?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 = ✉ 🤔 9 ? ✉ 🤔 ✉ 📈 💂?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 9 9 ; 💂 = ✉ 🤔 ✉ 👍 9 ? ✉ 🤔 ✉ 📈 💂?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✉ 🤔 ✉ ✅ 9 9 ; 💂 = ✉ 🤔 ✉ 👍 9 ? ✉ 🤔 ✉ 📈 💂?
S TA T E F U L S E R V I C E C O N T R A C T S C RO S S - B O R D E R S E C U R I T Y TO K E N ✉ 🤔 ✉ ⏲ 💰 ✅ ✉ 🤔 ✉ ✅ 9 9 ; 💂 = ✉ 🤔 ✉ 👍 9 ? ✉ 🤔 ✉ 📈 💂?
MAKING MONEY
MAKING MONEY 💰 BE CALLED OR BE COLLECTED ☠
MAKING MONEY T H O U G H T E X P E R I M E N T : R E N TA L E C O N O M Y
MAKING MONEY T H O U G H T E X P E R I M E N T : R E N TA L E C O N O M Y • Charge for function calls • Not unheard of today, but less common • Audits are expensive • High value data is… high value • Incentivize high quality, audited code by paying for it’s creation
MAKING MONEY SMART CONTRACT ECONOMY
MAKING MONEY SMART CONTRACT ECONOMY • In a hypothetical state rent future this behaves like an economy • Incentivize high-quality contracts that can do more than just survive • The ones that don’t provide value “go under” • Per-invocation “lambda-style” charges • Buy a license on chain • Per-contract or per-vendor • Time • Permanent • Number of calls • Number of blocks
USE CASE : LOCALIZED FEEDBACK
USE CASE : LOCALIZED FEEDBACK C💌D
USER FEEDBACK O N - C H A I N L O C A L I Z AT I O N E🤖 Requestor ⬅⬆⬇➡ LocalizationPreference N P O J M K L Localization Localization Localization Localization Localization Localization Localization
USER FEEDBACK S U C C E S S F LOW
USER FEEDBACK S U C C E S S F LOW 💁 J
USER FEEDBACK S U C C E S S F LOW 💁 J 🤖
USER FEEDBACK S U C C E S S F LOW 💁 J 🤖
USER FEEDBACK S U C C E S S F LOW 💁 J tx 🤖
USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 🤖
USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 0x11 🤖
USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 0x11 ⬅⬆⬇➡ 🤖
USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 0x11 textFor(0x11) ⬅⬆⬇➡ 🤖
USER FEEDBACK S U C C E S S F LOW 💁 tx J readOrMutate(…) 0x11 tx .o ri g in textFor(0x11) ⬅⬆⬇➡ 🤖
USER FEEDBACK S U C C E S S F LOW 💁 tx J readOrMutate(…) 0x11 tx .o ri g in 🤖 textFor(0x11) ⬅⬆⬇➡ Q 0x11 -> “Povoleno” J 0x11 -> “許す” N 0x11 -> “Allowed”
USER FEEDBACK S U C C E S S F LOW 💁 tx J readOrMutate(…) 0x11 tx .o ri g in 🤖 textFor(0x11) textFor(0x11) ⬅⬆⬇➡ Q 0x11 -> “Povoleno” J 0x11 -> “許す” N 0x11 -> “Allowed”
USER FEEDBACK S U C C E S S F LOW 💁 tx J readOrMutate(…) 0x11 tx .o ri g in 🤖 textFor(0x11) textFor(0x11) ⬅⬆⬇➡ “許す” Q 0x11 -> “Povoleno” J 0x11 -> “許す” N 0x11 -> “Allowed”
USER FEEDBACK S U C C E S S F LOW 💁 tx J readOrMutate(…) 0x11 tx .o ri g in “許す” 🤖 textFor(0x11) textFor(0x11) ⬅⬆⬇➡ “許す” Q 0x11 -> “Povoleno” J 0x11 -> “許す” N 0x11 -> “Allowed”
USER FEEDBACK S U C C E S S F LOW 💁 tx readOrMutate(…) “許す” 0x11 J tx .o ri g in “許す” 🤖 textFor(0x11) textFor(0x11) ⬅⬆⬇➡ “許す” Q 0x11 -> “Povoleno” J 0x11 -> “許す” N 0x11 -> “Allowed”
USER FEEDBACK S U C C E S S F LOW AuthorizingContract 許す 💁 tx readOrMutate(…) “許す” 0x11 J tx .o ri g in “許す” 🤖 textFor(0x11) textFor(0x11) ⬅⬆⬇➡ “許す” Q 0x11 -> “Povoleno” J 0x11 -> “許す” N 0x11 -> “Allowed”
USER FEEDBACK R E V E RT F LOW
USER FEEDBACK R E V E RT F LOW 💁 R
USER FEEDBACK R E V E RT F LOW 💁 R
USER FEEDBACK R E V E RT F LOW 💁 R 🤖
USER FEEDBACK R E V E RT F LOW doTheThing() 🤖 💁 R
USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 💁 R
USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 revertWith(0x40) 🤖 💁 R
USER FEEDBACK R E V E RT F LOW doTheThing() 💁 R tx 🤖 ⬅⬆⬇➡ revertWith(0x40) 🤖
USER FEEDBACK R E V E RT F LOW doTheThing() 💁 R tx 🤖 textFor(0x40) revertWith(0x40) 🤖 ⬅⬆⬇➡
USER FEEDBACK R E V E RT F LOW doTheThing() 💁 R tx 🤖 textFor(0x40) revertWith(0x40) 🤖 ⬅⬆⬇➡ Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 💁 R tx.origin textFor(0x40) revertWith(0x40) 🤖 ⬅⬆⬇➡ Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 💁 R tx.origin textFor(0x40) revertWith(0x40) 🤖 ⬅⬆⬇➡ 0x40 Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 💁 R tx.origin “ຫມ#ດອາຍu” textFor(0x40) revertWith(0x40) 🤖 ⬅⬆⬇➡ 0x40 Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 💁 R tx.origin “ຫມ#ດອາຍu” textFor(0x40) revertWith(0x40) 🤖 “ຫມ#ດອາຍu” ⬅⬆⬇➡ 0x40 Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() tx revert(“ຫມ#ດອາຍu”) 🤖 💁 R tx.origin “ຫມ#ດອາຍu” textFor(0x40) revertWith(0x40) 🤖 “ຫມ#ດອາຍu” ⬅⬆⬇➡ 0x40 Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() 😭“ຫມ#ດອາຍu”😭 tx revert(“ຫມ#ດອາຍu”) 🤖 💁 R tx.origin “ຫມ#ດອາຍu” textFor(0x40) revertWith(0x40) 🤖 “ຫມ#ດອາຍu” ⬅⬆⬇➡ 0x40 Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
USER FEEDBACK R E V E RT F LOW doTheThing() 😭“ຫມ#ດອາຍu”😭 tx revert(“ຫມ#ດອາຍu”) 🤖 💁 R tx.origin “ຫມ#ດອາຍu” textFor(0x40) revertWith(0x40) 🤖 “ຫມ#ດອາຍu” ⬅⬆⬇➡ 0x40 Q 0x40 -> “Prošlý” R 0x40 -> “ຫມ#ດອາຍu” N 0x40 -> “Expired”
https://fission.codes https://tools.fission.codes J THANK YOU, 大阪市 🎉 brooklyn@fission.codes g i t h u b . c o m /e x p e d e @expede
Currently, developers deploy multiple copies of the same contract to the Ethereum blockchain. But with a shared global system, why not deploy contracts once and make them available for everyone? Learning from the actor model of message passing and the ERC1066 Status Codes Standard, I will present a model for “smart contract as a service.” This style of contract design can lead to highly vetted and secure contracts that anyone can re-use. Their persistence and re-use means we can also write integrations so that non-smart contract developers can make use of them off chain.