mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-23 03:49:22 +00:00
WIP: Add Ethereum
This commit is contained in:
parent
9dc9682686
commit
eca8ca21bc
15 changed files with 426 additions and 52 deletions
BIN
assets/images/ethereum.png
Normal file
BIN
assets/images/ethereum.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 343 KiB |
21
assets/svg/coin_icons/Ethereum.svg
Normal file
21
assets/svg/coin_icons/Ethereum.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Creator: CorelDRAW 2019 (64-Bit) -->
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
|
||||||
|
viewBox="0 0 784.37 1277.39"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
|
||||||
|
<g id="Layer_x0020_1">
|
||||||
|
<metadata id="CorelCorpID_0Corel-Layer"/>
|
||||||
|
<g id="_1421394342400">
|
||||||
|
<g>
|
||||||
|
<polygon fill="#343434" fill-rule="nonzero" points="392.07,0 383.5,29.11 383.5,873.74 392.07,882.29 784.13,650.54 "/>
|
||||||
|
<polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,0 -0,650.54 392.07,882.29 392.07,472.33 "/>
|
||||||
|
<polygon fill="#3C3C3B" fill-rule="nonzero" points="392.07,956.52 387.24,962.41 387.24,1263.28 392.07,1277.38 784.37,724.89 "/>
|
||||||
|
<polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,1277.38 392.07,956.52 -0,724.89 "/>
|
||||||
|
<polygon fill="#141414" fill-rule="nonzero" points="392.07,882.29 784.13,650.54 392.07,472.33 "/>
|
||||||
|
<polygon fill="#393939" fill-rule="nonzero" points="0,650.54 392.07,882.29 392.07,472.33 "/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:http/http.dart';
|
||||||
import 'package:stackwallet/electrumx_rpc/electrumx.dart';
|
import 'package:stackwallet/electrumx_rpc/electrumx.dart';
|
||||||
import 'package:stackwallet/models/node_model.dart';
|
import 'package:stackwallet/models/node_model.dart';
|
||||||
import 'package:stackwallet/notifications/show_flush_bar.dart';
|
import 'package:stackwallet/notifications/show_flush_bar.dart';
|
||||||
|
@ -30,6 +31,7 @@ import 'package:stackwallet/widgets/stack_dialog.dart';
|
||||||
import 'package:stackwallet/widgets/stack_text_field.dart';
|
import 'package:stackwallet/widgets/stack_text_field.dart';
|
||||||
import 'package:stackwallet/widgets/textfield_icon_button.dart';
|
import 'package:stackwallet/widgets/textfield_icon_button.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
import 'package:web3dart/web3dart.dart';
|
||||||
|
|
||||||
enum AddEditNodeViewType { add, edit }
|
enum AddEditNodeViewType { add, edit }
|
||||||
|
|
||||||
|
@ -157,11 +159,19 @@ class _AddEditNodeViewState extends ConsumerState<AddEditNodeView> {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
testPassed = await client.ping();
|
testPassed = await client.ping();
|
||||||
} catch (_) {
|
} catch (e, s) {
|
||||||
testPassed = false;
|
Logging.instance.log("$e\n$s", level: LogLevel.Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Coin.ethereum:
|
||||||
|
final client = Web3Client(
|
||||||
|
"https://mainnet.infura.io/v3/22677300bf774e49a458b73313ee56ba",
|
||||||
|
Client());
|
||||||
|
try {
|
||||||
|
await client.getSyncStatus();
|
||||||
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showFlushBar) {
|
if (showFlushBar) {
|
||||||
|
@ -695,6 +705,7 @@ class _NodeFormState extends ConsumerState<NodeForm> {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
case Coin.ethereum:
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
case Coin.wownero:
|
case Coin.wownero:
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:stackwallet/services/coins/bitcoin/bitcoin_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/bitcoincash/bitcoincash_wallet.dart';
|
import 'package:stackwallet/services/coins/bitcoincash/bitcoincash_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart';
|
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/ethereum/ethereum_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/namecoin/namecoin_wallet.dart';
|
import 'package:stackwallet/services/coins/namecoin/namecoin_wallet.dart';
|
||||||
|
@ -172,6 +173,14 @@ abstract class CoinServiceAPI {
|
||||||
// tracker: tracker,
|
// tracker: tracker,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
case Coin.ethereum:
|
||||||
|
return EthereumWallet(
|
||||||
|
walletId: walletId,
|
||||||
|
walletName: walletName,
|
||||||
|
coin: coin,
|
||||||
|
secureStore: secureStorageInterface,
|
||||||
|
);
|
||||||
|
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return MoneroWallet(
|
return MoneroWallet(
|
||||||
walletId: walletId,
|
walletId: walletId,
|
||||||
|
|
241
lib/services/coins/ethereum/ethereum_wallet.dart
Normal file
241
lib/services/coins/ethereum/ethereum_wallet.dart
Normal file
|
@ -0,0 +1,241 @@
|
||||||
|
import 'dart:math';
|
||||||
|
import 'package:bip39/bip39.dart' as bip39;
|
||||||
|
import 'package:decimal/decimal.dart';
|
||||||
|
import 'package:stackwallet/models/paymint/fee_object_model.dart';
|
||||||
|
import 'package:stackwallet/models/paymint/transactions_model.dart';
|
||||||
|
import 'package:stackwallet/models/paymint/utxo_model.dart';
|
||||||
|
import 'package:stackwallet/services/price.dart';
|
||||||
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
|
||||||
|
import 'package:string_to_hex/string_to_hex.dart';
|
||||||
|
import 'package:web3dart/credentials.dart';
|
||||||
|
import 'package:web3dart/web3dart.dart';
|
||||||
|
import 'package:http/http.dart';
|
||||||
|
|
||||||
|
import 'package:stackwallet/hive/db.dart';
|
||||||
|
import 'package:stackwallet/utilities/logger.dart';
|
||||||
|
import 'package:stackwallet/services/coins/coin_service.dart';
|
||||||
|
|
||||||
|
const int MINIMUM_CONFIRMATIONS = 1;
|
||||||
|
const int DUST_LIMIT = 294;
|
||||||
|
|
||||||
|
const String GENESIS_HASH_MAINNET =
|
||||||
|
"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f";
|
||||||
|
const String GENESIS_HASH_TESTNET =
|
||||||
|
"000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943";
|
||||||
|
|
||||||
|
class EthereumWallet extends CoinServiceAPI {
|
||||||
|
@override
|
||||||
|
set isFavorite(bool markFavorite) {
|
||||||
|
DB.instance.put<dynamic>(
|
||||||
|
boxName: walletId, key: "isFavorite", value: markFavorite);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isFavorite {
|
||||||
|
try {
|
||||||
|
return DB.instance.get<dynamic>(boxName: walletId, key: "isFavorite")
|
||||||
|
as bool;
|
||||||
|
} catch (e, s) {
|
||||||
|
Logging.instance.log(
|
||||||
|
"isFavorite fetch failed (returning false by default): $e\n$s",
|
||||||
|
level: LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Coin get coin => _coin;
|
||||||
|
|
||||||
|
late SecureStorageInterface _secureStore;
|
||||||
|
|
||||||
|
late PriceAPI _priceAPI;
|
||||||
|
|
||||||
|
EthereumWallet(
|
||||||
|
{required String walletId,
|
||||||
|
required String walletName,
|
||||||
|
required Coin coin,
|
||||||
|
PriceAPI? priceAPI,
|
||||||
|
required SecureStorageInterface secureStore}) {
|
||||||
|
_walletId = walletId;
|
||||||
|
_walletName = walletName;
|
||||||
|
_coin = coin;
|
||||||
|
|
||||||
|
_priceAPI = priceAPI ?? PriceAPI(Client());
|
||||||
|
_secureStore = secureStore;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldAutoSync = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get walletName => _walletName;
|
||||||
|
late String _walletName;
|
||||||
|
|
||||||
|
late Coin _coin;
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement allOwnAddresses
|
||||||
|
Future<List<String>> get allOwnAddresses => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement availableBalance
|
||||||
|
Future<Decimal> get availableBalance => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement balanceMinusMaxFee
|
||||||
|
Future<Decimal> get balanceMinusMaxFee => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> confirmSend({required Map<String, dynamic> txData}) {
|
||||||
|
// TODO: implement confirmSend
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement currentReceivingAddress
|
||||||
|
Future<String> get currentReceivingAddress => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<int> estimateFeeFor(int satoshiAmount, int feeRate) {
|
||||||
|
// TODO: implement estimateFeeFor
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> exit() {
|
||||||
|
// TODO: implement exit
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement fees
|
||||||
|
Future<FeeObject> get fees => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> fullRescan(
|
||||||
|
int maxUnusedAddressGap, int maxNumberOfIndexesToCheck) {
|
||||||
|
// TODO: implement fullRescan
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> generateNewAddress() {
|
||||||
|
// TODO: implement generateNewAddress
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement hasCalledExit
|
||||||
|
bool get hasCalledExit => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> initializeExisting() {
|
||||||
|
// TODO: implement initializeExisting
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> initializeNew() {
|
||||||
|
// TODO: implement initializeNew
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement isConnected
|
||||||
|
bool get isConnected => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement isRefreshing
|
||||||
|
bool get isRefreshing => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement maxFee
|
||||||
|
Future<int> get maxFee => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement mnemonic
|
||||||
|
Future<List<String>> get mnemonic => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement pendingBalance
|
||||||
|
Future<Decimal> get pendingBalance => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Map<String, dynamic>> prepareSend(
|
||||||
|
{required String address,
|
||||||
|
required int satoshiAmount,
|
||||||
|
Map<String, dynamic>? args}) {
|
||||||
|
// TODO: implement prepareSend
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> recoverFromMnemonic(
|
||||||
|
{required String mnemonic,
|
||||||
|
required int maxUnusedAddressGap,
|
||||||
|
required int maxNumberOfIndexesToCheck,
|
||||||
|
required int height}) {
|
||||||
|
// TODO: implement recoverFromMnemonic
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> refresh() {
|
||||||
|
// TODO: implement refresh
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> send(
|
||||||
|
{required String toAddress,
|
||||||
|
required int amount,
|
||||||
|
Map<String, String> args = const {}}) {
|
||||||
|
// TODO: implement send
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> testNetworkConnection() {
|
||||||
|
// TODO: implement testNetworkConnection
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement totalBalance
|
||||||
|
Future<Decimal> get totalBalance => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement transactionData
|
||||||
|
Future<TransactionData> get transactionData => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
// TODO: implement unspentOutputs
|
||||||
|
Future<List<UtxoObject>> get unspentOutputs => throw UnimplementedError();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> updateNode(bool shouldRefresh) {
|
||||||
|
// TODO: implement updateNode
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> updateSentCachedTxData(Map<String, dynamic> txData) {
|
||||||
|
// TODO: implement updateSentCachedTxData
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool validateAddress(String address) {
|
||||||
|
// TODO: implement validateAddress
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get walletId => _walletId;
|
||||||
|
late String _walletId;
|
||||||
|
|
||||||
|
@override
|
||||||
|
@override
|
||||||
|
set walletName(String newName) => _walletName = newName;
|
||||||
|
}
|
|
@ -51,6 +51,8 @@ class AddressUtils {
|
||||||
return Address.validateAddress(address, dogecoin);
|
return Address.validateAddress(address, dogecoin);
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return validateSendAddress(address) == "1";
|
return validateSendAddress(address) == "1";
|
||||||
|
case Coin.ethereum:
|
||||||
|
return true; //TODO - validate ETH address
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return Address.validateAddress(address, firoNetwork);
|
return Address.validateAddress(address, firoNetwork);
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
|
|
|
@ -176,6 +176,7 @@ class _SVG {
|
||||||
String get bitcoincash => "assets/svg/coin_icons/Bitcoincash.svg";
|
String get bitcoincash => "assets/svg/coin_icons/Bitcoincash.svg";
|
||||||
String get dogecoin => "assets/svg/coin_icons/Dogecoin.svg";
|
String get dogecoin => "assets/svg/coin_icons/Dogecoin.svg";
|
||||||
String get epicCash => "assets/svg/coin_icons/EpicCash.svg";
|
String get epicCash => "assets/svg/coin_icons/EpicCash.svg";
|
||||||
|
String get ethereum => "assets/svg/coin_icons/Ethereum.svg";
|
||||||
String get firo => "assets/svg/coin_icons/Firo.svg";
|
String get firo => "assets/svg/coin_icons/Firo.svg";
|
||||||
String get monero => "assets/svg/coin_icons/Monero.svg";
|
String get monero => "assets/svg/coin_icons/Monero.svg";
|
||||||
String get wownero => "assets/svg/coin_icons/Wownero.svg";
|
String get wownero => "assets/svg/coin_icons/Wownero.svg";
|
||||||
|
@ -206,6 +207,8 @@ class _SVG {
|
||||||
return dogecoin;
|
return dogecoin;
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return epicCash;
|
return epicCash;
|
||||||
|
case Coin.ethereum:
|
||||||
|
return ethereum;
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return firo;
|
return firo;
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
|
@ -239,6 +242,7 @@ class _PNG {
|
||||||
String get bitcoin => "assets/images/bitcoin.png";
|
String get bitcoin => "assets/images/bitcoin.png";
|
||||||
String get litecoin => "assets/images/litecoin.png";
|
String get litecoin => "assets/images/litecoin.png";
|
||||||
String get epicCash => "assets/images/epic-cash.png";
|
String get epicCash => "assets/images/epic-cash.png";
|
||||||
|
String get ethereum => "assets/images/ethereum.png";
|
||||||
String get bitcoincash => "assets/images/bitcoincash.png";
|
String get bitcoincash => "assets/images/bitcoincash.png";
|
||||||
String get namecoin => "assets/images/namecoin.png";
|
String get namecoin => "assets/images/namecoin.png";
|
||||||
|
|
||||||
|
@ -261,6 +265,8 @@ class _PNG {
|
||||||
return dogecoin;
|
return dogecoin;
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return epicCash;
|
return epicCash;
|
||||||
|
case Coin.ethereum:
|
||||||
|
return ethereum;
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return firo;
|
return firo;
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
|
|
|
@ -20,6 +20,8 @@ Uri getBlockExplorerTransactionUrlFor({
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
// TODO: Handle this case.
|
// TODO: Handle this case.
|
||||||
throw UnimplementedError("missing block explorer for epic cash");
|
throw UnimplementedError("missing block explorer for epic cash");
|
||||||
|
case Coin.ethereum:
|
||||||
|
return Uri.parse("https://etherscan.io/tx/$txid");
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return Uri.parse("https://xmrchain.net/tx/$txid");
|
return Uri.parse("https://xmrchain.net/tx/$txid");
|
||||||
case Coin.wownero:
|
case Coin.wownero:
|
||||||
|
|
|
@ -53,6 +53,7 @@ abstract class Constants {
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
case Coin.ethereum:
|
||||||
case Coin.namecoin:
|
case Coin.namecoin:
|
||||||
return _satsPerCoin;
|
return _satsPerCoin;
|
||||||
|
|
||||||
|
@ -77,6 +78,7 @@ abstract class Constants {
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
case Coin.ethereum:
|
||||||
case Coin.namecoin:
|
case Coin.namecoin:
|
||||||
return _decimalPlaces;
|
return _decimalPlaces;
|
||||||
|
|
||||||
|
@ -102,6 +104,7 @@ abstract class Constants {
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
case Coin.ethereum:
|
||||||
case Coin.namecoin:
|
case Coin.namecoin:
|
||||||
values.addAll([24, 21, 18, 15, 12]);
|
values.addAll([24, 21, 18, 15, 12]);
|
||||||
break;
|
break;
|
||||||
|
@ -142,6 +145,9 @@ abstract class Constants {
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return 60;
|
return 60;
|
||||||
|
|
||||||
|
case Coin.ethereum:
|
||||||
|
return 60;
|
||||||
|
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return 120;
|
return 120;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
||||||
|
|
||||||
import 'package:stackwallet/models/node_model.dart';
|
import 'package:stackwallet/models/node_model.dart';
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
import 'package:web3dart/browser.dart';
|
||||||
|
|
||||||
abstract class DefaultNodes {
|
abstract class DefaultNodes {
|
||||||
static const String defaultNodeIdPrefix = "default_";
|
static const String defaultNodeIdPrefix = "default_";
|
||||||
|
@ -133,6 +134,19 @@ abstract class DefaultNodes {
|
||||||
isDown: false,
|
isDown: false,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//TODO - Update with correct node details for ETH
|
||||||
|
static NodeModel get ethereum => NodeModel(
|
||||||
|
host: "https://mainnet.infura.io/v3/22677300bf774e49a458b73313ee56ba",
|
||||||
|
port: 1234,
|
||||||
|
name: defaultName,
|
||||||
|
id: _nodeId(Coin.ethereum),
|
||||||
|
useSSL: true,
|
||||||
|
enabled: true,
|
||||||
|
coinName: Coin.ethereum.name,
|
||||||
|
isFailover: true,
|
||||||
|
isDown: false,
|
||||||
|
);
|
||||||
|
|
||||||
static NodeModel get namecoin => NodeModel(
|
static NodeModel get namecoin => NodeModel(
|
||||||
host: "namecoin.stackwallet.com",
|
host: "namecoin.stackwallet.com",
|
||||||
port: 57002,
|
port: 57002,
|
||||||
|
@ -210,6 +224,9 @@ abstract class DefaultNodes {
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return epicCash;
|
return epicCash;
|
||||||
|
|
||||||
|
case Coin.ethereum:
|
||||||
|
return ethereum;
|
||||||
|
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return firo;
|
return firo;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart'
|
||||||
as doge;
|
as doge;
|
||||||
import 'package:stackwallet/services/coins/epiccash/epiccash_wallet.dart'
|
import 'package:stackwallet/services/coins/epiccash/epiccash_wallet.dart'
|
||||||
as epic;
|
as epic;
|
||||||
|
import 'package:stackwallet/services/coins/ethereum/ethereum_wallet.dart'
|
||||||
|
as eth;
|
||||||
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/litecoin/litecoin_wallet.dart'
|
import 'package:stackwallet/services/coins/litecoin/litecoin_wallet.dart'
|
||||||
as ltc;
|
as ltc;
|
||||||
|
@ -19,6 +21,7 @@ enum Coin {
|
||||||
bitcoincash,
|
bitcoincash,
|
||||||
dogecoin,
|
dogecoin,
|
||||||
epicCash,
|
epicCash,
|
||||||
|
ethereum,
|
||||||
firo,
|
firo,
|
||||||
litecoin,
|
litecoin,
|
||||||
monero,
|
monero,
|
||||||
|
@ -52,6 +55,8 @@ extension CoinExt on Coin {
|
||||||
return "Dogecoin";
|
return "Dogecoin";
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return "Epic Cash";
|
return "Epic Cash";
|
||||||
|
case Coin.ethereum:
|
||||||
|
return "Ethereum";
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return "Firo";
|
return "Firo";
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
|
@ -85,6 +90,8 @@ extension CoinExt on Coin {
|
||||||
return "DOGE";
|
return "DOGE";
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return "EPIC";
|
return "EPIC";
|
||||||
|
case Coin.ethereum:
|
||||||
|
return "ETH";
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return "FIRO";
|
return "FIRO";
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
|
@ -119,6 +126,8 @@ extension CoinExt on Coin {
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
// TODO: is this actually the right one?
|
// TODO: is this actually the right one?
|
||||||
return "epic";
|
return "epic";
|
||||||
|
case Coin.ethereum:
|
||||||
|
return "ethereum";
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
return "firo";
|
return "firo";
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
|
@ -156,6 +165,7 @@ extension CoinExt on Coin {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
case Coin.ethereum:
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
case Coin.wownero:
|
case Coin.wownero:
|
||||||
return false;
|
return false;
|
||||||
|
@ -187,6 +197,9 @@ extension CoinExt on Coin {
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return epic.MINIMUM_CONFIRMATIONS;
|
return epic.MINIMUM_CONFIRMATIONS;
|
||||||
|
|
||||||
|
case Coin.ethereum:
|
||||||
|
return eth.MINIMUM_CONFIRMATIONS;
|
||||||
|
|
||||||
case Coin.monero:
|
case Coin.monero:
|
||||||
return xmr.MINIMUM_CONFIRMATIONS;
|
return xmr.MINIMUM_CONFIRMATIONS;
|
||||||
|
|
||||||
|
@ -222,6 +235,10 @@ Coin coinFromPrettyName(String name) {
|
||||||
case "epicCash":
|
case "epicCash":
|
||||||
return Coin.epicCash;
|
return Coin.epicCash;
|
||||||
|
|
||||||
|
case "Ethereum":
|
||||||
|
case "ethereum":
|
||||||
|
return Coin.ethereum;
|
||||||
|
|
||||||
case "Firo":
|
case "Firo":
|
||||||
case "firo":
|
case "firo":
|
||||||
return Coin.firo;
|
return Coin.firo;
|
||||||
|
@ -287,6 +304,8 @@ Coin coinFromTickerCaseInsensitive(String ticker) {
|
||||||
return Coin.dogecoin;
|
return Coin.dogecoin;
|
||||||
case "epic":
|
case "epic":
|
||||||
return Coin.epicCash;
|
return Coin.epicCash;
|
||||||
|
case "eth":
|
||||||
|
return Coin.ethereum;
|
||||||
case "firo":
|
case "firo":
|
||||||
return Coin.firo;
|
return Coin.firo;
|
||||||
case "xmr":
|
case "xmr":
|
||||||
|
|
|
@ -217,6 +217,7 @@ class CoinThemeColor {
|
||||||
Color get firo => const Color(0xFFFF897A);
|
Color get firo => const Color(0xFFFF897A);
|
||||||
Color get dogecoin => const Color(0xFFFFE079);
|
Color get dogecoin => const Color(0xFFFFE079);
|
||||||
Color get epicCash => const Color(0xFFC5C7CB);
|
Color get epicCash => const Color(0xFFC5C7CB);
|
||||||
|
Color get ethereum => const Color(0xFFC5C7CB); //TODO - USE CORRECT COLOR FOR ETH
|
||||||
Color get monero => const Color(0xFFFF9E6B);
|
Color get monero => const Color(0xFFFF9E6B);
|
||||||
Color get namecoin => const Color(0xFF91B1E1);
|
Color get namecoin => const Color(0xFF91B1E1);
|
||||||
Color get wownero => const Color(0xFFED80C1);
|
Color get wownero => const Color(0xFFED80C1);
|
||||||
|
@ -237,6 +238,8 @@ class CoinThemeColor {
|
||||||
return dogecoin;
|
return dogecoin;
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return epicCash;
|
return epicCash;
|
||||||
|
case Coin.ethereum:
|
||||||
|
return ethereum;
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
return firo;
|
return firo;
|
||||||
|
|
|
@ -1434,6 +1434,8 @@ class StackColors extends ThemeExtension<StackColors> {
|
||||||
return _coin.dogecoin;
|
return _coin.dogecoin;
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
return _coin.epicCash;
|
return _coin.epicCash;
|
||||||
|
case Coin.ethereum:
|
||||||
|
return _coin.ethereum;
|
||||||
case Coin.firo:
|
case Coin.firo:
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
return _coin.firo;
|
return _coin.firo;
|
||||||
|
|
128
pubspec.lock
128
pubspec.lock
|
@ -42,7 +42,7 @@ packages:
|
||||||
name: archive
|
name: archive
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.0"
|
version: "3.1.11"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -56,14 +56,14 @@ packages:
|
||||||
name: asn1lib
|
name: asn1lib
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.4.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.9.0"
|
version: "2.8.2"
|
||||||
barcode_scan2:
|
barcode_scan2:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -169,7 +169,7 @@ packages:
|
||||||
name: build_runner_core
|
name: build_runner_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.2.6"
|
version: "7.2.7"
|
||||||
built_collection:
|
built_collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -183,14 +183,21 @@ packages:
|
||||||
name: built_value
|
name: built_value
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.4.1"
|
version: "8.4.2"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: characters
|
name: characters
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.0"
|
||||||
|
charcode:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: charcode
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.1"
|
||||||
checked_yaml:
|
checked_yaml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -211,7 +218,7 @@ packages:
|
||||||
name: clock
|
name: clock
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.0"
|
||||||
code_builder:
|
code_builder:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -253,7 +260,7 @@ packages:
|
||||||
name: connectivity_plus_platform_interface
|
name: connectivity_plus_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.2"
|
version: "1.2.3"
|
||||||
connectivity_plus_web:
|
connectivity_plus_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -281,7 +288,7 @@ packages:
|
||||||
name: coverage
|
name: coverage
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.0"
|
version: "1.2.0"
|
||||||
cross_file:
|
cross_file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -372,7 +379,7 @@ packages:
|
||||||
name: decimal
|
name: decimal
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.0"
|
version: "2.3.2"
|
||||||
dependency_validator:
|
dependency_validator:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
@ -435,7 +442,7 @@ packages:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.0"
|
||||||
ffi:
|
ffi:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -456,7 +463,7 @@ packages:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.2.1"
|
version: "5.2.4"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -543,7 +550,7 @@ packages:
|
||||||
name: flutter_mobx
|
name: flutter_mobx
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.6+4"
|
version: "2.0.6+5"
|
||||||
flutter_native_splash:
|
flutter_native_splash:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -585,35 +592,35 @@ packages:
|
||||||
name: flutter_secure_storage_linux
|
name: flutter_secure_storage_linux
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.2"
|
||||||
flutter_secure_storage_macos:
|
flutter_secure_storage_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_secure_storage_macos
|
name: flutter_secure_storage_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.2"
|
||||||
flutter_secure_storage_platform_interface:
|
flutter_secure_storage_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_secure_storage_platform_interface
|
name: flutter_secure_storage_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.0.1"
|
||||||
flutter_secure_storage_web:
|
flutter_secure_storage_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_secure_storage_web
|
name: flutter_secure_storage_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.1.1"
|
||||||
flutter_secure_storage_windows:
|
flutter_secure_storage_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_secure_storage_windows
|
name: flutter_secure_storage_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.2"
|
version: "1.1.3"
|
||||||
flutter_spinkit:
|
flutter_spinkit:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -627,7 +634,7 @@ packages:
|
||||||
name: flutter_svg
|
name: flutter_svg
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.5"
|
version: "1.1.6"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -670,7 +677,7 @@ packages:
|
||||||
name: graphs
|
name: graphs
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.2.0"
|
||||||
hex:
|
hex:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -712,7 +719,7 @@ packages:
|
||||||
name: html
|
name: html
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.15.0"
|
version: "0.15.1"
|
||||||
http:
|
http:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -802,6 +809,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.7.0"
|
version: "4.7.0"
|
||||||
|
json_rpc_2:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: json_rpc_2
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.2"
|
||||||
jsonrpc2:
|
jsonrpc2:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -836,7 +850,7 @@ packages:
|
||||||
name: lints
|
name: lints
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.1"
|
||||||
local_auth:
|
local_auth:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -864,35 +878,35 @@ packages:
|
||||||
name: matcher
|
name: matcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.12"
|
version: "0.12.11"
|
||||||
material_color_utilities:
|
material_color_utilities:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.5"
|
version: "0.1.4"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.0"
|
version: "1.7.0"
|
||||||
mime:
|
mime:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: mime
|
name: mime
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
mobx:
|
mobx:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: mobx
|
name: mobx
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.3"
|
||||||
mockingjay:
|
mockingjay:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
@ -920,7 +934,7 @@ packages:
|
||||||
name: mutex
|
name: mutex
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.1"
|
||||||
nm:
|
nm:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -990,7 +1004,7 @@ packages:
|
||||||
name: path
|
name: path
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.2"
|
version: "1.8.1"
|
||||||
path_drawing:
|
path_drawing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1018,7 +1032,7 @@ packages:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.20"
|
version: "2.0.22"
|
||||||
path_provider_ios:
|
path_provider_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1060,7 +1074,7 @@ packages:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.1.0"
|
version: "10.2.0"
|
||||||
permission_handler_android:
|
permission_handler_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1144,7 +1158,7 @@ packages:
|
||||||
name: pub_semver
|
name: pub_semver
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.3"
|
||||||
pubspec_parse:
|
pubspec_parse:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1172,7 +1186,7 @@ packages:
|
||||||
name: rational
|
name: rational
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.0"
|
version: "2.2.2"
|
||||||
riverpod:
|
riverpod:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1200,7 +1214,7 @@ packages:
|
||||||
name: rxdart
|
name: rxdart
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.27.5"
|
version: "0.27.7"
|
||||||
share_plus:
|
share_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1228,7 +1242,7 @@ packages:
|
||||||
name: share_plus_platform_interface
|
name: share_plus_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.1"
|
version: "3.2.0"
|
||||||
share_plus_web:
|
share_plus_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1326,7 +1340,7 @@ packages:
|
||||||
name: shelf_web_socket
|
name: shelf_web_socket
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.3"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -1366,7 +1380,7 @@ packages:
|
||||||
name: source_span
|
name: source_span
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.8.2"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1403,14 +1417,21 @@ packages:
|
||||||
name: stream_transform
|
name: stream_transform
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "2.1.0"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.0"
|
||||||
|
string_to_hex:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: string_to_hex
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.2"
|
||||||
string_validator:
|
string_validator:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1424,35 +1445,35 @@ packages:
|
||||||
name: sync_http
|
name: sync_http
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.1"
|
version: "0.3.0"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.0"
|
||||||
test:
|
test:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test
|
name: test
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.21.4"
|
version: "1.21.1"
|
||||||
test_api:
|
test_api:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.12"
|
version: "0.4.9"
|
||||||
test_core:
|
test_core:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_core
|
name: test_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.16"
|
version: "0.4.13"
|
||||||
time:
|
time:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1501,7 +1522,7 @@ packages:
|
||||||
name: typed_data
|
name: typed_data
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.0"
|
||||||
universal_io:
|
universal_io:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1515,14 +1536,14 @@ packages:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.6"
|
version: "6.1.7"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.19"
|
version: "6.0.22"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1571,7 +1592,7 @@ packages:
|
||||||
name: uuid
|
name: uuid
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.6"
|
version: "3.0.7"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1585,7 +1606,7 @@ packages:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.0.0"
|
version: "8.2.2"
|
||||||
wakelock:
|
wakelock:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1628,6 +1649,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.2"
|
version: "1.0.2"
|
||||||
|
web3dart:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: web3dart
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.5"
|
||||||
web_socket_channel:
|
web_socket_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1655,7 +1683,7 @@ packages:
|
||||||
name: win32
|
name: win32
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.1"
|
version: "3.1.2"
|
||||||
window_size:
|
window_size:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -88,6 +88,11 @@ dependencies:
|
||||||
ref: 22279d4bb24ed541b431acd269a1bc50af0f36a0
|
ref: 22279d4bb24ed541b431acd269a1bc50af0f36a0
|
||||||
bs58check: ^1.0.2
|
bs58check: ^1.0.2
|
||||||
|
|
||||||
|
# Eth Plugins
|
||||||
|
web3dart:
|
||||||
|
2.3.5
|
||||||
|
string_to_hex: 0.2.2
|
||||||
|
|
||||||
# Storage plugins
|
# Storage plugins
|
||||||
flutter_secure_storage: ^5.0.2
|
flutter_secure_storage: ^5.0.2
|
||||||
hive: ^2.0.5
|
hive: ^2.0.5
|
||||||
|
@ -207,6 +212,7 @@ flutter:
|
||||||
- assets/images/doge.png
|
- assets/images/doge.png
|
||||||
- assets/images/bitcoin.png
|
- assets/images/bitcoin.png
|
||||||
- assets/images/epic-cash.png
|
- assets/images/epic-cash.png
|
||||||
|
- assets/images/ethereum.png
|
||||||
- assets/images/bitcoincash.png
|
- assets/images/bitcoincash.png
|
||||||
- assets/images/namecoin.png
|
- assets/images/namecoin.png
|
||||||
- assets/images/glasses.png
|
- assets/images/glasses.png
|
||||||
|
@ -306,6 +312,7 @@ flutter:
|
||||||
- assets/svg/coin_icons/Bitcoincash.svg
|
- assets/svg/coin_icons/Bitcoincash.svg
|
||||||
- assets/svg/coin_icons/Dogecoin.svg
|
- assets/svg/coin_icons/Dogecoin.svg
|
||||||
- assets/svg/coin_icons/EpicCash.svg
|
- assets/svg/coin_icons/EpicCash.svg
|
||||||
|
- assets/svg/coin_icons/Ethereum.svg
|
||||||
- assets/svg/coin_icons/Firo.svg
|
- assets/svg/coin_icons/Firo.svg
|
||||||
- assets/svg/coin_icons/Monero.svg
|
- assets/svg/coin_icons/Monero.svg
|
||||||
- assets/svg/coin_icons/Wownero.svg
|
- assets/svg/coin_icons/Wownero.svg
|
||||||
|
|
Loading…
Reference in a new issue