zec ironwood (#3425)

* initial

* wip

* ironwood detection, migration

* dev: zec address validation on rt

* fix: ironwood spend

* ironwood regressions

* fix: tx history

* bump: zkool2

* fix: tx amounts on pending
fix: ironwood pending balance
fix: orchard->ironwood migration
fix: orchard->any pre ironwood txs
fix: ironwood -> any txs
fix: WrongSpendAuthorizingKey
fix: tx history
fix: autoshield to ironwood
fix: zkool to latest version
break: my sleep schedule :sweating: :worksonmymachine:

* thx fable

* downgrade frb to 2.11.1

* fix: tx amounts in history

* Migating... / migration label for O->I txs
This commit is contained in:
cyan
2026-07-27 10:20:40 +02:00
committed by GitHub
parent b73c46ac59
commit 92c2c5e043
38 changed files with 1064 additions and 203 deletions
@@ -14,11 +14,13 @@ import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/scrollable_with_bottom_section.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/utils/feature_flag.dart';
import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:cake_wallet/zcash/zcash_network_type.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
@@ -28,6 +30,8 @@ class AdvancedPrivacySettingsPage extends BasePage {
required this.isChildWallet,
required this.useTestnet,
required this.toggleUseTestnet,
required this.zcashNetwork,
required this.setZcashNetwork,
required this.advancedPrivacySettingsViewModel,
required this.nodeViewModel,
required this.seedSettingsViewModel,
@@ -44,6 +48,8 @@ class AdvancedPrivacySettingsPage extends BasePage {
final bool isChildWallet;
final bool useTestnet;
final Function(bool? val) toggleUseTestnet;
final int zcashNetwork;
final void Function(int network) setZcashNetwork;
@override
Widget body(BuildContext context) => _AdvancedPrivacySettingsBody(
@@ -51,6 +57,8 @@ class AdvancedPrivacySettingsPage extends BasePage {
isChildWallet,
useTestnet,
toggleUseTestnet,
zcashNetwork,
setZcashNetwork,
advancedPrivacySettingsViewModel,
nodeViewModel,
seedSettingsViewModel,
@@ -63,6 +71,8 @@ class _AdvancedPrivacySettingsBody extends StatefulWidget {
this.isChildWallet,
this.useTestnet,
this.toggleUseTestnet,
this.zcashNetwork,
this.setZcashNetwork,
this.privacySettingsViewModel,
this.nodeViewModel,
this.seedTypeViewModel,
@@ -76,6 +86,8 @@ class _AdvancedPrivacySettingsBody extends StatefulWidget {
final bool isChildWallet;
final bool useTestnet;
final Function(bool? val) toggleUseTestnet;
final int zcashNetwork;
final void Function(int network) setZcashNetwork;
@override
_AdvancedPrivacySettingsBodyState createState() => _AdvancedPrivacySettingsBodyState();
@@ -87,6 +99,7 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
final _formKey = GlobalKey<NodeFormState>();
final _passphraseFormKey = GlobalKey<FormState>();
bool? testnetValue;
int? zcashNetworkValue;
bool obscurePassphrase = true;
@@ -112,6 +125,7 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
if (testnetValue == null && widget.useTestnet) {
testnetValue = widget.useTestnet;
}
zcashNetworkValue ??= widget.zcashNetwork;
return Container(
padding: EdgeInsets.only(top: 24),
@@ -281,6 +295,20 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
],
);
}),
if (FeatureFlag.hasDevOptions &&
widget.privacySettingsViewModel.type == WalletType.zcash)
SettingsChoicesCell(
ChoicesListItem<int>(
title: 'Zcash network',
items: ZcashNetworkType.values,
selectedItem: zcashNetworkValue ?? ZcashNetworkType.mainnet,
displayItem: ZcashNetworkType.label,
onItemSelected: (final network) {
setState(() => zcashNetworkValue = network);
widget.setZcashNetwork(network);
},
),
),
if (widget.privacySettingsViewModel.type == WalletType.bitcoin ||
widget.privacySettingsViewModel.type == WalletType.decred)
Builder(builder: (_) {
@@ -316,6 +316,8 @@ class _WalletNameFormState extends State<WalletNameForm> {
"type": _walletNewVM.type,
"useTestnet": _walletNewVM.useTestnet,
"toggleTestnet": _walletNewVM.toggleUseTestnet,
"zcashNetwork": _walletNewVM.zcashNetwork,
"setZcashNetwork": _walletNewVM.setZcashNetwork,
"isChildWallet": widget.isChildWallet,
});
},
@@ -121,7 +121,9 @@ class WalletRestorePage extends BasePage {
'isFromRestore': true,
'type': walletRestoreViewModel.type,
'useTestnet': walletRestoreViewModel.useTestnet,
'toggleTestnet': walletRestoreViewModel.toggleUseTestnet
'toggleTestnet': walletRestoreViewModel.toggleUseTestnet,
'zcashNetwork': walletRestoreViewModel.zcashNetwork,
'setZcashNetwork': walletRestoreViewModel.setZcashNetwork,
},
);
},