12
const zanoOutputPath = 'lib/zano/zano.dart';
13
const decredOutputPath = 'lib/decred/decred.dart';
14
const dogecoinOutputPath = 'lib/dogecoin/dogecoin.dart';
15
+const baseOutputPath = 'lib/base/base.dart';
16
const walletTypesPath = 'lib/wallet_types.g.dart';
17
const secureStoragePath = 'lib/core/secure_storage.dart';
18
const pubspecDefaultPath = 'pubspec_default.yaml';
33
final hasZano = args.contains('${prefix}zano');
34
final hasDecred = args.contains('${prefix}decred');
35
final hasDogecoin = args.contains('${prefix}dogecoin');
36
+ final hasBase = args.contains('${prefix}base');
37
final excludeFlutterSecureStorage = args.contains('${prefix}excludeFlutterSecureStorage');
38
39
await generateBitcoin(hasBitcoin);
49
// await generateBanano(hasEthereum);
50
await generateDecred(hasDecred);
51
await generateDogecoin(hasDogecoin);
52
+ await generateBase(hasBase);
53
54
await generatePubspec(
55
hasMonero: hasMonero,
66
hasZano: hasZano,
67
hasDecred: hasDecred,
68
hasDogecoin: hasDogecoin,
69
+ hasBase: hasBase,
70
);
71
await generateWalletTypes(
72
hasMonero: hasMonero,
82
hasZano: hasZano,
83
hasDecred: hasDecred,
84
hasDogecoin: hasDogecoin,
85
+ hasBase: hasBase,
86
);
87
await injectSecureStorage(!excludeFlutterSecureStorage);
88
}
1502
await outputFile.writeAsString(output);
1503
}
1504
1505
+Future<void> generateBase(bool hasImplementation) async {
1506
+ final outputFile = File(baseOutputPath);
1507
+ const baseCommonHeaders = """
1508
+import 'package:cake_wallet/view_model/send/output.dart';
1509
+import 'package:cw_core/crypto_currency.dart';
1510
+import 'package:cw_core/erc20_token.dart';
1511
+import 'package:cw_core/hardware/hardware_account_data.dart';
1512
+import 'package:cw_core/hardware/hardware_wallet_service.dart';
1513
+import 'package:cw_core/output_info.dart';
1514
+import 'package:cw_core/pending_transaction.dart';
1515
+import 'package:cw_core/transaction_info.dart';
1516
+import 'package:cw_core/transaction_priority.dart';
1517
+import 'package:cw_core/wallet_base.dart';
1518
+import 'package:cw_core/wallet_credentials.dart';
1519
+import 'package:cw_core/wallet_info.dart';
1520
+import 'package:cw_core/wallet_service.dart';
1521
+import 'package:hive/hive.dart';
1522
+import 'package:ledger_flutter_plus/ledger_flutter_plus.dart' as ledger;
1523
+import 'package:bitbox_flutter/bitbox_flutter.dart' as bitbox;
1524
+import 'package:web3dart/web3dart.dart';
1525
+
1526
+""";
1527
+ const baseCWHeaders = """
1528
+import 'package:cw_evm/evm_chain_formatter.dart';
1529
+import 'package:cw_evm/evm_chain_mnemonics.dart';
1530
+import 'package:cw_evm/evm_chain_transaction_credentials.dart';
1531
+import 'package:cw_evm/evm_chain_transaction_info.dart';
1532
+import 'package:cw_evm/evm_chain_transaction_priority.dart';
1533
+import 'package:cw_evm/evm_chain_wallet_creation_credentials.dart';
1534
+import 'package:cw_evm/hardware/evm_chain_ledger_credentials.dart';
1535
+import 'package:cw_evm/hardware/evm_chain_bitbox_credentials.dart';
1536
+import 'package:cw_evm/evm_chain_wallet.dart';
1537
+import 'package:cw_evm/hardware/evm_chain_bitbox_service.dart';
1538
+import 'package:cw_evm/hardware/evm_chain_ledger_service.dart';
1539
+
1540
+import 'package:cw_base/base_client.dart';
1541
+import 'package:cw_base/base_wallet.dart';
1542
+import 'package:cw_base/base_wallet_service.dart';
1543
+import 'package:cw_base/default_base_erc20_tokens.dart';
1544
+import 'package:eth_sig_util/util/utils.dart';
1545
+
1546
+""";
1547
+ const baseCwPart = "part 'cw_base.dart';";
1548
+ const baseContent = """
1549
+abstract class Base {
1550
+ List<String> getBaseWordList(String language);
1551
+ WalletService createBaseWalletService(Box<WalletInfo> walletInfoSource, bool isDirect);
1552
+ WalletCredentials createBaseNewWalletCredentials(
1553
+ {required String name,
1554
+ WalletInfo? walletInfo,
1555
+ String? password,
1556
+ String? mnemonic,
1557
+ String? passphrase});
1558
+ WalletCredentials createBaseRestoreWalletFromSeedCredentials(
1559
+ {required String name,
1560
+ required String mnemonic,
1561
+ required String password,
1562
+ String? passphrase});
1563
+ WalletCredentials createBaseRestoreWalletFromPrivateKey(
1564
+ {required String name, required String privateKey, required String password});
1565
+ WalletCredentials createBaseHardwareWalletCredentials(
1566
+ {required String name, required HardwareAccountData hwAccountData, WalletInfo? walletInfo});
1567
+ String getAddress(WalletBase wallet);
1568
+ String getPrivateKey(WalletBase wallet);
1569
+ String getPublicKey(WalletBase wallet);
1570
+ TransactionPriority getDefaultTransactionPriority();
1571
+ TransactionPriority getBaseTransactionPrioritySlow();
1572
+ List<TransactionPriority> getTransactionPriorities();
1573
+ TransactionPriority deserializeBaseTransactionPriority(int raw);
1574
+
1575
+ Object createBaseTransactionCredentials(
1576
+ List<Output> outputs, {
1577
+ required TransactionPriority priority,
1578
+ required CryptoCurrency currency,
1579
+ int? feeRate,
1580
+ });
1581
+
1582
+ Object createBaseTransactionCredentialsRaw(
1583
+ List<OutputInfo> outputs, {
1584
+ TransactionPriority? priority,
1585
+ required CryptoCurrency currency,
1586
+ required int feeRate,
1587
+ });
1588
+
1589
+ int formatterBaseParseAmount(String amount);
1590
+ double formatterBaseAmountToDouble(
1591
+ {TransactionInfo? transaction, BigInt? amount, int exponent = 18});
1592
+ List<Erc20Token> getERC20Currencies(WalletBase wallet);
1593
+ Future<void> addErc20Token(WalletBase wallet, CryptoCurrency token);
1594
+ Future<void> deleteErc20Token(WalletBase wallet, CryptoCurrency token);
1595
+ Future<void> removeTokenTransactionsInHistory(WalletBase wallet, CryptoCurrency token);
1596
+ Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress);
1597
+
1598
+ Future<PendingTransaction> createTokenApproval(WalletBase wallet, BigInt amount, String spender,
1599
+ CryptoCurrency token, TransactionPriority priority);
1600
+
1601
+ CryptoCurrency assetOfTransaction(WalletBase wallet, TransactionInfo transaction);
1602
+ void updateBaseScanUsageState(WalletBase wallet, bool isEnabled);
1603
+ Web3Client? getWeb3Client(WalletBase wallet);
1604
+ String getTokenAddress(CryptoCurrency asset);
1605
+
1606
+ void setHardwareWalletService(WalletBase wallet, HardwareWalletService service);
1607
+ HardwareWalletService getLedgerHardwareWalletService(ledger.LedgerConnection connection);
1608
+ HardwareWalletService getBitboxHardwareWalletService(bitbox.BitboxManager manager);
1609
+ List<String> getDefaultTokenContractAddresses();
1610
+ bool isTokenAlreadyAdded(WalletBase wallet, String contractAddress);
1611
+}
1612
+ """;
1613
+
1614
+ const baseEmptyDefinition = 'Base? base;\n';
1615
+ const baseCWDefinition = 'Base? base = CWBase();\n';
1616
+
1617
+ final output = '$baseCommonHeaders\n' +
1618
+ (hasImplementation ? '$baseCWHeaders\n' : '\n') +
1619
+ (hasImplementation ? '$baseCwPart\n\n' : '\n') +
1620
+ (hasImplementation ? baseCWDefinition : baseEmptyDefinition) +
1621
+ '\n' +
1622
+ baseContent;
1623
+
1624
+ if (outputFile.existsSync()) {
1625
+ await outputFile.delete();
1626
+ }
1627
+
1628
+ await outputFile.writeAsString(output);
1629
+}
1630
+
1631
Future<void> generatePubspec({
1632
required bool hasMonero,
1633
required bool hasBitcoin,
1643
required bool hasZano,
1644
required bool hasDecred,
1645
required bool hasDogecoin,
1646
+ required bool hasBase,
1647
}) async {
1648
const cwCore = """
1649
cw_core:
1712
cw_dogecoin:
1713
path: ./cw_dogecoin
1714
""";
1715
+ const cwBase = """
1716
+ cw_base:
1717
+ path: ./cw_base
1718
+ """;
1719
+
1720
final inputFile = File(pubspecOutputPath);
1721
final inputText = await inputFile.readAsString();
1722
final inputLines = inputText.split('\n');
1786
output += '\n$cwDogecoin';
1787
}
1788
1789
+ if (hasBase) {
1790
+ output += '\n$cwBase';
1791
+ }
1792
+
1793
final outputLines = output.split('\n');
1794
inputLines.insertAll(dependenciesIndex + 1, outputLines);
1795
final outputContent = inputLines.join('\n');
1816
required bool hasZano,
1817
required bool hasDecred,
1818
required bool hasDogecoin,
1819
+ required bool hasBase,
1820
}) async {
1821
final walletTypesFile = File(walletTypesPath);
1822
1848
outputContent += '\tWalletType.dogecoin,\n';
1849
}
1850
1851
+ if (hasBase) {
1852
+ outputContent += '\tWalletType.base,\n';
1853
+ }
1854
+
1855
if (hasBitcoinCash) {
1856
outputContent += '\tWalletType.bitcoinCash,\n';
1857
}