Add get_address method on the wallet
This commit is contained in:
parent
c074a92e0c
commit
04d538ad45
1
.gitignore
vendored
1
.gitignore
vendored
@ -14,3 +14,4 @@ testdb
|
|||||||
xcuserdata
|
xcuserdata
|
||||||
.lsp
|
.lsp
|
||||||
.clj-kondo
|
.clj-kondo
|
||||||
|
.idea/
|
||||||
|
10
src/bdk.udl
10
src/bdk.udl
@ -49,11 +49,16 @@ enum BdkError {
|
|||||||
"Rusqlite",
|
"Rusqlite",
|
||||||
};
|
};
|
||||||
|
|
||||||
dictionary AddressInformation {
|
dictionary AddressInfo {
|
||||||
u32 index;
|
u32 index;
|
||||||
string address;
|
string address;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum AddressIndex {
|
||||||
|
"New",
|
||||||
|
"LastUnused",
|
||||||
|
};
|
||||||
|
|
||||||
enum Network {
|
enum Network {
|
||||||
"Bitcoin",
|
"Bitcoin",
|
||||||
"Testnet",
|
"Testnet",
|
||||||
@ -131,8 +136,7 @@ callback interface Progress {
|
|||||||
interface Wallet {
|
interface Wallet {
|
||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config);
|
constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config);
|
||||||
string get_new_address();
|
AddressInfo get_address(AddressIndex address_index);
|
||||||
AddressInformation get_last_unused_address();
|
|
||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
u64 get_balance();
|
u64 get_balance();
|
||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
|
74
src/lib.rs
74
src/lib.rs
@ -12,12 +12,11 @@ use bdk::database::{AnyDatabaseConfig, ConfigurableDatabase};
|
|||||||
use bdk::keys::bip39::{Language, Mnemonic, WordCount};
|
use bdk::keys::bip39::{Language, Mnemonic, WordCount};
|
||||||
use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey};
|
use bdk::keys::{DerivableKey, ExtendedKey, GeneratableKey, GeneratedKey};
|
||||||
use bdk::miniscript::BareCtx;
|
use bdk::miniscript::BareCtx;
|
||||||
use bdk::wallet::AddressIndex;
|
|
||||||
use bdk::wallet::AddressInfo;
|
|
||||||
use bdk::{
|
use bdk::{
|
||||||
BlockTime, Error, FeeRate, SignOptions, SyncOptions as BdkSyncOptions, Wallet as BdkWallet,
|
BlockTime, Error, FeeRate, SignOptions, SyncOptions as BdkSyncOptions, Wallet as BdkWallet,
|
||||||
};
|
};
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
use std::convert::From;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
@ -27,11 +26,39 @@ uniffi_macros::include_scaffolding!("bdk");
|
|||||||
|
|
||||||
type BdkError = Error;
|
type BdkError = Error;
|
||||||
|
|
||||||
pub struct AddressInformation {
|
// we redefine a simpler version of bdk::wallet::AddressInfo
|
||||||
|
// it has an `address` field of type String
|
||||||
|
// instead of the `address` field of type `Address` defined in bitcoin::util::address::Address
|
||||||
|
pub struct AddressInfo {
|
||||||
pub index: u32,
|
pub index: u32,
|
||||||
pub address: String,
|
pub address: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<bdk::wallet::AddressInfo> for AddressInfo {
|
||||||
|
fn from(x: bdk::wallet::AddressInfo) -> AddressInfo {
|
||||||
|
AddressInfo {
|
||||||
|
index: x.index,
|
||||||
|
address: x.address.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we redefine a simpler version of bdk::wallet::AddressIndex
|
||||||
|
// only keeping the `New` and `LastUnused` variants of the enum
|
||||||
|
pub enum AddressIndex {
|
||||||
|
New,
|
||||||
|
LastUnused,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<AddressIndex> for bdk::wallet::AddressIndex {
|
||||||
|
fn from(x: AddressIndex) -> bdk::wallet::AddressIndex {
|
||||||
|
match x {
|
||||||
|
AddressIndex::New => bdk::wallet::AddressIndex::New,
|
||||||
|
AddressIndex::LastUnused => bdk::wallet::AddressIndex::LastUnused
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub enum DatabaseConfig {
|
pub enum DatabaseConfig {
|
||||||
Memory,
|
Memory,
|
||||||
Sled { config: SledDbConfiguration },
|
Sled { config: SledDbConfiguration },
|
||||||
@ -241,32 +268,27 @@ impl Wallet {
|
|||||||
self.get_wallet().sync(blockchain.deref(), bdk_sync_opts)
|
self.get_wallet().sync(blockchain.deref(), bdk_sync_opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_new_address(&self) -> String {
|
fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, BdkError> {
|
||||||
self.get_wallet()
|
match self.get_wallet().get_address(bdk::wallet::AddressIndex::from(address_index)) {
|
||||||
.get_address(AddressIndex::New)
|
Ok(address_info) => Ok(AddressInfo::from(address_info)),
|
||||||
.unwrap()
|
Err(bdk_error) => Err(bdk_error),
|
||||||
.address
|
|
||||||
.to_string()
|
|
||||||
}
|
|
||||||
|
|
||||||
// fn get_last_unused_address(&self) -> String {
|
|
||||||
// self.get_wallet()
|
|
||||||
// .get_address(AddressIndex::LastUnused)
|
|
||||||
// .unwrap()
|
|
||||||
// .address
|
|
||||||
// .to_string()
|
|
||||||
// }
|
|
||||||
|
|
||||||
fn get_last_unused_address(&self) -> AddressInformation {
|
|
||||||
let address_info = self.get_wallet()
|
|
||||||
.get_address(AddressIndex::LastUnused)
|
|
||||||
.unwrap();
|
|
||||||
return AddressInformation {
|
|
||||||
index: address_info.index,
|
|
||||||
address: address_info.address.to_string()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fn get_new_address(&self) -> Result<AddressInformation, BdkError> {
|
||||||
|
// match self.get_wallet().get_address(AddressIndex::New) {
|
||||||
|
// Ok(address_info) => Ok(AddressInformation::from(address_info)),
|
||||||
|
// Err(BdkError) => Err(BdkError),
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// fn get_last_unused_address(&self) -> Result<AddressInformation, BdkError> {
|
||||||
|
// match self.get_wallet().get_address(AddressIndex::LastUnused) {
|
||||||
|
// Ok(address_info) => Ok(AddressInformation::from(address_info)),
|
||||||
|
// Err(BdkError) => Err(BdkError),
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
fn get_balance(&self) -> Result<u64, Error> {
|
fn get_balance(&self) -> Result<u64, Error> {
|
||||||
self.get_wallet().get_balance()
|
self.get_wallet().get_balance()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user