Pass wallet by ref

This commit is contained in:
Steve Myers 2021-06-04 23:01:51 -07:00
parent cb54405aed
commit 43425c8875
2 changed files with 32 additions and 18 deletions

22
main.c
View File

@ -12,24 +12,32 @@ int main (int argc, char const * const argv[])
print_string(string3); print_string(string3);
print_string(string3); print_string(string3);
free_string(string3); free_string(string3);
//free_string(string3);
//Point_t a = new_point(84,45); //Point_t a = new_point(84,45);
//Point_t b = new_point(0,39); //Point_t b = new_point(0,39);
//Point_t m = mid_point(a, b); //Point_t m = mid_point(a, b);
//print_point(m); //print_point(m);
//char const * name = "test_wallet"; char const * name = "test_wallet";
//char const * desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"; char const * desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)";
//char const * change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"; char const * change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)";
//printf("wallet name: %s\n", name); //printf("wallet name: %s\n", name);
//printf("descriptor: %s\n", desc); //printf("descriptor: %s\n", desc);
//printf("change descriptor: %s\n", change); //printf("change descriptor: %s\n", change);
//WalletPtr_t * wallet = new_wallet(name, desc, change); WalletPtr_t * wallet = new_wallet(name, desc, change);
//sync_wallet(wallet);
//char const * address = new_address(wallet); sync_wallet(&wallet);
//printf("new address: %s\n", address); sync_wallet(&wallet);
char const * address1 = new_address(&wallet);
printf("address1: %s\n", address1);
char const * address2 = new_address(&wallet);
printf("address: %s\n", address2);
//free_wallet(wallet);
//sync_wallet(&wallet);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

View File

@ -1,6 +1,6 @@
#![deny(unsafe_code)] /* No `unsafe` needed! */ #![deny(unsafe_code)] /* No `unsafe` needed! */
//use ::safer_ffi::prelude::*; use ::safer_ffi::prelude::*;
use bdk::bitcoin::network::constants::Network::Testnet; use bdk::bitcoin::network::constants::Network::Testnet;
use bdk::blockchain::{ElectrumBlockchain, log_progress}; use bdk::blockchain::{ElectrumBlockchain, log_progress};
use bdk::electrum_client::Client; use bdk::electrum_client::Client;
@ -9,7 +9,7 @@ use bdk::sled::Tree;
use bdk::Wallet; use bdk::Wallet;
use bdk::wallet::AddressIndex::New; use bdk::wallet::AddressIndex::New;
use safer_ffi::char_p::{char_p_ref, char_p_boxed}; use safer_ffi::char_p::{char_p_ref, char_p_boxed};
use ::safer_ffi::prelude::*; use safer_ffi::boxed::Box;
/// Concatenate two input UTF-8 (_e.g._, ASCII) strings. /// Concatenate two input UTF-8 (_e.g._, ASCII) strings.
/// ///
@ -87,11 +87,11 @@ impl From<Wallet<ElectrumBlockchain, Tree>> for WalletPtr {
} }
#[ffi_export] #[ffi_export]
fn new_wallet( fn new_wallet<'a>(
name: char_p::Ref<'_>, name: char_p_ref<'a>,
descriptor: char_p::Ref<'_>, descriptor: char_p_ref<'a>,
change_descriptor: Option<char_p::Ref<'_>>, change_descriptor: Option<char_p_ref<'a>>,
) -> repr_c::Box<WalletPtr> { ) -> Box<WalletPtr> {
let name = name.to_string(); let name = name.to_string();
let descriptor = descriptor.to_string(); let descriptor = descriptor.to_string();
let change_descriptor = change_descriptor.map(|s| s.to_string()); let change_descriptor = change_descriptor.map(|s| s.to_string());
@ -114,17 +114,18 @@ fn new_wallet(
) )
.unwrap(); .unwrap();
repr_c::Box::new(WalletPtr::from(wallet)) Box::new(WalletPtr::from(wallet))
} }
#[ffi_export] #[ffi_export]
fn sync_wallet( wallet: repr_c::Box<WalletPtr>) { fn sync_wallet( wallet: &Box<WalletPtr>) {
wallet.raw.sync(log_progress(), Some(100)); println!("before sync");
let _r = wallet.raw.sync(log_progress(), Some(100));
println!("after sync"); println!("after sync");
} }
#[ffi_export] #[ffi_export]
fn new_address( wallet: repr_c::Box<WalletPtr>) -> char_p::Box { fn new_address( wallet: &Box<WalletPtr>) -> char_p_boxed {
println!("before new_address"); println!("before new_address");
let new_address = wallet.raw.get_address(New); let new_address = wallet.raw.get_address(New);
println!("after new_address: {:?}", new_address); println!("after new_address: {:?}", new_address);
@ -134,6 +135,11 @@ fn new_address( wallet: repr_c::Box<WalletPtr>) -> char_p::Box {
new_address.try_into().unwrap() new_address.try_into().unwrap()
} }
#[ffi_export]
fn free_wallet( wallet: Box<WalletPtr>) {
drop(wallet)
}
/// The following test function is necessary for the header generation. /// The following test function is necessary for the header generation.
#[::safer_ffi::cfg_headers] #[::safer_ffi::cfg_headers]
#[test] #[test]