feat: integrate internal Rust bridge, remove cdk_flutter dependency (Phase 2)
This commit is contained in:
+3
-3
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' hide WalletProvider;
|
||||
import 'src/rust/frb_generated.dart';
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import 'core/theme/app_theme.dart';
|
||||
import 'providers/wallet_provider.dart';
|
||||
@@ -15,8 +15,8 @@ import 'screens/1_splash/splash_screen.dart';
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
// Inicializar CDK Flutter (Cashu SDK)
|
||||
await CdkFlutter.init();
|
||||
// Inicializar bridge Rust interno (Cashu SDK)
|
||||
await RustLib.init();
|
||||
|
||||
// Configurar orientación y estilo de barra de estado
|
||||
SystemChrome.setPreferredOrientations([
|
||||
|
||||
@@ -11,7 +11,7 @@ import 'dart:convert';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:bip32/bip32.dart' as bip32;
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' as cdk;
|
||||
import '../src/rust/api/keys.dart' as cdk;
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import '../models/p2pk_key.dart';
|
||||
|
||||
@@ -3,8 +3,10 @@ import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cbor/cbor.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../src/rust/api/wallet.dart';
|
||||
import '../src/rust/api/token.dart';
|
||||
import '../src/rust/api/mint_info.dart';
|
||||
import '../src/rust/api/keys.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
@@ -177,15 +179,11 @@ class WalletProvider extends ChangeNotifier {
|
||||
// ============================================================
|
||||
|
||||
/// Verifica si podemos alcanzar un mint específico.
|
||||
/// Hace ping HTTP GET a {mintUrl}/v1/info con timeout de 3 segundos.
|
||||
/// Usa función Rust que hace GET a {mintUrl}/v1/info.
|
||||
/// Retorna true si responde 200, false en cualquier otro caso.
|
||||
Future<bool> canReachMint(String mintUrl) async {
|
||||
try {
|
||||
final uri = Uri.parse('$mintUrl/v1/info');
|
||||
final response = await http.get(uri).timeout(
|
||||
const Duration(seconds: 3),
|
||||
);
|
||||
return response.statusCode == 200;
|
||||
return await pingMint(mintUrl: mintUrl);
|
||||
} catch (e) {
|
||||
debugPrint('Ping to mint failed: $e');
|
||||
return false;
|
||||
@@ -409,7 +407,7 @@ class WalletProvider extends ChangeNotifier {
|
||||
/// Usa mintInfo.nuts.nut04 (MintMethodSettings) para obtener las unidades.
|
||||
Future<List<String>> _detectAndAddMint(String mintUrl) async {
|
||||
try {
|
||||
// Obtener info del mint (función global de cdk_flutter)
|
||||
// Obtener info del mint (función del bridge Rust)
|
||||
final mintInfo = await getMintInfo(mintUrl: mintUrl);
|
||||
|
||||
// Extraer unidades de nut04 (mint methods)
|
||||
@@ -446,31 +444,14 @@ class WalletProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// Obtiene los keysets de un mint y los agrega al caché _keysetUnits.
|
||||
/// Llama a GET {mintUrl}/v1/keysets para obtener el mapping keyset_id → unit.
|
||||
/// Usa función Rust que llama a GET {mintUrl}/v1/keysets.
|
||||
Future<void> _fetchKeysets(String mintUrl) async {
|
||||
try {
|
||||
final response = await http.get(
|
||||
Uri.parse('$mintUrl/v1/keysets'),
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body) as Map<String, dynamic>;
|
||||
final keysets = data['keysets'] as List<dynamic>?;
|
||||
|
||||
if (keysets != null) {
|
||||
for (final ks in keysets) {
|
||||
final id = ks['id'] as String?;
|
||||
final unit = ks['unit'] as String?;
|
||||
if (id != null && unit != null) {
|
||||
_keysetUnits[id] = unit;
|
||||
}
|
||||
}
|
||||
debugPrint('Keysets cargados para $mintUrl: ${keysets.length}');
|
||||
}
|
||||
} else {
|
||||
debugPrint('Error HTTP ${response.statusCode} al obtener keysets de $mintUrl');
|
||||
final keysets = await fetchKeysets(mintUrl: mintUrl);
|
||||
for (final ks in keysets) {
|
||||
_keysetUnits[ks.id] = ks.unit;
|
||||
}
|
||||
debugPrint('Keysets cargados para $mintUrl: ${keysets.length}');
|
||||
} catch (e) {
|
||||
debugPrint('Error obteniendo keysets de $mintUrl: $e');
|
||||
// No lanzamos excepción, el caché simplemente no tendrá estos keysets
|
||||
|
||||
@@ -64,7 +64,7 @@ class _RestoreWalletScreenState extends State<RestoreWalletScreen> {
|
||||
final p2pkProvider = context.read<P2PKProvider>();
|
||||
|
||||
// Inicializar wallet primero (valida el mnemonic internamente).
|
||||
// Si es inválido, cdk_flutter lanzará una excepción antes de persistir.
|
||||
// Si es inválido, el bridge Rust lanzará una excepción antes de persistir.
|
||||
await walletProvider.initialize(mnemonic);
|
||||
|
||||
// Solo guardar mnemonic si initialize() pasó sin error
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' as cdk;
|
||||
import '../../src/rust/api/token.dart' as cdk;
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/constants/dimensions.dart';
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' hide WalletProvider;
|
||||
import '../../src/rust/api/wallet.dart';
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/constants/dimensions.dart';
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' hide WalletProvider;
|
||||
import '../../src/rust/api/wallet.dart';
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/constants/dimensions.dart';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' show MintInfo, ContactInfo;
|
||||
import '../../src/rust/api/mint_info.dart' show MintInfo, ContactInfo;
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/utils/formatters.dart';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' show MintInfo;
|
||||
import '../../src/rust/api/mint_info.dart' show MintInfo;
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/constants/dimensions.dart';
|
||||
@@ -623,7 +623,7 @@ class _AddMintDialogState extends State<_AddMintDialog> {
|
||||
});
|
||||
|
||||
try {
|
||||
// Intentar agregar el mint (cdk_flutter validará la conexión)
|
||||
// Intentar agregar el mint (el bridge Rust validará la conexión)
|
||||
await widget.walletProvider.addMint(url);
|
||||
|
||||
if (mounted) {
|
||||
|
||||
@@ -5,8 +5,8 @@ import 'package:provider/provider.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:qr_flutter/qr_flutter.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' as cdk;
|
||||
import 'package:cdk_flutter/cdk_flutter.dart' show Transaction, TransactionDirection, TransactionStatus;
|
||||
import '../../src/rust/api/token.dart' as cdk;
|
||||
import '../../src/rust/api/wallet.dart' show Transaction, TransactionDirection, TransactionStatus;
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/constants/dimensions.dart';
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:mobile_scanner/mobile_scanner.dart';
|
||||
import 'package:lucide_icons/lucide_icons.dart';
|
||||
import 'package:elcaju/l10n/app_localizations.dart';
|
||||
import 'package:cdk_flutter/cdk_flutter.dart';
|
||||
import '../../src/rust/api/token.dart';
|
||||
import '../../core/constants/colors.dart';
|
||||
import '../../core/utils/incoming_data_parser.dart';
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
)
|
||||
|
||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||
cdk_flutter
|
||||
rust_builder
|
||||
)
|
||||
|
||||
set(PLUGIN_BUNDLED_LIBRARIES)
|
||||
|
||||
+7
-9
@@ -161,15 +161,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.5"
|
||||
cdk_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "."
|
||||
ref: HEAD
|
||||
resolved-ref: "7fb8580530d963c9ff09f23e55a1e56bccd8676b"
|
||||
url: "https://github.com/cashubtc/cdk_flutter.git"
|
||||
source: git
|
||||
version: "0.1.0"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -814,6 +805,13 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.0"
|
||||
rust_builder:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: rust_builder
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.1.0"
|
||||
share_plus:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
||||
+3
-4
@@ -15,10 +15,9 @@ dependencies:
|
||||
|
||||
cupertino_icons: ^1.0.8
|
||||
|
||||
# CDK Flutter (Cashu backend)
|
||||
cdk_flutter:
|
||||
git:
|
||||
url: https://github.com/cashubtc/cdk_flutter.git
|
||||
# Internal Rust bridge (Cashu backend via cdk)
|
||||
rust_builder:
|
||||
path: rust_builder
|
||||
|
||||
# State Management
|
||||
provider: ^6.1.2
|
||||
|
||||
@@ -9,7 +9,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
||||
)
|
||||
|
||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||
cdk_flutter
|
||||
rust_builder
|
||||
)
|
||||
|
||||
set(PLUGIN_BUNDLED_LIBRARIES)
|
||||
|
||||
Reference in New Issue
Block a user