59
Financial Contracts on Blockchain Marlowe Simon Thompson Pablo Lamela Seijas Alex Nemish

Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

FinancialContractsonBlockchain

Marlowe

SimonThompsonPabloLamelaSeijasAlexNemish

Page 2: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Marlowe:financialcontractsonblockchain

MarlowelanguageforfinancialcontractsonblockchainandparticularlyCardano.

Meadowfordevelopmentandsimulation.

Page 3: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1
Page 4: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Fortran

Algol

BASIC

Page 5: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

C++

Java

Haskell

Page 6: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Solidity

Bitcoinscript

Plutus

Michelson

www.shelleypalmer.com

Page 7: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1
Page 8: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

CSL

DAML

CordaUC

Page 9: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

FinancialDSLsaren’tnew

Page 10: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Wehaveamodel…

Page 11: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 12: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 13: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 14: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 15: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 16: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 17: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 18: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 19: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example:escrowcontract

AlicewantstobuyacatfromBob,butneitherofthemtruststheother.

TheybothtrustCarol,though.

Page 20: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Page 21: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Example

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Page 22: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Example When this condition becomes true, do this …

Page 23: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Example

A choice of two options, depending on this value

Page 24: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Ontoblockchain

Page 25: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Ontoblockchain

EnforcementThelegalsystemensuresfinancialcontracts…

…butshouldacontractonblockchainenforceitself?

Page 26: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Ontoblockchain

EnforcementThelegalsystemensuresfinancialcontracts…

…butshouldacontractonblockchainenforceitself?

Doublespend Blockchaindesignedtopreventspendingthesamemoneytwice…

…butthat’spreciselyhowcreditworks.

Page 27: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Operation

Modality:“pull”not“push”Thecontractdoesnotmakeactionshappen…

…butinsteadallowsthemtotakeplace.

Page 28: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Operation

Modality:“pull”not“push”Thecontractdoesnotmakeactionshappen…

…butinsteadallowsthemtotakeplace.

Correctness Notjustamatterofavoidingbadbehaviour…

…butalsomakesurethatgoodthingshappen.

Page 29: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

“ThespotpriceofoilinOsloat12:00,31-12-17”.

Randomvalues.

Participantssign-off,…

Interactionswiththeoutsideworld

Page 30: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Commitments

Commitacertainamountofcashforafinitetime.

Needtoavoid“walkaway”…

Page 31: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Commitmentsandtimeouts

Commitacertainamountofcashforafinitetime.

Needtoavoid“walkaway”…

Wedon’trequireacommitment:canonlyaskforone…

…andonlywaitaboundedtimeforthecommitmenttobemade.

Page 32: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Escrow–timeouts

Page 33: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) 90

Escrow–timeouts

(Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Page 34: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) 90

Escrow–timeouts

(Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Timeout: waiting ends at this block height.

Page 35: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) 90

Escrow–timeouts

(Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 36: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) 90

Escrow–timeouts

(Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original)) redeem_original)

Do this at timeout, if trigger hasn't happened.

Page 37: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments

(When (Or (two_chose alice bob carol refund) (two_chose alice bob carol pay)) 90 (Choice (two_chose alice bob carol pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 38: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Escrow–commitments

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 39: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 40: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments Waits for Alice to make a commitment of 15k ADA

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 41: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments Waits for Alice to make a commitment of 15k ADA

Commitment until slot height 100

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 42: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments Waits for Alice to make a commitment of 15k ADA

Commitment until slot height 100

Can be redeemed after that (When (Or (majority_chose refund)

(majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Page 43: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments Waits for Alice to make a commitment of 15k ADA

Commitment until slot height 100

Can be redeemed after that (When (Or (majority_chose refund)

(majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Only wait until slot height 10…

Page 44: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

Escrow–commitments Waits for Alice to make a commitment of 15k ADA

Commitment until slot height 100

… and if no commitment do this.

Can be redeemed after that (When (Or (majority_chose refund)

(majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Only wait until slot height 10…

Page 45: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

www.actusfrf.org

Page 46: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Howshouldwewriterealcontracts?

Page 47: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

EmbeddedDSL

(When (Or (two_chose alice bob carol refund) (two_chose alice bob carol pay)) (Choice (two_chose alice bob carol pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Page 48: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

EmbeddedDSL

(When (Or (two_chose alice bob carol refund) (two_chose alice bob carol pay)) (Choice (two_chose alice bob carol pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Page 49: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

EmbeddedDSL

(When (Or (two_chose alice bob carol refund) (two_chose alice bob carol pay)) (Choice (two_chose alice bob carol pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) (majority_chose pay)) (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original))

Page 50: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

EmbeddedDSL

(When (Or (two_chose alice bob carol refund) (two_chose alice bob carol pay)) (Choice (two_chose alice bob carol pay) (Pay alice bob AvailableMoney) redeem_original))

(When (Or (majority_chose refund) pay_chosen) (Choice pay_chosen (Pay alice bob AvailableMoney) redeem_original)) where pay_chosen = majority_chose pay

Page 51: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Textorblocks?

CommitCash com1 alice ada100 10 200 (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1 bob alice ada20 200 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)))) (RedeemCC com1 Null)) Null

Page 52: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

(CommitCash id1 alice 15000 10 100

Null)

(When (Or (majority_chose refund) (majority_chose pay)) 90 (Choice (majority_chose pay) (Pay alice bob AvailableMoney) redeem_original) redeem_original)

Textorblocks?

Page 53: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Textorblocks?

CommitCash com1 alice ada100 10 200 (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1 bob alice ada20 200 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)))) (RedeemCC com1 Null)) Null

Definingyourownblocks…

…givesscalability.

Page 54: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Meadow:browser-basedtool

End-to-enddevelopment

• Developembeddedcontracts

• ConverttopureMarlowe

• Simulatewithsmartinputs

Page 55: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1
Page 56: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1
Page 57: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1
Page 58: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

Contract

Blockchain Wallets

IsitpossibleforanactiontoFail?

ItisimpossibleforthiscontracttoFail.

Cardano

Marlowe

Page 59: Marlowe summit external 2019 SJT FINAL · (CommitCash com2 bob ada20 20 200 (When (PersonChoseSomething choice1 alice) 100 (Both (RedeemCC com1 Null) (RedeemCC com2 Null)) (Pay pay1

github.com/input-output-hk/marlowe