Skip to content

Transaction

Transactions in the Concordium blockchain can be any of the following three:

  1. Account Creation
  2. Account Transaction
  3. Update

Account Creation

Whenever a user uses one of the various Concordium Wallets to create a new account, an account_creation transaction is added to a block.

Details of an account creation. These transactions are free, and we only ever get a response for them if the account is created, hence no failure cases.

GRPC documentation: concordium.v2.AccountCreationDetails

Attributes:

Name Type Description
credential_type CredentialType

Whether this is an initial or normal account.

address CCD_AccountAddress

Address of the newly created account.

reg_id CCD_CredentialRegistrationId

Credential registration ID of the first credential.

Source code in .venv/lib/python3.13/site-packages/ccdexplorer/grpc_client/CCD_Types/__init__.py
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
class CCD_AccountCreationDetails(BaseModel):
    """Details of an account creation. These transactions are free, and we only ever get a response for them if the account is created, hence no failure cases.

    GRPC documentation: [concordium.v2.AccountCreationDetails](https://docs.concordium.com/concordium-grpc-api/#concordium.v2.AccountCreationDetails)

    Attributes:
        credential_type (CredentialType): Whether this is an initial or normal account.
        address (CCD_AccountAddress): Address of the newly created account.
        reg_id (CCD_CredentialRegistrationId): Credential registration ID of the first credential.
    """

    credential_type: int
    address: CCD_AccountAddress
    reg_id: CCD_CredentialRegistrationId

Account Transaction

These are user initiated transactions and paid for by the sender. Account transactions can have the following types:

Effects of an account transaction. All variants except None correspond to a unique transaction that was successful.

GRPC documentation: concordium.v2.AccountTransactionEffects

Attributes:

Name Type Description
none Optional[CCD_AccountTransactionEffects_None]

No effects other than payment from this transaction.

module_deployed Optional[CCD_ModuleRef]

A smart contract module with the attached reference was deployed.

contract_initialized Optional[CCD_ContractInitializedEvent]

A smart contract was initialized.

contract_update_issued Optional[CCD_ContractUpdateIssued]

A smart contract instance update was issued.

account_transfer Optional[CCD_AccountTransfer]

A simple account to account transfer occurred.

baker_added Optional[CCD_BakerAdded]

A validator was added.

baker_removed Optional[CCD_BakerId]

A validator was removed.

baker_stake_updated Optional[CCD_BakerStakeUpdated]

A validator's stake was updated.

baker_restake_earnings_updated Optional[CCD_BakerEvent_BakerRestakeEarningsUpdated]

A validator's restake earnings setting was updated.

baker_keys_updated Optional[CCD_BakerKeysEvent]

A validator's keys were updated.

encrypted_amount_transferred Optional[CCD_AccountTransactionEffects_EncryptedAmountTransferred]

An encrypted amount was transferred.

transferred_to_encrypted Optional[CCD_EncryptedSelfAmountAddedEvent]

An account transferred part of its public balance to its encrypted balance.

transferred_to_public Optional[CCD_AccountTransactionEffects_TransferredToPublic]

An account transferred part of its encrypted balance to its public balance.

transferred_with_schedule Optional[CCD_TransferredWithSchedule]

A transfer with a release schedule was made.

credential_keys_updated Optional[CCD_CredentialRegistrationId]

Keys of a specific credential were updated.

credentials_updated Optional[CCD_AccountTransactionEffects_CredentialsUpdated]

Account credentials were updated.

data_registered Optional[CCD_RegisteredData]

Some data was registered on the chain.

baker_configured Optional[CCD_BakerConfigured]

A validator was configured.

delegation_configured Optional[CCD_DelegationConfigured]

A delegator was configured.

