2021-06-10 13:40:58 -07:00
|
|
|
#include <assert.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
2021-06-10 17:22:33 -07:00
|
|
|
#include <string.h>
|
2021-06-10 13:40:58 -07:00
|
|
|
#include "bdk_ffi.h"
|
|
|
|
|
|
|
|
int main (int argc, char const * const argv[])
|
2021-06-10 17:22:33 -07:00
|
|
|
{
|
2021-06-19 22:53:26 -07:00
|
|
|
// test new wallet error
|
|
|
|
{
|
2021-06-25 23:40:38 -07:00
|
|
|
BlockchainConfig_t *bc_config = new_electrum_config("ssl://electrum.blockstream.info:60002", NULL, 5, 30);
|
|
|
|
//DatabaseConfig_t *db_config = new_sled_config("/home/steve/.bdk", "test_wallet");
|
|
|
|
DatabaseConfig_t *db_config = new_memory_config();
|
|
|
|
|
2021-06-30 17:44:46 -07:00
|
|
|
// new wallet with bad descriptor
|
2021-07-03 19:07:49 -07:00
|
|
|
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result("bad","bad",bc_config,db_config);
|
|
|
|
assert(strlen(wallet_result.err) > 0);
|
2021-06-30 17:44:46 -07:00
|
|
|
assert(wallet_result.ok == NULL);
|
|
|
|
|
2021-06-25 23:40:38 -07:00
|
|
|
free_blockchain_config(bc_config);
|
|
|
|
free_database_config(db_config);
|
2021-06-30 17:44:46 -07:00
|
|
|
|
2021-07-03 19:07:49 -07:00
|
|
|
char *wallet_err = wallet_result.err;
|
2021-06-21 17:01:53 -07:00
|
|
|
assert(wallet_err != NULL);
|
|
|
|
assert( 0 == strcmp(wallet_err,"Descriptor") );
|
2021-06-30 17:44:46 -07:00
|
|
|
// printf("wallet err: %s\n", wallet_err);
|
|
|
|
|
2021-06-19 22:53:26 -07:00
|
|
|
free_wallet_result(wallet_result);
|
|
|
|
}
|
2021-06-10 13:40:58 -07:00
|
|
|
|
2021-06-19 22:53:26 -07:00
|
|
|
// test new wallet
|
2021-06-10 13:40:58 -07:00
|
|
|
{
|
2021-06-19 22:53:26 -07:00
|
|
|
char const *desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)";
|
|
|
|
char const *change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)";
|
|
|
|
|
2021-06-25 23:40:38 -07:00
|
|
|
BlockchainConfig_t *bc_config = new_electrum_config("ssl://electrum.blockstream.info:60002", NULL, 5, 30);
|
|
|
|
DatabaseConfig_t *db_config = new_memory_config();
|
|
|
|
|
2021-06-30 17:44:46 -07:00
|
|
|
// new wallet
|
2021-07-03 19:07:49 -07:00
|
|
|
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result(desc,change,bc_config,db_config);
|
|
|
|
// printf("wallet_result.err = %ld\n", strlen(wallet_result.err));
|
|
|
|
assert(strlen(wallet_result.err) == 0);
|
2021-06-30 17:44:46 -07:00
|
|
|
assert(wallet_result.ok != NULL);
|
|
|
|
|
2021-06-25 23:40:38 -07:00
|
|
|
free_blockchain_config(bc_config);
|
|
|
|
free_database_config(db_config);
|
2021-06-30 17:44:46 -07:00
|
|
|
|
|
|
|
OpaqueWallet_t *wallet = wallet_result.ok;
|
|
|
|
|
2021-07-03 19:07:49 -07:00
|
|
|
// sync wallet
|
2021-07-03 19:24:29 -07:00
|
|
|
FfiResultVoid_t sync_result = sync_wallet(wallet);
|
2021-07-03 19:07:49 -07:00
|
|
|
assert(strlen(sync_result.err) == 0);
|
2021-07-03 19:24:29 -07:00
|
|
|
free_void_result(sync_result);
|
2021-07-03 19:07:49 -07:00
|
|
|
|
|
|
|
// new address
|
|
|
|
FfiResult_char_ptr_t address1_result = new_address(wallet);
|
|
|
|
assert(address1_result.ok != NULL);
|
|
|
|
assert(strlen(address1_result.err) == 0);
|
|
|
|
// printf("address1 = %s\n", *address1_result.ok);
|
|
|
|
assert( 0 == strcmp(address1_result.ok,"tb1qgkhp034fyxeta00h0nne9tzfm0vsxq4prduzxp"));
|
|
|
|
free_string_result(address1_result);
|
|
|
|
|
|
|
|
FfiResult_char_ptr_t address2_result = new_address(wallet);
|
|
|
|
assert(address2_result.ok != NULL);
|
|
|
|
assert(strlen(address2_result.err) == 0);
|
|
|
|
// printf("address2 = %s\n", *address2_result.ok);
|
|
|
|
assert( 0 == strcmp(address2_result.ok,"tb1qd6u9q327sru2ljvwzdtfrdg36sapax7udz97wf"));
|
|
|
|
free_string_result(address2_result);
|
|
|
|
|
|
|
|
// free_wallet
|
2021-06-19 22:53:26 -07:00
|
|
|
free_wallet_result(wallet_result);
|
2021-06-10 13:40:58 -07:00
|
|
|
|
2021-06-14 14:18:16 -07:00
|
|
|
// verify free_wallet after free_wallet fails (core dumped)
|
2021-06-30 17:44:46 -07:00
|
|
|
//// free_wallet_result(wallet_result);
|
2021-06-14 14:18:16 -07:00
|
|
|
|
|
|
|
// verify sync_wallet after free_wallet fails (core dumped)
|
2021-07-03 19:24:29 -07:00
|
|
|
//// FfiResultVoid_t sync_result2 = sync_wallet(wallet);
|
2021-06-30 17:44:46 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// test get unspent utxos
|
|
|
|
{
|
|
|
|
char const *desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)";
|
|
|
|
char const *change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)";
|
|
|
|
|
|
|
|
BlockchainConfig_t *bc_config = new_electrum_config("ssl://electrum.blockstream.info:60002", NULL, 5, 30);
|
|
|
|
DatabaseConfig_t *db_config = new_memory_config();
|
|
|
|
|
|
|
|
// new wallet
|
2021-07-03 19:07:49 -07:00
|
|
|
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result(desc,change,bc_config,db_config);
|
|
|
|
assert(strlen(wallet_result.err) == 0);
|
2021-06-30 17:44:46 -07:00
|
|
|
assert(wallet_result.ok != NULL);
|
|
|
|
|
|
|
|
free_blockchain_config(bc_config);
|
|
|
|
free_database_config(db_config);
|
|
|
|
|
|
|
|
OpaqueWallet_t *wallet = wallet_result.ok;
|
|
|
|
|
2021-07-03 19:07:49 -07:00
|
|
|
// sync wallet
|
2021-07-03 19:24:29 -07:00
|
|
|
FfiResultVoid_t sync_result = sync_wallet(wallet);
|
2021-07-03 19:07:49 -07:00
|
|
|
assert(strlen(sync_result.err) == 0);
|
2021-07-03 19:24:29 -07:00
|
|
|
free_void_result(sync_result);
|
2021-06-30 17:44:46 -07:00
|
|
|
|
|
|
|
// list unspent
|
2021-07-03 19:07:49 -07:00
|
|
|
FfiResult_Vec_LocalUtxo_t unspent_result = list_unspent(wallet);
|
2021-06-30 17:44:46 -07:00
|
|
|
assert(unspent_result.ok.len == 7);
|
2021-07-03 19:07:49 -07:00
|
|
|
assert(strlen(unspent_result.err) == 0);
|
2021-06-30 17:44:46 -07:00
|
|
|
|
|
|
|
LocalUtxo_t * unspent_ptr = unspent_result.ok.ptr;
|
|
|
|
for (int i = 0; i < unspent_result.ok.len; i++) {
|
|
|
|
// printf("%d: outpoint.txid: %s\n", i, unspent_ptr[i].outpoint.txid);
|
|
|
|
assert(unspent_ptr[i].outpoint.txid != NULL);
|
|
|
|
// printf("%d: outpoint.vout: %d\n", i, unspent_ptr[i].outpoint.vout);
|
|
|
|
assert(unspent_ptr[i].outpoint.vout >= 0);
|
|
|
|
// printf("%d: txout.value: %ld\n", i, unspent_ptr[i].txout.value);
|
|
|
|
assert(unspent_ptr[i].txout.value > 0);
|
|
|
|
// printf("%d: txout.script_pubkey: %s\n", i, unspent_ptr[i].txout.script_pubkey);
|
|
|
|
assert(unspent_ptr[i].txout.script_pubkey != NULL);
|
|
|
|
// printf("%d: keychain: %d\n", i, unspent_ptr[i].keychain);
|
|
|
|
assert(unspent_ptr[i].keychain >= 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
free_unspent_result(unspent_result);
|
|
|
|
free_wallet_result(wallet_result);
|
2021-06-10 13:40:58 -07:00
|
|
|
}
|
2021-07-03 19:07:49 -07:00
|
|
|
|
|
|
|
// test balance
|
|
|
|
/*{
|
|
|
|
char const *desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)";
|
|
|
|
char const *change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)";
|
|
|
|
|
|
|
|
BlockchainConfig_t *bc_config = new_electrum_config("ssl://electrum.blockstream.info:60002", NULL, 5, 30);
|
|
|
|
DatabaseConfig_t *db_config = new_memory_config();
|
|
|
|
|
|
|
|
// new wallet
|
|
|
|
FfiResult_OpaqueWallet_ptr_t wallet_result = new_wallet_result(desc,change,bc_config,db_config);
|
|
|
|
assert(wallet_result.err == NULL);
|
|
|
|
assert(wallet_result.ok != NULL);
|
|
|
|
|
|
|
|
free_blockchain_config(bc_config);
|
|
|
|
free_database_config(db_config);
|
|
|
|
|
|
|
|
OpaqueWallet_t *wallet = wallet_result.ok;
|
|
|
|
|
|
|
|
// sync wallet
|
2021-07-03 19:24:29 -07:00
|
|
|
FfiResultVoid_t sync_result = sync_wallet(wallet);
|
2021-07-03 19:07:49 -07:00
|
|
|
assert(sync_result.err == NULL);
|
2021-07-03 19:24:29 -07:00
|
|
|
free_void_result(sync_result);
|
2021-07-03 19:07:49 -07:00
|
|
|
|
|
|
|
// get balance
|
|
|
|
FfiResultT_uint64_t balance_result = balance(wallet);
|
|
|
|
assert(balance_result.err == NULL);
|
|
|
|
printf("balance = %lu\n", balance_result.ok);
|
|
|
|
assert(balance_result.ok > 0);
|
|
|
|
|
|
|
|
// free balance and wallet results
|
|
|
|
free_u64_result(balance_result);
|
|
|
|
free_wallet_result(wallet_result);
|
|
|
|
}*/
|
2021-06-10 13:40:58 -07:00
|
|
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|