Skip to main content

SNS Ledger Canister

The SNS ledger canister keeps track of the transactions between accounts in a chain, as well as the account balances at the last block of the chain. A ledger canister is always deployed as part of the SNS canisters. The ledger canister follows the ICRC-1 specification.

Initialisation

This sections explains how to deploy a ledger canister in isolation. You can also deploy a full SNS, which will be deployed with a ledger canister.

The index canister initialisation requires the following parameters to be initialized:

type InitArgs = record {
minting_account : Account;
transfer_fee : nat64;
token_symbol : text;
token_name : text;
metadata : vec record { text; Value };
initial_balances : vec record { Account; nat64 };
archive_options : record {
num_blocks_to_archive : nat64;
trigger_threshold : nat64;
max_message_size_bytes : opt nat64;
cycles_for_archive_creation : opt nat64;
node_max_memory_size_bytes : opt nat64;
controller_id : principal;
};
};

Example with dfx:

dfx deploy icrc1-ledger --argument "(record {
token_symbol = \"ABC\";
token_name = \"My example token\";
minting_account = record { owner = principal \"rrkah-fqaaa-aaaaa-aaaaq-cai\" };
transfer_fee = 10_000;
metadata = vec {};
initial_balances = vec {};
archive_options = record {
num_blocks_to_archive = 10_000;
trigger_threshold = 20_000;
controller_id = principal \"rrkah-fqaaa-aaaaa-aaaaq-cai\";
cycles_for_archive_creation = opt 4_000_000_000_000;
};
})"

Usage

Here are the supported methods from the ledger canister:

icrc1_name : () -> (text) query;

Returns the name of the token (e.g., MyToken).

icrc1_symbol : () -> (text) query;

Returns the symbol of the token (e.g., ICP).

icrc1_decimals : () -> (nat8) query;

Returns the number of decimals the token uses (e.g., 8 means to divide the token amount by 100000000 to get its user representation).

icrc1_metadata : () -> (vec record { text; Value }) query;

Returns the list of metadata entries for this ledger.

icrc1_total_supply : () -> (Tokens) query;

Returns the total number of tokens on all accounts except for the minting account.

icrc1_fee : () -> (Tokens) query;

Returns the default transfer fee.

icrc1_minting_account : () -> (opt Account) query;

Returns the minting account if this ledger supports minting and burning tokens.

icrc1_balance_of : (Account) -> (Tokens) query;

Returns the balance of the account given as an argument.

icrc1_transfer : (TransferArg) -> (TransferResult);

Transfers some tokens between two accounts. The transfer fees are taken from the caller's account in addition to the transferred amount.

icrc1_supported_standards : () -> (vec record { name : text; url : text }) query;

Returns the list of standards this ledger implements.

Candid reference file

Please check the Candid file of the ledger canister for the interface details.