ckBTC: a canister-issued bitcoin twin token on the IC, 1:1-backed by BTC

The ckBTC minter and the ckBTC ledger are already controlled by the NNS (more specifically, by the NNS root canister).

This does not mean that the functionality is ready yet. Once it is ready, proposals will be required to make ckBTC available.

1 Like

Thanks @free and @Severin for the answers. I get a much better understanding (hence appreciation) about BTC integration and ckBTC now.
It’s gonna be an exciting time for the IC network and crypto as a whole.

Now that proposal Proposal: 105128 - IC Dashboard passed, the index canister is also installed, so all ckBTC canisters are now in place.

The mainnet ckBTC canister ids are:

  "index": {
    "ic": "n5wcd-faaaa-aaaar-qaaea-cai"
  "ledger": {
    "ic": "mxzaz-hqaaa-aaaar-qaada-cai"
  "minter": {
    "ic": "mqygn-kiaaa-aaaar-qaadq-cai"

Note that converting BTC to ckBTC is still restricted to only one principal controlled by DFINITY, but everything else is live.


What is the URL to access the minter?

1 Like

The ckBTC canisters are now all installed, and the first ckBTC has been minted after depositing BTC today! Some useful links to follow the activity:

Note that converting BTC into ckBTC is still restricted for now. This will be lifted with a future proposal.


When can we officially trade CKBTC?

Might need to have this edited as it would come across as contradictory?

Isn’t this a common understanding of wrapped assets? WETH for example on Ethereum.

1 Like

A few members of the community have expressed some concerns about ckBTC whitelisting for minting. This post is to bring some clarity around DFINITY’s ckBTC rollout strategy.


  • ckBTC is a “digital twin” of BTC implemented by two main canisters:
    • The ckBTC ledger canister (fully launched)
    • The ckBTC minter canister (semi-launched)
  • Documentation & code of both ckBTC and minter canister are publically available.
  • ckBTC follows the ICRC-1 fungible token standard. So anyone can receive, hold and send ckBTC (including the NNS FE dapp).
  • ckBTC is freely transferable, so anyone can purchase or sell ckBTC on DEXs such as ICDex.
  • It is possible today via dfx for anyone to redeem their ckBTC for BTC on the Bitcoin network (note redeeming ckBTC for BTC has BTC network fees). A more user-friendly UI in the NNS FE dapp is coming soon.
  • The sole limitation today: only DFINITY is currently whitelisted to convert BTC to ckBTC
    • This is to allow a more gradual and controlled rollout of ckBTC and limit financial risk in this first phase.
    • When the NNS removes whitelisting, the rollout will be complete.
    • Anyone can continue to send testBTC to the ckTESTBTC canister to issue ckTESTBTC for development purposes.


  • Dec 22, 2022: ck-TEST-BTC was made available to the public
  • Jan 27, 2023: voting initiated for ckBTC canister on the NNS
  • Feb 1, 2023: first ckBTC issued in the amount of 0.001
  • Feb 3, 2023: 1.5 BTC converted to ckBTC by DFINITY
  • Feb 8, 2023: ckBTC available on NNS FE
  • In the coming weeks, ckBTC conversion will be made available to the public

Integrating ckBTC into a dapp

The ckBTC ledger is fully launched and ready to be integrated into dapps on the Internet Computer today. As ckBTC uses the ICRC-1 standard, implementation is fairly straightforward.

However, as with any other token with value there are risks involved, so developers should incorporate ckBTC with caution. To enable developers to safely develop and test ckBTC applications, ck-TEST-BTC will remain available for anyone to test in dapps before launching with ckBTC. We encourage developers to take advantage of the ckTESTBTC canister as it is technically equivalent to the real ckBTC canister, except it uses testBTC.

Whitelisting ckBTC minting & initial rollout

ckBTC is not a token created by DFINITY but is a digital twin of BTC with 1:1 equivalent value. This is ensured by anyone being able to redeem ckBTC for BTC on the BTC network and also conversely convert BTC to ckBTC.

However to control risk, the release of ckBTC follows a staggered and controlled rollout. As a first step, a DFINITY principal was whitelisted to issue an initial batch of ckBTC before opening up ckBTC issuance to the public.

To stress test and to prime the wider ecosystem for ckBTC adoption, we wanted to get ckBTC into the hands of as many end users as possible. To this goal we selected a limited number of projects, based on user metrics and the capacity to implement ckBTC into their in-dapp wallets to help distribute ckBTC to their end users via fun and engaging promotional activities (not an airdrop). We selected a diversity of dapps from various categories such as GameFi, SocFi and DeFi to help.

As the ICP community has shown great enthusiasm for the BTC Integration and ckBTC, whitelisting was a way to launch ckBTC in a controlled way in production. Sending ckBTC for the teams to distribute onwards was a way to involve the community and provide initial liquidity. If there are other projects in the ecosystem who are planning to develop ckBTC use cases, and broaden the user base of ckBTC, we are happy to learn more about how we can help your launch.

We are happy to see the hype around BTC Integration and ckBTC, and look forward to more dapps integrating ckBTC. Feel free to reach out to us with your feedback and technical questions.

Happy Hacking!

See documentation: Internet Computer Content Validation Bootstrap


Small correction: I wrote that “It is possible today via dfx for anyone to redeem their ckBTC for BTC on the Bitcoin network” in the previous post, but this was incorrect, this is currently also restricted to a single DFINITY-controlled principal. Proposal Proposal: 107903 - IC Dashboard will make it so that everybody can convert ckBTC into BTC. Sorry for the confusion!


Proposal Proposal: 107903 - IC Dashboard has been executed and now anybody can convert ckBTC into BTC.


Where exactly to go for this? I’m on the NNS but don’t see an option to convert it over.

Currently, you have to use the command line and dfx for this, see the steps at ic/rs/bitcoin/ckbtc/minter at master · dfinity/ic · GitHub. The plan is that the NNS FE dapp will also support this flow in the coming weeks, which would be a bit more user friendly.

  variant {
    Err = variant {
      TemporarilyUnavailable = "BTC deposits are temporarily restricted"

I’m assuming this is on purpose?

Edit: I might have misunderstood your post, ckBTC to BTC is open for public, but minting is still restricted? Thanks!

Yeah, BTC to ckBTC minting is still restricted, according to his post.


Hello everyone,

I am facing an issue while trying to build and deploy canisters locally. The canisters are building successfully, but I am having trouble deploying the “minter” and “ledger” canisters.

When I try to deploy the “minter” canister, I am getting the following error message: “Error: Failed while trying to deploy canisters. Caused by: Failed while trying to deploy canisters. Failed while trying to install all canisters. Failed to install wasm module to canister ‘minter’. Failed to create argument blob. Invalid data: Unable to serialize Candid values: record field mode not found.”

Similarly, when I try to deploy the “ledger” canister, I am seeing the following error message: “Error: Failed while trying to deploy canisters. Caused by: Failed while trying to deploy canisters. Failed while trying to install all canisters. Failed to install wasm module to canister ‘ledger’. Failed to create argument blob. Invalid data: Unable to serialize Candid values: type mismatch: record { token_symbol = “ckTESTBTC”; transfer_fee = 10; metadata = vec {}; minting_account = record { owner = principal “ml52i-qqaaa-aaaar-qaaba-cai” }; initial_balances = vec {}; archive_options = record { num_blocks_to_archive = 1000; trigger_threshold = 2000; max_message_size_bytes = null : null; cycles_for_archive_creation = opt 1000000000000; node_max_memory_size_bytes = opt 3221225472; controller_id = principal “mf7xa-laaaa-aaaar-qaaaa-cai”; }; token_name = “Chain key testnet Bitcoin”; } cannot be of type variant { Upgrade : opt UpgradeArgs; Init : InitArgs }.”

The “index” and “archive” canisters deploy and work fine, but the “minter” and “ledger” canisters are not deploying and giving the error message that the wasm file is missing, even though I can see it in the “.dfx” directory.

I have tried reinstalling the canisters and clearing the cache, but the issue persists.

1 Like

This sounds like it may be an issue with the install args, are you passing install arguments? See here how we installed the ckTESTBTC canisters.


I did everything the same way as in that file, I deployed with the same arguments.

1 Like


Getting reports that ckBTC requests are taking longer than expected and dashboard isn’t updating.

Reporting here so team is aware.

Let me know if you need more details.