chore: bump bdk to alpha 8 and use bitcoin::FeeRate

This commit is contained in:
thunderbiscuit
2024-04-01 14:56:19 -04:00
parent e774c94998
commit aa035588a0
15 changed files with 68 additions and 46 deletions

14
bdk-ffi/Cargo.lock generated
View File

@@ -138,9 +138,9 @@ dependencies = [
[[package]]
name = "bdk"
version = "1.0.0-alpha.7"
version = "1.0.0-alpha.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3898b68da1d179ec68acaaefe29b3ea952800ebf5809cad1e3a3cc5504ccc6d4"
checksum = "06494244111d4f934f40f2a46883bcec3ea5d573fe30d310623e08a27adac849"
dependencies = [
"bdk_chain",
"bip39",
@@ -155,7 +155,7 @@ dependencies = [
[[package]]
name = "bdk-ffi"
version = "1.0.0-alpha.7"
version = "1.0.0-alpha.8"
dependencies = [
"assert_matches",
"bdk",
@@ -178,9 +178,9 @@ dependencies = [
[[package]]
name = "bdk_esplora"
version = "0.9.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a218fdf700ba98cf68f3b678af004b6770a04329bd1de4c0ce52382cecb2e0e9"
checksum = "9abd2ce171d0a10c44b847c0e4aaf2e6eb81d7b3f5ac8bde4e0e0b77edfc313f"
dependencies = [
"bdk_chain",
"esplora-client",
@@ -188,9 +188,9 @@ dependencies = [
[[package]]
name = "bdk_file_store"
version = "0.7.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0efb7e3263bc937977d798a0a5f1c64467de5998380b8dc5003f5924b2af3398"
checksum = "403e8a1b6671585d1d5466cd5414e51d9f38c9079137ab79d4b83b56b21b03ac"
dependencies = [
"bdk_chain",
"bincode",

View File

@@ -1,6 +1,6 @@
[package]
name = "bdk-ffi"
version = "1.0.0-alpha.7"
version = "1.0.0-alpha.8"
homepage = "https://bitcoindevkit.org"
repository = "https://github.com/bitcoindevkit/bdk"
edition = "2018"
@@ -18,10 +18,10 @@ path = "uniffi-bindgen.rs"
default = ["uniffi/cli"]
[dependencies]
bdk = { version = "1.0.0-alpha.7", features = ["all-keys", "keys-bip39"] }
bdk_esplora = { version = "0.9.0", default-features = false, features = ["std", "blocking"] }
# bdk_esplora = { version = "0.9.0", default-features = false, features = ["std", "blocking", "async-https-rustls"] }
bdk_file_store = { version = "0.7.0" }
bdk = { version = "1.0.0-alpha.8", features = ["all-keys", "keys-bip39"] }
bdk_esplora = { version = "0.10.0", default-features = false, features = ["std", "blocking"] }
# bdk_esplora = { version = "0.10.0", default-features = false, features = ["std", "blocking", "async-https-rustls"] }
bdk_file_store = { version = "0.8.0" }
uniffi = { version = "=0.26.1" }
thiserror = "1.0.58"

View File

@@ -47,6 +47,11 @@ interface EsploraError {
HeaderHashNotFound();
};
[Error]
enum FeeRateError {
"ArithmeticOverflow"
};
// ------------------------------------------------------------------------
// bdk crate - types module
// ------------------------------------------------------------------------
@@ -100,15 +105,17 @@ dictionary TxOut {
// ------------------------------------------------------------------------
interface FeeRate {
[Name=from_sat_per_vb]
constructor(f32 sat_per_vb);
[Name=from_sat_per_vb, Throws=FeeRateError]
constructor(u64 sat_per_vb);
[Name=from_sat_per_kwu]
constructor(f32 sat_per_kwu);
constructor(u64 sat_per_kwu);
f32 as_sat_per_vb();
u64 to_sat_per_vb_ceil();
f32 sat_per_kwu();
u64 to_sat_per_vb_floor();
u64 to_sat_per_kwu();
};
enum ChangeSpendPolicy {
@@ -189,7 +196,7 @@ interface TxBuilder {
};
interface BumpFeeTxBuilder {
constructor(string txid, f32 fee_rate);
constructor(string txid, FeeRate fee_rate);
BumpFeeTxBuilder allow_shrinking(Script script_pubkey);

View File

@@ -101,6 +101,12 @@ pub enum EsploraError {
HeaderHashNotFound,
}
#[derive(Debug, thiserror::Error)]
pub enum FeeRateError {
#[error("arithmetic overflow on feerate")]
ArithmeticOverflow,
}
impl From<BdkFileError> for WalletCreationError {
fn from(error: BdkFileError) -> Self {
match error {

View File

@@ -16,6 +16,7 @@ use crate::descriptor::Descriptor;
use crate::error::Alpha3Error;
use crate::error::CalculateFeeError;
use crate::error::EsploraError;
use crate::error::FeeRateError;
use crate::esplora::EsploraClient;
use crate::keys::DerivationPath;
use crate::keys::DescriptorPublicKey;

View File

@@ -4,31 +4,39 @@ use bdk::wallet::AddressIndex as BdkAddressIndex;
use bdk::wallet::AddressInfo as BdkAddressInfo;
use bdk::wallet::Balance as BdkBalance;
use bdk::KeychainKind;
use bdk::LocalOutput as BdkLocalOutput;
use bdk::FeeRate as BdkFeeRate;
use bdk::bitcoin::FeeRate as BdkFeeRate;
use crate::error::FeeRateError;
use std::sync::Arc;
#[derive(Clone, Debug)]
pub struct FeeRate(pub BdkFeeRate);
impl FeeRate {
pub fn from_sat_per_vb(sat_per_vb: f32) -> Self {
FeeRate(BdkFeeRate::from_sat_per_vb(sat_per_vb))
pub fn from_sat_per_vb(sat_per_vb: u64) -> Result<Self, FeeRateError> {
let fee_rate: Option<BdkFeeRate> = BdkFeeRate::from_sat_per_vb(sat_per_vb);
match fee_rate {
Some(fee_rate) => Ok(FeeRate(fee_rate)),
None => Err(FeeRateError::ArithmeticOverflow),
}
}
pub fn from_sat_per_kwu(sat_per_kwu: f32) -> Self {
pub fn from_sat_per_kwu(sat_per_kwu: u64) -> Self {
FeeRate(BdkFeeRate::from_sat_per_kwu(sat_per_kwu))
}
pub fn as_sat_per_vb(&self) -> f32 {
self.0.as_sat_per_vb()
pub fn to_sat_per_vb_ceil(&self) -> u64 {
self.0.to_sat_per_vb_ceil()
}
pub fn sat_per_kwu(&self) -> f32 {
self.0.sat_per_kwu()
pub fn to_sat_per_vb_floor(&self) -> u64 {
self.0.to_sat_per_vb_floor()
}
pub fn to_sat_per_kwu(&self) -> u64 {
self.0.to_sat_per_kwu()
}
}

View File

@@ -12,8 +12,8 @@ use bdk::bitcoin::Network;
use bdk::bitcoin::{OutPoint as BdkOutPoint, Sequence, Txid};
use bdk::wallet::tx_builder::ChangeSpendPolicy;
use bdk::wallet::{ChangeSet, Update as BdkUpdate};
use bdk::SignOptions;
use bdk::Wallet as BdkWallet;
use bdk::{FeeRate as BdkFeeRate, SignOptions};
use bdk_file_store::Store;
use std::collections::HashSet;
@@ -532,13 +532,13 @@ impl TxBuilder {
#[derive(Clone)]
pub(crate) struct BumpFeeTxBuilder {
pub(crate) txid: String,
pub(crate) fee_rate: f32,
pub(crate) fee_rate: Arc<FeeRate>,
pub(crate) allow_shrinking: Option<Arc<Script>>,
pub(crate) rbf: Option<RbfValue>,
}
impl BumpFeeTxBuilder {
pub(crate) fn new(txid: String, fee_rate: f32) -> Self {
pub(crate) fn new(txid: String, fee_rate: Arc<FeeRate>) -> Self {
Self {
txid,
fee_rate,
@@ -575,7 +575,7 @@ impl BumpFeeTxBuilder {
let txid = Txid::from_str(self.txid.as_str()).map_err(|_| Alpha3Error::Generic)?;
let mut wallet = wallet.get_wallet();
let mut tx_builder = wallet.build_fee_bump(txid)?;
tx_builder.fee_rate(BdkFeeRate::from_sat_per_vb(self.fee_rate));
tx_builder.fee_rate(self.fee_rate.0);
if let Some(allow_shrinking) = &self.allow_shrinking {
tx_builder.allow_shrinking(allow_shrinking.0.clone())?;
}