Smart Contract as a Service: Using Messages to Share Contracts

A presentation at Ethereum DevCon in October 2019 in Osaka, Osaka Prefecture, Japan by Brooklyn Zelenka

Slide 1

Slide 1

SMART CONTRACTS AS A SERVICE USING MESSAGES TO SHARE CODE

Slide 2

Slide 2

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

Slide 3

Slide 3

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

Slide 4

Slide 4

Slide 5

Slide 5

Slide 6

Slide 6

WEB OF CONTRACTS

Slide 7

Slide 7

WEB OF CONTRACTS 🕷

Slide 8

Slide 8

WEB OF CONTRACTS B I G , H A I RY, AU D A C I O U S G O A L

Slide 9

Slide 9

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 🕑

Slide 10

Slide 10

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 🚀

Slide 11

Slide 11

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 &

Slide 12

Slide 12

WEB OF CONTRACTS HTTP → ETH

Slide 13

Slide 13

WEB OF CONTRACTS HTTP → ETH 🖥 404 💻

Slide 14

Slide 14

WEB OF CONTRACTS HTTP → ETH 🖥 404 💻 0xC4

Slide 15

Slide 15

WEB OF CONTRACTS HTTP → ETH 🖥 404 💻 0xC4

Slide 16

Slide 16

WEB OF CONTRACTS HTTP → ETH 🖥 404 💻 0xC4 2

Slide 17

Slide 17

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 🚀

Slide 18

Slide 18

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?

Slide 19

Slide 19

WEB OF CONTRACTS ON-CHAIN MICROSERVICES

Slide 20

Slide 20

WEB OF CONTRACTS ON-CHAIN MICROSERVICES dApp ERC902 ACL ERC20 ERC721 Storage DEX ERC1337

Slide 21

Slide 21

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

Slide 22

Slide 22

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 23

Slide 23

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 24

Slide 24

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 25

Slide 25

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 26

Slide 26

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 27

Slide 27

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 28

Slide 28

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 29

Slide 29

WEB OF CONTRACTS THE CORE TECHNICAL IDEA

Slide 30

Slide 30

S T R U C T U R E D S TAT U S C O D E S

Slide 31

Slide 31

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 😁👍)

Slide 32

Slide 32

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 🐭 🧀

Slide 33

Slide 33

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

Slide 34

Slide 34

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

Slide 35

Slide 35

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

Slide 36

Slide 36

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

Slide 37

Slide 37

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

Slide 38

Slide 38

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

Slide 39

Slide 39

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

Slide 40

Slide 40

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

Slide 41

Slide 41

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)

Slide 42

Slide 42

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

Slide 43

Slide 43

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

Slide 44

Slide 44

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

Slide 45

Slide 45

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

Slide 46

Slide 46

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

Slide 47

Slide 47

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

Slide 48

Slide 48

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

Slide 49

Slide 49

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

Slide 50

Slide 50

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

Slide 51

Slide 51

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

Slide 52

Slide 52

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)

Slide 53

Slide 53

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)

Slide 54

Slide 54

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*

Slide 55

Slide 55

TOY FLOW FOR CONTRACT MESSAGING

Slide 56

Slide 56

TOY FLOW FOR CONTRACT MESSAGING 🧸💌💰

Slide 57

Slide 57

TOY FLOW N OT FO R S A L E … Y E T

Slide 58

Slide 58

TOY FLOW N OT FO R S A L E … Y E T 💰 💱 🤖

Slide 59

Slide 59

TOY FLOW N OT FO R S A L E … Y E T 💰 💱 🤖

Slide 60

Slide 60

TOY FLOW N OT FO R S A L E … Y E T 💰 💱 buy(💰, 10) ✉ 🤖

Slide 61

Slide 61

TOY FLOW N OT FO R S A L E … Y E T 💰 buyFor(🤖, 10) ✉ 💱 buy(💰, 10) ✉ 🤖

Slide 62

Slide 62

TOY FLOW N OT FO R S A L E … Y E T 💰 buyFor(🤖, 10) 🕚💱 ✉ 💱 buy(💰, 10) ✉ 🤖

Slide 63

Slide 63

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) ✉ 🤖

Slide 64

Slide 64

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 ✉ 🕚💰🤖 ✉ 🤖

Slide 65

Slide 65

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 ✉ 🤖

Slide 66

Slide 66

TOY FLOW I M PAT I E N C E 💰 🕚💱 💱 🕚💰🤖 🤖

Slide 67

Slide 67

TOY FLOW I M PAT I E N C E 💰 🕚💱 💱 🤖 🕚💰🤖 isDoneYet(💰) ✉

Slide 68

Slide 68

TOY FLOW I M PAT I E N C E 💰 🕚💱 💱 🤖 🕚💰🤖 isDoneYet(💰) ✉ 0x43 I’ll call you back when ready ✉ 💔

Slide 69

Slide 69

TOY FLOW K I C K- O F F 💰 🕚💱 💱 🕚💰🤖🧙 🤖

Slide 70

Slide 70

TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 💱 🕚💰🤖🧙 🤖

Slide 71

Slide 71

TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 Ready! ✉ 💱 🕚💰🤖🧙 🤖

Slide 72

Slide 72

TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ buyFor([🤖,🧙], 10) ✉ ✉✉✉ 🕚💰🤖🧙 🤖

Slide 73

Slide 73

TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ buyFor([🤖,🧙], 10) ✉ ✉✉✉ (0x31, [🤖,🧙], 10) Agreed & complete ✉ 🕚💰🤖🧙 🤖

