chore: bump bdk to alpha 8 and use bitcoin::FeeRate
This commit is contained in:
parent
e774c94998
commit
aa035588a0
@ -35,7 +35,7 @@ class LiveTxBuilderTest {
|
||||
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.TESTNET)
|
||||
val psbt: PartiallySignedTransaction = TxBuilder()
|
||||
.addRecipient(recipient.scriptPubkey(), 4200uL)
|
||||
.feeRate(FeeRate.fromSatPerVb(2.0f))
|
||||
.feeRate(FeeRate.fromSatPerVb(2uL))
|
||||
.finish(wallet)
|
||||
|
||||
println(psbt.serialize())
|
||||
@ -63,7 +63,7 @@ class LiveTxBuilderTest {
|
||||
|
||||
val psbt: PartiallySignedTransaction = TxBuilder()
|
||||
.setRecipients(allRecipients)
|
||||
.feeRate(FeeRate.fromSatPerVb(4.0f))
|
||||
.feeRate(FeeRate.fromSatPerVb(4uL))
|
||||
.changePolicy(ChangeSpendPolicy.CHANGE_FORBIDDEN)
|
||||
.enableRbf()
|
||||
.finish(wallet)
|
||||
|
@ -79,7 +79,7 @@ class LiveWalletTest {
|
||||
println("Tx fee is: ${txFee}")
|
||||
|
||||
val feeRate: FeeRate = wallet.calculateFeeRate(tx)
|
||||
println("Tx fee rate is: ${feeRate.asSatPerVb()} sat/vB")
|
||||
println("Tx fee rate is: ${feeRate.toSatPerVbCeil()} sat/vB")
|
||||
|
||||
esploraClient.broadcast(tx)
|
||||
}
|
||||
|
14
bdk-ffi/Cargo.lock
generated
14
bdk-ffi/Cargo.lock
generated
@ -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",
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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())?;
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ class LiveTxBuilderTest {
|
||||
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.TESTNET)
|
||||
val psbt: PartiallySignedTransaction = TxBuilder()
|
||||
.addRecipient(recipient.scriptPubkey(), 4200uL)
|
||||
.feeRate(FeeRate.fromSatPerVb(2.0f))
|
||||
.feeRate(FeeRate.fromSatPerVb(2uL))
|
||||
.finish(wallet)
|
||||
|
||||
println(psbt.serialize())
|
||||
@ -62,7 +62,7 @@ class LiveTxBuilderTest {
|
||||
|
||||
val psbt: PartiallySignedTransaction = TxBuilder()
|
||||
.setRecipients(allRecipients)
|
||||
.feeRate(FeeRate.fromSatPerVb(4.0f))
|
||||
.feeRate(FeeRate.fromSatPerVb(4uL))
|
||||
.changePolicy(ChangeSpendPolicy.CHANGE_FORBIDDEN)
|
||||
.enableRbf()
|
||||
.finish(wallet)
|
||||
|
@ -61,7 +61,7 @@ class LiveWalletTest {
|
||||
|
||||
val psbt: PartiallySignedTransaction = TxBuilder()
|
||||
.addRecipient(recipient.scriptPubkey(), 4200uL)
|
||||
.feeRate(FeeRate.fromSatPerVb(2.0f))
|
||||
.feeRate(FeeRate.fromSatPerVb(2uL))
|
||||
.finish(wallet)
|
||||
|
||||
println(psbt.serialize())
|
||||
@ -77,7 +77,7 @@ class LiveWalletTest {
|
||||
println("Tx fee is: ${txFee}")
|
||||
|
||||
val feeRate: FeeRate = wallet.calculateFeeRate(tx)
|
||||
println("Tx fee rate is: ${feeRate.asSatPerVb()} sat/vB")
|
||||
println("Tx fee rate is: ${feeRate.toSatPerVbCeil()} sat/vB")
|
||||
|
||||
esploraClient.broadcast(tx)
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ class LiveTxBuilderTest(unittest.TestCase):
|
||||
network = bdk.Network.TESTNET
|
||||
)
|
||||
|
||||
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2.0)).finish(wallet)
|
||||
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2)).finish(wallet)
|
||||
|
||||
self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")
|
||||
|
||||
@ -76,7 +76,7 @@ class LiveTxBuilderTest(unittest.TestCase):
|
||||
bdk.ScriptAmount(recipient2.script_pubkey, 4200)
|
||||
)
|
||||
|
||||
psbt: bdk.PartiallySignedTransaction = bdk.TxBuilder().set_recipients(all_recipients).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2.0)).enable_rbf().finish(wallet)
|
||||
psbt: bdk.PartiallySignedTransaction = bdk.TxBuilder().set_recipients(all_recipients).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2)).enable_rbf().finish(wallet)
|
||||
wallet.sign(psbt)
|
||||
|
||||
self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")
|
||||
|
@ -64,7 +64,7 @@ class LiveWalletTest(unittest.TestCase):
|
||||
network = bdk.Network.TESTNET
|
||||
)
|
||||
|
||||
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2.0)).finish(wallet)
|
||||
psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=4200).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2)).finish(wallet)
|
||||
# print(psbt.serialize())
|
||||
self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")
|
||||
|
||||
@ -75,7 +75,7 @@ class LiveWalletTest(unittest.TestCase):
|
||||
fee = wallet.calculate_fee(tx)
|
||||
print(f"Transaction Fee: {fee}")
|
||||
fee_rate = wallet.calculate_fee_rate(tx)
|
||||
print(f"Transaction Fee Rate: {fee_rate.as_sat_per_vb()} sat/vB")
|
||||
print(f"Transaction Fee Rate: {fee_rate.to_sat_per_vb_ceil()} sat/vB")
|
||||
|
||||
esploraClient.broadcast(tx)
|
||||
|
||||
|
@ -47,7 +47,7 @@ final class LiveTxBuilderTests: XCTestCase {
|
||||
let recipient: Address = try Address(address: "tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", network: .testnet)
|
||||
let psbt: PartiallySignedTransaction = try TxBuilder()
|
||||
.addRecipient(script: recipient.scriptPubkey(), amount: 4200)
|
||||
.feeRate(feeRate: FeeRate.fromSatPerVb(satPerVb: 2.0))
|
||||
.feeRate(feeRate: FeeRate.fromSatPerVb(satPerVb: 2))
|
||||
.finish(wallet: wallet)
|
||||
|
||||
print(psbt.serialize())
|
||||
@ -88,7 +88,7 @@ final class LiveTxBuilderTests: XCTestCase {
|
||||
|
||||
let psbt: PartiallySignedTransaction = try TxBuilder()
|
||||
.setRecipients(recipients: allRecipients)
|
||||
.feeRate(feeRate: FeeRate.fromSatPerVb(satPerVb: 4.0))
|
||||
.feeRate(feeRate: FeeRate.fromSatPerVb(satPerVb: 4))
|
||||
.changePolicy(changePolicy: ChangeSpendPolicy.changeForbidden)
|
||||
.enableRbf()
|
||||
.finish(wallet: wallet)
|
||||
|
@ -81,7 +81,7 @@ final class LiveWalletTests: XCTestCase {
|
||||
let psbt: PartiallySignedTransaction = try
|
||||
TxBuilder()
|
||||
.addRecipient(script: recipient.scriptPubkey(), amount: 4200)
|
||||
.feeRate(feeRate: FeeRate.fromSatPerVb(satPerVb: 2.0))
|
||||
.feeRate(feeRate: FeeRate.fromSatPerVb(satPerVb: 2))
|
||||
.finish(wallet: wallet)
|
||||
|
||||
print(psbt.serialize())
|
||||
@ -95,7 +95,7 @@ final class LiveWalletTests: XCTestCase {
|
||||
let fee: UInt64 = try wallet.calculateFee(tx: tx)
|
||||
print("Transaction Fee: \(fee)")
|
||||
let feeRate: FeeRate = try wallet.calculateFeeRate(tx: tx)
|
||||
print("Transaction Fee Rate: \(feeRate.asSatPerVb()) sat/vB")
|
||||
print("Transaction Fee Rate: \(feeRate.toSatPerVbCeil()) sat/vB")
|
||||
|
||||
try esploraClient.broadcast(transaction: tx)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user