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