Tutorial — Enterprise & RWA
Multi-party workflow on Canton
DAML lets each party sign only the steps they observe. A delivery-vs-payment flow can involve buyer, seller, custodian, and regulator — each seeing exactly what their role permits.
- Level
- Advanced
- Time
- ~25 min
- Prerequisites
- Canton domain, DAR uploaded
- Stack
- DAML · MCP
01
Propose the trade
Buyer creates a proposal contract signed by buyer; seller is an observer until acceptance.
await ct.call("canton_submit_command", {
command: "create", template_id: "Dvp:Proposal",
payload: { buyer, seller, asset: "BOND-2027", price: "1000000 USD" }
});02
Seller accepts
Acceptance atomically archives the proposal and creates the locked-asset contract.
await ct.call("canton_submit_command", {
command: "exercise", contract_id: proposalCid, choice: "Accept"
});03
Settle the legs
The custodian releases the asset and cash legs in a single transaction — no half-fills.
await ct.call("canton_dvp_settle", { contract_id: lockedCid });04
Audit
The regulator party can replay every event it is a stakeholder on.
const events = await ct.call("canton_get_events", { party: "Regulator" });Related