Skip to content

Commit f16250c

Browse files
Add support for creating Firo masternodes.
1 parent 22a1015 commit f16250c

File tree

11 files changed

+1313
-52
lines changed

11 files changed

+1313
-52
lines changed

lib/pages/masternodes/masternodes_home_view.dart

Lines changed: 842 additions & 0 deletions
Large diffs are not rendered by default.

lib/pages/spark_names/sub_widgets/buy_spark_name_option_widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class _BuySparkNameWidgetState extends ConsumerState<BuySparkNameOptionWidget> {
4747
ref.read(pWallets).getWallet(widget.walletId) as SparkInterface;
4848

4949
try {
50-
await wallet.electrumXClient.getSparkNameData(sparkName: name);
50+
await wallet.getSparkNameData(sparkName: name);
5151
// name exists
5252
return false;
5353
} catch (e) {

lib/pages/wallet_view/wallet_view.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ import '../settings_views/wallet_settings_view/wallet_network_settings_view/wall
106106
import '../settings_views/wallet_settings_view/wallet_settings_view.dart';
107107
import '../signing/signing_view.dart';
108108
import '../spark_names/spark_names_home_view.dart';
109+
import '../masternodes/masternodes_home_view.dart';
109110
import '../token_view/my_tokens_view.dart';
110111
import 'sub_widgets/transactions_list.dart';
111112
import 'sub_widgets/wallet_summary.dart';
@@ -1185,6 +1186,27 @@ class _WalletViewState extends ConsumerState<WalletView> {
11851186
);
11861187
},
11871188
),
1189+
if (!viewOnly && wallet is FiroWallet)
1190+
WalletNavigationBarItemData(
1191+
label: "Masternodes",
1192+
icon: SvgPicture.asset(
1193+
Assets.svg.recycle,
1194+
height: 20,
1195+
width: 20,
1196+
colorFilter: ColorFilter.mode(
1197+
Theme.of(
1198+
context,
1199+
).extension<StackColors>()!.bottomNavIconIcon,
1200+
BlendMode.srcIn,
1201+
),
1202+
),
1203+
onTap: () {
1204+
Navigator.of(context).pushNamed(
1205+
MasternodesHomeView.routeName,
1206+
arguments: widget.walletId,
1207+
);
1208+
},
1209+
),
11881210
if (wallet is NamecoinWallet)
11891211
WalletNavigationBarItemData(
11901212
label: "Domains",

lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_wallet_features.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import '../../../../pages/paynym/paynym_home_view.dart';
2727
import '../../../../pages/salvium_stake/salvium_create_stake_view.dart';
2828
import '../../../../pages/signing/signing_view.dart';
2929
import '../../../../pages/spark_names/spark_names_home_view.dart';
30+
import '../../../../pages/masternodes/masternodes_home_view.dart';
3031
import '../../../../providers/desktop/current_desktop_menu_item.dart';
3132
import '../../../../providers/global/paynym_api_provider.dart';
3233
import '../../../../providers/providers.dart';
@@ -92,6 +93,7 @@ enum WalletFeature {
9293
sparkNames("Names", "Spark names"),
9394
salviumStaking("Staking", "Staking"),
9495
sign("Sign/Verify", "Sign / Verify messages"),
96+
masternodes("Masternodes", "Manage masternodes"),
9597

9698
// special cases
9799
clearSparkCache("", ""),
@@ -454,6 +456,12 @@ class _DesktopWalletFeaturesState extends ConsumerState<DesktopWalletFeatures> {
454456
);
455457
}
456458

459+
void _onMasternodesPressed() {
460+
Navigator.of(
461+
context,
462+
).pushNamed(MasternodesHomeView.routeName, arguments: widget.walletId);
463+
}
464+
457465
List<(WalletFeature, String, FutureOr<void> Function())> _getOptions(
458466
Wallet wallet,
459467
bool showExchange,
@@ -496,6 +504,9 @@ class _DesktopWalletFeaturesState extends ConsumerState<DesktopWalletFeatures> {
496504
if (wallet is SignVerifyInterface && !isViewOnly)
497505
(WalletFeature.sign, Assets.svg.pencil, _onSignPressed),
498506

507+
if (!isViewOnly && wallet is FiroWallet)
508+
(WalletFeature.masternodes, Assets.svg.recycle, _onMasternodesPressed),
509+
499510
if (showCoinControl)
500511
(
501512
WalletFeature.coinControl,

lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/firo_desktop_wallet_summary.dart

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class _WFiroDesktopWalletSummaryState
5555
void initState() {
5656
super.initState();
5757
walletId = widget.walletId;
58+
5859
coin = ref.read(pWalletCoin(widget.walletId)) as Firo;
5960
}
6061

@@ -66,29 +67,30 @@ class _WFiroDesktopWalletSummaryState
6667
if (ref.watch(
6768
prefsChangeNotifierProvider.select((value) => value.externalCalls),
6869
)) {
69-
price =
70-
ref
71-
.watch(
72-
priceAnd24hChangeNotifierProvider.select(
73-
(value) => value.getPrice(coin),
74-
),
75-
)
76-
?.value;
70+
price = ref
71+
.watch(
72+
priceAnd24hChangeNotifierProvider.select(
73+
(value) => value.getPrice(coin),
74+
),
75+
)
76+
?.value;
7777
}
7878

7979
final _showAvailable =
8080
ref.watch(walletBalanceToggleStateProvider.state).state ==
8181
WalletBalanceToggleState.available;
8282

8383
final balance0 = ref.watch(pWalletBalanceTertiary(walletId));
84-
final balanceToShowSpark =
85-
_showAvailable ? balance0.spendable : balance0.total;
84+
final balanceToShowSpark = _showAvailable
85+
? balance0.spendable
86+
: balance0.total;
8687

8788
final balance1 = ref.watch(pWalletBalanceSecondary(walletId));
8889

8990
final balance2 = ref.watch(pWalletBalance(walletId));
90-
final balanceToShowPublic =
91-
_showAvailable ? balance2.spendable : balance2.total;
91+
final balanceToShowPublic = _showAvailable
92+
? balance2.spendable
93+
: balance2.total;
9294

9395
return Consumer(
9496
builder: (context, ref, __) {
@@ -168,10 +170,9 @@ class _Prefix extends StatelessWidget {
168170
SizedBox(
169171
width: 20,
170172
height: 20,
171-
child:
172-
asset.endsWith(".png")
173-
? Image(image: AssetImage(asset))
174-
: SvgPicture.asset(asset),
173+
child: asset.endsWith(".png")
174+
? Image(image: AssetImage(asset))
175+
: SvgPicture.asset(asset),
175176
),
176177
const SizedBox(width: 6),
177178

lib/route_generator.dart

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ import 'pages/spark_names/buy_spark_name_view.dart';
163163
import 'pages/spark_names/confirm_spark_name_transaction_view.dart';
164164
import 'pages/spark_names/spark_names_home_view.dart';
165165
import 'pages/spark_names/sub_widgets/spark_name_details.dart';
166+
import 'pages/masternodes/masternodes_home_view.dart';
166167
import 'pages/special/firo_rescan_recovery_error_dialog.dart';
167168
import 'pages/stack_privacy_calls.dart';
168169
import 'pages/token_view/my_tokens_view.dart';
@@ -897,6 +898,16 @@ class RouteGenerator {
897898
}
898899
return _routeError("${settings.name} invalid args: ${args.toString()}");
899900

901+
case MasternodesHomeView.routeName:
902+
if (args is String) {
903+
return getRoute(
904+
shouldUseMaterialRoute: useMaterialPageRoute,
905+
builder: (_) => MasternodesHomeView(walletId: args),
906+
settings: RouteSettings(name: settings.name),
907+
);
908+
}
909+
return _routeError("${settings.name} invalid args: ${args.toString()}");
910+
900911
case BuySparkNameView.routeName:
901912
if (args is ({String walletId, String name})) {
902913
return getRoute(
@@ -1846,10 +1857,8 @@ class RouteGenerator {
18461857
if (args is (String, String)) {
18471858
return getRoute(
18481859
shouldUseMaterialRoute: useMaterialPageRoute,
1849-
builder: (_) => SolTokenSendView(
1850-
walletId: args.$1,
1851-
tokenMint: args.$2,
1852-
),
1860+
builder: (_) =>
1861+
SolTokenSendView(walletId: args.$1, tokenMint: args.$2),
18531862
settings: RouteSettings(name: settings.name),
18541863
);
18551864
}
@@ -1859,10 +1868,8 @@ class RouteGenerator {
18591868
if (args is (String, String)) {
18601869
return getRoute(
18611870
shouldUseMaterialRoute: useMaterialPageRoute,
1862-
builder: (_) => SolTokenReceiveView(
1863-
walletId: args.$1,
1864-
tokenMint: args.$2,
1865-
),
1871+
builder: (_) =>
1872+
SolTokenReceiveView(walletId: args.$1, tokenMint: args.$2),
18661873
settings: RouteSettings(name: settings.name),
18671874
);
18681875
}
@@ -2617,7 +2624,8 @@ class RouteGenerator {
26172624
),
26182625
settings: RouteSettings(name: settings.name),
26192626
);
2620-
} else if (args is ({String walletId, String tokenMint, bool popPrevious})) {
2627+
} else if (args
2628+
is ({String walletId, String tokenMint, bool popPrevious})) {
26212629
return getRoute(
26222630
shouldUseMaterialRoute: useMaterialPageRoute,
26232631
builder: (_) => SolTokenView(
@@ -2636,10 +2644,8 @@ class RouteGenerator {
26362644
if (args is (String, String)) {
26372645
return getRoute(
26382646
shouldUseMaterialRoute: useMaterialPageRoute,
2639-
builder: (_) => SparkViewKeyView(
2640-
walletId: args.$1,
2641-
sparkViewKeyHex: args.$2,
2642-
),
2647+
builder: (_) =>
2648+
SparkViewKeyView(walletId: args.$1, sparkViewKeyHex: args.$2),
26432649
settings: RouteSettings(name: settings.name),
26442650
);
26452651
}

lib/wallets/models/tx_data.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:typed_data';
2+
13
import 'package:tezart/tezart.dart' as tezart;
24
import 'package:web3dart/web3dart.dart' as web3dart;
35

@@ -7,6 +9,7 @@ import '../../models/isar/models/isar_models.dart';
79
import '../../models/paynym/paynym_account_lite.dart';
810
import '../../utilities/amount/amount.dart';
911
import '../../utilities/enums/fee_rate_type_enum.dart';
12+
import '../../utilities/extensions/impl/uint8_list.dart';
1013
import '../../widgets/eth_fee_form.dart';
1114
import '../../wl_gen/interfaces/cs_monero_interface.dart'
1215
show CsPendingTransaction;
@@ -94,6 +97,8 @@ class TxData {
9497
int validBlocks,
9598
})?
9699
sparkNameInfo;
100+
final Uint8List? vExtraData;
101+
final int? overrideVersion;
97102

98103
// xelis specific
99104
final String? otherData;
@@ -147,6 +152,8 @@ class TxData {
147152
this.ignoreCachedBalanceChecks = false,
148153
this.opNameState,
149154
this.sparkNameInfo,
155+
this.vExtraData,
156+
this.overrideVersion,
150157
this.type = TxType.regular,
151158
this.salviumStakeTx = false,
152159
});
@@ -299,6 +306,8 @@ class TxData {
299306
int validBlocks,
300307
})?
301308
sparkNameInfo,
309+
Uint8List? vExtraData,
310+
int? overrideVersion,
302311
TxType? type,
303312
}) {
304313
return TxData(
@@ -342,6 +351,8 @@ class TxData {
342351
ignoreCachedBalanceChecks ?? this.ignoreCachedBalanceChecks,
343352
opNameState: opNameState ?? this.opNameState,
344353
sparkNameInfo: sparkNameInfo ?? this.sparkNameInfo,
354+
vExtraData: vExtraData ?? this.vExtraData,
355+
overrideVersion: overrideVersion ?? this.overrideVersion,
345356
type: type ?? this.type,
346357
);
347358
}
@@ -381,6 +392,8 @@ class TxData {
381392
'ignoreCachedBalanceChecks: $ignoreCachedBalanceChecks, '
382393
'opNameState: $opNameState, '
383394
'sparkNameInfo: $sparkNameInfo, '
395+
'vExtraData: ${vExtraData?.toHex}, '
396+
'overrideVersion: $overrideVersion, '
384397
'type: $type, '
385398
'}';
386399
}

0 commit comments

Comments
 (0)