Source code in .venv/lib/python3.13/site-packages/ccdexplorer/grpc_client/CCD_Types/__init__.py
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
class CCD_AccountTransactionEffects(BaseModel):
    """Effects of an account transaction. All variants except `None` correspond to a unique transaction that was successful.

    GRPC documentation: [concordium.v2.AccountTransactionEffects](https://docs.concordium.com/concordium-grpc-api/#concordium.v2.AccountTransactionEffects)

    Attributes:
        none (Optional[CCD_AccountTransactionEffects_None]): No effects other than payment from this transaction.
        module_deployed (Optional[CCD_ModuleRef]): A smart contract module with the attached reference was deployed.
        contract_initialized (Optional[CCD_ContractInitializedEvent]): A smart contract was initialized.
        contract_update_issued (Optional[CCD_ContractUpdateIssued]): A smart contract instance update was issued.
        account_transfer (Optional[CCD_AccountTransfer]): A simple account to account transfer occurred.
        baker_added (Optional[CCD_BakerAdded]): A validator was added.
        baker_removed (Optional[CCD_BakerId]): A validator was removed.
        baker_stake_updated (Optional[CCD_BakerStakeUpdated]): A validator's stake was updated.
        baker_restake_earnings_updated (Optional[CCD_BakerEvent_BakerRestakeEarningsUpdated]): A validator's restake earnings setting was updated.
        baker_keys_updated (Optional[CCD_BakerKeysEvent]): A validator's keys were updated.
        encrypted_amount_transferred (Optional[CCD_AccountTransactionEffects_EncryptedAmountTransferred]): An encrypted amount was transferred.
        transferred_to_encrypted (Optional[CCD_EncryptedSelfAmountAddedEvent]): An account transferred part of its public balance to its encrypted balance.
        transferred_to_public (Optional[CCD_AccountTransactionEffects_TransferredToPublic]): An account transferred part of its encrypted balance to its public balance.
        transferred_with_schedule (Optional[CCD_TransferredWithSchedule]): A transfer with a release schedule was made.
        credential_keys_updated (Optional[CCD_CredentialRegistrationId]): Keys of a specific credential were updated.
        credentials_updated (Optional[CCD_AccountTransactionEffects_CredentialsUpdated]): Account credentials were updated.
        data_registered (Optional[CCD_RegisteredData]): Some data was registered on the chain.
        baker_configured (Optional[CCD_BakerConfigured]): A validator was configured.
        delegation_configured (Optional[CCD_DelegationConfigured]): A delegator was configured.
    """

    none: Optional[CCD_AccountTransactionEffects_None] = None
    module_deployed: Optional[CCD_ModuleRef] = None
    contract_initialized: Optional[CCD_ContractInitializedEvent] = None
    contract_update_issued: Optional[CCD_ContractUpdateIssued] = None
    account_transfer: Optional[CCD_AccountTransfer] = None
    baker_added: Optional[CCD_BakerAdded] = None
    baker_removed: Optional[CCD_BakerId] = None
    baker_stake_updated: Optional[CCD_BakerStakeUpdated] = None
    baker_restake_earnings_updated: Optional[CCD_BakerEvent_BakerRestakeEarningsUpdated] = None
    baker_keys_updated: Optional[CCD_BakerKeysEvent] = None
    encrypted_amount_transferred: Optional[
        CCD_AccountTransactionEffects_EncryptedAmountTransferred
    ] = None
    transferred_to_encrypted: Optional[CCD_EncryptedSelfAmountAddedEvent] = None
    transferred_to_public: Optional[CCD_AccountTransactionEffects_TransferredToPublic] = None
    transferred_with_schedule: Optional[CCD_TransferredWithSchedule] = None
    credential_keys_updated: Optional[CCD_CredentialRegistrationId] = None
    credentials_updated: Optional[CCD_AccountTransactionEffects_CredentialsUpdated] = None
    data_registered: Optional[CCD_RegisteredData] = None
    baker_configured: Optional[CCD_BakerConfigured] = None
    delegation_configured: Optional[CCD_DelegationConfigured] = None
    token_update_effect: Optional[CCD_TokenEffect] = None

