Add initial setup for firo wallet

This commit is contained in:
OmarHatem 2024-01-10 19:22:02 +02:00
parent b3c8be4ba8
commit 8e39df21c9
5 changed files with 95 additions and 16 deletions

View file

@ -4,18 +4,6 @@ import 'package:hive/hive.dart';
part 'wallet_type.g.dart'; part 'wallet_type.g.dart';
const walletTypes = [
WalletType.monero,
WalletType.bitcoin,
WalletType.litecoin,
WalletType.haven,
WalletType.ethereum,
WalletType.bitcoinCash,
WalletType.nano,
WalletType.banano,
WalletType.polygon,
];
@HiveType(typeId: WALLET_TYPE_TYPE_ID) @HiveType(typeId: WALLET_TYPE_TYPE_ID)
enum WalletType { enum WalletType {
@HiveField(0) @HiveField(0)
@ -46,7 +34,10 @@ enum WalletType {
bitcoinCash, bitcoinCash,
@HiveField(9) @HiveField(9)
polygon polygon,
@HiveField(10)
firo,
} }
int serializeToInt(WalletType type) { int serializeToInt(WalletType type) {
@ -69,6 +60,8 @@ int serializeToInt(WalletType type) {
return 7; return 7;
case WalletType.polygon: case WalletType.polygon:
return 8; return 8;
case WalletType.firo:
return 9;
default: default:
return -1; return -1;
} }
@ -94,6 +87,8 @@ WalletType deserializeFromInt(int raw) {
return WalletType.bitcoinCash; return WalletType.bitcoinCash;
case 8: case 8:
return WalletType.polygon; return WalletType.polygon;
case 9:
return WalletType.firo;
default: default:
throw Exception('Unexpected token: $raw for WalletType deserializeFromInt'); throw Exception('Unexpected token: $raw for WalletType deserializeFromInt');
} }
@ -119,6 +114,8 @@ String walletTypeToString(WalletType type) {
return 'Banano'; return 'Banano';
case WalletType.polygon: case WalletType.polygon:
return 'Polygon'; return 'Polygon';
case WalletType.firo:
return 'Firo';
default: default:
return ''; return '';
} }
@ -144,6 +141,8 @@ String walletTypeToDisplayName(WalletType type) {
return 'Banano (BAN)'; return 'Banano (BAN)';
case WalletType.polygon: case WalletType.polygon:
return 'Polygon (MATIC)'; return 'Polygon (MATIC)';
case WalletType.firo:
return 'Firo';
default: default:
return ''; return '';
} }
@ -169,6 +168,8 @@ CryptoCurrency walletTypeToCryptoCurrency(WalletType type) {
return CryptoCurrency.banano; return CryptoCurrency.banano;
case WalletType.polygon: case WalletType.polygon:
return CryptoCurrency.maticpoly; return CryptoCurrency.maticpoly;
case WalletType.firo:
return CryptoCurrency.firo;
default: default:
throw Exception( throw Exception(
'Unexpected wallet type: ${type.toString()} for CryptoCurrency walletTypeToCryptoCurrency'); 'Unexpected wallet type: ${type.toString()} for CryptoCurrency walletTypeToCryptoCurrency');

1
cw_firo Submodule

@ -0,0 +1 @@
Subproject commit 9cd241b5ea142e21c01dd7639b42603281c43287

View file

@ -68,6 +68,7 @@ class ProvidersHelper {
case WalletType.none: case WalletType.none:
case WalletType.haven: case WalletType.haven:
case WalletType.polygon: case WalletType.polygon:
case WalletType.firo:
return []; return [];
} }
} }
@ -88,6 +89,7 @@ class ProvidersHelper {
case WalletType.none: case WalletType.none:
case WalletType.haven: case WalletType.haven:
case WalletType.polygon: case WalletType.polygon:
case WalletType.firo:
return []; return [];
} }
} }

View file

