diff --git a/main.c b/main.c index 1a82336..33522fd 100644 --- a/main.c +++ b/main.c @@ -12,24 +12,32 @@ int main (int argc, char const * const argv[]) print_string(string3); print_string(string3); free_string(string3); + //free_string(string3); //Point_t a = new_point(84,45); //Point_t b = new_point(0,39); //Point_t m = mid_point(a, b); //print_point(m); - //char const * name = "test_wallet"; - //char const * desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"; - //char const * change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"; + char const * name = "test_wallet"; + char const * desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"; + char const * change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"; //printf("wallet name: %s\n", name); //printf("descriptor: %s\n", desc); //printf("change descriptor: %s\n", change); - //WalletPtr_t * wallet = new_wallet(name, desc, change); - //sync_wallet(wallet); + WalletPtr_t * wallet = new_wallet(name, desc, change); - //char const * address = new_address(wallet); - //printf("new address: %s\n", address); + sync_wallet(&wallet); + 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; } diff --git a/src/lib.rs b/src/lib.rs index 37d8e19..fd4c76a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,6 @@ #![deny(unsafe_code)] /* No `unsafe` needed! */ -//use ::safer_ffi::prelude::*; +use ::safer_ffi::prelude::*; use bdk::bitcoin::network::constants::Network::Testnet; use bdk::blockchain::{ElectrumBlockchain, log_progress}; use bdk::electrum_client::Client; @@ -9,7 +9,7 @@ use bdk::sled::Tree; use bdk::Wallet; use bdk::wallet::AddressIndex::New; 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. /// @@ -87,11 +87,11 @@ impl From> for WalletPtr { } #[ffi_export] -fn new_wallet( - name: char_p::Ref<'_>, - descriptor: char_p::Ref<'_>, - change_descriptor: Option>, -) -> repr_c::Box { +fn new_wallet<'a>( + name: char_p_ref<'a>, + descriptor: char_p_ref<'a>, + change_descriptor: Option>, +) -> Box { let name = name.to_string(); let descriptor = descriptor.to_string(); let change_descriptor = change_descriptor.map(|s| s.to_string()); @@ -114,17 +114,18 @@ fn new_wallet( ) .unwrap(); - repr_c::Box::new(WalletPtr::from(wallet)) + Box::new(WalletPtr::from(wallet)) } #[ffi_export] -fn sync_wallet( wallet: repr_c::Box) { - wallet.raw.sync(log_progress(), Some(100)); +fn sync_wallet( wallet: &Box) { + println!("before sync"); + let _r = wallet.raw.sync(log_progress(), Some(100)); println!("after sync"); } #[ffi_export] -fn new_address( wallet: repr_c::Box) -> char_p::Box { +fn new_address( wallet: &Box) -> char_p_boxed { println!("before new_address"); let new_address = wallet.raw.get_address(New); println!("after new_address: {:?}", new_address); @@ -134,6 +135,11 @@ fn new_address( wallet: repr_c::Box) -> char_p::Box { new_address.try_into().unwrap() } +#[ffi_export] +fn free_wallet( wallet: Box) { + drop(wallet) +} + /// The following test function is necessary for the header generation. #[::safer_ffi::cfg_headers] #[test]