Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add methods on the TxBuilder #418

Merged
merged 1 commit into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class LiveWalletTest {
val update = esploraClient.scan(wallet, 10uL, 1uL)
wallet.applyUpdate(update)
println("Balance: ${wallet.getBalance().total()}")
val balance: Balance = wallet.getBalance()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is added across all 4 platforms in the follow up PR #420

println("Balance: $balance")

assert(wallet.getBalance().total() > 0uL)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.bitcoindevkit

import kotlin.test.Test
import kotlin.test.assertEquals
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.runner.RunWith
import kotlin.test.assertEquals
Expand Down
36 changes: 36 additions & 0 deletions bdk-ffi/src/bdk.udl
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ enum BdkError {
"Psbt",
};

enum ChangeSpendPolicy {
"ChangeAllowed",
"OnlyChange",
"ChangeForbidden"
};

interface Balance {
u64 immature();

Expand Down Expand Up @@ -95,8 +101,24 @@ interface TxBuilder {

TxBuilder add_recipient(Script script, u64 amount);

TxBuilder set_recipients(sequence<ScriptAmount> script_amount);

TxBuilder add_unspendable(OutPoint unspendable);

TxBuilder add_utxo(OutPoint outpoint);

TxBuilder change_policy(ChangeSpendPolicy change_policy);

TxBuilder do_not_spend_change();

TxBuilder only_spend_change();

TxBuilder manually_selected_only();

TxBuilder fee_rate(float sat_per_vbyte);

TxBuilder drain_wallet();

[Throws=BdkError]
PartiallySignedTransaction finish([ByRef] Wallet wallet);
};
Expand Down Expand Up @@ -198,6 +220,15 @@ interface EsploraClient {
Update scan(Wallet wallet, u64 stop_gap, u64 parallel_requests);
};

// ------------------------------------------------------------------------
// bdk-ffi-defined types
// ------------------------------------------------------------------------

dictionary ScriptAmount {
Script script;
u64 amount;
};

// ------------------------------------------------------------------------
// bdk crate - bitcoin re-exports
// ------------------------------------------------------------------------
Expand Down Expand Up @@ -263,3 +294,8 @@ interface PartiallySignedTransaction {

Transaction extract_tx();
};

dictionary OutPoint {
string txid;
u32 vout;
};
20 changes: 20 additions & 0 deletions bdk-ffi/src/bitcoin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ use bdk::bitcoin::consensus::Decodable;
use bdk::bitcoin::network::constants::Network as BdkNetwork;
use bdk::bitcoin::psbt::PartiallySignedTransaction as BdkPartiallySignedTransaction;
use bdk::bitcoin::Address as BdkAddress;
use bdk::bitcoin::OutPoint as BdkOutPoint;
use bdk::bitcoin::Transaction as BdkTransaction;
use bdk::bitcoin::Txid;
use bdk::Error as BdkError;

use std::io::Cursor;
Expand Down Expand Up @@ -283,3 +285,21 @@ impl From<BdkPartiallySignedTransaction> for PartiallySignedTransaction {
}
}
}

/// A reference to a transaction output.
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct OutPoint {
/// The referenced transaction's txid.
pub txid: String,
/// The index of the referenced output in its transaction's vout.
pub vout: u32,
}

impl From<&OutPoint> for BdkOutPoint {
fn from(outpoint: &OutPoint) -> Self {
BdkOutPoint {
txid: Txid::from_str(&outpoint.txid).unwrap(),
vout: outpoint.vout,
}
}
}
10 changes: 6 additions & 4 deletions bdk-ffi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ mod wallet;
// TODO 6: Why are these imports required?
use crate::bitcoin::Address;
use crate::bitcoin::Network;
use crate::bitcoin::OutPoint;
use crate::bitcoin::PartiallySignedTransaction;
use crate::bitcoin::Script;
use crate::bitcoin::Transaction;
Expand All @@ -21,6 +22,7 @@ use crate::wallet::Update;
use crate::wallet::Wallet;

use bdk::keys::bip39::WordCount;
use bdk::wallet::tx_builder::ChangeSpendPolicy;
use bdk::wallet::AddressIndex as BdkAddressIndex;
use bdk::wallet::AddressInfo as BdkAddressInfo;
use bdk::wallet::Balance as BdkBalance;
Expand All @@ -32,10 +34,10 @@ use std::sync::Arc;
uniffi::include_scaffolding!("bdk");

/// A output script and an amount of satoshis.
// pub struct ScriptAmount {
// pub script: Arc<Script>,
// pub amount: u64,
// }
pub struct ScriptAmount {
pub script: Arc<Script>,
pub amount: u64,
}

/// A derived address and the index it was found at.
pub struct AddressInfo {
Expand Down
Loading
Loading