@ -10,7 +10,7 @@ case $APP_ANDROID_TYPE in
CONFIG_ARGS="--monero" CONFIG_ARGS="--monero"
;; ;;
$CAKEWALLET) $CAKEWALLET)
CONFIG_ARGS="--monero --bitcoin --haven --ethereum --polygon --nano --bitcoinCash" CONFIG_ARGS="--monero --bitcoin --haven --ethereum --polygon --nano --bitcoinCash --firo"
;; ;;
$HAVEN) $HAVEN)
CONFIG_ARGS="--haven" CONFIG_ARGS="--haven"

View file

@ -7,6 +7,7 @@ const ethereumOutputPath = 'lib/ethereum/ethereum.dart';
const bitcoinCashOutputPath = 'lib/bitcoin_cash/bitcoin_cash.dart'; const bitcoinCashOutputPath = 'lib/bitcoin_cash/bitcoin_cash.dart';
const nanoOutputPath = 'lib/nano/nano.dart'; const nanoOutputPath = 'lib/nano/nano.dart';
const polygonOutputPath = 'lib/polygon/polygon.dart'; const polygonOutputPath = 'lib/polygon/polygon.dart';
const FiroOutputPath = 'lib/firo/firo.dart';
const walletTypesPath = 'lib/wallet_types.g.dart'; const walletTypesPath = 'lib/wallet_types.g.dart';
const pubspecDefaultPath = 'pubspec_default.yaml'; const pubspecDefaultPath = 'pubspec_default.yaml';
const pubspecOutputPath = 'pubspec.yaml'; const pubspecOutputPath = 'pubspec.yaml';
@ -21,6 +22,7 @@ Future<void> main(List<String> args) async {
final hasNano = args.contains('${prefix}nano'); final hasNano = args.contains('${prefix}nano');
final hasBanano = args.contains('${prefix}banano'); final hasBanano = args.contains('${prefix}banano');
final hasPolygon = args.contains('${prefix}polygon'); final hasPolygon = args.contains('${prefix}polygon');
final hasFiro = args.contains('${prefix}firo');
await generateBitcoin(hasBitcoin); await generateBitcoin(hasBitcoin);
await generateMonero(hasMonero); await generateMonero(hasMonero);
@ -29,6 +31,7 @@ Future<void> main(List<String> args) async {
await generateBitcoinCash(hasBitcoinCash); await generateBitcoinCash(hasBitcoinCash);
await generateNano(hasNano); await generateNano(hasNano);
await generatePolygon(hasPolygon); await generatePolygon(hasPolygon);
await generateFiro(hasFiro);
// await generateBanano(hasEthereum); // await generateBanano(hasEthereum);
await generatePubspec( await generatePubspec(
@ -40,6 +43,7 @@ Future<void> main(List<String> args) async {
hasBanano: hasBanano, hasBanano: hasBanano,
hasBitcoinCash: hasBitcoinCash, hasBitcoinCash: hasBitcoinCash,
hasPolygon: hasPolygon, hasPolygon: hasPolygon,
hasFiro: hasFiro,
); );
await generateWalletTypes( await generateWalletTypes(
hasMonero: hasMonero, hasMonero: hasMonero,
@ -50,6 +54,7 @@ Future<void> main(List<String> args) async {
hasBanano: hasBanano, hasBanano: hasBanano,
hasBitcoinCash: hasBitcoinCash, hasBitcoinCash: hasBitcoinCash,
hasPolygon: hasPolygon, hasPolygon: hasPolygon,
hasFiro: hasFiro,
); );
} }
@ -726,6 +731,57 @@ abstract class BitcoinCash {
await outputFile.writeAsString(output); await outputFile.writeAsString(output);
} }
Future<void> generateFiro(bool hasImplementation) async {
final outputFile = File(FiroOutputPath);
const firoCommonHeaders = """
""";
const firoCWHeaders = """
""";
const firoCwPart = "part 'cw_firo.dart';";
const firoContent = """
abstract class Firo {
String getMnemonic(int? strength);
Uint8List getSeedFromMnemonic(String seed);
String getCashAddrFormat(String address);
WalletService createFiroWalletService(
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource);
WalletCredentials createFiroNewWalletCredentials(
{required String name, WalletInfo? walletInfo});
WalletCredentials createFiroRestoreWalletFromSeedCredentials(
{required String name, required String mnemonic, required String password});
TransactionPriority deserializeFiroTransactionPriority(int raw);
TransactionPriority getDefaultTransactionPriority();
List<TransactionPriority> getTransactionPriorities();
TransactionPriority getFiroTransactionPrioritySlow();
}
""";
const firoEmptyDefinition = 'Firo? firo;\n';
const firoCWDefinition = 'Firo? firo = CWFiro();\n';
final output = '$firoCommonHeaders\n' +
(hasImplementation ? '$firoCWHeaders\n' : '\n') +
(hasImplementation ? '$firoCwPart\n\n' : '\n') +
(hasImplementation ? firoCWDefinition : firoEmptyDefinition) +
'\n' +
firoContent;
if (outputFile.existsSync()) {
await outputFile.delete();
}
await outputFile.writeAsString(output);
}
Future<void> generateNano(bool hasImplementation) async { Future<void> generateNano(bool hasImplementation) async {
final outputFile = File(nanoOutputPath); final outputFile = File(nanoOutputPath);
const nanoCommonHeaders = """ const nanoCommonHeaders = """
@ -876,7 +932,8 @@ Future<void> generatePubspec(
required bool hasNano, required bool hasNano,
required bool hasBanano, required bool hasBanano,
required bool hasBitcoinCash, required bool hasBitcoinCash,
required bool hasPolygon}) async { required bool hasPolygon,
required bool hasFiro}) async {
const cwCore = """ const cwCore = """
cw_core: cw_core:
path: ./cw_core path: ./cw_core
@ -917,6 +974,15 @@ Future<void> generatePubspec(
cw_polygon: cw_polygon:
path: ./cw_polygon path: ./cw_polygon
"""; """;
const cwFiro = """
cw_firo:
path: ./cw_firo
flutter_libsparkmobile:
git:
url: https://github.com/cypherstack/flutter_libsparkmobile.git
ref: ac6424658191047b14cbd95bee61388397ae94a7
""";
final inputFile = File(pubspecOutputPath); final inputFile = File(pubspecOutputPath);
final inputText = await inputFile.readAsString(); final inputText = await inputFile.readAsString();
final inputLines = inputText.split('\n'); final inputLines = inputText.split('\n');
@ -951,6 +1017,10 @@ Future<void> generatePubspec(
output += '\n$cwPolygon'; output += '\n$cwPolygon';
} }
if (hasFiro) {
output += '\n$cwFiro';
}
if (hasHaven && !hasMonero) { if (hasHaven && !hasMonero) {
output += '\n$cwSharedExternal\n$cwHaven'; output += '\n$cwSharedExternal\n$cwHaven';
} else if (hasHaven) { } else if (hasHaven) {
@ -977,7 +1047,8 @@ Future<void> generateWalletTypes(
required bool hasNano, required bool hasNano,
required bool hasBanano, required bool hasBanano,
required bool hasBitcoinCash, required bool hasBitcoinCash,
required bool hasPolygon}) async { required bool hasPolygon,
required bool hasFiro}) async {
final walletTypesFile = File(walletTypesPath); final walletTypesFile = File(walletTypesPath);
if (walletTypesFile.existsSync()) { if (walletTypesFile.existsSync()) {
@ -1020,6 +1091,10 @@ Future<void> generateWalletTypes(
outputContent += '\tWalletType.banano,\n'; outputContent += '\tWalletType.banano,\n';
} }
if (hasFiro) {
outputContent += '\tWalletType.firo,\n';
}
if (hasHaven) { if (hasHaven) {
outputContent += '\tWalletType.haven,\n'; outputContent += '\tWalletType.haven,\n';
} }