Note that for account transactions, we add a recognized_sender_id whenever the sender or invoked contract matches an entry in projects.json.
The lookup happens inside ms_indexers so every document in the transactions collection carries a project_id tag when possible.

Update

Update transactions are performed by the chain itself. The following payloads are possible:

The payload of a chain update.

GRPC documentation: concordium.v2.UpdatePayload

Attributes:

Name Type Description
protocol_update Optional[CCD_ProtocolUpdate]

The protocol version was updated.

election_difficulty_update Optional[CCD_ElectionDifficulty]

The election difficulty was updated.

euro_per_energy_update Optional[CCD_ExchangeRate]

The euro per energy exchange rate was updated.

micro_ccd_per_euro_update Optional[CCD_ExchangeRate]

The microCCD per euro exchange rate was updated.

foundation_account_update Optional[CCD_AccountAddress]

The foundation account address was updated.

mint_distribution_update Optional[CCD_MintDistributionCpv0]

The mint distribution was updated (protocol version 1-3).

transaction_fee_distribution_update Optional[CCD_TransactionFeeDistribution]

The transaction fee distribution was updated.

gas_rewards_update Optional[CCD_GasRewards]

The gas rewards were updated (protocol version 1-5).

baker_stake_threshold_update Optional[CCD_BakerStakeThreshold]

The minimum amount of CCD needed to become a validator was updated.

root_update Optional[CCD_RootUpdate]

The root keys were updated.

level_1_update Optional[CCD_Level1Update]

The level 1 keys were updated.

add_anonymity_revoker_update Optional[CCD_ArInfo]

An anonymity revoker was added.

add_identity_provider_update Optional[CCD_IpInfo]

An identity provider was added.

cooldown_parameters_cpv_1_update Optional[CCD_CooldownParametersCpv1]

The cooldown parameters were updated.

pool_parameters_cpv_1_update Optional[CCD_PoolParametersCpv1]

The pool parameters were updated.

time_parameters_cpv_1_update Optional[CCD_TimeParametersCpv1]

The time parameters were updated.

mint_distribution_cpv_1_update Optional[CCD_MintDistributionCpv1]

The mint distribution was updated (protocol version 4+).

gas_rewards_cpv_2_update Optional[CCD_GasRewardsCpv2]

The gas rewards were updated (protocol version 6+).

timeout_parameters_update Optional[CCD_TimeoutParameters]

The consensus timeouts were updated.

min_block_time_update Optional[CCD_Duration]

The minimum time between blocks was updated.

block_energy_limit_update Optional[CCD_Energy]

The block energy limit was updated.

finalization_committee_parameters_update Optional[CCD_FinalizationCommitteeParameters]

The finalization committee parameters were updated.

validator_score_parameters_update Optional[CCD_ValidatorScoreParameters]

The validator score parameters were updated.

