Share OfflineWalletOperations
This commit is contained in:
parent
95980c5e14
commit
2dab31209e
@ -44,15 +44,15 @@ open class RustBuffer : Structure() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
internal fun alloc(size: Int = 0) = rustCall() { status ->
|
internal fun alloc(size: Int = 0) = rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.ffi_bdk_3303_rustbuffer_alloc(size, status)
|
_UniFFILib.INSTANCE.ffi_bdk_7046_rustbuffer_alloc(size, status)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun free(buf: RustBuffer.ByValue) = rustCall() { status ->
|
internal fun free(buf: RustBuffer.ByValue) = rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.ffi_bdk_3303_rustbuffer_free(buf, status)
|
_UniFFILib.INSTANCE.ffi_bdk_7046_rustbuffer_free(buf, status)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun reserve(buf: RustBuffer.ByValue, additional: Int) = rustCall() { status ->
|
internal fun reserve(buf: RustBuffer.ByValue, additional: Int) = rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.ffi_bdk_3303_rustbuffer_reserve(buf, additional, status)
|
_UniFFILib.INSTANCE.ffi_bdk_7046_rustbuffer_reserve(buf, additional, status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -542,55 +542,59 @@ internal interface _UniFFILib : Library {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ffi_bdk_3303_OfflineWallet_object_free(ptr: Pointer,
|
fun ffi_bdk_7046_OfflineWallet_object_free(ptr: Pointer,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Unit
|
): Unit
|
||||||
|
|
||||||
fun bdk_3303_OfflineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue,
|
fun bdk_7046_OfflineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Pointer
|
): Pointer
|
||||||
|
|
||||||
fun bdk_3303_OfflineWallet_get_new_address(ptr: Pointer,
|
fun bdk_7046_OfflineWallet_get_new_address(ptr: Pointer,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): RustBuffer.ByValue
|
): RustBuffer.ByValue
|
||||||
|
|
||||||
fun ffi_bdk_3303_OnlineWallet_object_free(ptr: Pointer,
|
fun ffi_bdk_7046_OnlineWallet_object_free(ptr: Pointer,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Unit
|
): Unit
|
||||||
|
|
||||||
fun bdk_3303_OnlineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue,blockchain_config: RustBuffer.ByValue,
|
fun bdk_7046_OnlineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue,blockchain_config: RustBuffer.ByValue,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Pointer
|
): Pointer
|
||||||
|
|
||||||
fun bdk_3303_OnlineWallet_get_network(ptr: Pointer,
|
fun bdk_7046_OnlineWallet_get_new_address(ptr: Pointer,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): RustBuffer.ByValue
|
): RustBuffer.ByValue
|
||||||
|
|
||||||
fun bdk_3303_OnlineWallet_sync(ptr: Pointer,progress_update: Long,max_address_param: RustBuffer.ByValue,
|
fun bdk_7046_OnlineWallet_get_network(ptr: Pointer,
|
||||||
|
uniffi_out_err: RustCallStatus
|
||||||
|
): RustBuffer.ByValue
|
||||||
|
|
||||||
|
fun bdk_7046_OnlineWallet_sync(ptr: Pointer,progress_update: Long,max_address_param: RustBuffer.ByValue,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Unit
|
): Unit
|
||||||
|
|
||||||
fun bdk_3303_OnlineWallet_get_balance(ptr: Pointer,
|
fun bdk_7046_OnlineWallet_get_balance(ptr: Pointer,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Long
|
): Long
|
||||||
|
|
||||||
fun ffi_bdk_3303_BdkProgress_init_callback(callback_stub: ForeignCallback,
|
fun ffi_bdk_7046_BdkProgress_init_callback(callback_stub: ForeignCallback,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Unit
|
): Unit
|
||||||
|
|
||||||
fun ffi_bdk_3303_rustbuffer_alloc(size: Int,
|
fun ffi_bdk_7046_rustbuffer_alloc(size: Int,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): RustBuffer.ByValue
|
): RustBuffer.ByValue
|
||||||
|
|
||||||
fun ffi_bdk_3303_rustbuffer_from_bytes(bytes: ForeignBytes.ByValue,
|
fun ffi_bdk_7046_rustbuffer_from_bytes(bytes: ForeignBytes.ByValue,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): RustBuffer.ByValue
|
): RustBuffer.ByValue
|
||||||
|
|
||||||
fun ffi_bdk_3303_rustbuffer_free(buf: RustBuffer.ByValue,
|
fun ffi_bdk_7046_rustbuffer_free(buf: RustBuffer.ByValue,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): Unit
|
): Unit
|
||||||
|
|
||||||
fun ffi_bdk_3303_rustbuffer_reserve(buf: RustBuffer.ByValue,additional: Int,
|
fun ffi_bdk_7046_rustbuffer_reserve(buf: RustBuffer.ByValue,additional: Int,
|
||||||
uniffi_out_err: RustCallStatus
|
uniffi_out_err: RustCallStatus
|
||||||
): RustBuffer.ByValue
|
): RustBuffer.ByValue
|
||||||
|
|
||||||
@ -1300,7 +1304,7 @@ class OfflineWallet(
|
|||||||
constructor(descriptor: String, network: Network, databaseConfig: DatabaseConfig ) :
|
constructor(descriptor: String, network: Network, databaseConfig: DatabaseConfig ) :
|
||||||
this(
|
this(
|
||||||
rustCallWithError(BdkException) { status ->
|
rustCallWithError(BdkException) { status ->
|
||||||
_UniFFILib.INSTANCE.bdk_3303_OfflineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower() ,status)
|
_UniFFILib.INSTANCE.bdk_7046_OfflineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower() ,status)
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1313,7 +1317,7 @@ class OfflineWallet(
|
|||||||
*/
|
*/
|
||||||
override protected fun freeRustArcPtr() {
|
override protected fun freeRustArcPtr() {
|
||||||
rustCall() { status ->
|
rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.ffi_bdk_3303_OfflineWallet_object_free(this.pointer, status)
|
_UniFFILib.INSTANCE.ffi_bdk_7046_OfflineWallet_object_free(this.pointer, status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1328,7 +1332,7 @@ class OfflineWallet(
|
|||||||
override fun getNewAddress(): String =
|
override fun getNewAddress(): String =
|
||||||
callWithPointer {
|
callWithPointer {
|
||||||
rustCall() { status ->
|
rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.bdk_3303_OfflineWallet_get_new_address(it, status)
|
_UniFFILib.INSTANCE.bdk_7046_OfflineWallet_get_new_address(it, status)
|
||||||
}
|
}
|
||||||
}.let {
|
}.let {
|
||||||
String.lift(it)
|
String.lift(it)
|
||||||
@ -1353,6 +1357,7 @@ class OfflineWallet(
|
|||||||
|
|
||||||
@ExperimentalUnsignedTypes
|
@ExperimentalUnsignedTypes
|
||||||
public interface OnlineWalletInterface {
|
public interface OnlineWalletInterface {
|
||||||
|
fun getNewAddress(): String
|
||||||
fun getNetwork(): Network
|
fun getNetwork(): Network
|
||||||
fun sync(progressUpdate: BdkProgress, maxAddressParam: UInt? )
|
fun sync(progressUpdate: BdkProgress, maxAddressParam: UInt? )
|
||||||
fun getBalance(): ULong
|
fun getBalance(): ULong
|
||||||
@ -1366,7 +1371,7 @@ class OnlineWallet(
|
|||||||
constructor(descriptor: String, network: Network, databaseConfig: DatabaseConfig, blockchainConfig: BlockchainConfig ) :
|
constructor(descriptor: String, network: Network, databaseConfig: DatabaseConfig, blockchainConfig: BlockchainConfig ) :
|
||||||
this(
|
this(
|
||||||
rustCallWithError(BdkException) { status ->
|
rustCallWithError(BdkException) { status ->
|
||||||
_UniFFILib.INSTANCE.bdk_3303_OnlineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower(), blockchainConfig.lower() ,status)
|
_UniFFILib.INSTANCE.bdk_7046_OnlineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower(), blockchainConfig.lower() ,status)
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1379,7 +1384,7 @@ class OnlineWallet(
|
|||||||
*/
|
*/
|
||||||
override protected fun freeRustArcPtr() {
|
override protected fun freeRustArcPtr() {
|
||||||
rustCall() { status ->
|
rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.ffi_bdk_3303_OnlineWallet_object_free(this.pointer, status)
|
_UniFFILib.INSTANCE.ffi_bdk_7046_OnlineWallet_object_free(this.pointer, status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1391,10 +1396,19 @@ class OnlineWallet(
|
|||||||
buf.putLong(Pointer.nativeValue(this.lower()))
|
buf.putLong(Pointer.nativeValue(this.lower()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getNewAddress(): String =
|
||||||
|
callWithPointer {
|
||||||
|
rustCall() { status ->
|
||||||
|
_UniFFILib.INSTANCE.bdk_7046_OnlineWallet_get_new_address(it, status)
|
||||||
|
}
|
||||||
|
}.let {
|
||||||
|
String.lift(it)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getNetwork(): Network =
|
override fun getNetwork(): Network =
|
||||||
callWithPointer {
|
callWithPointer {
|
||||||
rustCall() { status ->
|
rustCall() { status ->
|
||||||
_UniFFILib.INSTANCE.bdk_3303_OnlineWallet_get_network(it, status)
|
_UniFFILib.INSTANCE.bdk_7046_OnlineWallet_get_network(it, status)
|
||||||
}
|
}
|
||||||
}.let {
|
}.let {
|
||||||
Network.lift(it)
|
Network.lift(it)
|
||||||
@ -1403,14 +1417,14 @@ class OnlineWallet(
|
|||||||
override fun sync(progressUpdate: BdkProgress, maxAddressParam: UInt? ) =
|
override fun sync(progressUpdate: BdkProgress, maxAddressParam: UInt? ) =
|
||||||
callWithPointer {
|
callWithPointer {
|
||||||
rustCallWithError(BdkException) { status ->
|
rustCallWithError(BdkException) { status ->
|
||||||
_UniFFILib.INSTANCE.bdk_3303_OnlineWallet_sync(it, CallbackInterfaceBdkProgressInternals.lower(progressUpdate), lowerOptionalu32(maxAddressParam) , status)
|
_UniFFILib.INSTANCE.bdk_7046_OnlineWallet_sync(it, CallbackInterfaceBdkProgressInternals.lower(progressUpdate), lowerOptionalu32(maxAddressParam) , status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getBalance(): ULong =
|
override fun getBalance(): ULong =
|
||||||
callWithPointer {
|
callWithPointer {
|
||||||
rustCallWithError(BdkException) { status ->
|
rustCallWithError(BdkException) { status ->
|
||||||
_UniFFILib.INSTANCE.bdk_3303_OnlineWallet_get_balance(it, status)
|
_UniFFILib.INSTANCE.bdk_7046_OnlineWallet_get_balance(it, status)
|
||||||
}
|
}
|
||||||
}.let {
|
}.let {
|
||||||
ULong.lift(it)
|
ULong.lift(it)
|
||||||
@ -1482,7 +1496,7 @@ internal object CallbackInterfaceBdkProgressInternals: CallbackInternals<BdkProg
|
|||||||
) {
|
) {
|
||||||
override fun register(lib: _UniFFILib) {
|
override fun register(lib: _UniFFILib) {
|
||||||
rustCall() { status ->
|
rustCall() { status ->
|
||||||
lib.ffi_bdk_3303_BdkProgress_init_callback(this.foreignCallback, status)
|
lib.ffi_bdk_7046_BdkProgress_init_callback(this.foreignCallback, status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,6 +98,7 @@ callback interface BdkProgress {
|
|||||||
interface OnlineWallet {
|
interface OnlineWallet {
|
||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
constructor(string descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config);
|
constructor(string descriptor, Network network, DatabaseConfig database_config, BlockchainConfig blockchain_config);
|
||||||
|
string get_new_address();
|
||||||
Network get_network();
|
Network get_network();
|
||||||
[Throws=BdkError]
|
[Throws=BdkError]
|
||||||
void sync(BdkProgress progress_update, u32? max_address_param);
|
void sync(BdkProgress progress_update, u32? max_address_param);
|
||||||
|
42
src/lib.rs
42
src/lib.rs
@ -10,7 +10,7 @@ use bdk::wallet::AddressIndex;
|
|||||||
use bdk::Error;
|
use bdk::Error;
|
||||||
use bdk::Wallet;
|
use bdk::Wallet;
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
use std::sync::Mutex;
|
use std::sync::{Mutex, MutexGuard};
|
||||||
|
|
||||||
uniffi_macros::include_scaffolding!("bdk");
|
uniffi_macros::include_scaffolding!("bdk");
|
||||||
|
|
||||||
@ -42,10 +42,30 @@ pub enum BlockchainConfig {
|
|||||||
Esplora { config: EsploraConfig },
|
Esplora { config: EsploraConfig },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trait WalletHolder<B> {
|
||||||
|
fn get_wallet(&self) -> MutexGuard<Wallet<B, AnyDatabase>>;
|
||||||
|
}
|
||||||
|
|
||||||
struct OfflineWallet {
|
struct OfflineWallet {
|
||||||
wallet: Mutex<Wallet<(), AnyDatabase>>,
|
wallet: Mutex<Wallet<(), AnyDatabase>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WalletHolder<()> for OfflineWallet {
|
||||||
|
fn get_wallet(&self) -> MutexGuard<Wallet<(), AnyDatabase>> {
|
||||||
|
self.wallet.lock().unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait OfflineWalletOperations<B>: WalletHolder<B> {
|
||||||
|
fn get_new_address(&self) -> String {
|
||||||
|
self.get_wallet()
|
||||||
|
.get_address(AddressIndex::New)
|
||||||
|
.unwrap()
|
||||||
|
.address
|
||||||
|
.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl OfflineWallet {
|
impl OfflineWallet {
|
||||||
fn new(
|
fn new(
|
||||||
descriptor: String,
|
descriptor: String,
|
||||||
@ -60,17 +80,9 @@ impl OfflineWallet {
|
|||||||
let wallet = Mutex::new(Wallet::new_offline(&descriptor, None, network, database)?);
|
let wallet = Mutex::new(Wallet::new_offline(&descriptor, None, network, database)?);
|
||||||
Ok(OfflineWallet { wallet })
|
Ok(OfflineWallet { wallet })
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn get_new_address(&self) -> String {
|
impl OfflineWalletOperations<()> for OfflineWallet {}
|
||||||
self.wallet
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.get_address(AddressIndex::New)
|
|
||||||
.unwrap()
|
|
||||||
.address
|
|
||||||
.to_string()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct OnlineWallet {
|
struct OnlineWallet {
|
||||||
wallet: Mutex<Wallet<AnyBlockchain, AnyDatabase>>,
|
wallet: Mutex<Wallet<AnyBlockchain, AnyDatabase>>,
|
||||||
@ -155,5 +167,13 @@ impl OnlineWallet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WalletHolder<AnyBlockchain> for OnlineWallet {
|
||||||
|
fn get_wallet(&self) -> MutexGuard<Wallet<AnyBlockchain, AnyDatabase>> {
|
||||||
|
self.wallet.lock().unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl OfflineWalletOperations<AnyBlockchain> for OnlineWallet {}
|
||||||
|
|
||||||
uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send);
|
uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send);
|
||||||
uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);
|
uniffi::deps::static_assertions::assert_impl_all!(OnlineWallet: Sync, Send);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user