From 273fd981f44938557d8a455e8aca41fa5d30c54f Mon Sep 17 00:00:00 2001
From: julian <julian@cypherstack.com>
Date: Mon, 20 Nov 2023 10:37:28 -0600
Subject: [PATCH] WIP tezos skeleton

---
 lib/services/coins/tezos/tezos_wallet.dart    |  6 +-
 .../api => wallets/api/tezos}/tezos_api.dart  |  2 +-
 .../api/tezos}/tezos_rpc_api.dart             |  0
 .../api/tezos}/tezos_transaction.dart         |  0
 lib/wallets/crypto_currency/coins/tezos.dart  | 32 +++++++
 lib/wallets/wallet/impl/tezos_wallet.dart     | 85 +++++++++++++++++++
 lib/wallets/wallet/wallet.dart                |  4 +
 7 files changed, 125 insertions(+), 4 deletions(-)
 rename lib/{services/coins/tezos/api => wallets/api/tezos}/tezos_api.dart (97%)
 rename lib/{services/coins/tezos/api => wallets/api/tezos}/tezos_rpc_api.dart (100%)
 rename lib/{services/coins/tezos/api => wallets/api/tezos}/tezos_transaction.dart (100%)
 create mode 100644 lib/wallets/crypto_currency/coins/tezos.dart
 create mode 100644 lib/wallets/wallet/impl/tezos_wallet.dart

diff --git a/lib/services/coins/tezos/tezos_wallet.dart b/lib/services/coins/tezos/tezos_wallet.dart
index 604a0800c..743a349fb 100644
--- a/lib/services/coins/tezos/tezos_wallet.dart
+++ b/lib/services/coins/tezos/tezos_wallet.dart
@@ -10,9 +10,6 @@ import 'package:stackwallet/models/isar/models/blockchain_data/utxo.dart';
 import 'package:stackwallet/models/node_model.dart';
 import 'package:stackwallet/models/paymint/fee_object_model.dart';
 import 'package:stackwallet/services/coins/coin_service.dart';
-import 'package:stackwallet/services/coins/tezos/api/tezos_api.dart';
-import 'package:stackwallet/services/coins/tezos/api/tezos_rpc_api.dart';
-import 'package:stackwallet/services/coins/tezos/api/tezos_transaction.dart';
 import 'package:stackwallet/services/event_bus/events/global/node_connection_status_changed_event.dart';
 import 'package:stackwallet/services/event_bus/events/global/updated_in_background_event.dart';
 import 'package:stackwallet/services/event_bus/events/global/wallet_sync_status_changed_event.dart';
@@ -29,6 +26,9 @@ import 'package:stackwallet/utilities/enums/fee_rate_type_enum.dart';
 import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
 import 'package:stackwallet/utilities/logger.dart';
 import 'package:stackwallet/utilities/prefs.dart';
+import 'package:stackwallet/wallets/api/tezos/tezos_api.dart';
+import 'package:stackwallet/wallets/api/tezos/tezos_rpc_api.dart';
+import 'package:stackwallet/wallets/api/tezos/tezos_transaction.dart';
 import 'package:tezart/tezart.dart';
 import 'package:tuple/tuple.dart';
 
diff --git a/lib/services/coins/tezos/api/tezos_api.dart b/lib/wallets/api/tezos/tezos_api.dart
similarity index 97%
rename from lib/services/coins/tezos/api/tezos_api.dart
rename to lib/wallets/api/tezos/tezos_api.dart
index 5d37fd382..a55bd45be 100644
--- a/lib/services/coins/tezos/api/tezos_api.dart
+++ b/lib/wallets/api/tezos/tezos_api.dart
@@ -2,11 +2,11 @@ import 'dart:convert';
 import 'dart:math';
 
 import 'package:stackwallet/networking/http.dart';
-import 'package:stackwallet/services/coins/tezos/api/tezos_transaction.dart';
 import 'package:stackwallet/services/tor_service.dart';
 import 'package:stackwallet/utilities/enums/coin_enum.dart';
 import 'package:stackwallet/utilities/logger.dart';
 import 'package:stackwallet/utilities/prefs.dart';