Source code in .venv/lib/python3.13/site-packages/ccdexplorer/grpc_client/CCD_Types/__init__.py
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
class CCD_UpdatePayload(BaseModel):
    """The payload of a chain update.

    GRPC documentation: [concordium.v2.UpdatePayload](https://docs.concordium.com/concordium-grpc-api/#concordium.v2.UpdatePayload)

    Attributes:
        protocol_update (Optional[CCD_ProtocolUpdate]): The protocol version was updated.
        election_difficulty_update (Optional[CCD_ElectionDifficulty]): The election difficulty was updated.
        euro_per_energy_update (Optional[CCD_ExchangeRate]): The euro per energy exchange rate was updated.
        micro_ccd_per_euro_update (Optional[CCD_ExchangeRate]): The microCCD per euro exchange rate was updated.
        foundation_account_update (Optional[CCD_AccountAddress]): The foundation account address was updated.
        mint_distribution_update (Optional[CCD_MintDistributionCpv0]): The mint distribution was updated (protocol version 1-3).
        transaction_fee_distribution_update (Optional[CCD_TransactionFeeDistribution]): The transaction fee distribution was updated.
        gas_rewards_update (Optional[CCD_GasRewards]): The gas rewards were updated (protocol version 1-5).
        baker_stake_threshold_update (Optional[CCD_BakerStakeThreshold]): The minimum amount of CCD needed to become a validator was updated.
        root_update (Optional[CCD_RootUpdate]): The root keys were updated.
        level_1_update (Optional[CCD_Level1Update]): The level 1 keys were updated.
        add_anonymity_revoker_update (Optional[CCD_ArInfo]): An anonymity revoker was added.
        add_identity_provider_update (Optional[CCD_IpInfo]): An identity provider was added.
        cooldown_parameters_cpv_1_update (Optional[CCD_CooldownParametersCpv1]): The cooldown parameters were updated.
        pool_parameters_cpv_1_update (Optional[CCD_PoolParametersCpv1]): The pool parameters were updated.
        time_parameters_cpv_1_update (Optional[CCD_TimeParametersCpv1]): The time parameters were updated.
        mint_distribution_cpv_1_update (Optional[CCD_MintDistributionCpv1]): The mint distribution was updated (protocol version 4+).
        gas_rewards_cpv_2_update (Optional[CCD_GasRewardsCpv2]): The gas rewards were updated (protocol version 6+).
        timeout_parameters_update (Optional[CCD_TimeoutParameters]): The consensus timeouts were updated.
        min_block_time_update (Optional[CCD_Duration]): The minimum time between blocks was updated.
        block_energy_limit_update (Optional[CCD_Energy]): The block energy limit was updated.
        finalization_committee_parameters_update (Optional[CCD_FinalizationCommitteeParameters]): The finalization committee parameters were updated.
        validator_score_parameters_update (Optional[CCD_ValidatorScoreParameters]): The validator score parameters were updated.
    """

    protocol_update: Optional[CCD_ProtocolUpdate] = None
    election_difficulty_update: Optional[CCD_ElectionDifficulty] = None
    euro_per_energy_update: Optional[CCD_ExchangeRate] = None
    micro_ccd_per_euro_update: Optional[CCD_ExchangeRate] = None
    foundation_account_update: Optional[CCD_AccountAddress] = None
    mint_distribution_update: Optional[CCD_MintDistributionCpv0] = None
    transaction_fee_distribution_update: Optional[CCD_TransactionFeeDistribution] = None
    baker_stake_threshold_update: Optional[CCD_BakerStakeThreshold] = None
    root_update: Optional[CCD_RootUpdate] = None
    level_1_update: Optional[CCD_Level1Update] = None
    add_anonymity_revoker_update: Optional[CCD_ArInfo] = None
    add_identity_provider_update: Optional[CCD_IpInfo] = None
    cooldown_parameters_cpv_1_update: Optional[CCD_CooldownParametersCpv1] = None
    pool_parameters_cpv_1_update: Optional[CCD_PoolParametersCpv1] = None
    time_parameters_cpv_1_update: Optional[CCD_TimeParametersCpv1] = None
    mint_distribution_cpv_1_update: Optional[CCD_MintDistributionCpv1] = None
    finalization_committee_parameters_update: Optional[CCD_FinalizationCommitteeParameters] = None
    validator_score_parameters_update: Optional[CCD_ValidatorScoreParameters] = None
    create_plt_update: Optional[CCD_CreatePLT] = None

Augmentations performed by CCDExplorer

  • ms_events_and_impacts adds impacted_addresses, including canonical address references for alias-safe queries.
  • ms_indexers fans out transactions into specialized collections (transactions_transfer, transactions_contracts, etc.) for fast explorer lookups.
  • ms_token_accounting reads logged_events emitted by contract_update_issued transactions to update token ledgers.

How is a transaction stored in the system?

heartbeat ingests each block’s transactions and writes them to MongoDB; follow-up workers (listed above) enrich the base documents with project IDs, alias-friendly fields, and derived statistics.***