Question about the bitcoin client

Hi Team, I have some questions about this repo ic/rs/bitcoin at master · dfinity/ic · GitHub.
There are:

So what are the differences and the relationships between these above modules? (adapter, client and ckbtc) Any documents about how to use these codes(Such as to use client call the ckbtc canister, to send transactions, and so on.)

As an application (canister) developer you only need to care about the Bitcoin API (when working with Bitcoin directly) and the ckBTC canisters, when working with ckBTC.

For working with the Bitcoin API, have a look at this sample application: Deploying your first Bitcoin dapp | Internet Computer (Video:

ckBTC follows the ICRC-1 (with extensions like ICRC-2) standard and you can interact with the ledger and index canisters the same way as with any other compliant token. You can read more about how to interact with ICRC-1 tokens here in the Developer Journey or the docs
In addition, there’s the minter canister that allows mint/burn ckBTC.

You can find more info about ckBTC in the docs: Chain-key Bitcoin (ckBTC) | Internet Computer and the wiki: Chain-key Bitcoin - Internet Computer Wiki

In addition, here’s a sample application for Point-of-Sale app using ckBTC: Point of sale (POS) app for ckBTC | Internet Computer

1 Like

Hi @domwoe , thanks for answering my question, I have read the docs you posted here a few days ago, and I have read all of the source code of the ckbtc canister. So I want to build my own bitcoin canister, and it needs to generate a PSBT(Partially Signed Bitcoin Transaction) first, and then it needs to broadcast the transaction to the bitcoin mainnet, but I only find a few interfaces in the ckbtc canister(fetch_uxto, send_transaction, these two I think I can use in my canister). I don’t know whether it is possible to generate a PSBT in the canister, and I don’t know the fundamentals of the broadcast transaction(or the differences between the send_transaction and the broadcast transaction). I have tried to compile the bdk(bitcoin development kit) tool in my canister, but it failed because of the incompatible random library. So I’m a little bit confused. :frowning:

I think rust-bitcoin can change a raw unsigned transaction to a psbt with from_usigned_tx function, but i also want to know how to sign a psbt with ecdsa api or schnorr api on ICP?