mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-19 05:58:50 +02:00
+194
-10
@@ -3,6 +3,7 @@ import 'dart:io';
|
||||
|
||||
const bitcoinOutputPath = 'lib/bitcoin/bitcoin.dart';
|
||||
const moneroOutputPath = 'lib/monero/monero.dart';
|
||||
const havenOutputPath = 'lib/haven/haven.dart';
|
||||
const walletTypesPath = 'lib/wallet_types.g.dart';
|
||||
const pubspecDefaultPath = 'pubspec_default.yaml';
|
||||
const pubspecOutputPath = 'pubspec.yaml';
|
||||
@@ -11,10 +12,11 @@ Future<void> main(List<String> args) async {
|
||||
const prefix = '--';
|
||||
final hasBitcoin = args.contains('${prefix}bitcoin');
|
||||
final hasMonero = args.contains('${prefix}monero');
|
||||
final hasHaven = args.contains('${prefix}haven');
|
||||
await generateBitcoin(hasBitcoin);
|
||||
await generateMonero(hasMonero);
|
||||
await generatePubspec(hasMonero: hasMonero, hasBitcoin: hasBitcoin);
|
||||
await generateWalletTypes(hasMonero: hasMonero, hasBitcoin: hasBitcoin);
|
||||
await generatePubspec(hasMonero: hasMonero, hasBitcoin: hasBitcoin, hasHaven: hasHaven);
|
||||
await generateWalletTypes(hasMonero: hasMonero, hasBitcoin: hasBitcoin, hasHaven: hasHaven);
|
||||
}
|
||||
|
||||
Future<void> generateBitcoin(bool hasImplementation) async {
|
||||
@@ -123,15 +125,15 @@ import 'package:cake_wallet/view_model/send/output.dart';
|
||||
import 'package:cw_core/wallet_service.dart';
|
||||
import 'package:hive/hive.dart';""";
|
||||
const moneroCWHeaders = """
|
||||
import 'package:cw_monero/get_height_by_date.dart';
|
||||
import 'package:cw_monero/monero_amount_format.dart';
|
||||
import 'package:cw_monero/monero_transaction_priority.dart';
|
||||
import 'package:cw_core/get_height_by_date.dart';
|
||||
import 'package:cw_core/monero_amount_format.dart';
|
||||
import 'package:cw_core/monero_transaction_priority.dart';
|
||||
import 'package:cw_monero/monero_wallet_service.dart';
|
||||
import 'package:cw_monero/monero_wallet.dart';
|
||||
import 'package:cw_monero/monero_transaction_info.dart';
|
||||
import 'package:cw_monero/monero_transaction_history.dart';
|
||||
import 'package:cw_monero/monero_transaction_creation_credentials.dart';
|
||||
import 'package:cw_monero/account.dart' as monero_account;
|
||||
import 'package:cw_core/account.dart' as monero_account;
|
||||
import 'package:cw_monero/api/wallet.dart' as monero_wallet_api;
|
||||
import 'package:cw_monero/mnemonics/english.dart';
|
||||
import 'package:cw_monero/mnemonics/chinese_simplified.dart';
|
||||
@@ -228,7 +230,7 @@ abstract class Monero {
|
||||
double formatterMoneroAmountToDouble({int amount});
|
||||
int formatterMoneroParseAmount({String amount});
|
||||
Account getCurrentAccount(Object wallet);
|
||||
void setCurrentAccount(Object wallet, Account account);
|
||||
void setCurrentAccount(Object wallet, int id, String label);
|
||||
void onStartup();
|
||||
int getTransactionInfoAccountId(TransactionInfo tx);
|
||||
WalletService createMoneroWalletService(Box<WalletInfo> walletInfoSource);
|
||||
@@ -271,7 +273,171 @@ abstract class MoneroAccountList {
|
||||
await outputFile.writeAsString(output);
|
||||
}
|
||||
|
||||
Future<void> generatePubspec({bool hasMonero, bool hasBitcoin}) async {
|
||||
Future<void> generateHaven(bool hasImplementation) async {
|
||||
final outputFile = File(moneroOutputPath);
|
||||
const havenCommonHeaders = """
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cw_core/wallet_credentials.dart';
|
||||
import 'package:cw_core/wallet_info.dart';
|
||||
import 'package:cw_core/transaction_priority.dart';
|
||||
import 'package:cw_core/transaction_history.dart';
|
||||
import 'package:cw_core/transaction_info.dart';
|
||||
import 'package:cw_core/balance.dart';
|
||||
import 'package:cw_core/output_info.dart';
|
||||
import 'package:cake_wallet/view_model/send/output.dart';
|
||||
import 'package:cw_core/wallet_service.dart';
|
||||
import 'package:hive/hive.dart';""";
|
||||
const havenCWHeaders = """
|
||||
import 'package:cw_core/get_height_by_date.dart';
|
||||
import 'package:cw_core/monero_amount_format.dart';
|
||||
import 'package:cw_core/monero_transaction_priority.dart';
|
||||
import 'package:cw_haven/haven_wallet_service.dart';
|
||||
import 'package:cw_haven/haven_wallet.dart';
|
||||
import 'package:cw_haven/haven_transaction_info.dart';
|
||||
import 'package:cw_haven/haven_transaction_history.dart';
|
||||
import 'package:cw_core/account.dart' as monero_account;
|
||||
import 'package:cw_haven/api/wallet.dart' as monero_wallet_api;
|
||||
import 'package:cw_haven/mnemonics/english.dart';
|
||||
import 'package:cw_haven/mnemonics/chinese_simplified.dart';
|
||||
import 'package:cw_haven/mnemonics/dutch.dart';
|
||||
import 'package:cw_haven/mnemonics/german.dart';
|
||||
import 'package:cw_haven/mnemonics/japanese.dart';
|
||||
import 'package:cw_haven/mnemonics/russian.dart';
|
||||
import 'package:cw_haven/mnemonics/spanish.dart';
|
||||
import 'package:cw_haven/mnemonics/portuguese.dart';
|
||||
import 'package:cw_haven/mnemonics/french.dart';
|
||||
import 'package:cw_haven/mnemonics/italian.dart';
|
||||
import 'package:cw_haven/haven_transaction_creation_credentials.dart';
|
||||
""";
|
||||
const havenCwPart = "part 'cw_haven.dart';";
|
||||
const havenContent = """
|
||||
class Account {
|
||||
Account({this.id, this.label});
|
||||
final int id;
|
||||
final String label;
|
||||
}
|
||||
|
||||
class Subaddress {
|
||||
Subaddress({this.id, this.accountId, this.label, this.address});
|
||||
final int id;
|
||||
final int accountId;
|
||||
final String label;
|
||||
final String address;
|
||||
}
|
||||
|
||||
class HavenBalance extends Balance {
|
||||
HavenBalance({@required this.fullBalance, @required this.unlockedBalance})
|
||||
: formattedFullBalance = haven.formatterMoneroAmountToString(amount: fullBalance),
|
||||
formattedUnlockedBalance =
|
||||
haven.formatterMoneroAmountToString(amount: unlockedBalance),
|
||||
super(unlockedBalance, fullBalance);
|
||||
|
||||
HavenBalance.fromString(
|
||||
{@required this.formattedFullBalance,
|
||||
@required this.formattedUnlockedBalance})
|
||||
: fullBalance = haven.formatterMoneroParseAmount(amount: formattedFullBalance),
|
||||
unlockedBalance = haven.formatterMoneroParseAmount(amount: formattedUnlockedBalance),
|
||||
super(haven.formatterMoneroParseAmount(amount: formattedUnlockedBalance),
|
||||
haven.formatterMoneroParseAmount(amount: formattedFullBalance));
|
||||
|
||||
final int fullBalance;
|
||||
final int unlockedBalance;
|
||||
final String formattedFullBalance;
|
||||
final String formattedUnlockedBalance;
|
||||
|
||||
@override
|
||||
String get formattedAvailableBalance => formattedUnlockedBalance;
|
||||
|
||||
@override
|
||||
String get formattedAdditionalBalance => formattedFullBalance;
|
||||
}
|
||||
|
||||
abstract class HavenWalletDetails {
|
||||
@observable
|
||||
Account account;
|
||||
|
||||
@observable
|
||||
HavenBalance balance;
|
||||
}
|
||||
|
||||
abstract class Haven {
|
||||
HavenAccountList getAccountList(Object wallet);
|
||||
|
||||
MoneroSubaddressList getSubaddressList(Object wallet);
|
||||
|
||||
TransactionHistoryBase getTransactionHistory(Object wallet);
|
||||
|
||||
HavenWalletDetails getMoneroWalletDetails(Object wallet);
|
||||
|
||||
String getTransactionAddress(Object wallet, int accountIndex, int addressIndex);
|
||||
|
||||
int getHeigthByDate({DateTime date});
|
||||
TransactionPriority getDefaultTransactionPriority();
|
||||
TransactionPriority deserializeMoneroTransactionPriority({int raw});
|
||||
List<TransactionPriority> getTransactionPriorities();
|
||||
List<String> getMoneroWordList(String language);
|
||||
|
||||
WalletCredentials createHavenRestoreWalletFromKeysCredentials({
|
||||
String name,
|
||||
String spendKey,
|
||||
String viewKey,
|
||||
String address,
|
||||
String password,
|
||||
String language,
|
||||
int height});
|
||||
WalletCredentials createHavenRestoreWalletFromSeedCredentials({String name, String password, int height, String mnemonic});
|
||||
WalletCredentials createHavenNewWalletCredentials({String name, String password, String language});
|
||||
Map<String, String> getKeys(Object wallet);
|
||||
Object createHavenTransactionCreationCredentials({List<Output> outputs, TransactionPriority priority, String assetType});
|
||||
String formatterMoneroAmountToString({int amount});
|
||||
double formatterMoneroAmountToDouble({int amount});
|
||||
int formatterMoneroParseAmount({String amount});
|
||||
Account getCurrentAccount(Object wallet);
|
||||
void setCurrentAccount(Object wallet, int id, String label);
|
||||
void onStartup();
|
||||
int getTransactionInfoAccountId(TransactionInfo tx);
|
||||
WalletService createHavenWalletService(Box<WalletInfo> walletInfoSource);
|
||||
}
|
||||
|
||||
abstract class MoneroSubaddressList {
|
||||
ObservableList<Subaddress> get subaddresses;
|
||||
void update(Object wallet, {int accountIndex});
|
||||
void refresh(Object wallet, {int accountIndex});
|
||||
List<Subaddress> getAll(Object wallet);
|
||||
Future<void> addSubaddress(Object wallet, {int accountIndex, String label});
|
||||
Future<void> setLabelSubaddress(Object wallet,
|
||||
{int accountIndex, int addressIndex, String label});
|
||||
}
|
||||
|
||||
abstract class HavenAccountList {
|
||||
ObservableList<Account> get accounts;
|
||||
void update(Object wallet);
|
||||
void refresh(Object wallet);
|
||||
List<Account> getAll(Object wallet);
|
||||
Future<void> addAccount(Object wallet, {String label});
|
||||
Future<void> setLabelAccount(Object wallet, {int accountIndex, String label});
|
||||
}
|
||||
""";
|
||||
|
||||
const havenEmptyDefinition = 'Monero monero;\n';
|
||||
const havenCWDefinition = 'Monero monero = CWMonero();\n';
|
||||
|
||||
final output = '$havenCommonHeaders\n'
|
||||
+ (hasImplementation ? '$havenCWHeaders\n' : '\n')
|
||||
+ (hasImplementation ? '$havenCwPart\n\n' : '\n')
|
||||
+ (hasImplementation ? havenCWDefinition : havenEmptyDefinition)
|
||||
+ '\n'
|
||||
+ havenContent;
|
||||
|
||||
if (outputFile.existsSync()) {
|
||||
await outputFile.delete();
|
||||
}
|
||||
|
||||
await outputFile.writeAsString(output);
|
||||
}
|
||||
|
||||
Future<void> generatePubspec({bool hasMonero, bool hasBitcoin, bool hasHaven}) async {
|
||||
const cwCore = """
|
||||
cw_core:
|
||||
path: ./cw_core
|
||||
@@ -284,6 +450,14 @@ Future<void> generatePubspec({bool hasMonero, bool hasBitcoin}) async {
|
||||
cw_bitcoin:
|
||||
path: ./cw_bitcoin
|
||||
""";
|
||||
const cwHaven = """
|
||||
cw_haven:
|
||||
path: ./cw_haven
|
||||
""";
|
||||
const cwSharedExternal = """
|
||||
cw_shared_external:
|
||||
path: ./cw_shared_external
|
||||
""";
|
||||
final inputFile = File(pubspecOutputPath);
|
||||
final inputText = await inputFile.readAsString();
|
||||
final inputLines = inputText.split('\n');
|
||||
@@ -291,13 +465,19 @@ Future<void> generatePubspec({bool hasMonero, bool hasBitcoin}) async {
|
||||
var output = cwCore;
|
||||
|
||||
if (hasMonero) {
|
||||
output += '\n$cwMonero';
|
||||
output += '\n$cwMonero\n$cwSharedExternal';
|
||||
}
|
||||
|
||||
if (hasBitcoin) {
|
||||
output += '\n$cwBitcoin';
|
||||
}
|
||||
|
||||
if (hasHaven && !hasMonero) {
|
||||
output += '\n$cwSharedExternal\n$cwHaven';
|
||||
} else if (hasHaven) {
|
||||
output += '\n$cwHaven';
|
||||
}
|
||||
|
||||
final outputLines = output.split('\n');
|
||||
inputLines.insertAll(dependenciesIndex + 1, outputLines);
|
||||
final outputContent = inputLines.join('\n');
|
||||
@@ -310,7 +490,7 @@ Future<void> generatePubspec({bool hasMonero, bool hasBitcoin}) async {
|
||||
await outputFile.writeAsString(outputContent);
|
||||
}
|
||||
|
||||
Future<void> generateWalletTypes({bool hasMonero, bool hasBitcoin}) async {
|
||||
Future<void> generateWalletTypes({bool hasMonero, bool hasBitcoin, bool hasHaven}) async {
|
||||
final walletTypesFile = File(walletTypesPath);
|
||||
|
||||
if (walletTypesFile.existsSync()) {
|
||||
@@ -329,6 +509,10 @@ Future<void> generateWalletTypes({bool hasMonero, bool hasBitcoin}) async {
|
||||
outputContent += '\tWalletType.bitcoin,\n\tWalletType.litecoin,\n';
|
||||
}
|
||||
|
||||
if (hasHaven) {
|
||||
outputContent += '\tWalletType.haven,\n';
|
||||
}
|
||||
|
||||
outputContent += '];\n';
|
||||
await walletTypesFile.writeAsString(outputContent);
|
||||
}
|
||||
Reference in New Issue
Block a user