dev
dart 56 lines 1.51 KB
Raw
1 import 'package:cake_wallet/core/execution_state.dart';
2 import 'package:cake_wallet/generated/i18n.dart';
3 import 'package:cw_core/wallet_base.dart';
4 import 'package:cw_core/wallet_type.dart';
5 import 'package:mobx/mobx.dart';
6
7 part 'sign_view_model.g.dart';
8
9 class SignViewModel = SignViewModelBase with _$SignViewModel;
10
11 abstract class SignViewModelBase with Store {
12 SignViewModelBase(this.wallet) : state = InitialExecutionState();
13
14 final WalletBase wallet;
15
16 @observable
17 ExecutionState state;
18
19 @observable
20 bool isSigning = true;
21
22 bool get signIncludesAddress => [
23 WalletType.monero,
24 WalletType.bitcoin,
25 WalletType.bitcoinCash,
26 WalletType.litecoin,
27 WalletType.dogecoin,
28 WalletType.haven,
29 ].contains(wallet.type);
30
31 @action
32 Future<void> sign(String message, {String? address}) async {
33 state = IsExecutingState();
34 try {
35 final signature = await wallet.signMessage(message, address: address);
36 state = ExecutedSuccessfullyState(payload: signature);
37 } catch (e) {
38 state = FailureState(e.toString());
39 }
40 }
41
42 @action
43 Future<void> verify(String message, String signature, {String? address}) async {
44 state = IsExecutingState();
45 try {
46 final sig = await wallet.verifyMessage(message, signature, address: address);
47 if (sig) {
48 state = ExecutedSuccessfullyState();
49 } else {
50 state = FailureState(S.current.signature_invalid_error);
51 }
52 } catch (e) {
53 state = FailureState(e.toString());
54 }
55 }
56 }