SMART CONTRACTS AS A SERVICE USING MESSAGES TO SHARE CODE
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
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 5
Slide 6
WEB OF CONTRACTS
Slide 7
WEB OF CONTRACTS 🕷
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
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
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
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
WEB OF CONTRACTS
HTTP → ETH
Slide 13
WEB OF CONTRACTS
HTTP → ETH
🖥 404 💻
Slide 14
WEB OF CONTRACTS
HTTP → ETH
🖥 404 💻 0xC4
Slide 15
WEB OF CONTRACTS
HTTP → ETH
🖥 404 💻 0xC4
Slide 16
WEB OF CONTRACTS
HTTP → ETH
🖥 404 💻 0xC4
2
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
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
WEB OF CONTRACTS
ON-CHAIN MICROSERVICES
Slide 20
WEB OF CONTRACTS
ON-CHAIN MICROSERVICES
dApp
ERC902
ACL
ERC20
ERC721
Storage
DEX
ERC1337
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
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 23
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 24
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 25
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 26
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 27
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 28
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 29
WEB OF CONTRACTS
THE CORE TECHNICAL IDEA
Slide 30
S T R U C T U R E D S TAT U S C O D E S
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
TOY FLOW FOR CONTRACT MESSAGING
Slide 56
TOY FLOW FOR CONTRACT MESSAGING 🧸💌💰
Slide 57
TOY FLOW
N OT FO R S A L E … Y E T
Slide 58
TOY FLOW
N OT FO R S A L E … Y E T
💰
💱
🤖
Slide 59
TOY FLOW
N OT FO R S A L E … Y E T
💰
💱
🤖
Slide 60
TOY FLOW
N OT FO R S A L E … Y E T
💰
💱
buy(💰, 10)
✉
🤖
Slide 61
TOY FLOW
N OT FO R S A L E … Y E T
💰
buyFor(🤖, 10)
✉
💱
buy(💰, 10)
✉
🤖
Slide 62
TOY FLOW
N OT FO R S A L E … Y E T
💰
buyFor(🤖, 10) 🕚💱
✉
💱
buy(💰, 10)
✉
🤖
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
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
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
TOY FLOW
I M PAT I E N C E
💰
🕚💱
💱
🕚💰🤖
🤖
Slide 67
TOY FLOW
I M PAT I E N C E
💰
🕚💱
💱
🤖
🕚💰🤖
isDoneYet(💰)
✉
Slide 68
TOY FLOW
I M PAT I E N C E
💰
🕚💱
💱
🤖
🕚💰🤖
isDoneYet(💰)
✉
0x43 I’ll call you back when ready
✉
💔
Slide 69
TOY FLOW
K I C K- O F F
💰
🕚💱
💱 🕚💰🤖🧙
🤖
Slide 70
TOY FLOW
K I C K- O F F
💰
openForBiz()
✉
🕚💱
💱 🕚💰🤖🧙
🤖
Slide 71
TOY FLOW
K I C K- O F F
💰
openForBiz()
✉
🕚💱
0x41 Ready!
✉
💱 🕚💰🤖🧙
🤖
Slide 72
TOY FLOW
K I C K- O F F
💰
openForBiz()
✉
🕚💱
0x41
💱
Ready!
✉
buyFor([🤖,🧙], 10)
✉ ✉✉✉
🕚💰🤖🧙
🤖
Slide 73
TOY FLOW
K I C K- O F F
💰
openForBiz()
✉
🕚💱
0x41
💱
Ready!
✉
buyFor([🤖,🧙], 10)
✉ ✉✉✉
(0x31, [🤖,🧙], 10) Agreed & complete
✉
🕚💰🤖🧙
🤖
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
TOY FLOW
K I C K- O F F
💰
openForBiz()
✉
🕚💱
0x41
💱
Ready!
✉
🤖
🕚💰🤖🧙
buyFor([🤖,🧙], 10)
✉ ✉✉✉
(0x31, [🤖,🧙], 10) Agreed & complete
✉
(0x31, 💰, 10) Agreed & complete
✉
🎉💁
✉
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
MAKING MONEY
Slide 104
MAKING MONEY 💰 BE CALLED OR BE COLLECTED ☠
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
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
MAKING MONEY
SMART CONTRACT ECONOMY
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
USE CASE : LOCALIZED FEEDBACK
Slide 110
USE CASE : LOCALIZED FEEDBACK C💌D
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
USER FEEDBACK
S U C C E S S F LOW
Slide 113
USER FEEDBACK
S U C C E S S F LOW
💁
J
Slide 114
USER FEEDBACK
S U C C E S S F LOW
💁
J
🤖
Slide 115
USER FEEDBACK
S U C C E S S F LOW
💁
J
🤖
Slide 116
USER FEEDBACK
S U C C E S S F LOW
💁
J
tx
🤖
Slide 117
USER FEEDBACK
S U C C E S S F LOW
💁
J
tx
readOrMutate(…)
🤖
Slide 118
USER FEEDBACK
S U C C E S S F LOW
💁
J
tx
readOrMutate(…) 0x11
🤖
Slide 119
USER FEEDBACK
S U C C E S S F LOW
💁
J
tx
readOrMutate(…) 0x11
⬅⬆⬇➡
🤖
Slide 120
USER FEEDBACK
S U C C E S S F LOW
💁
J
tx
readOrMutate(…) 0x11 textFor(0x11)
⬅⬆⬇➡
🤖
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
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
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
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
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
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
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
USER FEEDBACK
R E V E RT F LOW
Slide 129
USER FEEDBACK
R E V E RT F LOW
💁
R
Slide 130
USER FEEDBACK
R E V E RT F LOW
💁
R
Slide 131
USER FEEDBACK
R E V E RT F LOW
💁
R
🤖
Slide 132
USER FEEDBACK
R E V E RT F LOW doTheThing()
🤖
💁
R
Slide 133
USER FEEDBACK
R E V E RT F LOW doTheThing()
tx
🤖
💁
R
Slide 134
USER FEEDBACK
R E V E RT F LOW doTheThing()
tx
🤖 revertWith(0x40)
🤖
💁
R
Slide 135
USER FEEDBACK
R E V E RT F LOW doTheThing()
💁
R
tx
🤖
⬅⬆⬇➡ revertWith(0x40)
🤖
Slide 136
USER FEEDBACK
R E V E RT F LOW doTheThing()
💁
R
tx
🤖
textFor(0x40) revertWith(0x40)
🤖
⬅⬆⬇➡
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
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
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
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
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
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
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
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
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