Skip to main content
Canton uses a UTXO model where each CC balance is an Amulet contract (like a physical banknote). The outputs table records new Amulet contracts created during a transfer. Each transfer consumes existing Amulet UTXOs (inputs) and creates new ones (outputs) for the receiver and sender change. Output types include transfer (receiver’s new Amulet), change (sender’s change Amulet), and locked (time-locked Amulet used as escrow).

Table Details

PropertyValue
Table Namecanton.raw.outputs
Table StatusBeta 🌱
Unique Keyrecord_time, unique_id
Clustering Key(s)to_date("record_time")
Search Optimizationowner

Table Columns

Column NameData TypeDescription
unique_idVARCHAR(16777216)Unique row identifier, derived from event_id and the output index.
update_idVARCHAR(16777216)The update (transaction) this output belongs to. Foreign key to canton.raw.updates.
event_idVARCHAR(16777216)The event that created this Amulet UTXO. Foreign key to canton.raw.events.
record_timeTIMESTAMP_NTZ(9)The timestamp at which the synchronizer sequenced the parent update.
migration_idNUMBER(38,0)Synchronizer migration epoch. Canton upgrades increment this value (currently 0–4). The active migration_id must match the time range being queried.
choiceVARCHAR(16777216)The Daml choice that created this output Amulet (e.g., AmuletRules_Transfer).
output_typeVARCHAR(16777216)Classification of this output: transfer (receiver’s new Amulet), change (sender’s change returned), or locked (time-locked Amulet created as escrow for multi-step transfers).
output_indexNUMBER(38,0)Position of this output within the event’s outputs array. Index 0 conventionally holds the provider fee output in 2-output transfers, per wallet app convention (not guaranteed by the protocol).
ownerVARCHAR(16777216)The party receiving this new Amulet UTXO, formatted as display_name::hash. A single entity may have multiple parties with the same hash — filter by hash portion for full coverage.
amount_strVARCHAR(16777216)The CC amount of this new Amulet UTXO as a string, preserving full decimal precision. This is the initialAmount in the ExpiringAmount structure — the actual balance at creation time.
amountFLOATThe CC amount of this new Amulet UTXO as a float. Use amount_str for accounting to avoid floating-point precision loss.
block_numberNUMBER(38,0)Synthetic 1-second block index inherited from the parent update.
block_timestampTIMESTAMP_NTZ(9)Start timestamp of the synthetic 1-second block window for this output.
_created_atTIMESTAMP_NTZ(9)Timestamp of when the entry was created in the database.
_updated_atTIMESTAMP_NTZ(9)Timestamp of when the entry was last updated in the database.