From e4bb2aeca7b29f4fdf95133a91823cc52f60bf14 Mon Sep 17 00:00:00 2001 From: julian <julian@cypherstack.com> Date: Sat, 16 Dec 2023 14:28:04 -0600 Subject: [PATCH] WIP spark mints (broken) --- .../global_settings_view/hidden_settings.dart | 123 +++++++++++++----- .../spark_interface.dart | 49 +++++-- 2 files changed, 134 insertions(+), 38 deletions(-) diff --git a/lib/pages/settings_views/global_settings_view/hidden_settings.dart b/lib/pages/settings_views/global_settings_view/hidden_settings.dart index 0d06fe7e6..96d41cd6e 100644 --- a/lib/pages/settings_views/global_settings_view/hidden_settings.dart +++ b/lib/pages/settings_views/global_settings_view/hidden_settings.dart @@ -14,12 +14,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:hive_flutter/hive_flutter.dart'; +import 'package:isar/isar.dart'; import 'package:stackwallet/db/hive/db.dart'; import 'package:stackwallet/electrumx_rpc/electrumx_client.dart'; +import 'package:stackwallet/models/isar/models/isar_models.dart'; import 'package:stackwallet/notifications/show_flush_bar.dart'; +import 'package:stackwallet/providers/db/main_db_provider.dart'; import 'package:stackwallet/providers/global/debug_service_provider.dart'; import 'package:stackwallet/providers/providers.dart'; import 'package:stackwallet/themes/stack_colors.dart'; +import 'package:stackwallet/utilities/amount/amount.dart'; import 'package:stackwallet/utilities/assets.dart'; import 'package:stackwallet/utilities/constants.dart'; import 'package:stackwallet/utilities/default_nodes.dart'; @@ -27,6 +31,7 @@ import 'package:stackwallet/utilities/enums/coin_enum.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/util.dart'; import 'package:stackwallet/wallets/models/tx_data.dart'; +import 'package:stackwallet/wallets/wallet/impl/firo_wallet.dart'; import 'package:stackwallet/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart'; import 'package:stackwallet/widgets/background.dart'; import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart'; @@ -664,35 +669,95 @@ class HiddenSettings extends StatelessWidget { ); }, ), - // const SizedBox( - // height: 12, - // ), - // GestureDetector( - // onTap: () async { - // showDialog<void>( - // context: context, - // builder: (_) { - // return StackDialogBase( - // child: SizedBox( - // width: 300, - // child: Lottie.asset( - // Assets.lottie.plain(Coin.bitcoincash), - // ), - // ), - // ); - // }, - // ); - // }, - // child: RoundedWhiteContainer( - // child: Text( - // "Lottie test", - // style: STextStyles.button(context).copyWith( - // color: Theme.of(context) - // .extension<StackColors>()! - // .accentColorDark), - // ), - // ), - // ), + const SizedBox( + height: 12, + ), + Consumer( + builder: (_, ref, __) { + return GestureDetector( + onTap: () async { + const enableBurningMints = false; + + try { + if (enableBurningMints) { + final wallet = ref + .read(pWallets) + .wallets + .firstWhere((e) => + e.info.name == "circle chunk") + as FiroWallet; + + final utxos = await ref + .read(mainDBProvider) + .isar + .utxos + .where() + .walletIdEqualTo(wallet.walletId) + .findAll(); + + final Set<UTXO> utxosToUse = {}; + + for (final u in utxos) { + if (u.used != true && + u.value < 500000000 && + u.value > 9000000) { + utxosToUse.add(u); + break; + } + if (utxosToUse.length > 2) { + break; + } + } + + print("utxosToUse: $utxosToUse"); + + final inputData = TxData( + utxos: utxosToUse, + recipients: [ + ( + address: (await wallet + .getCurrentReceivingSparkAddress())! + .value, + amount: Amount( + rawValue: BigInt.from(utxosToUse + .map((e) => e.value) + .fold(0, (p, e) => p + e) - + 20000), + fractionDigits: 8, + ), + ), + ], + ); + + final mint = await wallet + .prepareSparkMintTransaction( + txData: inputData, + ); + + print("MINT: $mint"); + + print("Submitting..."); + final result = await wallet + .confirmSparkMintTransaction( + txData: mint); + print("Submitted result: $result"); + } + } catch (e, s) { + print("$e\n$s"); + } + }, + child: RoundedWhiteContainer( + child: Text( + "💣💣💣 DANGER 💣💣💣** Random Spark mint **💣💣💣 DANGER 💣💣💣 ", + style: STextStyles.button(context).copyWith( + color: Theme.of(context) + .extension<StackColors>()! + .accentColorDark), + ), + ), + ); + }, + ), ], ), ), diff --git a/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart b/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart index c6da88803..337daf46c 100644 --- a/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart +++ b/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart @@ -9,6 +9,7 @@ import 'package:stackwallet/models/balance.dart'; import 'package:stackwallet/models/isar/models/blockchain_data/address.dart'; import 'package:stackwallet/utilities/amount/amount.dart'; import 'package:stackwallet/utilities/extensions/extensions.dart'; +import 'package:stackwallet/utilities/logger.dart'; import 'package:stackwallet/wallets/crypto_currency/crypto_currency.dart'; import 'package:stackwallet/wallets/isar/models/spark_coin.dart'; import 'package:stackwallet/wallets/models/tx_data.dart'; @@ -625,12 +626,6 @@ mixin SparkInterface on Bip39HDWallet, ElectrumXInterface { throw Exception("No inputs provided."); } - // For now let's limit to one input. - if (txData.utxos!.length > 1) { - throw Exception("Only one input supported."); - // TODO remove and test with multiple inputs. - } - // Validate individual inputs. for (final utxo in txData.utxos!) { // Input amount must be greater than zero. @@ -762,9 +757,41 @@ mixin SparkInterface on Bip39HDWallet, ElectrumXInterface { ); } - // TODO Sign the transaction. + try { + // Sign the transaction accordingly + for (var i = 0; i < signingData.length; i++) { + txb.sign( + vin: i, + keyPair: signingData[i].keyPair!, + witnessValue: signingData[i].utxo.value, + redeemScript: signingData[i].redeemScript, + ); + } + } catch (e, s) { + Logging.instance.log( + "Caught exception while signing spark mint transaction: $e\n$s", + level: LogLevel.Error, + ); + rethrow; + } - throw UnimplementedError(); + final builtTx = txb.build(); + + // TODO any changes to this txData object required? + return txData.copyWith( + // recipients: [ + // ( + // amount: Amount( + // rawValue: BigInt.from(incomplete.outs[0].value!), + // fractionDigits: cryptoCurrency.fractionDigits, + // ), + // address: "no address for lelantus mints", + // ) + // ], + vSize: builtTx.virtualSize(), + txid: builtTx.getId(), + raw: builtTx.toHex(), + ); } /// Broadcast a tx and TODO update Spark balance. @@ -775,7 +802,11 @@ mixin SparkInterface on Bip39HDWallet, ElectrumXInterface { ); // Check txid. - assert(txid == txData.txid!); + if (txid == txData.txid!) { + print("SPARK TXIDS MATCH!!"); + } else { + print("SUBMITTED SPARK TXID DOES NOT MATCH WHAT WE GENERATED"); + } // TODO update spark balance.