Skip to content
Discussions/App Development/Daml Ledger Model: what exactly are top-level actions?Forum ↗

Daml Ledger Model: what exactly are top-level actions?

App Development7 posts296 views4 likesLast activity Oct 2021
GY
gyorgybalazsiOP
Oct 2021

I’m (re)reading the Daml Ledger Model part of the docs.

The Actions and Transactions part says:

A transaction is a list of actions. Thus, the consequences of an exercise form a transaction.

The Ledger part says:

The transaction structure records the contents of the changes, but not who requested them . This information is added by the notion of a commit : a transaction paired with the parties that requested it, called the requesters of the commit. A commit may have one or more requesters. Given a commit (p, tx) with transaction tx = act1, …, actn, every acti is called a top-level action of the commit. A ledger is a sequence of commits. A top-level action of any ledger commit is also a top-level action of the ledger.

My understanding of the text is that if I request the exercise of a choice through the API, all the consequences of this choice form a transaction, so they are all top-level actions.

Is that correct?

If so, what are non top-level actions?

ST
stefanobaghino-da
Oct 2021

I’m not 100% sure about the formalism used to describe the idea, but I believe here by top-level actions the ledger model document describes what’s called a “root event” in the Ledger API, i.e. the events triggered explicitly by a command. Since exercise commands can be trees, their consequences (or “child events” in the Ledger API) are not top-level actions.

GY
gyorgybalazsi
Oct 2021

Ok, follow-up question:

As far as remember, you cannot submit a request through the ledger API which contains multiple actions forming an atomic transaction (correct me if I’m wrong).

If this is so, then the following sentence:

Given a commit (p, tx) with transaction tx = act1, …, actn, every acti is called a top-level action of the commit.

only describes a theoretical possibility in the Ledger Model, which is not implemented in the Daml platform?

LU
Luciano
Oct 2021
gyorgybalazsi:

which contains multiple actions forming an atomic transaction (correct me if I’m wrong)

I’m not sure, but I think this is possible in the ledger API : Ledger API Reference — Daml SDK 2.7.6 documentation

You can also achieve this through a Script by submitting multiple createCmd/exerciseCmd/etc in a single Applicative do block.

Not certain the JSON API supports this though …

GY
gyorgybalazsi
Oct 2021

Oh yes, maybe the submitted actions cannot depend on each other?

LU
Luciano
Oct 2021

That’s correct ; hence the Applicative.

GY
gyorgybalazsi
Oct 2021

Understood, thanks!

← Back to Discussions