+import 'package:stackwallet/wallets/api/tezos/tezos_transaction.dart';
 
 abstract final class TezosAPI {
   static final HTTP _client = HTTP();
diff --git a/lib/services/coins/tezos/api/tezos_rpc_api.dart b/lib/wallets/api/tezos/tezos_rpc_api.dart
similarity index 100%
rename from lib/services/coins/tezos/api/tezos_rpc_api.dart
rename to lib/wallets/api/tezos/tezos_rpc_api.dart
diff --git a/lib/services/coins/tezos/api/tezos_transaction.dart b/lib/wallets/api/tezos/tezos_transaction.dart
similarity index 100%
rename from lib/services/coins/tezos/api/tezos_transaction.dart
rename to lib/wallets/api/tezos/tezos_transaction.dart
diff --git a/lib/wallets/crypto_currency/coins/tezos.dart b/lib/wallets/crypto_currency/coins/tezos.dart
new file mode 100644
index 000000000..0af387a10
--- /dev/null
+++ b/lib/wallets/crypto_currency/coins/tezos.dart
@@ -0,0 +1,32 @@
+import 'package:stackwallet/models/node_model.dart';
+import 'package:stackwallet/utilities/enums/coin_enum.dart';
+import 'package:stackwallet/wallets/crypto_currency/crypto_currency.dart';
+import 'package:stackwallet/wallets/crypto_currency/intermediate/bip39_currency.dart';
+
+class Tezos extends Bip39Currency {
+  Tezos(super.network) {
+    switch (network) {
+      case CryptoCurrencyNetwork.main:
+        coin = Coin.tezos;
+      default:
+        throw Exception("Unsupported network: $network");
+    }
+  }
+  @override
+  // TODO: implement defaultNode
+  NodeModel get defaultNode => throw UnimplementedError();
+
+  @override
+  // TODO: implement genesisHash
+  String get genesisHash => throw UnimplementedError();
+
+  @override
+  // TODO: implement minConfirms
+  int get minConfirms => throw UnimplementedError();
+
+  @override
+  bool validateAddress(String address) {
+    // TODO: implement validateAddress
+    throw UnimplementedError();
+  }
+}
diff --git a/lib/wallets/wallet/impl/tezos_wallet.dart b/lib/wallets/wallet/impl/tezos_wallet.dart
new file mode 100644
index 000000000..dfec4f7be
--- /dev/null
+++ b/lib/wallets/wallet/impl/tezos_wallet.dart
@@ -0,0 +1,85 @@
+import 'package:isar/isar.dart';
+import 'package:stackwallet/models/paymint/fee_object_model.dart';
+import 'package:stackwallet/utilities/amount/amount.dart';
+import 'package:stackwallet/wallets/crypto_currency/coins/tezos.dart';
+import 'package:stackwallet/wallets/crypto_currency/crypto_currency.dart';
+import 'package:stackwallet/wallets/models/tx_data.dart';
+import 'package:stackwallet/wallets/wallet/intermediate/bip39_wallet.dart';
+
+class TezosWallet extends Bip39Wallet {
+  TezosWallet(CryptoCurrencyNetwork network) : super(Tezos(network));
+
+  @override
+  // TODO: implement changeAddressFilterOperation
+  FilterOperation? get changeAddressFilterOperation =>
+      throw UnimplementedError();
+
+  @override
+  // TODO: implement receivingAddressFilterOperation
+  FilterOperation? get receivingAddressFilterOperation =>
+      throw UnimplementedError();
+
+  @override
+  Future<TxData> confirmSend({required TxData txData}) {
+    // TODO: implement confirmSend
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<Amount> estimateFeeFor(Amount amount, int feeRate) {
+    // TODO: implement estimateFeeFor
+    throw UnimplementedError();
+  }
+
+  @override
+  // TODO: implement fees
+  Future<FeeObject> get fees => throw UnimplementedError();
+
+  @override
+  Future<bool> pingCheck() {
+    // TODO: implement pingCheck
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<TxData> prepareSend({required TxData txData}) {
+    // TODO: implement prepareSend
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> recover({required bool isRescan}) {
+    // TODO: implement recover
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> updateBalance() {
+    // TODO: implement updateBalance
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> updateChainHeight() {
+    // TODO: implement updateChainHeight
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> updateNode() {
+    // TODO: implement updateNode
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> updateTransactions() {
+    // TODO: implement updateTransactions
+    throw UnimplementedError();
+  }
+
+  @override
+  Future<void> updateUTXOs() {
+    // TODO: implement updateUTXOs
+    throw UnimplementedError();
+  }
+}
diff --git a/lib/wallets/wallet/wallet.dart b/lib/wallets/wallet/wallet.dart
index 8f1ce5779..ac5e602f9 100644
--- a/lib/wallets/wallet/wallet.dart
+++ b/lib/wallets/wallet/wallet.dart
@@ -30,6 +30,7 @@ import 'package:stackwallet/wallets/wallet/impl/ecash_wallet.dart';
 import 'package:stackwallet/wallets/wallet/impl/epiccash_wallet.dart';
 import 'package:stackwallet/wallets/wallet/impl/firo_wallet.dart';
 import 'package:stackwallet/wallets/wallet/impl/nano_wallet.dart';
+import 'package:stackwallet/wallets/wallet/impl/tezos_wallet.dart';
 import 'package:stackwallet/wallets/wallet/impl/wownero_wallet.dart';
 import 'package:stackwallet/wallets/wallet/private_key_based_wallet.dart';
 import 'package:stackwallet/wallets/wallet/wallet_mixin_interfaces/electrumx_interface.dart';
@@ -274,6 +275,9 @@ abstract class Wallet<T extends CryptoCurrency> {
       case Coin.nano:
         return NanoWallet(CryptoCurrencyNetwork.main);
 
+      case Coin.tezos:
+        return TezosWallet(CryptoCurrencyNetwork.main);
+
       case Coin.wownero:
         return WowneroWallet(CryptoCurrencyNetwork.main);