CW-686-polyseed-language-issues (#2098)

* feat: Fix space for japanese seed

* feat: Fix space for japanese seed

* feat: Upgrade Polyseed version with improved jp support

* feat: Fix monero legacy seed language falling back to english
This commit is contained in:
Konstantin Ullrich 2025-03-21 04:32:40 +01:00 committed by GitHub
parent 626e532fce
commit 597a716f9d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 37 additions and 21 deletions

View file

@ -61,9 +61,7 @@ String getSeed() {
return legacy; return legacy;
} }
String getSeedLegacy(String? language) { String? getSeedLanguage(String? language) {
final cakepassphrase = getPassphrase();
var legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase);
switch (language) { switch (language) {
case "Chinese (Traditional)": language = "Chinese (simplified)"; break; case "Chinese (Traditional)": language = "Chinese (simplified)"; break;
case "Chinese (Simplified)": language = "Chinese (simplified)"; break; case "Chinese (Simplified)": language = "Chinese (simplified)"; break;
@ -71,8 +69,25 @@ String getSeedLegacy(String? language) {
case "Czech": language = "English"; break; case "Czech": language = "English"; break;
case "Japanese": language = "English"; break; case "Japanese": language = "English"; break;
} }
return language;
}
String getSeedLegacy(String? language) {
final cakepassphrase = getPassphrase();
var legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase);
language = getSeedLanguage(language);
if (monero.Wallet_status(wptr!) != 0) { if (monero.Wallet_status(wptr!) != 0) {
monero.Wallet_setSeedLanguage(wptr!, language: language ?? "English"); if (language != null) {
monero.Wallet_setSeedLanguage(wptr!, language: language);
final status = monero.Wallet_status(wptr!);
if (status != 0) {
final err = monero.Wallet_errorString(wptr!);
if (legacy.isNotEmpty) {
return "$err\n\n$legacy";
}
return err;
}
}
legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase); legacy = monero.Wallet_seed(wptr!, seedOffset: cakepassphrase);
} }
if (monero.Wallet_status(wptr!) != 0) { if (monero.Wallet_status(wptr!) != 0) {

View file

@ -73,6 +73,7 @@ void createWalletSync(
required String passphrase, required String passphrase,
int nettype = 0}) { int nettype = 0}) {
txhistory = null; txhistory = null;
language = getSeedLanguage(language)!;
final newWptr = monero.WalletManager_createWallet(wmPtr, final newWptr = monero.WalletManager_createWallet(wmPtr,
path: path, password: password, language: language, networkType: 0); path: path, password: password, language: language, networkType: 0);
@ -366,6 +367,9 @@ Future<void> loadWallet(
} }
if (deviceType == 1) { if (deviceType == 1) {
if (gLedger == null) {
throw Exception("Tried to open a ledger wallet with no ledger connected");
}
final dummyWPtr = wptr ?? final dummyWPtr = wptr ??
monero.WalletManager_openWallet(wmPtr, path: '', password: ''); monero.WalletManager_openWallet(wmPtr, path: '', password: '');
enableLedgerExchange(dummyWPtr, gLedger!); enableLedgerExchange(dummyWPtr, gLedger!);
@ -533,4 +537,4 @@ Future<void> restoreFromSpendKey(
bool isWalletExist({required String path}) => _isWalletExist(path); bool isWalletExist({required String path}) => _isWalletExist(path);
bool isViewOnlyBySpendKey() => int.tryParse(monero.Wallet_secretSpendKey(wptr!)) == 0; bool isViewOnlyBySpendKey() => int.tryParse(monero.Wallet_secretSpendKey(wptr!)) == 0;

View file

@ -11,8 +11,6 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_service.dart'; import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
import 'package:cw_monero/api/exceptions/wallet_opening_exception.dart';
import 'package:cw_core/get_height_by_date.dart';
import 'package:cw_monero/api/account_list.dart'; import 'package:cw_monero/api/account_list.dart';
import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager; import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager;
import 'package:cw_monero/api/wallet_manager.dart'; import 'package:cw_monero/api/wallet_manager.dart';
@ -292,16 +290,14 @@ class MoneroWalletService extends WalletService<
Future<MoneroWallet> restoreFromSeed( Future<MoneroWallet> restoreFromSeed(
MoneroRestoreWalletFromSeedCredentials credentials, MoneroRestoreWalletFromSeedCredentials credentials,
{bool? isTestnet}) async { {bool? isTestnet}) async {
if (credentials.mnemonic.split(" ").length == 16) { // Restore from Polyseed
// Restore from Polyseed try {
try { if (Polyseed.isValidSeed(credentials.mnemonic)) {
if (Polyseed.isValidSeed(credentials.mnemonic)) { return restoreFromPolyseed(credentials);
return restoreFromPolyseed(credentials);
}
} catch (e) {
printV("Polyseed restore failed: $e");
rethrow;
} }
} catch (e) {
printV("Polyseed restore failed: $e");
rethrow;
} }
try { try {

View file

@ -19,7 +19,7 @@ dependencies:
flutter_mobx: ^2.0.6+1 flutter_mobx: ^2.0.6+1
intl: ^0.19.0 intl: ^0.19.0
encrypt: ^5.0.1 encrypt: ^5.0.1
polyseed: ^0.0.6 polyseed: ^0.0.7
cw_core: cw_core:
path: ../cw_core path: ../cw_core
monero: monero:

View file

@ -19,7 +19,7 @@ dependencies:
flutter_mobx: ^2.0.6+1 flutter_mobx: ^2.0.6+1
intl: ^0.19.0 intl: ^0.19.0
encrypt: ^5.0.1 encrypt: ^5.0.1
polyseed: ^0.0.6 polyseed: ^0.0.7
cw_core: cw_core:
path: ../cw_core path: ../cw_core
monero: monero:

View file

@ -92,7 +92,8 @@ class ValidatableAnnotatedEditableTextState extends EditableTextState {
List<Annotation> getRanges() { List<Annotation> getRanges() {
final result = <Annotation>[]; final result = <Annotation>[];
final text = textEditingValue.text; // Replace Ideographic Space (U+3000) with a normal space
final text = textEditingValue.text.replaceAll("\u3000", " ");
final source = text final source = text
.split(' ') .split(' ')
.map((word) { .map((word) {

View file

@ -60,7 +60,7 @@ abstract class WalletCreationVMBase with Store {
final SeedSettingsViewModel seedSettingsViewModel; final SeedSettingsViewModel seedSettingsViewModel;
bool isPolyseed(String seed) => bool isPolyseed(String seed) =>
(type == WalletType.monero || type == WalletType.wownero) && [WalletType.monero, WalletType.wownero].contains(type) &&
(Polyseed.isValidSeed(seed) || (seed.split(" ").length == 14)); (Polyseed.isValidSeed(seed) || (seed.split(" ").length == 14));
bool nameExists(String name) => walletCreationService.exists(name); bool nameExists(String name) => walletCreationService.exists(name);

View file

@ -104,7 +104,7 @@ dependencies:
# ref: main # ref: main
socks5_proxy: ^1.0.4 socks5_proxy: ^1.0.4
flutter_svg: ^2.0.9 flutter_svg: ^2.0.9
polyseed: ^0.0.6 polyseed: ^0.0.7
nostr_tools: ^1.0.9 nostr_tools: ^1.0.9
ledger_flutter_plus: ledger_flutter_plus:
git: git: