A library for interfacing with ckBTC on the Internet Computer.
You can use ckbtc-js
by installing it in your project.
npm i @dfinity/ckbtc
The bundle needs peer dependencies, be sure that following resources are available in your project as well.
npm i @dfinity/agent @dfinity/candid @dfinity/principal @dfinity/utils
The features are available through the class CkBTCMinterCanister
. It has to be instantiated with a canister ID.
import { CkBTCMinterCanister } from "@dfinity/ckbtc";
import { createAgent } from "@dfinity/utils";
const agent = await createAgent({
identity,
host: HOST,
});
const { getBtcAddress } = CkBTCMinterCanister.create({
agent,
canisterId: MY_CKBTC_MINTER_CANISTER_ID,
});
const btcAddress = await getBtcAddress({});
ckbtc-js
implements following features:
Parse a Bitcoin address.
Parse implementation follows strategy implemented in Minter canister.
Credits: Parts of JavaScript code and test values from bitcoin-address-validation.
Function | Type |
---|---|
parseBtcAddress |
({ address, network, }: BtcAddress) => BtcAddressInfo |
Parameters:
params
: The Bitcoin address and network to parseparams.network
: Optional. Default BtcNetwork is Mainnet
- create
- getBtcAddress
- updateBalance
- getWithdrawalAccount
- retrieveBtc
- retrieveBtcWithApproval
- retrieveBtcStatus
- retrieveBtcStatusV2ByAccount
- estimateWithdrawalFee
- getMinterInfo
- getKnownUtxos
Method | Type |
---|---|
create |
(options: CkBTCCanisterOptions<_SERVICE>) => CkBTCMinterCanister |
Returns a BTC address for a given account.
Note: an update call is required by the Minter canister.
Method | Type |
---|---|
getBtcAddress |
({ owner, subaccount, }: MinterParams) => Promise<string> |
Parameters:
params
: The parameters for which a BTC address should be resolved.params.owner
: The owner for which the BTC address should be generated. If not provided, thecaller
will be use instead.params.subaccount
: An optional subaccount to compute the address.
Notify the minter about the bitcoin transfer.
Upon successful notification, new ckBTC should be available on the targeted address.
Method | Type |
---|---|
updateBalance |
({ owner, subaccount, }: MinterParams) => Promise<UpdateBalanceOk> |
Parameters:
params
: The parameters are the address to which bitcoin where transferred.params.owner
: The owner of the address. If not provided, thecaller
will be use instead.params.subaccount
: An optional subaccount of the address.
Returns the account to which the caller should deposit ckBTC before withdrawing BTC using the [retrieveBtc] endpoint.
Method | Type |
---|---|
getWithdrawalAccount |
() => Promise<Account> |
Submits a request to convert ckBTC to BTC.
Note:
The BTC retrieval process is slow. Instead of synchronously waiting for a BTC transaction to settle, this method returns a request ([block_index]) that the caller can use to query the request status.
Preconditions:
The caller deposited the requested amount in ckBTC to the account that the [getWithdrawalAccount] endpoint returns.
Method | Type |
---|---|
retrieveBtc |
(params: RetrieveBtcParams) => Promise<RetrieveBtcOk> |
Parameters:
params
: The parameters are the bitcoin address and amount to convert.params.address
: The bitcoin address.params.amount
: The ckBTC amount.
Submits a request to convert ckBTC to BTC after making an ICRC-2 approval.
The BTC retrieval process is slow. Instead of synchronously waiting for a BTC transaction to settle, this method returns a request ([block_index]) that the caller can use to query the request status.
The caller allowed the minter's principal to spend its funds using [icrc2_approve] on the ckBTC ledger.
Method | Type |
---|---|
retrieveBtcWithApproval |
({ address, amount, fromSubaccount, }: { address: string; amount: bigint; fromSubaccount?: Uint8Array or undefined; }) => Promise<RetrieveBtcOk> |
Parameters:
params.address
: The bitcoin address.params.amount
: The ckBTC amount.params.fromSubaccount
: An optional subaccount from which the ckBTC should be transferred.
Returns the status of a specific BTC withdrawal based on the transaction ID of the corresponding burn transaction.
Method | Type |
---|---|
retrieveBtcStatus |
({ transactionId, certified, }: { transactionId: bigint; certified: boolean; }) => Promise<RetrieveBtcStatus> |
Parameters:
transactionId
: The ID of the corresponding burn transaction.certified
: query or update call
Returns the status of all BTC withdrawals for an account.
Method | Type |
---|---|
retrieveBtcStatusV2ByAccount |
({ account, certified, }: RetrieveBtcStatusV2ByAccountParams) => Promise<RetrieveBtcStatusV2WithId[]> |
Parameters:
certified
: query or update callaccount
: an optional account to retrieve the statuses. If not provided, statuses for the caller are retrieved.
Returns an estimation of the user's fee (in Satoshi) for a retrieve_btc request based on the current status of the Bitcoin network and the fee related to the minter.
Method | Type |
---|---|
estimateWithdrawalFee |
({ certified, amount, }: EstimateWithdrawalFeeParams) => Promise<EstimateWithdrawalFee> |
Parameters:
params
: The parameters to estimate the fee.params.certified
: query or update callparams.amount
: The optional amount for which the fee should be estimated.
Returns internal minter parameters such as the minimal amount to retrieve BTC, minimal number of confirmations or KYT fee.
Method | Type |
---|---|
getMinterInfo |
({ certified }: QueryParams) => Promise<MinterInfo> |
Parameters:
params
: The parameters to get the minter info.params.certified
: query or update call
Returns UTXOs of the given account known by the minter.
Method | Type |
---|---|
getKnownUtxos |
({ owner, subaccount, certified, }: GetKnownUtxosParams) => Promise<Utxo[]> |
Parameters:
params
: The parameters for which the known utxos should be resolved.params.owner
: The owner of the account. Note that if not provided, thecaller
would be used by the minter instead.params.subaccount
: An optional subaccount.
Method | Type |
---|---|
create |
(options: CkBTCCanisterOptions<_SERVICE>) => BitcoinCanister |
Given a get_utxos_request
, which must specify a Bitcoin address and a Bitcoin network (mainnet
, testnet
or regtest
), the function returns all unspent transaction outputs (UTXOs) associated with the provided address in the specified Bitcoin network based on the current view of the Bitcoin blockchain available to the Bitcoin component.
Method | Type |
---|---|
getUtxosQuery |
({ ...params }: GetUtxosParams) => Promise<get_utxos_response> |
Parameters:
params.network
: Tesnet or mainnet.params.filter
: The optional filter parameter can be used to restrict the set of returned UTXOs, either providing a minimum number of confirmations or a page reference when pagination is used for addresses with many UTXOs.params.address
: A Bitcoin address.
Given a get_balance_request
, which must specify a Bitcoin address and a Bitcoin network (mainnet
, testnet
or regtest
), the function returns the current balance of this address in Satoshi
(10^8 Satoshi = 1 Bitcoin) in the specified Bitcoin network.
Method | Type |
---|---|
getBalanceQuery |
({ ...params }: GetBalanceParams) => Promise<bigint> |
Parameters:
params.network
: Tesnet or mainnet.params.min_confirmations
: The optional filter parameter can be used to limit the set of considered UTXOs for the calculation of the balance to those with at least the provided number of confirmations in the same manner as for thebitcoin_get_utxos
call.params.address
: A Bitcoin address.