Tenzro
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
← All tutorials