mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-10-30 00:47:48 +00:00
d1870ba8b8
* chore: Initial setup for Tron Wallet * feat: Create Tron Wallet base flow implemented, keys, address, receive, restore and proxy classes all setup * feat: Display seed and key within the app * feat: Activate restore from key and seed for Tron wallet * feat: Add icon for tron wallet in wallet listing page * feat: Activate display of receive address for tron * feat: Fetch and display tron balance, sending transaction flow setup, fee limit calculation setup * feat: Implement sending of native tron, setup sending of trc20 tokens * chore: Rename function * Delete lib/tron/tron.dart * feat: Activate exchange for tron and its tokens, implement balance display for trc20 tokens and setup secrets configuration for tron * feat: Implement tron token management, add, remove, delete, and get tokens in home settings view, also minor cleanup * feat: Activate buy and sell for tron * feat: Implement restore from QR, transactions history listing for both native transactions and trc20 transactions * feat: Activate send all and do some minor cleanups * chore: Fix some lint infos and warnings * chore: Adjust configurations * ci: Modify CI to create and add secrets for node * fix: Fixes made while self reviewing the PR for this feature * feat: Add guide for adding new wallet types, and add fixes to requested changes * fix: Handle exceptions gracefully * fix: Alternative for trc20 estimated fee * fix: Fixes to display of amount and fee, removing clashes * fix: Fee calculation WIP * fix: Fix issue with handling of send all flow and display of amount and fee values before broadcasting transaction * fix: PR review fixes and fix merge conflicts * fix: Modify fetching assetOfTransaction [skip ci] * fix: Move tron settings migration to 33
217 lines
6.1 KiB
Dart
217 lines
6.1 KiB
Dart
import 'package:flutter/services.dart';
|
|
import 'package:hive/hive.dart';
|
|
import "package:yaml/yaml.dart";
|
|
import 'package:cw_core/node.dart';
|
|
import 'package:cw_core/wallet_type.dart';
|
|
|
|
Future<List<Node>> loadDefaultNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/node_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.monero;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadBitcoinElectrumServerList() async {
|
|
final serverListRaw = await rootBundle.loadString('assets/bitcoin_electrum_server_list.yml');
|
|
final loadedServerList = loadYaml(serverListRaw) as YamlList;
|
|
final serverList = <Node>[];
|
|
|
|
for (final raw in loadedServerList) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.bitcoin;
|
|
serverList.add(node);
|
|
}
|
|
}
|
|
|
|
return serverList;
|
|
}
|
|
|
|
Future<List<Node>> loadLitecoinElectrumServerList() async {
|
|
final serverListRaw = await rootBundle.loadString('assets/litecoin_electrum_server_list.yml');
|
|
final loadedServerList = loadYaml(serverListRaw) as YamlList;
|
|
final serverList = <Node>[];
|
|
|
|
for (final raw in loadedServerList) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.litecoin;
|
|
serverList.add(node);
|
|
}
|
|
}
|
|
|
|
return serverList;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultHavenNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/haven_node_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.haven;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultEthereumNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/ethereum_server_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.ethereum;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadBitcoinCashElectrumServerList() async {
|
|
final serverListRaw = await rootBundle.loadString('assets/bitcoin_cash_electrum_server_list.yml');
|
|
final loadedServerList = loadYaml(serverListRaw) as YamlList;
|
|
final serverList = <Node>[];
|
|
|
|
for (final raw in loadedServerList) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.bitcoinCash;
|
|
serverList.add(node);
|
|
}
|
|
}
|
|
|
|
return serverList;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultNanoNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/nano_node_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.nano;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultNanoPowNodes() async {
|
|
final powNodesRaw = await rootBundle.loadString('assets/nano_pow_node_list.yml');
|
|
final loadedPowNodes = loadYaml(powNodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedPowNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
node.type = WalletType.nano;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultPolygonNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/polygon_node_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
|
|
node.type = WalletType.polygon;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultSolanaNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/solana_node_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
|
|
node.type = WalletType.solana;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<List<Node>> loadDefaultTronNodes() async {
|
|
final nodesRaw = await rootBundle.loadString('assets/tron_node_list.yml');
|
|
final loadedNodes = loadYaml(nodesRaw) as YamlList;
|
|
final nodes = <Node>[];
|
|
|
|
for (final raw in loadedNodes) {
|
|
if (raw is Map) {
|
|
final node = Node.fromMap(Map<String, Object>.from(raw));
|
|
|
|
node.type = WalletType.tron;
|
|
nodes.add(node);
|
|
}
|
|
}
|
|
|
|
return nodes;
|
|
}
|
|
|
|
Future<void> resetToDefault(Box<Node> nodeSource) async {
|
|
final moneroNodes = await loadDefaultNodes();
|
|
final bitcoinElectrumServerList = await loadBitcoinElectrumServerList();
|
|
final litecoinElectrumServerList = await loadLitecoinElectrumServerList();
|
|
final bitcoinCashElectrumServerList = await loadBitcoinCashElectrumServerList();
|
|
final havenNodes = await loadDefaultHavenNodes();
|
|
final ethereumNodes = await loadDefaultEthereumNodes();
|
|
final nanoNodes = await loadDefaultNanoNodes();
|
|
final polygonNodes = await loadDefaultPolygonNodes();
|
|
final solanaNodes = await loadDefaultSolanaNodes();
|
|
final tronNodes = await loadDefaultTronNodes();
|
|
|
|
final nodes = moneroNodes +
|
|
bitcoinElectrumServerList +
|
|
litecoinElectrumServerList +
|
|
havenNodes +
|
|
ethereumNodes +
|
|
bitcoinCashElectrumServerList +
|
|
nanoNodes +
|
|
polygonNodes +
|
|
solanaNodes + tronNodes;
|
|
|
|
await nodeSource.clear();
|
|
await nodeSource.addAll(nodes);
|
|
}
|
|
|
|
Future<void> resetPowToDefault(Box<Node> powNodeSource) async {
|
|
final nanoPowNodes = await loadDefaultNanoPowNodes();
|
|
final nodes = nanoPowNodes;
|
|
await powNodeSource.clear();
|
|
await powNodeSource.addAll(nodes);
|
|
}
|