Skip to main content

Transitions

Components of a Transition

An Aleo transition is serialized in the following format:

ParameterTypeDescription
idfinite field elementThe transition id, which is computed via the Merkle tree digest formed from the Input and Output IDs
program_idstringThe program ID, which is associated with a verification key on a globally maintained map on the ledger.
function_namestringThe function name, which is used to compute a function_id using the program_id.
inputsarray of InputsThe transition Inputs, which can be a constant, public, private, or inputRecord
outputsarray of OutputsThe transition Outputs, which can be a constant, public, private, or outputRecord
finalizearrayThe inputs for finalize
tpkgroup elementThe transition public key, which is used to verify the digital signature provided by the owner in a transaction
tcmfinite field elementThe transition commitment

Input Record

An inputRecord is a tuple consisting of a serial_number and a tag. Recall that since the serial number is disclosed on the ledger, this publicly announces the record which is being spent. Recall that serial numbers are posted onto the ledger to announce that previously unspent records have now been spent. Each record has an associated tag which is used to keep track of records which are spendable by the user. A tag is computed via tag = CRH.Eval(sk_tag, record_commitment).

Output Record

An outputRecord consists of a record_commitment, checksum, and a record_ciphertext. A record_commitment is computed via Pedersen.Commit(pp, apk || data || nonce ; r). The record_encryption is computed via SymmEnc.Eval(pp, apk || data || nonce ; r) and the checksum, used to verify the integrity of the record commitment, is computed via record_commitment = CRH.Eval(record_encryption).