A record is a fundamental data structure for encoding user assets and application state.
Each account record contains information that specifies the record owner, its stored value, and its application state. An Aleo account can create a transaction to consume a record and produce a new record in its place. Records on Aleo are encrypted to the record owner address, ensuring that all records on Aleo are fully private.
An Aleo record is serialized in the following format:
|Parameter||Type||Size (in bytes)|
The record owner is an account address, and specifies the party who is authorized to spend the record.
The record value specifies the amount of Aleo credits stored in the record.
The record payload encodes arbitrary application information.
The birth program ID corresponds to the birth program that must be satisfied when the record is created.
The death program ID corresponds to the death program that must be specified when the record is spent.
The serial number nonce is used to generate a record serial number when the record is being spent.
The commitment randomness used to generate the record commitment.
When a record is produced in a transaction, it is verifiably encrypted in the transaction and stored on the ledger. This enables users to securely and privately transfer record data and value between one another over the public network. Only the sender and receiver with their corresponding account view keys are able to decrypt these records.
To protect privacy while enabling transactions that reason over different numbers of transaction inputs and transaction outputs, users may include dummy records in their transaction inputs and outputs to pad up to the required factor to create a transaction. Dummy records are required to have to a record value of zero, the dummy birth program ID, and the dummy death program ID.
In Aleo, the same account record is unable to be spent across two distinct transactions. This is enforced by the requirement that the serial number of each new record and the commitment of each old record must be unique. If a previously existing serial number is detected in a transaction, both the transaction proof and consensus will fail to include the transaction in the next block.