Skip to main content
The native token transfers table provides a per-party, per-movement accounting view of all CC (Canton Coin) flows. Each transfer event produces multiple rows β€” one row per CC movement β€” allowing credit/debit ledger reconstruction per party. Transfer types cover all forms of CC creation (mints), destruction (burns/fees), and party-to-party movements. Summing credits minus debits per party reconstructs the nominal CC delta for each event. Common transfer_type values:
  • input_consumed β€” existing Amulet UTXO destroyed (debit)
  • input_returned β€” sender’s own CC returned as change (credit)
  • transfer β€” party-to-party CC payment
  • sv_reward_mint, validator_reward_mint, app_reward_mint β€” reward coupons redeemed (credits)
  • traffic_purchase β€” CC burned for synchronizer bandwidth
  • dust_expire β€” fully-decayed Amulet garbage collected by super validators
  • preapproval_burn, preapproval_renew_burn, setup_burn β€” CC burned for protocol operations
  • holding_fee, sender_change_fee β€” historical only; always zero post-CIP-0078 fee removal

Table Details

PropertyValue
Table Namecanton.raw.native_token_transfers
Table StatusBeta 🌱
Unique Keyrecord_time, unique_id
Clustering Key(s)to_date("record_time")
Search Optimizationfrom_address, to_address, event_id

Table Columns

Column NameData TypeDescription
unique_idVARCHAR(16777216)Unique row identifier, derived from event_id and the transfer index within the event.
transfer_indexNUMBER(38,0)Sequential index of this transfer row within the event. Multiple rows per event represent different CC movements (e.g., input consumed, change returned, receiver credited).
update_idVARCHAR(16777216)The update (transaction) this transfer belongs to. Foreign key to canton.raw.updates.
event_idVARCHAR(16777216)The event that generated this transfer row. 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 generated this transfer row (e.g., AmuletRules_Transfer, AmuletRules_BuyMemberTraffic, Amulet_Expire).
transfer_typeVARCHAR(16777216)Classification of this CC movement. See table description for full list of values. Use this column to filter for specific movement types (e.g., transfer for party-to-party payments, or mint types for reward analysis).
from_addressVARCHAR(16777216)The party sending or losing CC in this movement, formatted as display_name::hash. Null for mint rows (credits with no sender). Filter by hash portion to find all rows for an entity across multiple party names.
to_addressVARCHAR(16777216)The party receiving CC in this movement, formatted as display_name::hash. Null for burn/fee rows (debits with no recipient). Filter by hash portion to find all rows for an entity across multiple party names.
amount_strVARCHAR(16777216)The CC amount of this movement as a string, preserving full decimal precision. May be in scientific notation ("0E-10") for zero or near-zero values.
amountFLOATThe CC amount of this movement as a float. Use amount_str for accounting to avoid floating-point precision loss.
round_numberNUMBER(38,0)The Canton mining round number (~10 minutes per round) in which this transfer occurred. Used for reward rate calculations and ExpiringAmount decay computation.
lockedBOOLEANWhether the output Amulet created by this transfer is time-locked (a LockedAmulet contract). True for escrowed CC in multi-step transfers (e.g., Allocation_ExecuteTransfer). Locked CC is still owned by the receiver but cannot be transferred until released.
output_indexNUMBER(38,0)For transfer-type rows, the position of this output in the event’s outputs array. Links to the corresponding row in canton.raw.outputs.
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 transfer.
_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.