How transaction sequencing information is exchanged between nodes¶
Paladin nodes communicate transaction data between themselves in order to assemble, endorse, and confirm Paladin transactions.
To aid with problem diagnostics and to allow an identity who submits a transaction to track its progress through sequencing and on to the base ledger, additional information is passed between certain nodes. This includes:
- Sequencing activity
- This is available on the originator node.
- It aids with problem diagnosis. For example a submitting node is able to confirm if any attempts have been made to progress the transaction
- Currently the only sequencing activity that is recorded relates to transaction dispatch. There are 2 dispatch activity types:
dispatch- this is recorded when a node intends to submit a public transaction to the base ledger (but may not necessarily have done so yet), or when a node creates a chained transaction (see #chained_transactions)chained_dispatch- this is recorded when a node creates a new chained Paladin transaction
- Sequencing activities have an optional
remote_idwhich is used to correlate the activity with a record on the coordinating node.- For
dispatchactivities theremote_idis the ID of adispatchon the coordinating node. - For
chained_dispatchactivities theremote_idis the ID of the chained transaction on the coordinating node (note, this is not the TX ID of the chained transaction)
- For
- Public transaction submissions to the base ledger
- This is available from both the originator node and the coordinator node (see JSON/RPC call types below).
- It also aids with problem diagnosis. For example a submitting node is able to confirm if any attempts have been made to submit the base ledger transaction, and whether those attempts have been successful.
- Dispatch information
- This is available on the coordinator node.
- It can be used to determine if a node has attempted to dispatch a public transaction
- The
remote_idof thedispatchsequencer activity is the ID of adispatchrecord at the coordinator node.
- Chained private transactions
- This is available on the coordinator node.
- It can be used to retrieve the chained transaction created during assembly of a Paladin transaction
- The
remote_idof thechained_dispatchsequencer activity is the ID of achained transactionrecord at the coordinator node.
The follow JSON/RPC queries can be used to retrieve sequencing activities and public transaction submissions:
ptx_getTransactionFullsee TransactionFullptx_getTransactionReceiptFullsee TransactionReceiptFull- If the node that coordinated the transaction is not the same as the originating node, the full Paladin transaction is not available to query.
ptx_getTransactionReceiptFullcan be used instead to retrieve the receipt and its related public transactions.
- If the node that coordinated the transaction is not the same as the originating node, the full Paladin transaction is not available to query.
The following diagram gives an example of the data flows between nodes for a private transaction submitted byte member1 to Node 1.
- Node 1 is the node the transaction is submitted to
- Node 2 is Notary for this
Notodomain so it is the node that coordinates allNototransactions - Nodes 3 and 4 also participate in this
Notodomain but are not involved in this particular Paladin transaction in a privacy group with Node 2.
- Queries to Node 1 return all transaction data, as well as the public transaction submissions and any sequencing records.
- Queries to Node 2 return the receipt for the Paladin transaction, as well as the public transaction submissions and any sequencing records. The node does not store or return the Paladin transaction itself.
- Queries to nodes 3 and 4 do not return any information about the Paladin transaction or the public transaction submissions. The nodes have not received private or public transaction data.
Chained transactions¶
Some Paladin transactions are assembled into a new private transaction, called a "chained" transaction. A typical example of this is where a Noto token is deployed with a hook to delegate transaction approval to a private smart contract deployed to a Pente privacy group.
The following diagram shows the flow of data between the nodes involved in both the original and the chained transaction:
- TX1 - in this case a Noto transfer - is submitted to Node 1
- The notary for the token is Node 2, so TX1 is coordinated by Node 2
- The notary assembles TX1 into a chained transaction, TX2
- TX2 is coordinated by any of the members of the privacy group. In this case Node 3 is acting as the coordinator
- Node 3 assembles TX2 into a public base ledger transaction
- Node 2 receives the following information
- A copy of every public transaction submission from Node 3 to the base ledger
- A record of sequencing activities at Node 3
- Currently the only sequencing activity recorded is
dispatchwhich indicate that a private or public transaction has been submitted for processing. - The
dispatchactivity for TX2 includes aremote_idwhich is thedispatch_idof the public base ledger transaction submitted by Node 3 - This allows an administrator of Node 2 to provide an administrator of Node 3 with an identifier to aid with problem diagnosis and tracking.
- Currently the only sequencing activity recorded is
- Node 1 receives the following information
- A receipt for TX1 when Node 2 determines that TX2 has been confirmed
- A record of the sequencing activities at Node 2
- Currently the only sequencing activity recorded is
dispatch - The
dispatchactivity for TX1 includes aremote_idwhich is thedispatch_idof TX2 - This allows an administrator of Node 1 to provide an administrator of Node 2 with an identifier to aid with problem diagnosis and tracking
- Node 1 does not receive any information about the nature of TX2, including who the participants of the privacy group are or who submitted the public transaction to the base ledger
- Currently the only sequencing activity recorded is