Direct Integration with Bitcoin

What does it even mean to “hold BTC in the NNS”?

The NNS dapp is a software wallet, hosted on the IC and downloaded into your browser every time you open it, that leverages II to (simplified) equip it with the same key every time you download it and log in. Now that key can control assets in a canister such as ICP tokens in the ICP ledger (a canister) and bitcoin in the ckBTC ledger (another canister). The IC’s Bitcoin integration means canisters can hold BTC. It doesn’t mean the key that lives in your browser can hold BTC. There is one level of indirection.

So the straight-forward application is to integrate the NNS dapp with the ckBTC ledger. The flow is going to be something like this:

  • get a Bitcoin deposit address displayed in the NNS dapp (the Bitcoin address being controlled by the ckBTC canister)
  • use your normal Bitcoin wallet (or an exchange) to move BTC on the Bitcoin blockchain to the deposit address
  • after N confirmations see balance in your NNS dapp shown as “ckBTC balance”
  • move ckBTC around to other users at IC speed
  • withdraw ckBTC by entering a destination BTC address into your NNS dapp, click send, and see BTC move on the Bitcoin blockchain to the destination address

So the experience of any step that causes Bitcoin move on the Bitcoin blockchain is exactly like in a native Bitcoin wallet. No difference, except that it says “ckBTC” instead of “BTC” next to your balance. Everything else is the same from a user experience perspective. You can use the NNS dapp to move BTC on the Bitcoin blockchain. Just temporarily while you hold them they are called “ckBTC”. Other than that you won’t notice a difference.

I postulate that the integration that people actually want who posted above is actually exactly the ckBTC integration that is coming.

Saying to want to hold Bitcoin “directly, not ckBTC” does not make sense. It it isn’t possible. Bitcoin will be held by a canister and all we can have is a key that controls the entire canister or at least some assets in the canister. Because of this indirection we call them “ckBTC” and not “BTC”. But the indirection will always be there.

The only other thing a user can do is to deploy his own canister, say a wallet canister, which operates exclusively for the user and have that wallet canister hold Bitcoin. Is that what people want and mean here? Replace the ckBTC canister? Then that wallet canister can trigger Bitcoin transaction on the Bitcoin blockchain. But I have problems seeing the benefit of doing so over a native Bitcoin wallet. If all you can do is move BTC on the Bitcoin blockchain then why not use a native wallet (or ckBTC with the NNS dapp)? Unless the wallet canister has sophisticated features programmed into it that can’t easily be done by a native Bitcoin wallet, such as spending limits per time unit, second-party approvals, time-delayed withdrawals, whitelisted destination addresses, etc. Such things are nice but a little bit further away because such canisters have to be written first. When they are written then there are many question about a possible NNS integration. Should such personal canisters be integrated at all or is it not the job of the NNS dapp? If yes, then what feature set exposed by these sophisticated wallet canisters should the NNS dapp know about? Should the NNS dapp wait for a standard to be established on such wallet canisters? Etc. In any case, it seems way to early to think. about that.

28 Likes