import 'dart:ffi'; import 'dart:typed_data'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:frostdart/frostdart_bindings_generated.dart'; import 'package:stackwallet/services/frost.dart'; import 'package:stackwallet/wallets/models/incomplete_frost_wallet.dart'; import 'package:stackwallet/wallets/models/tx_data.dart'; // =================== wallet creation ========================================= final pFrostMultisigConfig = StateProvider<String?>((ref) => null); final pFrostMyName = StateProvider<String?>((ref) => null); final pFrostStartKeyGenData = StateProvider< ({ String seed, String commitments, Pointer<MultisigConfigWithName> multisigConfigWithNamePtr, Pointer<SecretShareMachineWrapper> secretShareMachineWrapperPtr, })?>((_) => null); final pFrostSecretSharesData = StateProvider< ({ String share, Pointer<SecretSharesRes> secretSharesResPtr, })?>((ref) => null); final pFrostCompletedKeyGenData = StateProvider< ({ Uint8List multisigId, String recoveryString, String serializedKeys, })?>((ref) => null); // ================= transaction creation ====================================== final pFrostTxData = StateProvider<TxData?>((ref) => null); final pFrostAttemptSignData = StateProvider< ({ Pointer<TransactionSignMachineWrapper> machinePtr, String preprocess, })?>((ref) => null); final pFrostContinueSignData = StateProvider< ({ Pointer<TransactionSignatureMachineWrapper> machinePtr, String share, })?>((ref) => null); // ===================== shared/util =========================================== final pFrostSelectParticipantsUnordered = StateProvider<List<String>?>((ref) => null); // ========================= resharing ========================================= final pFrostResharingData = Provider((ref) => _ResharingData()); class _ResharingData { String? myName; IncompleteFrostWallet? incompleteWallet; // resharer encoded config string String? resharerConfig; ({ int newThreshold, List<int> resharers, List<String> newParticipants, })? get configData => resharerConfig != null ? Frost.extractResharerConfigData(resharerConfig: resharerConfig!) : null; // resharer start string (for sharing) and machine ({ String resharerStart, Pointer<StartResharerRes> machine, })? startResharerData; // reshared start string (for sharing) and machine ({ String resharedStart, Pointer<StartResharedRes> prior, })? startResharedData; // resharer complete string (for sharing) String? resharerComplete; // new keys and config with an ID ({ String multisigConfig, String serializedKeys, String resharedId, })? newWalletData; // reset/clear all data void reset() { resharerConfig = null; startResharerData = null; startResharedData = null; resharerComplete = null; newWalletData = null; incompleteWallet = null; } }