mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-23 03:49:22 +00:00
WIP: Add bitcoincash
This commit is contained in:
parent
8ce09d7f47
commit
d5b82f26f7
10 changed files with 3077 additions and 0 deletions
|
@ -115,6 +115,7 @@ class _AddEditNodeViewState extends ConsumerState<AddEditNodeView> {
|
||||||
case Coin.bitcoin:
|
case Coin.bitcoin:
|
||||||
case Coin.dogecoin:
|
case Coin.dogecoin:
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
|
case Coin.bitcoincash:
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
|
@ -527,6 +528,7 @@ class _NodeFormState extends ConsumerState<NodeForm> {
|
||||||
case Coin.bitcoin:
|
case Coin.bitcoin:
|
||||||
case Coin.dogecoin:
|
case Coin.dogecoin:
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
|
case Coin.bitcoincash:
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
|
|
3013
lib/services/coins/bitcoincash/bitcoincash_wallet.dart
Normal file
3013
lib/services/coins/bitcoincash/bitcoincash_wallet.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -8,6 +8,7 @@ import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/epiccash/epiccash_wallet.dart';
|
import 'package:stackwallet/services/coins/epiccash/epiccash_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/firo/firo_wallet.dart';
|
import 'package:stackwallet/services/coins/firo/firo_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/monero/monero_wallet.dart';
|
import 'package:stackwallet/services/coins/monero/monero_wallet.dart';
|
||||||
|
import 'package:stackwallet/services/coins/bitcoincash/bitcoincash_wallet.dart';
|
||||||
import 'package:stackwallet/services/transaction_notification_tracker.dart';
|
import 'package:stackwallet/services/transaction_notification_tracker.dart';
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
import 'package:stackwallet/utilities/prefs.dart';
|
import 'package:stackwallet/utilities/prefs.dart';
|
||||||
|
@ -132,6 +133,16 @@ abstract class CoinServiceAPI {
|
||||||
cachedClient: cachedClient,
|
cachedClient: cachedClient,
|
||||||
tracker: tracker,
|
tracker: tracker,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return BitcoinCashWallet(
|
||||||
|
walletId: walletId,
|
||||||
|
walletName: walletName,
|
||||||
|
coin: coin,
|
||||||
|
client: client,
|
||||||
|
cachedClient: cachedClient,
|
||||||
|
tracker: tracker,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import 'package:crypto/crypto.dart';
|
||||||
import 'package:flutter_libepiccash/epic_cash.dart';
|
import 'package:flutter_libepiccash/epic_cash.dart';
|
||||||
import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart';
|
import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/firo/firo_wallet.dart';
|
import 'package:stackwallet/services/coins/firo/firo_wallet.dart';
|
||||||
|
import 'package:stackwallet/services/coins/bitcoincash/bitcoincash_wallet.dart';
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
import 'package:stackwallet/utilities/logger.dart';
|
import 'package:stackwallet/utilities/logger.dart';
|
||||||
|
|
||||||
|
@ -49,6 +50,8 @@ class AddressUtils {
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return RegExp("[a-zA-Z0-9]{95}").hasMatch(address) ||
|
return RegExp("[a-zA-Z0-9]{95}").hasMatch(address) ||
|
||||||
RegExp("[a-zA-Z0-9]{106}").hasMatch(address);
|
RegExp("[a-zA-Z0-9]{106}").hasMatch(address);
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return Address.validateAddress(address, bitcoincash);
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
return Address.validateAddress(address, testnet);
|
return Address.validateAddress(address, testnet);
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
|
|
|
@ -110,6 +110,7 @@ class _SVG {
|
||||||
String get bitcoinTestnet => "assets/svg/coin_icons/Bitcoin.svg";
|
String get bitcoinTestnet => "assets/svg/coin_icons/Bitcoin.svg";
|
||||||
String get firoTestnet => "assets/svg/coin_icons/Firo.svg";
|
String get firoTestnet => "assets/svg/coin_icons/Firo.svg";
|
||||||
String get dogecoinTestnet => "assets/svg/coin_icons/Dogecoin.svg";
|
String get dogecoinTestnet => "assets/svg/coin_icons/Dogecoin.svg";
|
||||||
|
String get bitcoincash => "assets/svg/coin_icons/Bitcoin.svg";
|
||||||
|
|
||||||
String iconFor({required Coin coin}) {
|
String iconFor({required Coin coin}) {
|
||||||
switch (coin) {
|
switch (coin) {
|
||||||
|
@ -123,6 +124,8 @@ class _SVG {
|
||||||
return firo;
|
return firo;
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return monero;
|
return monero;
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return bitcoincash;
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
return bitcoinTestnet;
|
return bitcoinTestnet;
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
|
@ -144,6 +147,7 @@ class _PNG {
|
||||||
String get dogecoin => "assets/images/doge.png";
|
String get dogecoin => "assets/images/doge.png";
|
||||||
String get bitcoin => "assets/images/bitcoin.png";
|
String get bitcoin => "assets/images/bitcoin.png";
|
||||||
String get epicCash => "assets/images/epic-cash.png";
|
String get epicCash => "assets/images/epic-cash.png";
|
||||||
|
String get bitcoincash => "assets/images/bitcoin.png";
|
||||||
|
|
||||||
String imageFor({required Coin coin}) {
|
String imageFor({required Coin coin}) {
|
||||||
switch (coin) {
|
switch (coin) {
|
||||||
|
@ -156,6 +160,8 @@ class _PNG {
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return epicCash;
|
return epicCash;
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return bitcoincash;
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
return firo;
|
return firo;
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
|
|
|
@ -22,5 +22,7 @@ Uri getBlockExplorerTransactionUrlFor({
|
||||||
return Uri.parse("https://explorer.firo.org/tx/$txid");
|
return Uri.parse("https://explorer.firo.org/tx/$txid");
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
return Uri.parse("https://testexplorer.firo.org/tx/$txid");
|
return Uri.parse("https://testexplorer.firo.org/tx/$txid");
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return Uri.parse("https://www.blockchain.com/bch/tx/$txid");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ class _CoinThemeColor {
|
||||||
Color get dogecoin => const Color(0xFFFFE079);
|
Color get dogecoin => const Color(0xFFFFE079);
|
||||||
Color get epicCash => const Color(0xFFC1C1FF);
|
Color get epicCash => const Color(0xFFC1C1FF);
|
||||||
Color get monero => const Color(0xFFB1C5FF);
|
Color get monero => const Color(0xFFB1C5FF);
|
||||||
|
Color get bitcoincash => const Color(0xFFFCC17B);
|
||||||
|
|
||||||
Color forCoin(Coin coin) {
|
Color forCoin(Coin coin) {
|
||||||
switch (coin) {
|
switch (coin) {
|
||||||
|
@ -26,6 +27,8 @@ class _CoinThemeColor {
|
||||||
return firo;
|
return firo;
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return monero;
|
return monero;
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return bitcoincash;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ abstract class Constants {
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
case Coin.bitcoincash:
|
||||||
values.addAll([24, 21, 18, 15, 12]);
|
values.addAll([24, 21, 18, 15, 12]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -75,6 +76,8 @@ abstract class Constants {
|
||||||
|
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return 120;
|
return 120;
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return 600;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ abstract class DefaultNodes {
|
||||||
firo,
|
firo,
|
||||||
monero,
|
monero,
|
||||||
epicCash,
|
epicCash,
|
||||||
|
bitcoincash,
|
||||||
bitcoinTestnet,
|
bitcoinTestnet,
|
||||||
dogecoinTestnet,
|
dogecoinTestnet,
|
||||||
firoTestnet,
|
firoTestnet,
|
||||||
|
@ -80,6 +81,18 @@ abstract class DefaultNodes {
|
||||||
isDown: false,
|
isDown: false,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static NodeModel get bitcoincash => NodeModel(
|
||||||
|
host: "https://electrum1.cipig.net:20055",
|
||||||
|
port: 20055,
|
||||||
|
name: defaultName,
|
||||||
|
id: _nodeId(Coin.bitcoincash),
|
||||||
|
useSSL: true,
|
||||||
|
enabled: true,
|
||||||
|
coinName: Coin.bitcoincash.name,
|
||||||
|
isFailover: true,
|
||||||
|
isDown: false,
|
||||||
|
);
|
||||||
|
|
||||||
static NodeModel get bitcoinTestnet => NodeModel(
|
static NodeModel get bitcoinTestnet => NodeModel(
|
||||||
host: "electrumx-testnet.cypherstack.com",
|
host: "electrumx-testnet.cypherstack.com",
|
||||||
port: 51002,
|
port: 51002,
|
||||||
|
@ -133,6 +146,9 @@ abstract class DefaultNodes {
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return monero;
|
return monero;
|
||||||
|
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return bitcoincash;
|
||||||
|
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
return bitcoinTestnet;
|
return bitcoinTestnet;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ import 'package:stackwallet/services/coins/epiccash/epiccash_wallet.dart'
|
||||||
as epic;
|
as epic;
|
||||||
import 'package:stackwallet/services/coins/firo/firo_wallet.dart' as firo;
|
import 'package:stackwallet/services/coins/firo/firo_wallet.dart' as firo;
|
||||||
import 'package:stackwallet/services/coins/monero/monero_wallet.dart' as xmr;
|
import 'package:stackwallet/services/coins/monero/monero_wallet.dart' as xmr;
|
||||||
|
import 'package:stackwallet/services/coins/bitcoincash/bitcoincash_wallet.dart'
|
||||||
|
as bch;
|
||||||
|
|
||||||
enum Coin {
|
enum Coin {
|
||||||
bitcoin,
|
bitcoin,
|
||||||
|
@ -12,6 +14,7 @@ enum Coin {
|
||||||
epicCash,
|
epicCash,
|
||||||
firo,
|
firo,
|
||||||
monero,
|
monero,
|
||||||
|
bitcoincash,
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
@ -38,6 +41,8 @@ extension CoinExt on Coin {
|
||||||
return "Firo";
|
return "Firo";
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return "Monero";
|
return "Monero";
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return "Bitcoincash";
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
return "tBitcoin";
|
return "tBitcoin";
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
|
@ -59,6 +64,8 @@ extension CoinExt on Coin {
|
||||||
return "FIRO";
|
return "FIRO";
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return "XMR";
|
return "XMR";
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return "BCH";
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
return "tBTC";
|
return "tBTC";
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
|
@ -81,6 +88,8 @@ extension CoinExt on Coin {
|
||||||
return "firo";
|
return "firo";
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return "monero";
|
return "monero";
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return "bitcoincash";
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
return "bitcoin";
|
return "bitcoin";
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
|
@ -95,6 +104,7 @@ extension CoinExt on Coin {
|
||||||
case Coin.bitcoin:
|
case Coin.bitcoin:
|
||||||
case Coin.dogecoin:
|
case Coin.dogecoin:
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
|
case Coin.bitcoincash:
|
||||||
case Coin.bitcoinTestNet:
|
case Coin.bitcoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
|
@ -125,6 +135,9 @@ extension CoinExt on Coin {
|
||||||
|
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return xmr.MINIMUM_CONFIRMATIONS;
|
return xmr.MINIMUM_CONFIRMATIONS;
|
||||||
|
|
||||||
|
case Coin.bitcoincash:
|
||||||
|
return bch.MINIMUM_CONFIRMATIONS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,6 +159,9 @@ Coin coinFromPrettyName(String name) {
|
||||||
case "Monero":
|
case "Monero":
|
||||||
case "monero":
|
case "monero":
|
||||||
return Coin.monero;
|
return Coin.monero;
|
||||||
|
case "Bitcoincash":
|
||||||
|
case "bitcoincash":
|
||||||
|
return Coin.bitcoincash;
|
||||||
case "Bitcoin Testnet":
|
case "Bitcoin Testnet":
|
||||||
case "tBitcoin":
|
case "tBitcoin":
|
||||||
case "bitcoinTestNet":
|
case "bitcoinTestNet":
|
||||||
|
@ -176,6 +192,8 @@ Coin coinFromTickerCaseInsensitive(String ticker) {
|
||||||
return Coin.firo;
|
return Coin.firo;
|
||||||
case "xmr":
|
case "xmr":
|
||||||
return Coin.monero;
|
return Coin.monero;
|
||||||
|
case "bch":
|
||||||
|
return Coin.bitcoincash;
|
||||||
case "tbtc":
|
case "tbtc":
|
||||||
return Coin.bitcoinTestNet;
|
return Coin.bitcoinTestNet;
|
||||||
case "tfiro":
|
case "tfiro":
|
||||||
|
|
Loading…
Reference in a new issue