Slide 74

Slide 74

TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ 🤖 🕚💰🤖🧙 buyFor([🤖,🧙], 10) ✉ ✉✉✉ (0x31, [🤖,🧙], 10) Agreed & complete ✉ (0x31, 💰, 10) Agreed & complete ✉

Slide 75

Slide 75

TOY FLOW K I C K- O F F 💰 openForBiz() ✉ 🕚💱 0x41 💱 Ready! ✉ 🤖 🕚💰🤖🧙 buyFor([🤖,🧙], 10) ✉ ✉✉✉ (0x31, [🤖,🧙], 10) Agreed & complete ✉ (0x31, 💰, 10) Agreed & complete ✉ 🎉💁 ✉

Slide 76

Slide 76

S T AT E L E S S S E R V I C E C O N T R A C T S

Slide 77

Slide 77

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 ✨

Slide 78

Slide 78

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

Slide 79

Slide 79

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?

Slide 80

Slide 80

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

Slide 81

Slide 81

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 …

Slide 82

Slide 82

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 …

Slide 83

Slide 83

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 …

Slide 84

Slide 84

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

Slide 85

Slide 85

S T AT E F U L S E R V I C E C O N T R A C T S

Slide 86

Slide 86

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 🤖

Slide 87

Slide 87

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

Slide 88

Slide 88

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 💰

Slide 89

Slide 89

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

Slide 90

Slide 90

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

Slide 91

Slide 91

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 ;

Slide 92

Slide 92

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 ;

Slide 93

Slide 93

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 ;

Slide 94

Slide 94

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 ; 💂 =

Slide 95

Slide 95

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 ?

Slide 96

Slide 96

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 ?

Slide 97

Slide 97

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 ? 💂?

Slide 98

Slide 98

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 ? ✉ 🤔 💂?

Slide 99

Slide 99

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 ? ✉ 🤔 ✉ 📈 💂?

Slide 100

Slide 100

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 ? ✉ 🤔 ✉ 📈 💂?

Slide 101

Slide 101

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 ? ✉ 🤔 ✉ 📈 💂?

Slide 102

Slide 102

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 ? ✉ 🤔 ✉ 📈 💂?

Slide 103

Slide 103

MAKING MONEY

Slide 104

Slide 104

MAKING MONEY 💰 BE CALLED OR BE COLLECTED ☠

Slide 105

Slide 105

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

Slide 106

Slide 106

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

Slide 107

Slide 107

MAKING MONEY SMART CONTRACT ECONOMY

Slide 108

Slide 108

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

Slide 109

Slide 109

USE CASE : LOCALIZED FEEDBACK

Slide 110

Slide 110

USE CASE : LOCALIZED FEEDBACK C💌D

Slide 111

Slide 111

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

Slide 112

Slide 112

USER FEEDBACK S U C C E S S F LOW

Slide 113

Slide 113

USER FEEDBACK S U C C E S S F LOW 💁 J

Slide 114

Slide 114

USER FEEDBACK S U C C E S S F LOW 💁 J 🤖

Slide 115

Slide 115

USER FEEDBACK S U C C E S S F LOW 💁 J 🤖

Slide 116

Slide 116

USER FEEDBACK S U C C E S S F LOW 💁 J tx 🤖

Slide 117

Slide 117

USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 🤖

Slide 118

Slide 118

USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 0x11 🤖

Slide 119

Slide 119

USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 0x11 ⬅⬆⬇➡ 🤖

Slide 120

Slide 120

USER FEEDBACK S U C C E S S F LOW 💁 J tx readOrMutate(…) 0x11 textFor(0x11) ⬅⬆⬇➡ 🤖

Slide 121

Slide 121

USER FEEDBACK S U C C E S S F LOW 💁 tx J readOrMutate(…) 0x11 tx .o ri g in textFor(0x11) ⬅⬆⬇➡ 🤖

Slide 122

Slide 122

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”

Slide 123

Slide 123

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”

Slide 124

Slide 124

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”

Slide 125

Slide 125

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”

Slide 126

Slide 126

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”

Slide 127

Slide 127

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”

Slide 128

Slide 128

USER FEEDBACK R E V E RT F LOW

Slide 129

Slide 129

USER FEEDBACK R E V E RT F LOW 💁 R

Slide 130

Slide 130

USER FEEDBACK R E V E RT F LOW 💁 R

Slide 131

Slide 131

USER FEEDBACK R E V E RT F LOW 💁 R 🤖

Slide 132

Slide 132

USER FEEDBACK R E V E RT F LOW doTheThing() 🤖 💁 R

Slide 133

Slide 133

USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 💁 R

Slide 134

Slide 134

USER FEEDBACK R E V E RT F LOW doTheThing() tx 🤖 revertWith(0x40) 🤖 💁 R

Slide 135

Slide 135

USER FEEDBACK R E V E RT F LOW doTheThing() 💁 R tx 🤖 ⬅⬆⬇➡ revertWith(0x40) 🤖

Slide 136

Slide 136

USER FEEDBACK R E V E RT F LOW doTheThing() 💁 R tx 🤖 textFor(0x40) revertWith(0x40) 🤖 ⬅⬆⬇➡

Slide 137

Slide 137

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”

Slide 138

Slide 138

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”

Slide 139

Slide 139

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”

Slide 140

Slide 140

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”

Slide 141

Slide 141

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”

Slide 142

Slide 142

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”

Slide 143

Slide 143

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”

Slide 144

Slide 144

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”

Slide 145

Slide 145

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