diff --git a/ios/Classes/frb_generated.h b/ios/Classes/frb_generated.h index b2589a9..d62d8d4 100644 --- a/ios/Classes/frb_generated.h +++ b/ios/Classes/frb_generated.h @@ -80,6 +80,7 @@ typedef struct wire_cst_tx { uint64_t fee; uint32_t *height; struct wire_cst_list_prim_u_8_strict *unblinded_url; + uintptr_t vsize; } wire_cst_tx; typedef struct wire_cst_list_tx { diff --git a/lib/src/generated/api/types.dart b/lib/src/generated/api/types.dart index 103ac65..c8a9127 100644 --- a/lib/src/generated/api/types.dart +++ b/lib/src/generated/api/types.dart @@ -107,6 +107,7 @@ class Tx with _$Tx { required int fee, int? height, required String unblindedUrl, + required int vsize, }) = _Tx; } diff --git a/lib/src/generated/api/types.freezed.dart b/lib/src/generated/api/types.freezed.dart index ccc6af0..ab90a9a 100644 --- a/lib/src/generated/api/types.freezed.dart +++ b/lib/src/generated/api/types.freezed.dart @@ -444,6 +444,7 @@ mixin _$Tx { int get fee => throw _privateConstructorUsedError; int? get height => throw _privateConstructorUsedError; String get unblindedUrl => throw _privateConstructorUsedError; + int get vsize => throw _privateConstructorUsedError; @JsonKey(ignore: true) $TxCopyWith get copyWith => throw _privateConstructorUsedError; @@ -463,7 +464,8 @@ abstract class $TxCopyWith<$Res> { List inputs, int fee, int? height, - String unblindedUrl}); + String unblindedUrl, + int vsize}); } /// @nodoc @@ -487,6 +489,7 @@ class _$TxCopyWithImpl<$Res, $Val extends Tx> implements $TxCopyWith<$Res> { Object? fee = null, Object? height = freezed, Object? unblindedUrl = null, + Object? vsize = null, }) { return _then(_value.copyWith( timestamp: freezed == timestamp @@ -525,6 +528,10 @@ class _$TxCopyWithImpl<$Res, $Val extends Tx> implements $TxCopyWith<$Res> { ? _value.unblindedUrl : unblindedUrl // ignore: cast_nullable_to_non_nullable as String, + vsize: null == vsize + ? _value.vsize + : vsize // ignore: cast_nullable_to_non_nullable + as int, ) as $Val); } } @@ -544,7 +551,8 @@ abstract class _$$TxImplCopyWith<$Res> implements $TxCopyWith<$Res> { List inputs, int fee, int? height, - String unblindedUrl}); + String unblindedUrl, + int vsize}); } /// @nodoc @@ -565,6 +573,7 @@ class __$$TxImplCopyWithImpl<$Res> extends _$TxCopyWithImpl<$Res, _$TxImpl> Object? fee = null, Object? height = freezed, Object? unblindedUrl = null, + Object? vsize = null, }) { return _then(_$TxImpl( timestamp: freezed == timestamp @@ -603,6 +612,10 @@ class __$$TxImplCopyWithImpl<$Res> extends _$TxCopyWithImpl<$Res, _$TxImpl> ? _value.unblindedUrl : unblindedUrl // ignore: cast_nullable_to_non_nullable as String, + vsize: null == vsize + ? _value.vsize + : vsize // ignore: cast_nullable_to_non_nullable + as int, )); } } @@ -619,7 +632,8 @@ class _$TxImpl implements _Tx { required final List inputs, required this.fee, this.height, - required this.unblindedUrl}) + required this.unblindedUrl, + required this.vsize}) : _balances = balances, _outputs = outputs, _inputs = inputs; @@ -660,10 +674,12 @@ class _$TxImpl implements _Tx { final int? height; @override final String unblindedUrl; + @override + final int vsize; @override String toString() { - return 'Tx(timestamp: $timestamp, kind: $kind, balances: $balances, txid: $txid, outputs: $outputs, inputs: $inputs, fee: $fee, height: $height, unblindedUrl: $unblindedUrl)'; + return 'Tx(timestamp: $timestamp, kind: $kind, balances: $balances, txid: $txid, outputs: $outputs, inputs: $inputs, fee: $fee, height: $height, unblindedUrl: $unblindedUrl, vsize: $vsize)'; } @override @@ -681,7 +697,8 @@ class _$TxImpl implements _Tx { (identical(other.fee, fee) || other.fee == fee) && (identical(other.height, height) || other.height == height) && (identical(other.unblindedUrl, unblindedUrl) || - other.unblindedUrl == unblindedUrl)); + other.unblindedUrl == unblindedUrl) && + (identical(other.vsize, vsize) || other.vsize == vsize)); } @override @@ -695,7 +712,8 @@ class _$TxImpl implements _Tx { const DeepCollectionEquality().hash(_inputs), fee, height, - unblindedUrl); + unblindedUrl, + vsize); @JsonKey(ignore: true) @override @@ -714,7 +732,8 @@ abstract class _Tx implements Tx { required final List inputs, required final int fee, final int? height, - required final String unblindedUrl}) = _$TxImpl; + required final String unblindedUrl, + required final int vsize}) = _$TxImpl; @override int? get timestamp; @@ -735,6 +754,8 @@ abstract class _Tx implements Tx { @override String get unblindedUrl; @override + int get vsize; + @override @JsonKey(ignore: true) _$$TxImplCopyWith<_$TxImpl> get copyWith => throw _privateConstructorUsedError; diff --git a/lib/src/generated/frb_generated.dart b/lib/src/generated/frb_generated.dart index c846a5d..3ed623f 100644 --- a/lib/src/generated/frb_generated.dart +++ b/lib/src/generated/frb_generated.dart @@ -854,8 +854,8 @@ class LwkCoreApiImpl extends LwkCoreApiImplPlatform implements LwkCoreApi { Tx dco_decode_tx(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs final arr = raw as List; - if (arr.length != 9) - throw Exception('unexpected arr length: expect 9 but see ${arr.length}'); + if (arr.length != 10) + throw Exception('unexpected arr length: expect 10 but see ${arr.length}'); return Tx( timestamp: dco_decode_opt_box_autoadd_u_32(arr[0]), kind: dco_decode_String(arr[1]), @@ -866,6 +866,7 @@ class LwkCoreApiImpl extends LwkCoreApiImplPlatform implements LwkCoreApi { fee: dco_decode_u_64(arr[6]), height: dco_decode_opt_box_autoadd_u_32(arr[7]), unblindedUrl: dco_decode_String(arr[8]), + vsize: dco_decode_usize(arr[9]), ); } @@ -1137,6 +1138,7 @@ class LwkCoreApiImpl extends LwkCoreApiImplPlatform implements LwkCoreApi { var var_fee = sse_decode_u_64(deserializer); var var_height = sse_decode_opt_box_autoadd_u_32(deserializer); var var_unblindedUrl = sse_decode_String(deserializer); + var var_vsize = sse_decode_usize(deserializer); return Tx( timestamp: var_timestamp, kind: var_kind, @@ -1146,7 +1148,8 @@ class LwkCoreApiImpl extends LwkCoreApiImplPlatform implements LwkCoreApi { inputs: var_inputs, fee: var_fee, height: var_height, - unblindedUrl: var_unblindedUrl); + unblindedUrl: var_unblindedUrl, + vsize: var_vsize); } @protected @@ -1449,6 +1452,7 @@ class LwkCoreApiImpl extends LwkCoreApiImplPlatform implements LwkCoreApi { sse_encode_u_64(self.fee, serializer); sse_encode_opt_box_autoadd_u_32(self.height, serializer); sse_encode_String(self.unblindedUrl, serializer); + sse_encode_usize(self.vsize, serializer); } @protected diff --git a/lib/src/generated/frb_generated.io.dart b/lib/src/generated/frb_generated.io.dart index 4a61c61..fd103d3 100644 --- a/lib/src/generated/frb_generated.io.dart +++ b/lib/src/generated/frb_generated.io.dart @@ -395,6 +395,7 @@ abstract class LwkCoreApiImplPlatform extends BaseApiImpl { wireObj.fee = cst_encode_u_64(apiObj.fee); wireObj.height = cst_encode_opt_box_autoadd_u_32(apiObj.height); wireObj.unblinded_url = cst_encode_String(apiObj.unblindedUrl); + wireObj.vsize = cst_encode_usize(apiObj.vsize); } @protected @@ -1290,6 +1291,9 @@ final class wire_cst_tx extends ffi.Struct { external ffi.Pointer height; external ffi.Pointer unblinded_url; + + @ffi.UintPtr() + external int vsize; } final class wire_cst_list_tx extends ffi.Struct { diff --git a/lib/src/generated/frb_generated.web.dart b/lib/src/generated/frb_generated.web.dart index 0e25d6f..c793581 100644 --- a/lib/src/generated/frb_generated.web.dart +++ b/lib/src/generated/frb_generated.web.dart @@ -356,7 +356,8 @@ abstract class LwkCoreApiImplPlatform extends BaseApiImpl { cst_encode_list_tx_out(raw.inputs), cst_encode_u_64(raw.fee), cst_encode_opt_box_autoadd_u_32(raw.height), - cst_encode_String(raw.unblindedUrl) + cst_encode_String(raw.unblindedUrl), + cst_encode_usize(raw.vsize) ]; } diff --git a/macos/Classes/frb_generated.h b/macos/Classes/frb_generated.h index b2589a9..d62d8d4 100644 --- a/macos/Classes/frb_generated.h +++ b/macos/Classes/frb_generated.h @@ -80,6 +80,7 @@ typedef struct wire_cst_tx { uint64_t fee; uint32_t *height; struct wire_cst_list_prim_u_8_strict *unblinded_url; + uintptr_t vsize; } wire_cst_tx; typedef struct wire_cst_list_tx { diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 9ea7490..52e572f 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -437,9 +437,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.6" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9689a29b593160de5bc4aacab7b5d54fb52231de70122626c178e6a368994c7" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -447,9 +447,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.6" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5387378c84f6faa26890ebf9f0a92989f8873d4d380467bcd0d8d8620424df" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", @@ -624,6 +624,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "either" version = "1.12.0" @@ -1118,12 +1129,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http", "http-body", "pin-project-lite", @@ -1131,9 +1142,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "9f3935c160d00ac752e09787e6e6bfc26494c2183cc922f1bc678a60d4733bc2" [[package]] name = "hyper" @@ -1215,6 +1226,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "idna" version = "0.4.0" @@ -1227,12 +1356,14 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", + "smallvec", + "utf8_iter", ] [[package]] @@ -1417,6 +1548,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + [[package]] name = "lock_api" version = "0.4.12" @@ -2267,6 +2404,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" @@ -2326,6 +2469,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -2388,6 +2542,16 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2607,15 +2771,27 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.0", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2957,6 +3133,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "yaml-rust" version = "0.4.5" @@ -2966,8 +3154,75 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] diff --git a/rust/src/api/types.rs b/rust/src/api/types.rs index 9e238a0..2a95245 100644 --- a/rust/src/api/types.rs +++ b/rust/src/api/types.rs @@ -209,6 +209,7 @@ pub struct Tx { pub fee: u64, pub height: Option, pub unblinded_url: String, + pub vsize: usize, } impl From for Tx { @@ -269,6 +270,7 @@ impl From for Tx { timestamp: wallet_tx.timestamp, height: wallet_tx.height, unblinded_url: wallet_tx.unblinded_url("").clone(), + vsize: wallet_tx.tx.vsize(), } } } diff --git a/rust/src/api/wallet.rs b/rust/src/api/wallet.rs index b9cc5bc..9e760b8 100644 --- a/rust/src/api/wallet.rs +++ b/rust/src/api/wallet.rs @@ -237,24 +237,42 @@ impl Wallet { #[cfg(test)] mod tests { + use std::{thread, time::Duration}; + use super::*; #[test] fn testable_wallets() { let mnemonic = - "bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon"; - let electrum_url = "blockstream.info:465".to_string(); - let network = Network::Testnet; + "umbrella response wide outer mystery drastic crew festival poet coconut error act"; + let electrum_url = "les.bullbitcoin.com:995".to_string(); + let network = Network::Mainnet; let desc = Descriptor::new_confidential(network, mnemonic.to_string()).expect(""); let wallet = Wallet::init(network, "/tmp/lwk".to_string(), desc).expect(""); - let _ = wallet.sync(electrum_url); + let _ = wallet.sync(electrum_url.clone()); let _txs = wallet.txs(); for tx in _txs.unwrap(){ println!("{:?}\n{:?}\n{:?}", tx.balances, tx.timestamp, tx.height) } let balances = wallet.balances(); let address = wallet.address_last_unused(); - println!("{:#?}", address); - println!("{:#?}", balances); + // println!("{:#?}", address); + // println!("{:#?}", balances); + // let out_address = "lq1qqdvmhsrn8fehfurv0yzgve2xfhrfxj9yax7t6wymzuvfj2w2y49v4jf3730067gp3xhkhw73083tvx3xryasvf32pe06sajwu".to_string(); + // let pset = wallet.build_lbtc_tx(0, out_address, 1000.0, true).unwrap(); + // let signed = wallet.sign_tx(network, pset, mnemonic.to_string()).unwrap(); + // let _ = Wallet::broadcast_tx(electrum_url.clone(), signed).unwrap(); + // let _ = wallet.sync(electrum_url.clone()); + // let _txs = wallet.txs(); + // for tx in _txs.unwrap(){ + // println!("{:?}\n{:?}\n{:?}", tx.balances, tx.timestamp, tx.height) + // } + // thread::sleep(Duration::from_secs(60)); + // let _ = wallet.sync(electrum_url.clone()); + // let _txs = wallet.txs(); + // for tx in _txs.unwrap(){ + // println!("{:?}\n{:?}\n{:?}", tx.balances, tx.timestamp, tx.height) + // } + } #[test] fn test_broadcast() { diff --git a/rust/src/frb_generated.io.rs b/rust/src/frb_generated.io.rs index c4f93e1..e805776 100644 --- a/rust/src/frb_generated.io.rs +++ b/rust/src/frb_generated.io.rs @@ -175,6 +175,7 @@ impl CstDecode for wire_cst_tx { fee: self.fee.cst_decode(), height: self.height.cst_decode(), unblinded_url: self.unblinded_url.cst_decode(), + vsize: self.vsize.cst_decode(), } } } @@ -307,6 +308,7 @@ impl NewWithNullPtr for wire_cst_tx { fee: Default::default(), height: core::ptr::null_mut(), unblinded_url: core::ptr::null_mut(), + vsize: Default::default(), } } } @@ -695,6 +697,7 @@ pub struct wire_cst_tx { fee: u64, height: *mut u32, unblinded_url: *mut wire_cst_list_prim_u_8_strict, + vsize: usize, } #[repr(C)] #[derive(Clone, Copy)] diff --git a/rust/src/frb_generated.rs b/rust/src/frb_generated.rs index 38632ba..b344761 100644 --- a/rust/src/frb_generated.rs +++ b/rust/src/frb_generated.rs @@ -748,6 +748,7 @@ impl SseDecode for crate::api::types::Tx { let mut var_fee = ::sse_decode(deserializer); let mut var_height = >::sse_decode(deserializer); let mut var_unblindedUrl = ::sse_decode(deserializer); + let mut var_vsize = ::sse_decode(deserializer); return crate::api::types::Tx { timestamp: var_timestamp, kind: var_kind, @@ -758,6 +759,7 @@ impl SseDecode for crate::api::types::Tx { fee: var_fee, height: var_height, unblinded_url: var_unblindedUrl, + vsize: var_vsize, }; } } @@ -1007,6 +1009,7 @@ impl flutter_rust_bridge::IntoDart for crate::api::types::Tx { self.fee.into_into_dart().into_dart(), self.height.into_into_dart().into_dart(), self.unblinded_url.into_into_dart().into_dart(), + self.vsize.into_into_dart().into_dart(), ] .into_dart() } @@ -1245,6 +1248,7 @@ impl SseEncode for crate::api::types::Tx { ::sse_encode(self.fee, serializer); >::sse_encode(self.height, serializer); ::sse_encode(self.unblinded_url, serializer); + ::sse_encode(self.vsize, serializer); } } diff --git a/rust/src/frb_generated.web.rs b/rust/src/frb_generated.web.rs index 10cca26..cc5f9d0 100644 --- a/rust/src/frb_generated.web.rs +++ b/rust/src/frb_generated.web.rs @@ -211,8 +211,8 @@ impl CstDecode .unwrap(); assert_eq!( self_.length(), - 9, - "Expected 9 elements, got {}", + 10, + "Expected 10 elements, got {}", self_.length() ); crate::api::types::Tx { @@ -225,6 +225,7 @@ impl CstDecode fee: self_.get(6).cst_decode(), height: self_.get(7).cst_decode(), unblinded_url: self_.get(8).cst_decode(), + vsize: self_.get(9).cst_decode(), } } } diff --git a/test/lwk_root_test.dart b/test/lwk_root_test.dart index 48e75f5..2308410 100644 --- a/test/lwk_root_test.dart +++ b/test/lwk_root_test.dart @@ -8,13 +8,13 @@ void main() { test('Wallet Flow', () async { await LibLwk.init(); const mnemonic = - "bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon bacon"; - const network = Network.testnet; - const electrumUrl = 'blockstream.info:465'; + "umbrella response wide outer mystery drastic crew festival poet coconut error act"; + const network = Network.mainnet; + const electrumUrl = 'les.bullbitcoin.com:995'; const dbPath = '/tmp/lwk-darti'; const outAmount = 10000; - const outAddress = - "tlq1qqt4hjkl6sug5ld89sdaekt7ew04va8w7c63adw07l33vcx86vpj5th3w7rkdnckmfpraufnnrfcep4thqt6024phuav99djeu"; + // const outAddress = + // "tlq1qqt4hjkl6sug5ld89sdaekt7ew04va8w7c63adw07l33vcx86vpj5th3w7rkdnckmfpraufnnrfcep4thqt6024phuav99djeu"; const feeRate = 1000.0; final descriptor = await Descriptor.newConfidential( network: network, @@ -35,28 +35,28 @@ void main() { for (final tx in txs) { print('${tx.txid}:${tx.balances} ${tx.timestamp}'); } - final pset = await wallet.buildLbtcTx( - sats: outAmount, - outAddress: outAddress, - feeRate: feeRate, - drain: false, - ); - final decodedPset = await wallet.decodeTx(pset: pset); - print( - "Amount: ${decodedPset.balances} , Fee: ${decodedPset.absoluteFees}"); - final signedTxBytes = - await wallet.signTx(network: network, pset: pset, mnemonic: mnemonic); - final tx = await Wallet.broadcastTx( - electrumUrl: electrumUrl, txBytes: signedTxBytes); - print(tx); - await wallet.sync(electrumUrl: electrumUrl); - final postBalance = await wallet.balances(); - print('Post Balance: ${postBalance}'); - final getUnspendUtxos = await wallet.utxos(); - print('Unspent Utxos: $getUnspendUtxos'); - final signedPset = await wallet.signedPsetWithExtraDetails( - network: network, pset: pset, mnemonic: mnemonic); - print(signedPset); + // final pset = await wallet.buildLbtcTx( + // sats: outAmount, + // outAddress: outAddress, + // feeRate: feeRate, + // drain: false, + // ); + // final decodedPset = await wallet.decodeTx(pset: pset); + // print( + // "Amount: ${decodedPset.balances} , Fee: ${decodedPset.absoluteFees}"); + // final signedTxBytes = + // await wallet.signTx(network: network, pset: pset, mnemonic: mnemonic); + // final tx = await Wallet.broadcastTx( + // electrumUrl: electrumUrl, txBytes: signedTxBytes); + // print(tx); + // await wallet.sync(electrumUrl: electrumUrl); + // final postBalance = await wallet.balances(); + // print('Post Balance: ${postBalance}'); + // final getUnspendUtxos = await wallet.utxos(); + // print('Unspent Utxos: $getUnspendUtxos'); + // final signedPset = await wallet.signedPsetWithExtraDetails( + // network: network, pset: pset, mnemonic: mnemonic); + // print(signedPset); }); }); }