Where does Marlowe script live and how to start running an instance?

I’m reading through the marlowe tutorial., which is great and explained a lot of things.

However a couple of things are still not clear to me:

  • Where does Marlowe code live? Is it encoded as on-chain data? Or some on-chain URL to an off-chain website with hash code?
  • How do participants instantiate a contract instance and start running? All parties submit their own transactions with certain format and indicate their roles? How do their refer to a particular contract template?

Are all these questions still be fleshed out by dev team? I can’t seem to find any answers to them.


Wondering the same thing. I can’t seem to find any info at all on how to get Marlowe contracts into the wild. Some guidance on this would be much appreciated!

We’re working on this: for the moment you can simulate and explore contracts in the playground. For the future we’re building Marlowe Market, a site for up and download of Marlowe contracts, usable from Marlowe Run.

There’s some more information about this in the presentation about Marlowe from the Cardano Summit, which should be available permanently in due course.


| icstrouse
30 September |

  • | - |

Wondering the same thing. I can’t seem to find any info at all on how to get Marlowe contracts into the wild. Some guidance on this would be much appreciated!

Visit Topic or reply to this email to respond.

To unsubscribe from these emails, click here.

Simon Thompson
Technical Project Director, dApp platform | UK

Website: www.iohk.io
Skype: simonjthompson
Twitter: @thompson_si

Input Output



This video (at 37 minute) has a good explanation of on-chain code vs off-chain code.

Essentially a smart contract in Plutus will consists of 2 parts:

  • on-chain code : compiled from Plutus into Plutus core binary code, which will be stored on blockchain. Each node will execute this code to validate whether a transaction is valid or not.
  • off-chain code : typically written and run as haskell code, which runs on the machine running ADA wallet. It allows a user to interact with the contract (e.g., making a auction bid) and allows wallet software to construct a valid transaction to submit to blockchain.

Now I’m thinking aloud and still have a further question. For users to enter a smart contract, does the on-chain code have already been written to the blockchain? Or any party can re-submit the on-chain code when entering the contract? Also what does it mean by multiple parties enter a contract? Note there could be multiple instances of the same contract (e.g., multiple auctions). How can we create a new instance and allow multiple parties to enter?

What I understand : on-chain code is not really stored on the blockchain. The blockchain does just store transactions.

The on-chain and off-chain code are both packed into a dApp. The on-chain code is sent to the node when needed ; the node checks if a given on-chain code can execute a transaction by its address. So the code is only needed by the node when the block is made (and it is sent by the dApp).

Is this correct ?

I’m 85% sure on-chain code is stored in blockchain. Below is what I’m 100% sure of:

  • On-chain code is written in Haskell,
  • It is compiled into Plutus core, which is a form of lambda calculus
  • it is submitted to the blockchain when presumably an instance of the contract is created (first user action has happened? Or when first instance of the contract is created?)
  • it is run by every Cardano node when the node verifies the contract related transactions.
  • by contrast, the off-chain code is wrapped inside dApp (so does on-chain code as well), and is only downloaded and run by involved parties (i.e., wallets)

Hope someone with more authoritative knowledge can chime in.

Network traffic: sprocs need only serialize sproc-name and argument data over the wire while LINQ sends the entire query. This can get really bad if the queries are very complex. However, LINQ’s abstraction allows Microsoft to improve this over time.
Less flexible: Sprocs can take full advantage of a database’s featureset. LINQ tends to be more generic in it’s support. This is common in any kind of language abstraction (e.g. C# vs assembler).