Add OnlineWallet::getBalance()

This commit is contained in:
artfuldev 2021-10-15 03:40:33 +05:30
parent 5ab47ef815
commit c15c69fb08
4 changed files with 47 additions and 24 deletions

View File

@ -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_d1e_rustbuffer_alloc(size, status) _UniFFILib.INSTANCE.ffi_bdk_3303_rustbuffer_alloc(size, status)
} }
internal fun free(buf: RustBuffer.ByValue) = rustCall() { status -> internal fun free(buf: RustBuffer.ByValue) = rustCall() { status ->
_UniFFILib.INSTANCE.ffi_bdk_d1e_rustbuffer_free(buf, status) _UniFFILib.INSTANCE.ffi_bdk_3303_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_d1e_rustbuffer_reserve(buf, additional, status) _UniFFILib.INSTANCE.ffi_bdk_3303_rustbuffer_reserve(buf, additional, status)
} }
} }
@ -542,51 +542,55 @@ internal interface _UniFFILib : Library {
} }
} }
fun ffi_bdk_d1e_OfflineWallet_object_free(ptr: Pointer, fun ffi_bdk_3303_OfflineWallet_object_free(ptr: Pointer,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): Unit ): Unit
fun bdk_d1e_OfflineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue, fun bdk_3303_OfflineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): Pointer ): Pointer
fun bdk_d1e_OfflineWallet_get_new_address(ptr: Pointer, fun bdk_3303_OfflineWallet_get_new_address(ptr: Pointer,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): RustBuffer.ByValue ): RustBuffer.ByValue
fun ffi_bdk_d1e_OnlineWallet_object_free(ptr: Pointer, fun ffi_bdk_3303_OnlineWallet_object_free(ptr: Pointer,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): Unit ): Unit
fun bdk_d1e_OnlineWallet_new(descriptor: RustBuffer.ByValue,network: RustBuffer.ByValue,database_config: RustBuffer.ByValue,blockchain_config: RustBuffer.ByValue, fun bdk_3303_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_d1e_OnlineWallet_get_network(ptr: Pointer, fun bdk_3303_OnlineWallet_get_network(ptr: Pointer,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): RustBuffer.ByValue ): RustBuffer.ByValue
fun bdk_d1e_OnlineWallet_sync(ptr: Pointer,progress_update: Long,max_address_param: RustBuffer.ByValue, fun bdk_3303_OnlineWallet_sync(ptr: Pointer,progress_update: Long,max_address_param: RustBuffer.ByValue,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): Unit ): Unit
fun ffi_bdk_d1e_BdkProgress_init_callback(callback_stub: ForeignCallback, fun bdk_3303_OnlineWallet_get_balance(ptr: Pointer,
uniffi_out_err: RustCallStatus
): Long
fun ffi_bdk_3303_BdkProgress_init_callback(callback_stub: ForeignCallback,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): Unit ): Unit
fun ffi_bdk_d1e_rustbuffer_alloc(size: Int, fun ffi_bdk_3303_rustbuffer_alloc(size: Int,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): RustBuffer.ByValue ): RustBuffer.ByValue
fun ffi_bdk_d1e_rustbuffer_from_bytes(bytes: ForeignBytes.ByValue, fun ffi_bdk_3303_rustbuffer_from_bytes(bytes: ForeignBytes.ByValue,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): RustBuffer.ByValue ): RustBuffer.ByValue
fun ffi_bdk_d1e_rustbuffer_free(buf: RustBuffer.ByValue, fun ffi_bdk_3303_rustbuffer_free(buf: RustBuffer.ByValue,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): Unit ): Unit
fun ffi_bdk_d1e_rustbuffer_reserve(buf: RustBuffer.ByValue,additional: Int, fun ffi_bdk_3303_rustbuffer_reserve(buf: RustBuffer.ByValue,additional: Int,
uniffi_out_err: RustCallStatus uniffi_out_err: RustCallStatus
): RustBuffer.ByValue ): RustBuffer.ByValue
@ -1296,7 +1300,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_d1e_OfflineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower() ,status) _UniFFILib.INSTANCE.bdk_3303_OfflineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower() ,status)
}) })
/** /**
@ -1309,7 +1313,7 @@ class OfflineWallet(
*/ */
override protected fun freeRustArcPtr() { override protected fun freeRustArcPtr() {
rustCall() { status -> rustCall() { status ->
_UniFFILib.INSTANCE.ffi_bdk_d1e_OfflineWallet_object_free(this.pointer, status) _UniFFILib.INSTANCE.ffi_bdk_3303_OfflineWallet_object_free(this.pointer, status)
} }
} }
@ -1324,7 +1328,7 @@ class OfflineWallet(
override fun getNewAddress(): String = override fun getNewAddress(): String =
callWithPointer { callWithPointer {
rustCall() { status -> rustCall() { status ->
_UniFFILib.INSTANCE.bdk_d1e_OfflineWallet_get_new_address(it, status) _UniFFILib.INSTANCE.bdk_3303_OfflineWallet_get_new_address(it, status)
} }
}.let { }.let {
String.lift(it) String.lift(it)
@ -1351,6 +1355,7 @@ class OfflineWallet(
public interface OnlineWalletInterface { public interface OnlineWalletInterface {
fun getNetwork(): Network fun getNetwork(): Network
fun sync(progressUpdate: BdkProgress, maxAddressParam: UInt? ) fun sync(progressUpdate: BdkProgress, maxAddressParam: UInt? )
fun getBalance(): ULong
} }
@ -1361,7 +1366,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_d1e_OnlineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower(), blockchainConfig.lower() ,status) _UniFFILib.INSTANCE.bdk_3303_OnlineWallet_new(descriptor.lower(), network.lower(), databaseConfig.lower(), blockchainConfig.lower() ,status)
}) })
/** /**
@ -1374,7 +1379,7 @@ class OnlineWallet(
*/ */
override protected fun freeRustArcPtr() { override protected fun freeRustArcPtr() {
rustCall() { status -> rustCall() { status ->
_UniFFILib.INSTANCE.ffi_bdk_d1e_OnlineWallet_object_free(this.pointer, status) _UniFFILib.INSTANCE.ffi_bdk_3303_OnlineWallet_object_free(this.pointer, status)
} }
} }
@ -1389,7 +1394,7 @@ class OnlineWallet(
override fun getNetwork(): Network = override fun getNetwork(): Network =
callWithPointer { callWithPointer {
rustCall() { status -> rustCall() { status ->
_UniFFILib.INSTANCE.bdk_d1e_OnlineWallet_get_network(it, status) _UniFFILib.INSTANCE.bdk_3303_OnlineWallet_get_network(it, status)
} }
}.let { }.let {
Network.lift(it) Network.lift(it)
@ -1398,10 +1403,19 @@ 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_d1e_OnlineWallet_sync(it, CallbackInterfaceBdkProgressInternals.lower(progressUpdate), lowerOptionalu32(maxAddressParam) , status) _UniFFILib.INSTANCE.bdk_3303_OnlineWallet_sync(it, CallbackInterfaceBdkProgressInternals.lower(progressUpdate), lowerOptionalu32(maxAddressParam) , status)
} }
} }
override fun getBalance(): ULong =
callWithPointer {
rustCallWithError(BdkException) { status ->
_UniFFILib.INSTANCE.bdk_3303_OnlineWallet_get_balance(it, status)
}
}.let {
ULong.lift(it)
}
companion object { companion object {
@ -1468,7 +1482,7 @@ internal object CallbackInterfaceBdkProgressInternals: CallbackInternals<BdkProg
) { ) {
override fun register(lib: _UniFFILib) { override fun register(lib: _UniFFILib) {
rustCall() { status -> rustCall() { status ->
lib.ffi_bdk_d1e_BdkProgress_init_callback(this.foreignCallback, status) lib.ffi_bdk_3303_BdkProgress_init_callback(this.foreignCallback, status)
} }
} }
} }

