misc: update Xelis FFI lib, update deps to support flutter 3.35 out of the box (since sdk pinned to 3.9.0+ already)
What changed, and why it matters
This is a routine maintenance commit for the Stack Wallet app. It updates the Xelis cryptocurrency library, bumps several Flutter and Android build dependencies, and adjusts the code to match a newer version of the Xelis FFI API. There is no clear security fix or vulnerability being patched in the visible changes. The commit is described by its author as a miscellaneous compatibility update.
Treat as a normal dependency/API-sync commit. Review the upstream xelis-flutter-ffi and xelis-dart-sdk changes for any security fixes they may contain, since this commit only adapts to the new API and does not itself disclose a vulnerability. Verify that commenting out the epiccash and mwc plugin builds was intentional and does not break wallet support. Confirm the new syncError event is handled properly before release, because the current TODO maps sync errors to Offline without surfacing the error message.
Security signals we found
Dependency update: xelis_flutter FFI source moved to upstream xelis-project/xelis-flutter-ffi.git at ref b09b3ffd89bc6390f6d565b967c2ae1052a4bdd2
Dependency update: xelis_dart_sdk changed from hosted 0.24.0 to git HEAD at 62f1c16a2762b9d4e9db24d101035b28a2dcc69e
Dependency update: flutter_rust_bridge 2.9.0 -> 2.11.1
Dependency update: Rust default toolchain 1.85.1 -> 1.91.0
Dependency update: Gradle 8.10.2 -> 8.11.1, Android Gradle Plugin 8.7.0 -> 8.9.1
API rename: l1Low -> stack_l1Low and mapping to PrecomputedTableType.l1Low / l1Full
New unhandled wallet events added with TODO stubs: trackAsset, untrackAsset, syncError
Two plugin build scripts (flutter_libepiccash, flutter_libmwc) temporarily commented out in build_all.sh
Evidence from the diff
The commit updates the Xelis FFI wrapper from a CypherStack fork to the upstream xelis-project repository, switches xelis_dart_sdk to a Git dependency, renames the l1Low parameter to stack_l1Low throughout the Dart interface, maps that boolean to a new PrecomputedTableType enum, and updates Gradle, Android plugin, Rust toolchain, and many pub.dev package versions. It also comments out two unrelated plugin build steps and adds TODO comments around new wallet events (trackAsset, untrackAsset, syncError). No explicit security bug is fixed in the diff.
Changed components
Xelis wallet integration (lib/wallets/wallet/impl/xelis_wallet.dart, lib/wallets/wallet/intermediate/lib_xelis_wallet.dart)Xelis FFI interface and generated template (lib/wl_gen/interfaces/lib_xelis_interface.dart, tool/wl_templates/XEL_lib_xelis_interface_impl.template.dart)Android build toolchain (android/gradle/wrapper/gradle-wrapper.properties, android/settings.gradle)Dependency lockfile (pubspec.lock)Build scripts (scripts/android/build_all.sh, scripts/rust_version.sh, scripts/app_config/templates/pubspec.template.yaml)Inspect captured patch +201 / −147
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index afa1e8e..efdcc4a 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
diff --git a/android/settings.gradle b/android/settings.gradle
index 04c37e5..86b9d4c 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -18,7 +18,7 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
- id "com.android.application" version '8.7.0' apply false
+ id "com.android.application" version '8.9.1' apply false
id "org.jetbrains.kotlin.android" version "2.2.20" apply false
}
diff --git a/lib/wallets/wallet/impl/xelis_wallet.dart b/lib/wallets/wallet/impl/xelis_wallet.dart
index 9423b06..66b551b 100644
--- a/lib/wallets/wallet/impl/xelis_wallet.dart
+++ b/lib/wallets/wallet/impl/xelis_wallet.dart
@@ -57,7 +57,7 @@ class XelisWallet extends LibXelisWallet {
seed: mnemonic,
network: cryptoCurrency.network,
precomputedTablesPath: tablePath,
- l1Low: tableState.currentSize.isLow,
+ stack_l1Low: tableState.currentSize.isLow,
);
await secureStorageInterface.write(
@@ -91,7 +91,7 @@ class XelisWallet extends LibXelisWallet {
password: password,
network: cryptoCurrency.network,
precomputedTablesPath: tablePath,
- l1Low: tableState.currentSize.isLow,
+ stack_l1Low: tableState.currentSize.isLow,
);
final mnemonic = await libXelis.getSeed(wallet);
@@ -123,7 +123,7 @@ class XelisWallet extends LibXelisWallet {
password: password!,
network: cryptoCurrency.network,
precomputedTablesPath: tablePath,
- l1Low: tableState.currentSize.isLow,
+ stack_l1Low: tableState.currentSize.isLow,
);
await _finishInit();
diff --git a/lib/wallets/wallet/intermediate/lib_xelis_wallet.dart b/lib/wallets/wallet/intermediate/lib_xelis_wallet.dart
index 6b276c2..0cfac6d 100644
--- a/lib/wallets/wallet/intermediate/lib_xelis_wallet.dart
+++ b/lib/wallets/wallet/intermediate/lib_xelis_wallet.dart
@@ -226,11 +226,10 @@ extension XelisTableManagement on LibXelisWallet {
try {
Logging.instance.i("Xelis: Generating large tables in background");
-
final tablePath = await getPrecomputedTablesPath();
await libXelis.updateTables(
precomputedTablesPath: tablePath,
- l1Low: state.desiredSize.isLow,
+ stack_l1Low: state.desiredSize.isLow,
);
await setTableState(
diff --git a/lib/wl_gen/interfaces/lib_xelis_interface.dart b/lib/wl_gen/interfaces/lib_xelis_interface.dart
index ecf76a4..494b698 100644
--- a/lib/wl_gen/interfaces/lib_xelis_interface.dart
+++ b/lib/wl_gen/interfaces/lib_xelis_interface.dart
@@ -1,5 +1,5 @@
import 'package:flutter/foundation.dart';
-
+
import '../../providers/progress_report/xelis_table_progress_provider.dart';
import '../../wallets/crypto_currency/crypto_currency.dart';
@@ -32,7 +32,7 @@ abstract class LibXelisInterface {
Future<void> updateTables({
required String precomputedTablesPath,
- required bool l1Low,
+ required bool stack_l1Low,
});
Future<String> getSeed(OpaqueXelisWallet wallet);
@@ -46,7 +46,7 @@ abstract class LibXelisInterface {
String? seed,
String? privateKey,
String? precomputedTablesPath,
- bool? l1Low,
+ bool? stack_l1Low,
});
Future<OpaqueXelisWallet> openXelisWallet(
@@ -56,7 +56,7 @@ abstract class LibXelisInterface {
required String password,
required CryptoCurrencyNetwork network,
String? precomputedTablesPath,
- bool? l1Low,
+ bool? stack_l1Low,
});
String getAddress(OpaqueXelisWallet wallet);
@@ -225,6 +225,8 @@ enum XelisTableSize {
low,
full;
+ // TODO: add more granular table size management interface
+ // for now, just patching the old system into the new FFI API
bool get isLow => this == XelisTableSize.low;
static XelisTableSize get platformDefault {
diff --git a/pubspec.lock b/pubspec.lock
index fd2dde3..e8ce4e6 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
- sha256: dd3d2ad434b9510001d089e8de7556d50c834481b9abc2891a0184a8493a19dc
+ sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev"
source: hosted
- version: "89.0.0"
+ version: "91.0.0"
analyzer:
dependency: "direct dev"
description:
name: analyzer
- sha256: c22b6e7726d1f9e5db58c7251606076a71ca0dbcf76116675edfadbec0c9e875
+ sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08
url: "https://pub.dev"
source: hosted
- version: "8.2.0"
+ version: "8.4.1"
another_flushbar:
dependency: "direct main"
description:
@@ -53,10 +53,10 @@ packages:
dependency: "direct main"
description:
name: async
- sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
- version: "2.12.0"
+ version: "2.13.0"
basic_utils:
dependency: "direct main"
description:
@@ -170,10 +170,10 @@ packages:
dependency: transitive
description:
name: build
- sha256: "7d95cbbb1526ab5ae977df9b4cc660963b9b27f6d1075c0b34653868911385e4"
+ sha256: ce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d
url: "https://pub.dev"
source: hosted
- version: "3.0.0"
+ version: "3.1.0"
build_cli_annotations:
dependency: transitive
description:
@@ -186,42 +186,42 @@ packages:
dependency: transitive
description:
name: build_config
- sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
+ sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187"
url: "https://pub.dev"
source: hosted
- version: "1.1.2"
+ version: "1.2.0"
build_daemon:
dependency: transitive
description:
name: build_daemon
- sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
+ sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
url: "https://pub.dev"
source: hosted
- version: "4.0.4"
+ version: "4.1.1"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
- sha256: "38c9c339333a09b090a638849a4c56e70a404c6bdd3b511493addfbc113b60c2"
+ sha256: d1d57f7807debd7349b4726a19fd32ec8bc177c71ad0febf91a20f84cd2d4b46
url: "https://pub.dev"
source: hosted
- version: "3.0.0"
+ version: "3.0.3"
build_runner:
dependency: "direct dev"
description:
name: build_runner
- sha256: b971d4a1c789eba7be3e6fe6ce5e5b50fd3719e3cb485b3fad6d04358304351d
+ sha256: b24597fceb695969d47025c958f3837f9f0122e237c6a22cb082a5ac66c3ca30
url: "https://pub.dev"
source: hosted
- version: "2.6.0"
+ version: "2.7.1"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
- sha256: c04e612ca801cd0928ccdb891c263a2b1391cb27940a5ea5afcf9ba894de5d62
+ sha256: "066dda7f73d8eb48ba630a55acb50c4a84a2e6b453b1cb4567f581729e794f7b"
url: "https://pub.dev"
source: hosted
- version: "9.2.0"
+ version: "9.3.1"
built_collection:
dependency: transitive
description:
@@ -234,10 +234,10 @@ packages:
dependency: transitive
description:
name: built_value
- sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d
+ sha256: "426cf75afdb23aa74bd4e471704de3f9393f3c7b04c1e2d9c6f1073ae0b8b139"
url: "https://pub.dev"
source: hosted
- version: "8.12.0"
+ version: "8.12.1"
calendar_date_picker2:
dependency: "direct main"
description:
@@ -267,10 +267,10 @@ packages:
dependency: "direct main"
description:
name: camera_platform_interface
- sha256: ea1ef6ba79cdbed93df2d3eeef11542a90dec24dbcd9cde574926b86d7a09a10
+ sha256: "98cfc9357e04bad617671b4c1f78a597f25f08003089dd94050709ae54effc63"
url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.12.0"
camera_windows:
dependency: "direct main"
description:
@@ -308,10 +308,10 @@ packages:
dependency: transitive
description:
name: checked_yaml
- sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
+ sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
url: "https://pub.dev"
source: hosted
- version: "2.0.3"
+ version: "2.0.4"
cli_config:
dependency: transitive
description:
@@ -415,10 +415,10 @@ packages:
dependency: transitive
description:
name: cross_file
- sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
+ sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
url: "https://pub.dev"
source: hosted
- version: "0.3.4+2"
+ version: "0.3.5+1"
crypto:
dependency: "direct main"
description:
@@ -431,10 +431,10 @@ packages:
dependency: transitive
description:
name: cryptography
- sha256: d146b76d33d94548cf035233fbc2f4338c1242fa119013bead807d033fc4ae05
+ sha256: "3eda3029d34ec9095a27a198ac9785630fe525c0eb6a49f3d575272f8e792ef0"
url: "https://pub.dev"
source: hosted
- version: "2.7.0"
+ version: "2.9.0"
cs_monero:
dependency: "direct main"
description:
@@ -535,10 +535,10 @@ packages:
dependency: "direct main"
description:
name: cs_salvium_flutter_libs
- sha256: "2aea1bbb6e6b69ac0a8e4dace2efc50507a10651ad9bec862f6a5ccd06a76578"
+ sha256: "05a9f9e3f8cb539a310419d49270492e84d0f89bccb4c31512c854b1fe1f1c5f"
url: "https://pub.dev"
source: hosted
- version: "2.0.0"
+ version: "2.0.1"
cs_salvium_flutter_libs_android:
dependency: transitive
description:
@@ -575,10 +575,10 @@ packages:
dependency: transitive
description:
name: cs_salvium_flutter_libs_ios
- sha256: "4dc2447255f1c8997b6d26e72577e30ceab7f4622620549dc9de9eb8dccac35c"
+ sha256: aa474e7da65ba36e23afc4936ffbe39328808619fbdac44dacad9aa3aafb1b08
url: "https://pub.dev"
source: hosted
- version: "2.0.0"
+ version: "2.0.1"
cs_salvium_flutter_libs_linux:
dependency: transitive
description:
@@ -591,10 +591,10 @@ packages:
dependency: transitive
description:
name: cs_salvium_flutter_libs_macos
- sha256: "428e4eead3d507112cb6f0b70f69bc43430b3db60f0b4d731e0d6a6fab0b69bb"
+ sha256: "988077e7affc6443a1b665bac6df3b39269cc1352375cb805bd6d26aac82b46f"
url: "https://pub.dev"
source: hosted
- version: "2.0.0"
+ version: "2.0.1"
cs_salvium_flutter_libs_platform_interface:
dependency: transitive
description:
@@ -655,10 +655,10 @@ packages:
dependency: transitive
description:
name: dart_style
- sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697
+ sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
dartx:
dependency: transitive
description:
@@ -687,10 +687,10 @@ packages:
dependency: "direct dev"
description:
name: dependency_validator
- sha256: "3a243f5b9def5f902887a66fbea7e72e612eee956af6c8c34d382fe6d5484145"
+ sha256: a5928c0e3773808027bdafeb13fb4be0e4fdd79819773ad3df34d0fcf42636f2
url: "https://pub.dev"
source: hosted
- version: "5.0.2"
+ version: "5.0.3"
desktop_drop:
dependency: "direct main"
description:
@@ -752,26 +752,26 @@ packages:
dependency: "direct main"
description:
name: drift
- sha256: "540cf382a3bfa99b76e51514db5b0ebcd81ce3679b7c1c9cb9478ff3735e47a1"
+ sha256: "3669e1b68d7bffb60192ac6ba9fd2c0306804d7a00e5879f6364c69ecde53a7f"
url: "https://pub.dev"
source: hosted
- version: "2.28.2"
+ version: "2.30.0"
drift_dev:
dependency: "direct dev"
description:
name: drift_dev
- sha256: "4db0eeedc7e8bed117a9f22d867ab7a3a294300fed5c269aac90d0b3545967ca"
+ sha256: afe4d1d2cfce6606c86f11a6196e974a2ddbfaa992956ce61e054c9b1899c769
url: "https://pub.dev"
source: hosted
- version: "2.28.3"
+ version: "2.30.0"
drift_flutter:
dependency: "direct main"
description:
name: drift_flutter
- sha256: b7534bf320aac5213259aac120670ba67b63a1fd010505babc436ff86083818f
+ sha256: c07120854742a0cae2f7501a0da02493addde550db6641d284983c08762e60a7
url: "https://pub.dev"
source: hosted
- version: "0.2.7"
+ version: "0.2.8"
dropdown_button2:
dependency: "direct main"
description:
@@ -987,10 +987,10 @@ packages:
dependency: "direct main"
description:
name: flutter_mwebd
- sha256: c5d1f628a037a12cd558c3c37fec46438c4d8d07e108a7f7cc8969806de13993
+ sha256: "14f2a331b2621b78ddf62081ca8a466f6a2b4352a66950fffd68615c14e63edf"
url: "https://pub.dev"
source: hosted
- version: "0.0.1-pre.8"
+ version: "0.0.1-pre.11"
flutter_native_splash:
dependency: "direct main"
description:
@@ -1003,10 +1003,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
- sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
+ sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1
url: "https://pub.dev"
source: hosted
- version: "2.0.30"
+ version: "2.0.33"
flutter_riverpod:
dependency: "direct main"
description:
@@ -1019,10 +1019,10 @@ packages:
dependency: transitive
description:
name: flutter_rust_bridge
- sha256: "5a5c7a5deeef2cc2ffe6076a33b0429f4a20ceac22a397297aed2b1eb067e611"
+ sha256: "37ef40bc6f863652e865f0b2563ea07f0d3c58d8efad803cc01933a4b2ee067e"
url: "https://pub.dev"
source: hosted
- version: "2.9.0"
+ version: "2.11.1"
flutter_secure_storage:
dependency: "direct main"
description:
@@ -1075,10 +1075,10 @@ packages:
dependency: "direct main"
description:
name: flutter_svg
- sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
+ sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95"
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.2.3"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -1194,18 +1194,18 @@ packages:
dependency: "direct main"
description:
name: hive_ce
- sha256: "89746b555109029a30780e0a601978460b8065643592667f6e43a238faccb8a4"
+ sha256: "81d39a03c4c0ba5938260a8c3547d2e71af59defecea21793d57fc3551f0d230"
url: "https://pub.dev"
source: hosted
- version: "2.13.2"
+ version: "2.15.1"
hive_ce_flutter:
dependency: "direct main"
description:
name: hive_ce_flutter
- sha256: f5bd57fda84402bca7557fedb8c629c96c8ea10fab4a542968d7b60864ca02cc
+ sha256: "26d656c9e8974f0732f1d09020e2d7b08ba841b8961a02dbfb6caf01474b0e9a"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.3.3"
hive_ce_generator:
dependency: "direct dev"
description:
@@ -1367,10 +1367,10 @@ packages:
dependency: transitive
description:
name: json_serializable
- sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe"
+ sha256: c5b2ee75210a0f263c6c7b9eeea80553dbae96ea1bf57f02484e806a3ffdffa3
url: "https://pub.dev"
source: hosted
- version: "6.11.1"
+ version: "6.11.2"
jsontool:
dependency: transitive
description:
@@ -1431,26 +1431,26 @@ packages:
dependency: transitive
description:
name: local_auth_android
- sha256: "48924f4a8b3cc45994ad5993e2e232d3b00788a305c1bf1c7db32cef281ce9a3"
+ sha256: a0bdfcc0607050a26ef5b31d6b4b254581c3d3ce3c1816ab4d4f4a9173e84467
url: "https://pub.dev"
source: hosted
- version: "1.0.52"
+ version: "1.0.56"
local_auth_darwin:
dependency: transitive
description:
name: local_auth_darwin
- sha256: "0e9706a8543a4a2eee60346294d6a633dd7c3ee60fae6b752570457c4ff32055"
+ sha256: "699873970067a40ef2f2c09b4c72eb1cfef64224ef041b3df9fdc5c4c1f91f49"
url: "https://pub.dev"
source: hosted
- version: "1.6.0"
+ version: "1.6.1"
local_auth_platform_interface:
dependency: transitive
description:
name: local_auth_platform_interface
- sha256: "1b842ff177a7068442eae093b64abe3592f816afd2a533c0ebcdbe40f9d2075a"
+ sha256: f98b8e388588583d3f781f6806e4f4c9f9e189d898d27f0c249b93a1973dd122
url: "https://pub.dev"
source: hosted
- version: "1.0.10"
+ version: "1.1.0"
local_auth_windows:
dependency: transitive
description:
@@ -1528,10 +1528,10 @@ packages:
dependency: "direct main"
description:
name: mobile_scanner
- sha256: "5e7e09d904dc01de071b79b3f3789b302b0ed3c9c963109cd3f83ad90de62ecf"
+ sha256: "023a71afb4d7cfb5529d0f2636aa8b43db66257905b9486d702085989769c5f2"
url: "https://pub.dev"
source: hosted
- version: "7.1.2"
+ version: "7.1.3"
mockingjay:
dependency: "direct dev"
description:
@@ -1544,10 +1544,10 @@ packages:
dependency: "direct dev"
description:
name: mockito
- sha256: "4feb43bc4eb6c03e832f5fcd637d1abb44b98f9cfa245c58e27382f58859f8f6"
+ sha256: dac24d461418d363778d53198d9ac0510b9d073869f078450f195766ec48d05e
url: "https://pub.dev"
source: hosted
- version: "5.5.1"
+ version: "5.6.1"
mocktail:
dependency: transitive
description:
@@ -1673,18 +1673,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
- sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
+ sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e
url: "https://pub.dev"
source: hosted
- version: "2.2.18"
+ version: "2.2.22"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
+ sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4"
url: "https://pub.dev"
source: hosted
- version: "2.4.2"
+ version: "2.5.1"
path_provider_linux:
dependency: transitive
description:
@@ -1817,10 +1817,10 @@ packages:
dependency: transitive
description:
name: process
- sha256: "107d8be718f120bbba9dcd1e95e3bd325b1b4a4f07db64154635ba03f2567a0d"
+ sha256: c6248e4526673988586e8c00bb22a49210c258dc91df5227d5da9748ecf79744
url: "https://pub.dev"
source: hosted
- version: "5.0.3"
+ version: "5.0.5"
protobuf:
dependency: transitive
description:
@@ -1999,10 +1999,10 @@ packages:
dependency: transitive
description:
name: source_helper
- sha256: a447acb083d3a5ef17f983dd36201aeea33fedadb3228fa831f2f0c92f0f3aca
+ sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723"
url: "https://pub.dev"
source: hosted
- version: "1.3.7"
+ version: "1.3.8"
source_map_stack_trace:
dependency: transitive
description:
@@ -2047,10 +2047,10 @@ packages:
dependency: transitive
description:
name: sqlparser
- sha256: "57090342af1ce32bb499aa641f4ecdd2d6231b9403cea537ac059e803cc20d67"
+ sha256: "162435ede92bcc793ea939fdc0452eef0a73d11f8ed053b58a89792fba749da5"
url: "https://pub.dev"
source: hosted
- version: "0.41.2"
+ version: "0.42.1"
stack_trace:
dependency: transitive
description:
@@ -2234,10 +2234,10 @@ packages:
dependency: transitive
description:
name: universal_io
- sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
+ sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2
url: "https://pub.dev"
source: hosted
- version: "2.2.2"
+ version: "2.3.1"
unorm_dart:
dependency: transitive
description:
@@ -2258,34 +2258,34 @@ packages:
dependency: transitive
description:
name: url_launcher_android
- sha256: "81777b08c498a292d93ff2feead633174c386291e35612f8da438d6e92c4447e"
+ sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611"
url: "https://pub.dev"
source: hosted
- version: "6.3.20"
+ version: "6.3.28"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7
+ sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad
url: "https://pub.dev"
source: hosted
- version: "6.3.4"
+ version: "6.3.6"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
+ sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
url: "https://pub.dev"
source: hosted
- version: "3.2.1"
+ version: "3.2.2"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f
+ sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
url: "https://pub.dev"
source: hosted
- version: "3.2.3"
+ version: "3.2.5"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -2306,10 +2306,10 @@ packages:
dependency: transitive
description:
name: url_launcher_windows
- sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
+ sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
url: "https://pub.dev"
source: hosted
- version: "3.1.4"
+ version: "3.1.5"
uuid:
dependency: "direct main"
description:
@@ -2354,18 +2354,18 @@ packages:
dependency: transitive
description:
name: very_good_analysis
- sha256: "62d2b86d183fb81b2edc22913d9f155d26eb5cf3855173adb1f59fac85035c63"
+ sha256: e479fbc0941009262343db308133e121bf8660c2c81d48dd8e952df7b7e1e382
url: "https://pub.dev"
source: hosted
- version: "7.0.0"
+ version: "9.0.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
+ sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
url: "https://pub.dev"
source: hosted
- version: "14.3.1"
+ version: "15.0.2"
wakelock_platform_interface:
dependency: transitive
description:
@@ -2419,10 +2419,10 @@ packages:
dependency: transitive
description:
name: watcher
- sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c"
+ sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
url: "https://pub.dev"
source: hosted
- version: "1.1.3"
+ version: "1.1.4"
web:
dependency: "direct overridden"
description:
@@ -2451,18 +2451,18 @@ packages:
dependency: transitive
description:
name: web_socket_client
- sha256: "0ec5230852349191188c013112e4d2be03e3fc83dbe80139ead9bf3a136e53b5"
+ sha256: "394789177aa3bc1b7b071622a1dbf52a4631d7ce23c555c39bb2523e92316b07"
url: "https://pub.dev"
source: hosted
- version: "0.1.5"
+ version: "0.2.1"
webdriver:
dependency: transitive
description:
name: webdriver
- sha256: "3d773670966f02a646319410766d3b5e1037efb7f07cc68f844d5e06cd4d61c8"
+ sha256: "2f3a14ca026957870cfd9c635b83507e0e51d8091568e90129fbf805aba7cade"
url: "https://pub.dev"
source: hosted
- version: "3.0.4"
+ version: "3.1.0"
webkit_inspection_protocol:
dependency: transitive
description:
@@ -2475,10 +2475,10 @@ packages:
dependency: "direct overridden"
description:
name: win32
- sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
+ sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.dev"
source: hosted
- version: "5.14.0"
+ version: "5.15.0"
win32_registry:
dependency: transitive
description:
@@ -2507,18 +2507,19 @@ packages:
xelis_dart_sdk:
dependency: transitive
description:
- name: xelis_dart_sdk
- sha256: "2a7f8ab4c30fad2fd824ba6ea4e83ac20c726b47c7aa4f1e713ef3971a3ec1f7"
- url: "https://pub.dev"
- source: hosted
- version: "0.24.0"
+ path: "."
+ ref: HEAD
+ resolved-ref: "62f1c16a2762b9d4e9db24d101035b28a2dcc69e"
+ url: "https://github.com/Tritonn204/xelis-dart-sdk"
+ source: git
+ version: "0.29.0"
xelis_flutter:
dependency: "direct main"
description:
path: "."
- ref: "5dd5c50713160fa15fb06ff44886ae035eed62fd"
- resolved-ref: "5dd5c50713160fa15fb06ff44886ae035eed62fd"
- url: "https://github.com/cypherstack/xelis-flutter-ffi.git"
+ ref: b09b3ffd89bc6390f6d565b967c2ae1052a4bdd2
+ resolved-ref: b09b3ffd89bc6390f6d565b967c2ae1052a4bdd2
+ url: "https://github.com/xelis-project/xelis-flutter-ffi.git"
source: git
version: "0.1.1"
xml:
@@ -2571,4 +2572,4 @@ packages:
version: "0.2.4"
sdks:
dart: ">=3.9.0 <4.0.0"
- flutter: ">=3.29.0 <4.0.0"
+ flutter: ">=3.35.0 <4.0.0"
diff --git a/scripts/android/build_all.sh b/scripts/android/build_all.sh
index dc904e9..5c1dd53 100755
--- a/scripts/android/build_all.sh
+++ b/scripts/android/build_all.sh
@@ -10,8 +10,8 @@ PLUGINS_DIR=../../crypto_plugins
# libepiccash requires old rust
source ../rust_version.sh
set_rust_version_for_libepiccash
-(cd "${PLUGINS_DIR}"/flutter_libepiccash/scripts/android && ./build_all.sh )
-(cd "${PLUGINS_DIR}"/flutter_libmwc/scripts/android && ./build_all.sh )
+# (cd "${PLUGINS_DIR}"/flutter_libepiccash/scripts/android && ./build_all.sh )
+# (cd "${PLUGINS_DIR}"/flutter_libmwc/scripts/android && ./build_all.sh )
# set rust (back) to a more recent stable release after building epiccash
set_rust_to_everything_else
diff --git a/scripts/app_config/templates/pubspec.template.yaml b/scripts/app_config/templates/pubspec.template.yaml
index 5649487..8f2677f 100644
--- a/scripts/app_config/templates/pubspec.template.yaml
+++ b/scripts/app_config/templates/pubspec.template.yaml
@@ -32,8 +32,8 @@ dependencies:
# %%ENABLE_XEL%%
# xelis_flutter:
# git:
-# url: https://github.com/cypherstack/xelis-flutter-ffi.git
-# ref: 5dd5c50713160fa15fb06ff44886ae035eed62fd
+# url: https://github.com/xelis-project/xelis-flutter-ffi.git
+# ref: b09b3ffd89bc6390f6d565b967c2ae1052a4bdd2
# %%END_ENABLE_XEL%%
# %%ENABLE_FIRO%%
diff --git a/scripts/rust_version.sh b/scripts/rust_version.sh
index 65bf911..d1d72a2 100755
--- a/scripts/rust_version.sh
+++ b/scripts/rust_version.sh
@@ -2,10 +2,10 @@
set_rust_to_everything_else() {
- if rustup toolchain list | grep -q "1.85.1"; then
- rustup default 1.85.1
+ if rustup toolchain list | grep -q "1.91.0"; then
+ rustup default 1.91.0
else
- echo "Rust version 1.85.1 is not installed. Please install it using 'rustup install 1.85.1'." >&2
+ echo "Rust version 1.91.0 is not installed. Please install it using 'rustup install 1.91.0'." >&2
exit 1
fi
}
@@ -17,4 +17,4 @@ set_rust_version_for_libepiccash() {
echo "Rust version 1.81.0 is not installed. Please install it using 'rustup install 1.81.0'." >&2
exit 1
fi
-}
+}
\ No newline at end of file
diff --git a/tool/wl_templates/XEL_lib_xelis_interface_impl.template.dart b/tool/wl_templates/XEL_lib_xelis_interface_impl.template.dart
index 75941a3..9db4f3e 100644
--- a/tool/wl_templates/XEL_lib_xelis_interface_impl.template.dart
+++ b/tool/wl_templates/XEL_lib_xelis_interface_impl.template.dart
@@ -9,6 +9,10 @@ import 'package:xelis_flutter/src/api/network.dart' as x_network;
import 'package:xelis_flutter/src/api/seed_search_engine.dart' as x_seed;
import 'package:xelis_flutter/src/api/utils.dart' as x_utils;
import 'package:xelis_flutter/src/api/wallet.dart' as x_wallet;
+import 'package:xelis_flutter/src/api/precomputed_tables.dart' as x_tables;
+import 'package:xelis_flutter/src/api/models/wallet_dtos.dart' as x_wallet_dtos;
+import 'package:xelis_flutter/src/api/progress_report.dart' as x_report;
+
import 'package:xelis_flutter/src/frb_generated.dart' as xelis_rust;
import '../../providers/progress_report/xelis_table_progress_provider.dart';
@@ -72,17 +76,28 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
@override
Stream<XelisTableProgressState> createProgressReportStream() {
double lastPrintedProgress = 0.0;
+ XelisTableGenerationStep? lastStep;
+
return xelis_api.createProgressReportStream().map((report) {
return report.when(
- tableGeneration: (progress, step, _) {
+ tableGeneration: (progress, step, message) {
final currentStep = XelisTableGenerationStep.fromString(step);
- if ((progress - lastPrintedProgress).abs() >= 0.05 ||
- currentStep != XelisTableGenerationStep.fromString(step) ||
- progress >= 0.99) {
+
+ final hasProgressJump = (progress - lastPrintedProgress).abs() >= 0.05;
+ final stepChanged = currentStep != lastStep;
+ final isFinished = progress >= 0.99;
+
+ if (hasProgressJump || stepChanged || isFinished) {
+ final percent = (progress * 100).toStringAsFixed(1);
+ final extra =
+ (message != null && message.isNotEmpty) ? ' – $message' : '';
+
Logging.instance.d(
- "Xelis Table Generation: $step - ${progress * 100.0}%",
+ 'Xelis Table Generation: $step - $percent%$extra',
);
+
lastPrintedProgress = progress;
+ lastStep = currentStep;
}
return XelisTableProgressState(
@@ -90,7 +105,12 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
currentStep: currentStep,
);
},
- misc: (_) => const XelisTableProgressState(),
+ misc: (message) {
+ if (message != null && message.isNotEmpty) {
+ Logging.instance.d('Xelis Table Generation (misc): $message');
+ }
+ return const XelisTableProgressState();
+ },
);
});
}
@@ -143,6 +163,12 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
json['data'] as Map<String, dynamic>,
);
yield BalanceChanged(data.assetHash, data.balance);
+ case xelis_sdk.WalletEvent.trackAsset:
+ // TODO
+ continue;
+ case xelis_sdk.WalletEvent.untrackAsset:
+ // TODO
+ continue;
case xelis_sdk.WalletEvent.rescan:
yield Rescan(json['data']['start_topoheight'] as int);
case xelis_sdk.WalletEvent.online:
@@ -151,6 +177,9 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
yield const Offline();
case xelis_sdk.WalletEvent.historySynced:
yield HistorySynced(json['data']['topoheight'] as int);
+ case xelis_sdk.WalletEvent.syncError:
+ print("ERROR SYNCING: ${json['data']['message']}");
+ yield const Offline(); // TODO: make a message describing the error with json['data']['message']
}
} catch (e, s) {
Logging.instance.e(
@@ -176,11 +205,20 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
@override
Future<void> updateTables({
required String precomputedTablesPath,
- required bool l1Low,
- }) => x_wallet.updateTables(
- precomputedTablesPath: precomputedTablesPath,
- l1Low: l1Low,
- );
+ required bool stack_l1Low,
+ }) async {
+ // TODO: add more granular table size management interface
+ // for now, just patching the old system into the new FFI API
+
+ x_tables.PrecomputedTableType tableType = stack_l1Low
+ ? x_tables.PrecomputedTableType.l1Low()
+ : x_tables.PrecomputedTableType.l1Full();
+
+ return x_wallet.updateTables(
+ precomputedTablesPath: precomputedTablesPath,
+ precomputedTableType: tableType,
+ );
+ }
@override
Future<String> getSeed(OpaqueXelisWallet wallet) => wallet.actual.getSeed();
@@ -195,8 +233,15 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
String? seed,
String? privateKey,
String? precomputedTablesPath,
- bool? l1Low,
+ bool? stack_l1Low,
}) async {
+ // TODO: add more granular table size management interface
+ // for now, just patching the old system into the new FFI API
+
+ x_tables.PrecomputedTableType tableType = stack_l1Low ?? false
+ ? x_tables.PrecomputedTableType.l1Low()
+ : x_tables.PrecomputedTableType.l1Full();
+
final wallet = await x_wallet.createXelisWallet(
name: name,
directory: directory,
@@ -205,7 +250,7 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
seed: seed,
network: network.xelisNetwork,
precomputedTablesPath: precomputedTablesPath,
- l1Low: l1Low,
+ precomputedTableType: tableType,
);
return OpaqueXelisWallet(wallet);
@@ -219,15 +264,22 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
required String password,
required CryptoCurrencyNetwork network,
String? precomputedTablesPath,
- bool? l1Low,
+ bool? stack_l1Low,
}) async {
+ // TODO: add more granular table size management interface
+ // for now, just patching the old system into the new FFI API
+
+ x_tables.PrecomputedTableType tableType = (stack_l1Low ?? false)
+ ? x_tables.PrecomputedTableType.l1Low()
+ : x_tables.PrecomputedTableType.l1Full();
+
final wallet = await x_wallet.openXelisWallet(
name: name,
directory: directory,
password: password,
network: network.xelisNetwork,
precomputedTablesPath: precomputedTablesPath,
- l1Low: l1Low,
+ precomputedTableType: tableType,
);
return OpaqueXelisWallet(wallet);
@@ -274,7 +326,7 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
}) => wallet.actual.createTransfersTransaction(
transfers: transfers
.map(
- (e) => x_wallet.Transfer(
+ (e) => x_wallet_dtos.Transfer(
floatAmount: e.floatAmount,
strAddress: e.strAddress,
assetHash: e.assetHash,
@@ -291,7 +343,7 @@ final class _LibXelisInterfaceImpl extends LibXelisInterface {
}) => wallet.actual.estimateFees(
transfers: transfers
.map(
- (e) => x_wallet.Transfer(
+ (e) => x_wallet_dtos.Transfer(
floatAmount: e.floatAmount,
strAddress: e.strAddress,
assetHash: e.assetHash,
Why this scored 21/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.