use crate::api::call::{call_with_payment128, CallResult};
use candid::Principal;
mod types;
pub use types::*;
const GET_BALANCE_CYCLES: u128 = 100_000_000;
const GET_UTXOS_CYCLES: u128 = 100_000_000;
const GET_CURRENT_FEE_PERCENTILES_CYCLES: u128 = 100_000_000;
const SEND_TRANSACTION_BASE_CYCLES: u128 = 5_000_000_000;
const SEND_TRANSACTION_PER_BYTE_CYCLES: u128 = 20_000_000;
pub async fn bitcoin_get_balance(arg: GetBalanceRequest) -> CallResult<(Satoshi,)> {
call_with_payment128(
Principal::management_canister(),
"bitcoin_get_balance",
(arg,),
GET_BALANCE_CYCLES,
)
.await
}
pub async fn bitcoin_get_utxos(arg: GetUtxosRequest) -> CallResult<(GetUtxosResponse,)> {
call_with_payment128(
Principal::management_canister(),
"bitcoin_get_utxos",
(arg,),
GET_UTXOS_CYCLES,
)
.await
}
pub async fn bitcoin_send_transaction(arg: SendTransactionRequest) -> CallResult<()> {
let cycles = SEND_TRANSACTION_BASE_CYCLES
+ (arg.transaction.len() as u128) * SEND_TRANSACTION_PER_BYTE_CYCLES;
call_with_payment128(
Principal::management_canister(),
"bitcoin_send_transaction",
(arg,),
cycles,
)
.await
}
pub async fn bitcoin_get_current_fee_percentiles(
arg: GetCurrentFeePercentilesRequest,
) -> CallResult<(Vec<MillisatoshiPerByte>,)> {
call_with_payment128(
Principal::management_canister(),
"bitcoin_get_current_fee_percentiles",
(arg,),
GET_CURRENT_FEE_PERCENTILES_CYCLES,
)
.await
}