View File

@ -54,10 +54,13 @@ class LibTest {
} }
@Test @Test
fun onlineWalletSync() { fun onlineWalletSyncGetBalance() {
val db = DatabaseConfig.Memory("") val db = DatabaseConfig.Memory("")
val client = BlockchainConfig.Electrum(ElectrumConfig("ssl://electrum.blockstream.info:50002", null, 5u, null, 100u)) val client = BlockchainConfig.Electrum(ElectrumConfig("ssl://electrum.blockstream.info:50002", null, 5u, null, 100u))
val wallet = OnlineWallet(desc, Network.TESTNET, db, client) val wallet = OnlineWallet(desc, Network.TESTNET, db, client)
wallet.sync(LogProgress(), null) wallet.sync(LogProgress(), null)
val balance = wallet.getBalance()
assertNotNull(balance)
println(balance)
} }
} }

View File

@ -101,4 +101,6 @@ interface OnlineWallet {
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);
[Throws=BdkError]
u64 get_balance();
}; };

View File

@ -149,6 +149,10 @@ impl OnlineWallet {
.unwrap() .unwrap()
.sync(BdkProgressHolder { progress_update }, max_address_param) .sync(BdkProgressHolder { progress_update }, max_address_param)
} }
fn get_balance(&self) -> Result<u64, Error> {
self.wallet.lock().unwrap().get_balance()
}
} }
uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send); uniffi::deps::static_assertions::assert_impl_all!(OfflineWallet: Sync, Send);