Technical description of the platform

Atomic transactions

The Waves Enterprise platform supports atomic operations. Atomic operations consist of multiple actions: if any action cannot be finalized, other actions also will not be performed. Atomic operations are implemented through the 120 AtomicTransaction, which is a container that holds two or more signed transactions.

Two and more transactions of the following types and versions can be included into an atomic transaction:

Once the blockchain feature1122 is activated, you can include transaction of the following types in an atomic transaction:

The key distinction of transaction versions that are supported by atomic transactions, is the presence of the atomicBadge tag field.

This field contains a trustedSender value: the trusted address of the transaction sender to include into the 120 transaction container.

If no sender address is specified, the address from which the 120 transaction is sent to the blockchain becomes the sender.

Processing of atomic transactions

Atomic transactions have two signatures. The first signature belongs to its sender and is used for broadcasting. The second signature is generated by a miner and is used to include the transaction into the blockchain. When an atomic transaction is added to the UTX pool, the node checks its own signature, as well as signatures of all the transactions included into the atomic container.

Validation of included transactions is performed as follows:

  • There should be more than one included transactions.

  • All the transactions should have different identifiers.

  • An atomic transaction should contain only supported transaction types.

It is not allowed to include one atomic transaction into another.

There should be no executed transactions inside an atomic transaction that is sent into the UTX pool; the miner field should be empty. This field is filled when an atomic transaction is transferred to a block.

There should be no executable transactions in an atomic transaction which is in the UTX pool.

After execution of an atomic transaction, its ‘copy’ is included into a block. This ‘copy’ is generated as follows:

  • The miner field is not engaged for transaction signing and is filled with a miner public key.

  • A block miner generates a proofs array, the source of which are identifiers of transactions included into an atomic transaction. When included into a block, an atomic transaction has 2 signatures: a signature of a source transaction and a miner’s signature.

  • If executable transactions are included into an atomic transaction, they are substituted with executed transactions. While validating an atomic transaction in a block, both signatures are checked.

Creating an atomic transaction

To create an atomic transaction, access to the node REST API is required.

  1. A user picks supported transactions that should be executed as an atomic operation.

  2. Then correctly fills in the fields of all transactions and signs them.

  3. Next, the user fills the atomic transaction transactions field with the data of signed but not broadcasted transactions.

  4. After entering all the transactions data, the user signs and broadcasts the completed atomic transaction to the blockchain.

Data structures for signing and broadcasting an atomic transaction are listed in the list of transactions.

Attention

If you create an atomic transaction including a 114 transaction, set its broadcast field value to false while signing.

See also