From 9c3c43397cf95d66dfe5425f2951d4ef0be7fcb2 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 10:02:20 +0100 Subject: [PATCH 01/10] providers: add process management --- lib/config/dependencies.dart | 4 ++ lib/providers/proc_provider.dart | 94 ++++++++++++++++++++++++++++++++ pubspec.lock | 2 +- pubspec.yaml | 9 ++- 4 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 lib/providers/proc_provider.dart diff --git a/lib/config/dependencies.dart b/lib/config/dependencies.dart index 9081422c..ed876551 100644 --- a/lib/config/dependencies.dart +++ b/lib/config/dependencies.dart @@ -1,6 +1,7 @@ import 'package:get_it/get_it.dart'; import 'package:sidesail/config/sidechains.dart'; import 'package:sidesail/providers/balance_provider.dart'; +import 'package:sidesail/providers/proc_provider.dart'; import 'package:sidesail/providers/transactions_provider.dart'; import 'package:sidesail/routing/router.dart'; import 'package:sidesail/rpc/rpc_ethereum.dart'; @@ -34,6 +35,9 @@ Future initGetitDependencies(Sidechain initialChain) async { // we start polling for balance updates () => BalanceProvider(), ); + + GetIt.I.registerLazySingleton(() => ProcessProvider()); + GetIt.I.registerLazySingleton( () => TransactionsProvider(), ); diff --git a/lib/providers/proc_provider.dart b/lib/providers/proc_provider.dart new file mode 100644 index 00000000..74570b2d --- /dev/null +++ b/lib/providers/proc_provider.dart @@ -0,0 +1,94 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:logger/logger.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:sidesail/logger.dart'; + +class ProcessProvider extends ChangeNotifier { + ProcessProvider(); + + // List of currently running processes. + List pids = []; + + final Map _exitCodes = {}; + final List _runningProcesses = []; + + final Map> _stdoutStreams = {}; + final Map> _stderrStreams = {}; + + Stream stdout(int pid) => _stdoutStreams[pid] ?? const Stream.empty(); + Stream stderr(int pid) => _stderrStreams[pid] ?? const Stream.empty(); + bool running(int pid) => _runningProcesses.contains(pid); + + // Starts a binary located in the asset bundle included with the app. + Future start(BuildContext context, String binary, List args) async { + // TODO: lookup based on arch + platform + final binResource = await DefaultAssetBundle.of(context).load('assets/bin/$binary'); + + final temp = await getTemporaryDirectory(); + + final file = File('${temp.path}/$binary'); + + // Have to convert the ByteData -> List. Side note: why tf does writeAsBytes + // operate on a list of numbers? Jesus + // https://stackoverflow.com/a/50121777 + final buffer = binResource.buffer; + await file.writeAsBytes( + buffer.asUint8List(binResource.offsetInBytes, binResource.lengthInBytes), + ); + + // Must be executable before we can start. + // TODO: what to do on Windows here + await Process.run('chmod', ['+x', file.path]); + + final process = await Process.start( + file.path, + args, + mode: ProcessStartMode.normal, // when the flutter app quits, this process quit + ); + log.d('started "$binary" with pid ${process.pid}'); + _runningProcesses.add(process.pid); + + // Let output streaming chug in the background + + // Proper logs are written here + _stdoutStreams[process.pid] = process.stdout.transform(utf8.decoder); + + // Error messages while starting up are written here + _stderrStreams[process.pid] = process.stderr.transform(utf8.decoder); + + // Register a handler for when the process stops. + unawaited( + process.exitCode.then((code) async { + var level = Level.error; + // Node software exited with a success code. Someone called + // `drivechain-cli stop`? + if (code == 0) { + level = Level.info; + } + + final errLogs = await (_stderrStreams[process.pid] ?? const Stream.empty()).toList(); + log.log(level, '"$binary" exited with code $code: $errLogs'); + + // Forward to listeners that the process finished. + _exitCodes[process.pid] = code; + _runningProcesses.remove(process.pid); + notifyListeners(); + }), + ); + + notifyListeners(); + return process.pid; + } + + @override + void dispose() { + super.dispose(); + + log.d('dispose process provider: killing processes $_runningProcesses'); + _runningProcesses.forEach(Process.killPid); + } +} diff --git a/pubspec.lock b/pubspec.lock index 9ba980d1..26d8e592 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -586,7 +586,7 @@ packages: source: hosted version: "1.0.1" path_provider: - dependency: transitive + dependency: "direct main" description: name: path_provider sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa diff --git a/pubspec.yaml b/pubspec.yaml index 42834c3b..e94ba6cc 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -51,15 +51,15 @@ dependencies: collection: ^1.17.2 stacked: ^3.4.1+1 intl: ^0.18.0 - web3dart: + web3dart: git: url: https://github.com/xclud/web3dart.git ref: main http: ^1.1.0 - + path_provider: ^2.1.1 # Needed for silencing complaints from adding the web3dart lib -dependency_overrides: +dependency_overrides: stream_channel: 2.1.2 dev_dependencies: @@ -85,6 +85,9 @@ flutter: # the material Icons class. uses-material-design: true + assets: + - assets/bin/ + fonts: - family: SourceCodePro fonts: From d7690d8d66d1c0e3715f471c6d16da9a98b1f81c Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 10:05:12 +0100 Subject: [PATCH 02/10] app: start mainchain on init if not running --- lib/app.dart | 115 +++++++++++++++++++++++++++-- lib/rpc/rpc.dart | 7 ++ test/mocks/rpc_mock_mainchain.dart | 7 +- test/mocks/rpc_mock_sidechain.dart | 7 +- 4 files changed, 124 insertions(+), 12 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index cb7db42e..c531bd1d 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,10 +1,18 @@ +import 'dart:async'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; +import 'package:sail_ui/sail_ui.dart'; import 'package:sail_ui/theme/theme.dart'; import 'package:sail_ui/theme/theme_data.dart'; +import 'package:sail_ui/widgets/core/sail_text.dart'; import 'package:sail_ui/widgets/core/scaffold.dart'; import 'package:sail_ui/widgets/loading_indicator.dart'; +import 'package:sidesail/logger.dart'; +import 'package:sidesail/providers/proc_provider.dart'; import 'package:sidesail/routing/router.dart'; +import 'package:sidesail/rpc/rpc_mainchain.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; import 'package:sidesail/storage/client_settings.dart'; import 'package:sidesail/storage/sail_settings/theme_settings.dart'; @@ -34,16 +42,24 @@ class SailApp extends StatefulWidget { } class SailAppState extends State with WidgetsBindingObserver { - SailThemeData? theme; AppRouter get router => GetIt.I.get(); SidechainRPC get _sidechain => GetIt.I.get(); + MainchainRPC get mainchain => GetIt.I.get(); + ProcessProvider get processes => GetIt.I.get(); final settings = GetIt.I.get(); + /// Unrecoverable error on startup we can't get past. + dynamic _initBinariesError; + String mainchainStartupMessage = "Checking if 'drivechaind' is started"; + bool binariesStarted = false; + SailThemeData? theme; + @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); - loadTheme(); + unawaited(loadTheme()); + unawaited(initBinaries()); } void rebuildUI() { @@ -64,7 +80,63 @@ class SailAppState extends State with WidgetsBindingObserver { } } - void loadTheme([SailThemeValues? themeToLoad]) async { + Future initBinaries() async { + log.d('init binaries: checking mainchain connection'); + + // First, let the mainchain connection check finish. + await mainchain.initDone; + + // If we managed to connect, we're finished here! + if (mainchain.connected) { + log.d('init binaries: mainchain is already running, not doing anything'); + setState(() { + binariesStarted = true; + }); + return; + } + + // We have to start the mainchain + final tempDir = await Directory.systemTemp.createTemp('drivechaind'); + final tempLogFile = await File('${tempDir.path}/drivechaind.debug.log').create(recursive: true); + + if (!context.mounted) { + return; + } + + final args = [ + '-debuglogfile=${tempLogFile.path}', + '-regtest', + ]; + + log.d('init binaries: starting drivechaind $args'); + + try { + final pid = await processes.start(context, 'drivechaind', args); + log.d('init binaries: started drivechaind with PID $pid'); + setState(() { + mainchainStartupMessage = "Started 'drivechaind', waiting for successful RPC connection"; + }); + } catch (err) { + log.w('init binaries: unable to start drivechaind', error: err); + return setState(() { + _initBinariesError = err; + }); + } + + // Add timeout? + log.i('init binaries: waiting for mainchain connection'); + await waitForBoolToBeTrue(() async { + final (connected, _) = await mainchain.testConnection(); + return connected; + }); + + log.i('init binaries: mainchain connected'); + return setState(() { + binariesStarted = true; + }); + } + + Future loadTheme([SailThemeValues? themeToLoad]) async { themeToLoad ??= (await settings.getValue(ThemeSetting())).value; if (themeToLoad == SailThemeValues.platform) { // ignore: deprecated_member_use @@ -79,17 +151,37 @@ class SailAppState extends State with WidgetsBindingObserver { await settings.setValue(ThemeSetting(newValue: themeToLoad)); } + bool get inInitialSetup => theme == null || !binariesStarted; + + Widget loadingIndicator() { + if (!binariesStarted) { + return SailColumn( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + spacing: SailStyleValues.padding25, + children: [ + SailText.primary20('Mainchain starting up: $mainchainStartupMessage'), + const SailCircularProgressIndicator(), + ], + ); + } + return const SailCircularProgressIndicator(); + } + @override Widget build(BuildContext context) { - if (theme == null) { + if (inInitialSetup) { return MaterialApp( home: Material( color: _sidechain.chain.color, child: SailTheme( data: SailThemeData.lightTheme(_sidechain.chain.color), - child: const SailScaffold( + child: SailScaffold( body: Center( - child: SailCircularProgressIndicator(), + // TODO: better error message with troubleshooting tips here + child: _initBinariesError != null + ? SailText.primary24('Ran into unrecoverable error on startup: $_initBinariesError') + : loadingIndicator(), ), ), ), @@ -109,3 +201,14 @@ class SailAppState extends State with WidgetsBindingObserver { super.dispose(); } } + +Future waitForBoolToBeTrue( + Future Function() boolGetter, { + Duration pollInterval = const Duration(milliseconds: 100), +}) async { + bool result = await boolGetter(); + if (!result) { + await Future.delayed(pollInterval); + await waitForBoolToBeTrue(boolGetter, pollInterval: pollInterval); + } +} diff --git a/lib/rpc/rpc.dart b/lib/rpc/rpc.dart index 13fa6955..6ab504b6 100644 --- a/lib/rpc/rpc.dart +++ b/lib/rpc/rpc.dart @@ -20,6 +20,11 @@ abstract class RPCConnection extends ChangeNotifier { // ping method that tests whether the connection is successful // should throw if call is not successful Future ping(); + + bool _initDone = false; + + Future get initDone => _initDone ? Future.value() : Future.any([]); + Future<(bool, String?)> testConnection() async { try { await ping(); @@ -29,6 +34,8 @@ abstract class RPCConnection extends ChangeNotifier { _log.e('could not ping: ${error.toString()}!'); connectionError = error.toString(); connected = false; + } finally { + _initDone = true; } notifyListeners(); diff --git a/test/mocks/rpc_mock_mainchain.dart b/test/mocks/rpc_mock_mainchain.dart index a3298792..cd1a12c6 100644 --- a/test/mocks/rpc_mock_mainchain.dart +++ b/test/mocks/rpc_mock_mainchain.dart @@ -13,9 +13,10 @@ class MockMainchainRPC extends MainchainRPC { } @override - Future<(bool, String?)> testConnection() async { - return (true, null); - } + bool get connected => true; + + @override + Future get initDone => Future.value(); @override Future ping() async { diff --git a/test/mocks/rpc_mock_sidechain.dart b/test/mocks/rpc_mock_sidechain.dart index 1475ac67..04729a24 100644 --- a/test/mocks/rpc_mock_sidechain.dart +++ b/test/mocks/rpc_mock_sidechain.dart @@ -18,9 +18,10 @@ class MockSidechainRPC extends SidechainRPC { } @override - Future<(bool, String?)> testConnection() async { - return (true, null); - } + bool get connected => true; + + @override + Future get initDone => Future.value(); @override Future createClient() async { From 8c430da6b464e34614687df727ce18e44f298cb7 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 10:06:27 +0100 Subject: [PATCH 03/10] logger: tune output --- lib/logger.dart | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/logger.dart b/lib/logger.dart index 1e5a3f93..6d230912 100644 --- a/lib/logger.dart +++ b/lib/logger.dart @@ -1,3 +1,11 @@ import 'package:logger/logger.dart'; -final log = Logger(level: Level.debug); +final printer = PrettyPrinter( + printTime: true, + printEmojis: false, +); + +final log = Logger( + level: Level.debug, + printer: printer, +); From 88ac3e9df75e5265fb94d994aef53eeb531c07fc Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 11:55:19 +0100 Subject: [PATCH 04/10] dev: add empty assets folder --- .gitignore | 3 +++ assets/bin/.gitkeep | 0 2 files changed, 3 insertions(+) create mode 100644 assets/bin/.gitkeep diff --git a/.gitignore b/.gitignore index 24476c5d..ce641573 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +# Binaries for the nodes +assets/bin \ No newline at end of file diff --git a/assets/bin/.gitkeep b/assets/bin/.gitkeep new file mode 100644 index 00000000..e69de29b From b56da76b7b6f04e706fed30bfec855673cd9874a Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 11:55:31 +0100 Subject: [PATCH 05/10] dev: delete notes.md --- notes.md | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 notes.md diff --git a/notes.md b/notes.md deleted file mode 100644 index a09a606e..00000000 --- a/notes.md +++ /dev/null @@ -1,25 +0,0 @@ -## Sidechain deposit - -Generate new SC deposit address. - -Format: sN_addr_checksum - -https://github.com/LayerTwo-Labs/testchain/blob/ba78df157fcb9f85d898f65db43c2842ab9473ff/src/sidechain.cpp#L206-L229 - -There's something strange going on for generating. - -https://github.com/torkelrogstad/bitcoin/blob/c44e3a737d1780a1a07135657ac0fd7686251933/src/qt/sidechainpage.cpp#L748-L762 - -1. Get key from pool - looks completely normal -2. Get destination for key - must be 'legacy' -3. Learn related scripts -4. Encode destination -5. Add to address book - -Same thing happens in regular Core, just with a specific label. - -https://github.com/torkelrogstad/bitcoin/blob/c44e3a737d1780a1a07135657ac0fd7686251933/src/qt/sidechainpage.cpp#L748-L762 - -## Sidechain withdrawal - -Generate new MC deposit address From 3da419b02cdd7ee6d0446753a6560cb156d4074c Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 15:51:38 +0100 Subject: [PATCH 06/10] multi: rework RPC constructions 1. Tear out some unecesary OOP crazities 2. Rework the RPC clients such that they don't read RPC credentials on creation, but are passed them as a parameter. We need to construct the clients on startup after reading configuration files, while showing meaningful messages along the way --- lib/app.dart | 58 ++++++++-- lib/config/dependencies.dart | 58 +++++----- lib/config/sidechains.dart | 86 ++++++++++++-- lib/main.dart | 28 ++++- lib/pages/tabs/dashboard_tab_page.dart | 4 +- lib/pages/tabs/home_page.dart | 10 +- .../tabs/settings/node_settings_tab.dart | 91 +++++++-------- .../tabs/sidechain_explorer_tab_page.dart | 23 ++-- lib/providers/balance_provider.dart | 8 +- lib/providers/transactions_provider.dart | 4 +- lib/rpc/rpc.dart | 12 +- lib/rpc/rpc_config.dart | 51 ++------- lib/rpc/rpc_ethereum.dart | 46 ++------ lib/rpc/rpc_mainchain.dart | 77 +++++-------- lib/rpc/rpc_sidechain.dart | 79 +++++++------ lib/rpc/rpc_testchain.dart | 106 +++++++----------- test/dashboard_test.dart | 2 +- test/mocks/rpc_mock_mainchain.dart | 8 +- test/mocks/rpc_mock_sidechain.dart | 50 +-------- 19 files changed, 391 insertions(+), 410 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index c531bd1d..fa77ac84 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -9,9 +9,12 @@ import 'package:sail_ui/theme/theme_data.dart'; import 'package:sail_ui/widgets/core/sail_text.dart'; import 'package:sail_ui/widgets/core/scaffold.dart'; import 'package:sail_ui/widgets/loading_indicator.dart'; +import 'package:sidesail/config/runtime_args.dart'; +import 'package:sidesail/config/sidechains.dart'; import 'package:sidesail/logger.dart'; import 'package:sidesail/providers/proc_provider.dart'; import 'package:sidesail/routing/router.dart'; +import 'package:sidesail/rpc/rpc_config.dart'; import 'package:sidesail/rpc/rpc_mainchain.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; import 'package:sidesail/storage/client_settings.dart'; @@ -43,7 +46,7 @@ class SailApp extends StatefulWidget { class SailAppState extends State with WidgetsBindingObserver { AppRouter get router => GetIt.I.get(); - SidechainRPC get _sidechain => GetIt.I.get(); + SidechainContainer get _sidechain => GetIt.I.get(); MainchainRPC get mainchain => GetIt.I.get(); ProcessProvider get processes => GetIt.I.get(); final settings = GetIt.I.get(); @@ -59,7 +62,9 @@ class SailAppState extends State with WidgetsBindingObserver { super.initState(); WidgetsBinding.instance.addObserver(this); unawaited(loadTheme()); - unawaited(initBinaries()); + unawaited( + initRPCs().then((_) => initBinaries()), + ); } void rebuildUI() { @@ -72,14 +77,53 @@ class SailAppState extends State with WidgetsBindingObserver { SailThemeData _themeDataFromTheme(SailThemeValues theme) { switch (theme) { case SailThemeValues.light: - return SailThemeData.lightTheme(_sidechain.chain.color); + return SailThemeData.lightTheme(_sidechain.rpc.chain.color); case SailThemeValues.dark: - return SailThemeData.darkTheme(_sidechain.chain.color); + return SailThemeData.darkTheme(_sidechain.rpc.chain.color); default: throw Exception('Could not get theme'); } } + Future initRPCs() async { + // Not ideal, but fuck it + if (RuntimeArgs.isInTest) { + return; + } + + final mainchainFut = readRpcConfig(mainchainDatadir(), 'drivechain.conf', null).then( + (conf) async { + log.d('read mainchain RPC configuration'); + mainchain.conf = conf; + final (connected, connectionError) = await mainchain.testConnection(); + + if (!connected) { + log.w('mainchain NOT connected: $connectionError'); + } else { + log.d('mainchain connected'); + } + }, + ); + + final sidechainFut = readRpcConfig( + _sidechain.rpc.chain.type.datadir(), + _sidechain.rpc.chain.type.confFile(), + _sidechain.rpc.chain, + ).then((conf) async { + log.d('read sidechain RPC configuration'); + _sidechain.rpc.conf = conf; + + final (connected, connectionError) = await _sidechain.rpc.testConnection(); + if (!connected) { + log.w('sidechain NOT connected: $connectionError'); + } else { + log.d('sidechain connected'); + } + }); + + await Future.wait([mainchainFut, sidechainFut]); + } + Future initBinaries() async { log.d('init binaries: checking mainchain connection'); @@ -140,7 +184,7 @@ class SailAppState extends State with WidgetsBindingObserver { themeToLoad ??= (await settings.getValue(ThemeSetting())).value; if (themeToLoad == SailThemeValues.platform) { // ignore: deprecated_member_use - themeToLoad = WidgetsBinding.instance.window.platformBrightness == Brightness.light // + themeToLoad = WidgetsBinding.instance.window.platformBrightness == Brightness.light ? SailThemeValues.light : SailThemeValues.dark; } @@ -173,9 +217,9 @@ class SailAppState extends State with WidgetsBindingObserver { if (inInitialSetup) { return MaterialApp( home: Material( - color: _sidechain.chain.color, + color: _sidechain.rpc.chain.color, child: SailTheme( - data: SailThemeData.lightTheme(_sidechain.chain.color), + data: SailThemeData.lightTheme(_sidechain.rpc.chain.color), child: SailScaffold( body: Center( // TODO: better error message with troubleshooting tips here diff --git a/lib/config/dependencies.dart b/lib/config/dependencies.dart index ed876551..dac72aba 100644 --- a/lib/config/dependencies.dart +++ b/lib/config/dependencies.dart @@ -1,5 +1,6 @@ import 'package:get_it/get_it.dart'; import 'package:sidesail/config/sidechains.dart'; +import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/providers/balance_provider.dart'; import 'package:sidesail/providers/proc_provider.dart'; import 'package:sidesail/providers/transactions_provider.dart'; @@ -11,15 +12,19 @@ import 'package:sidesail/rpc/rpc_testchain.dart'; import 'package:sidesail/storage/client_settings.dart'; import 'package:sidesail/storage/secure_store.dart'; +// This gets overwritten at a later point, just here to make the +// type system happy. +final _emptyNodeConf = SingleNodeConnectionSettings('', '', 0, '', ''); + // register all global dependencies, for use in views, or in view models // each dependency can only be registered once -Future initGetitDependencies(Sidechain initialChain) async { - final mainFuture = MainchainRPCLive.create(); - await _initSidechainRPC(initialChain); - final mainRPC = await mainFuture; +Future initDependencies(Sidechain chain) async { + GetIt.I.allowReassignment = true; + + await _initSidechainRPC(chain); GetIt.I.registerLazySingleton( - () => mainRPC, + () => MainchainRPCLive(conf: _emptyNodeConf), ); GetIt.I.registerLazySingleton( @@ -47,31 +52,34 @@ Future initGetitDependencies(Sidechain initialChain) async { // rpcs in parallell, so they're ready instantly when swapping // we can also query the balance Future _initSidechainRPC(Sidechain chain) async { - final ethFuture = EthereumRPCLive.create(); - final testFuture = TestchainRPCLive.create(); - - final ethRPC = await ethFuture; - final testRPC = await testFuture; - - GetIt.I.registerLazySingleton( - () => testRPC, - ); - GetIt.I.registerLazySingleton( - () => ethRPC, - ); - - SidechainSubRPC sidechainSubRPC; + SidechainRPC Function() getSidechain; switch (chain.type) { case SidechainType.testChain: - sidechainSubRPC = testRPC; - break; + getSidechain = () => GetIt.I.get(); case SidechainType.ethereum: - sidechainSubRPC = ethRPC; - break; + getSidechain = () => GetIt.I.get(); } + GetIt.I.registerLazySingleton( + () => TestchainRPCLive(conf: _emptyNodeConf), + ); + GetIt.I.registerLazySingleton( + () { + final sc = EthereumSidechain(); + // TODO: make this properly configurable + return EthereumRPCLive( + conf: SingleNodeConnectionSettings( + 'todo.conf', + 'localhost', + sc.rpcPort, + '', + '', + ), + ); + }, + ); - GetIt.I.registerLazySingleton( - () => SidechainRPC(subRPC: sidechainSubRPC), + GetIt.I.registerLazySingleton( + () => SidechainContainer(getSidechain()), ); } diff --git a/lib/config/sidechains.dart b/lib/config/sidechains.dart index fb9bdb13..abd56f34 100644 --- a/lib/config/sidechains.dart +++ b/lib/config/sidechains.dart @@ -1,24 +1,23 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:sail_ui/sail_ui.dart'; abstract class Sidechain { - String name = ''; - int slot = 0; - Color color = Colors.transparent; + String get name; + int get slot; + Color get color; SidechainType get type; - String get ticker { - return 'SC$slot'; - } -} -abstract class SideWithTicker implements Sidechain { - @override + // TODO: turn this into a function that takes a regtest/signet/whatever param + int get rpcPort; + String get ticker { return 'SC$slot'; } } -class TestSidechain extends SideWithTicker { +class TestSidechain extends Sidechain { @override String name = 'Testchain'; @@ -30,9 +29,12 @@ class TestSidechain extends SideWithTicker { @override SidechainType get type => SidechainType.testChain; + + @override + int get rpcPort => 18743; } -class EthereumSidechain extends SideWithTicker { +class EthereumSidechain extends Sidechain { @override String name = 'Ethereum'; @@ -44,6 +46,68 @@ class EthereumSidechain extends SideWithTicker { @override SidechainType get type => SidechainType.ethereum; + + @override + int get rpcPort => 8545; } enum SidechainType { testChain, ethereum } + +extension SidechainPaths on SidechainType { + String confFile() { + switch (this) { + case SidechainType.testChain: + return 'testchain.conf'; + case SidechainType.ethereum: + return '???'; + } + } + + String datadir() { + final home = Platform.environment['HOME'] ?? Platform.environment['USERPROFILE']; // windows! + if (home == null) { + throw 'unable to determine HOME location'; + } + + if (Platform.isLinux) { + return _filePath([ + home, + _linuxDirname(), + ]); + } else if (Platform.isMacOS) { + return _filePath([ + home, + 'Library', + 'Application Support', + _macosDirname(), + ]); + } else if (Platform.isWindows) { + throw 'TODO: windows'; + } else { + throw 'unsupported operating system: ${Platform.operatingSystem}'; + } + } + + String _linuxDirname() { + switch (this) { + case SidechainType.testChain: + return '.testchain'; + case SidechainType.ethereum: + // TODO: correct? + return '.ethereum'; + } + } + + String _macosDirname() { + switch (this) { + case SidechainType.testChain: + return 'Testchain'; + case SidechainType.ethereum: + return 'Ethereum'; + } + } +} + +String _filePath(List segments) { + return segments.where((element) => element.isNotEmpty).join(Platform.pathSeparator); +} diff --git a/lib/main.dart b/lib/main.dart index 81508473..e45cb5b5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,15 +10,31 @@ const appName = 'SideSail'; Future start() async { WidgetsFlutterBinding.ensureInitialized(); + Sidechain chain; - if (RuntimeArgs.chain == 'ethereum') { - chain = EthereumSidechain(); - } else { - chain = TestSidechain(); - } + // Sanity check we're getting a supported chain. + switch (RuntimeArgs.chain) { + case '': // default to testchain + case 'testchain': + chain = TestSidechain(); + + case 'ethereum': + chain = EthereumSidechain(); - await initGetitDependencies(chain); + default: + return runApp( + SailApp( + builder: (context, router) => const Center( + child: Text( + 'Unsupported CHAIN parameter: ${RuntimeArgs.chain}', + style: TextStyle(fontSize: 40), + ), + ), + ), + ); + } + await initDependencies(chain); runApp( SailApp( // the initial route is defined in routing/router.dart diff --git a/lib/pages/tabs/dashboard_tab_page.dart b/lib/pages/tabs/dashboard_tab_page.dart index aa81bc37..1435ef95 100644 --- a/lib/pages/tabs/dashboard_tab_page.dart +++ b/lib/pages/tabs/dashboard_tab_page.dart @@ -188,11 +188,11 @@ class ExpandedTXView extends StatelessWidget { class DashboardTabViewModel extends BaseViewModel { final log = Logger(level: Level.debug); TransactionsProvider get _transactionsProvider => GetIt.I.get(); - SidechainRPC get _sideRPC => GetIt.I.get(); + SidechainContainer get _sideRPC => GetIt.I.get(); List get transactions => _transactionsProvider.transactions; - Sidechain get chain => _sideRPC.chain; + Sidechain get chain => _sideRPC.rpc.chain; DashboardTabViewModel() { _transactionsProvider.addListener(notifyListeners); diff --git a/lib/pages/tabs/home_page.dart b/lib/pages/tabs/home_page.dart index 67afbaa4..f26d5d04 100644 --- a/lib/pages/tabs/home_page.dart +++ b/lib/pages/tabs/home_page.dart @@ -70,7 +70,7 @@ class SideNav extends StatefulWidget { } class _SideNavState extends State { - SidechainRPC get _sidechain => GetIt.I.get(); + SidechainContainer get _sidechain => GetIt.I.get(); @override Widget build(BuildContext context) { @@ -80,7 +80,7 @@ class _SideNavState extends State { return ViewModelBuilder.reactive( viewModelBuilder: () => HomePageViewModel(), builder: ((context, viewModel, child) { - final navWidgets = navForChain(_sidechain.chain, viewModel, tabsRouter); + final navWidgets = navForChain(_sidechain.rpc.chain, viewModel, tabsRouter); return Row( children: [ @@ -213,16 +213,16 @@ class _SideNavState extends State { class HomePageViewModel extends BaseViewModel { final log = Logger(level: Level.debug); BalanceProvider get _balanceProvider => GetIt.I.get(); - SidechainRPC get _sideRPC => GetIt.I.get(); + SidechainContainer get _sideRPC => GetIt.I.get(); MainchainRPC get _mainRPC => GetIt.I.get(); - bool get sidechainConnected => _sideRPC.connected; + bool get sidechainConnected => _sideRPC.rpc.connected; bool get mainchainConnected => _mainRPC.connected; double get balance => _balanceProvider.balance; double get pendingBalance => _balanceProvider.pendingBalance; - Sidechain get chain => _sideRPC.chain; + Sidechain get chain => _sideRPC.rpc.chain; HomePageViewModel() { _sideRPC.addListener(notifyListeners); diff --git a/lib/pages/tabs/settings/node_settings_tab.dart b/lib/pages/tabs/settings/node_settings_tab.dart index 85a95cd7..e64f6bf2 100644 --- a/lib/pages/tabs/settings/node_settings_tab.dart +++ b/lib/pages/tabs/settings/node_settings_tab.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:io'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; @@ -6,6 +7,7 @@ import 'package:get_it/get_it.dart'; import 'package:sail_ui/sail_ui.dart'; import 'package:sail_ui/theme/theme.dart'; import 'package:sail_ui/widgets/core/sail_text.dart'; +import 'package:sidesail/config/sidechains.dart'; import 'package:sidesail/rpc/rpc_config.dart'; import 'package:sidesail/rpc/rpc_mainchain.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; @@ -29,21 +31,22 @@ class NodeSettingsTabPage extends StatelessWidget { children: [ NodeConnectionSettings( name: 'Sidechain', - connected: viewModel.sidechainConnected, - settings: viewModel.sidechainSettings, + sidechain: viewModel.sidechain.rpc.chain, + connected: viewModel.sidechain.rpc.connected, + settings: viewModel.sidechain.rpc.conf, testConnectionValues: viewModel.reconnectSidechain, - connectionError: viewModel.sidechainConnectionError, - readError: viewModel.sidechainFileError, - loading: viewModel.sidechainBusy, + connectionError: viewModel.sidechain.rpc.connectionError, + readError: viewModel.sidechain.rpc.conf.readError, + loading: viewModel._sidechainBusy, ), NodeConnectionSettings( name: 'Mainchain', - connected: viewModel.mainchainConnected, - settings: viewModel.mainchainSettings, + connected: viewModel.mainRPC.connected, + settings: viewModel.mainRPC.conf, testConnectionValues: viewModel.reconnectMainchain, - connectionError: viewModel.mainchainConnectionError, - readError: viewModel.mainchainFileError, - loading: viewModel.mainchainBusy, + connectionError: viewModel.mainRPC.connectionError, + readError: viewModel.mainRPC.conf.readError, + loading: viewModel._mainchainBusy, ), ], ); @@ -54,6 +57,7 @@ class NodeSettingsTabPage extends StatelessWidget { } class NodeConnectionSettings extends ViewModelWidget { + final Sidechain? sidechain; final String name; final bool connected; final SingleNodeConnectionSettings settings; @@ -71,6 +75,7 @@ class NodeConnectionSettings extends ViewModelWidget { required this.connectionError, required this.readError, required this.loading, + this.sidechain, }); @override @@ -108,7 +113,7 @@ class NodeConnectionSettings extends ViewModelWidget { hintText: '/the/path/to/your/somethingchain.conf', suffixWidget: SailTextButton( label: 'Read file', - onPressed: settings.readAndSetValuesFromFile, + onPressed: () => settings.readAndSetValuesFromFile(sidechain), ), ), SailTextField( @@ -161,36 +166,18 @@ class NodeConnectionSettings extends ViewModelWidget { enum ConnectionStatus { connected, unconnected } class NodeConnectionViewModel extends BaseViewModel { - SidechainRPC get sideRPC => GetIt.I.get(); + SidechainContainer get sidechain => GetIt.I.get(); MainchainRPC get mainRPC => GetIt.I.get(); - SingleNodeConnectionSettings get sidechainSettings => sideRPC.connectionSettings; - SingleNodeConnectionSettings get mainchainSettings => mainRPC.connectionSettings; - - bool get sidechainConnected => sideRPC.connected; - bool get mainchainConnected => mainRPC.connected; - - String? get sidechainConnectionError => sideRPC.connectionError; - String? get mainchainConnectionError => mainRPC.connectionError; - - String? get sidechainFileError => sideRPC.connectionSettings.readError; - String? get mainchainFileError => mainRPC.connectionSettings.readError; - - bool get sidechainBusy => _sidechainBusy; - bool get mainchainBusy => _mainchainBusy; - bool _sidechainBusy = false; bool _mainchainBusy = false; - bool get sidechainSettingsDifferent => sideRPC.connectionSettings.inputDifferentThanFile; - bool get mainchainSettingsDifferent => mainRPC.connectionSettings.inputDifferentThanFile; - NodeConnectionViewModel() { mainRPC.addListener(notifyListeners); - mainRPC.connectionSettings.addListener(notifyListeners); + mainRPC.conf.addListener(notifyListeners); - sideRPC.addListener(notifyListeners); - sideRPC.connectionSettings.addListener(notifyListeners); + sidechain.addListener(notifyListeners); + sidechain.rpc.conf.addListener(notifyListeners); } Timer? _connectionTimer; @@ -199,10 +186,9 @@ class NodeConnectionViewModel extends BaseViewModel { _sidechainBusy = true; notifyListeners(); - await sideRPC.createClient(); // calling this will propagate the results to the local - // sidechainConnetced bool - await sideRPC.testConnection(); + // sidechainConnected bool + await sidechain.rpc.testConnection(); _sidechainBusy = false; notifyListeners(); @@ -212,9 +198,8 @@ class NodeConnectionViewModel extends BaseViewModel { _mainchainBusy = true; notifyListeners(); - await mainRPC.createClient(); // calling this will propagate the results to the local - // sidechainConnetced bool + // mainchainConnected bool await mainRPC.testConnection(); _mainchainBusy = false; @@ -224,10 +209,12 @@ class NodeConnectionViewModel extends BaseViewModel { @override void dispose() { _connectionTimer?.cancel(); - sideRPC.removeListener(notifyListeners); - sideRPC.connectionSettings.removeListener(notifyListeners); + sidechain.removeListener(notifyListeners); + sidechain.rpc.conf.removeListener(notifyListeners); + mainRPC.removeListener(notifyListeners); - mainRPC.connectionSettings.removeListener(notifyListeners); + mainRPC.conf.removeListener(notifyListeners); + super.dispose(); } } @@ -299,21 +286,27 @@ class SingleNodeConnectionSettings extends ChangeNotifier { notifyListeners(); } - void readAndSetValuesFromFile() async { + void readAndSetValuesFromFile(Sidechain? sidechain) async { try { var parts = splitPath(configPathController.text); String dataDir = parts.$1; String confFile = parts.$2; readError = null; - final config = await readRpcConfig(dataDir, confFile); - configPathController.text = config.path; + final config = await readRpcConfig(dataDir, confFile, sidechain); + configPathController.text = config.fileConfigPath; hostController.text = config.host; portController.text = config.port.toString(); usernameController.text = config.username; passwordController.text = config.password; - _setFileValues(config.path, config.host, config.port, config.username, config.password); + _setFileValues( + config.fileConfigPath, + config.host, + config.port, + config.username, + config.password, + ); } catch (error) { readError = error.toString(); } @@ -321,12 +314,14 @@ class SingleNodeConnectionSettings extends ChangeNotifier { notifyListeners(); } + // TODO: might need tweaking on Windows (String, String) splitPath(String path) { - if (!path.contains('/')) { + final sep = Platform.pathSeparator; + if (!path.contains(sep)) { return ('', ''); } - String directory = path.substring(0, path.lastIndexOf('/')); - String fileName = path.split('/').last; + String directory = path.substring(0, path.lastIndexOf(sep)); + String fileName = path.split(sep).last; return (directory, fileName); } diff --git a/lib/pages/tabs/sidechain_explorer_tab_page.dart b/lib/pages/tabs/sidechain_explorer_tab_page.dart index 7b4994c2..808ab0fd 100644 --- a/lib/pages/tabs/sidechain_explorer_tab_page.dart +++ b/lib/pages/tabs/sidechain_explorer_tab_page.dart @@ -4,6 +4,7 @@ import 'package:get_it/get_it.dart'; import 'package:sail_ui/sail_ui.dart'; import 'package:sidesail/app.dart'; import 'package:sidesail/config/sidechains.dart'; +import 'package:sidesail/logger.dart'; import 'package:sidesail/providers/balance_provider.dart'; import 'package:sidesail/rpc/rpc_ethereum.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; @@ -46,7 +47,7 @@ class SidechainExplorerTabPage extends StatelessWidget { unconfirmedBalance: viewModel.pendingBalance, highlighted: false, currentChain: viewModel.chain.type == SidechainType.testChain, - onPressed: () => viewModel.setSidechainRPC(test, app), + onPressed: () => viewModel.setSidechain(test, app), ), ChainOverviewCard( chain: EthereumSidechain(), @@ -54,7 +55,7 @@ class SidechainExplorerTabPage extends StatelessWidget { unconfirmedBalance: viewModel.pendingBalance, highlighted: false, currentChain: viewModel.chain.type == SidechainType.ethereum, - onPressed: () => viewModel.setSidechainRPC(eth, app), + onPressed: () => viewModel.setSidechain(eth, app), ), ], ), @@ -71,22 +72,18 @@ class SidechainExplorerTabPage extends StatelessWidget { class SidechainExplorerTabViewModel extends BaseViewModel { BalanceProvider get _balanceProvider => GetIt.I.get(); - SidechainRPC get _sideRPC => GetIt.I.get(); + SidechainContainer get sidechain => GetIt.I.get(); ClientSettings get _clientSettings => GetIt.I.get(); SailThemeValues theme = SailThemeValues.light; double get balance => _balanceProvider.balance; double get pendingBalance => _balanceProvider.pendingBalance; - Sidechain get chain => _sideRPC.chain; + Sidechain get chain => sidechain.rpc.chain; SidechainExplorerTabViewModel() { - // by adding a listener, we subscribe to changes to the balance - // provider. We don't use the updates for anything other than - // showing the new value though, so we keep it simple, and just - // pass notifyListeners of this view model directly _balanceProvider.addListener(notifyListeners); - _sideRPC.addListener(notifyListeners); + sidechain.addListener(notifyListeners); _init(); } @@ -94,8 +91,10 @@ class SidechainExplorerTabViewModel extends BaseViewModel { theme = (await _clientSettings.getValue(ThemeSetting())).value; } - void setSidechainRPC(SidechainSubRPC sideSubRPC, SailAppState sailApp) { - _sideRPC.setSubRPC(sideSubRPC); + void setSidechain(SidechainRPC rpc, SailAppState sailApp) { + log.d('setting sidechain RPC to "${rpc.chain.name}"'); + sidechain.rpc = rpc; + notifyListeners(); sailApp.loadTheme(theme); } @@ -104,6 +103,6 @@ class SidechainExplorerTabViewModel extends BaseViewModel { void dispose() { super.dispose(); _balanceProvider.removeListener(notifyListeners); - _sideRPC.removeListener(notifyListeners); + sidechain.removeListener(notifyListeners); } } diff --git a/lib/providers/balance_provider.dart b/lib/providers/balance_provider.dart index 47d2d5fe..a8fbe5fe 100644 --- a/lib/providers/balance_provider.dart +++ b/lib/providers/balance_provider.dart @@ -5,7 +5,7 @@ import 'package:get_it/get_it.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; class BalanceProvider extends ChangeNotifier { - SidechainRPC get _rpc => GetIt.I.get(); + SidechainContainer get sidechain => GetIt.I.get(); // because the class extends ChangeNotifier, any subscribers // to this class will be notified of changes to these @@ -20,12 +20,12 @@ class BalanceProvider extends ChangeNotifier { BalanceProvider() { fetch(); _startPolling(); - _rpc.addListener(fetch); + sidechain.addListener(fetch); } // call this function from anywhere to refresh the balance Future fetch() async { - final (bal, pendingBal) = await _rpc.getBalance(); + final (bal, pendingBal) = await sidechain.rpc.getBalance(); // TODO: Handle error? balance = bal; pendingBalance = pendingBal; @@ -46,6 +46,6 @@ class BalanceProvider extends ChangeNotifier { super.dispose(); // Cancel timer when provider is disposed (never?) _timer.cancel(); - _rpc.removeListener(notifyListeners); + sidechain.removeListener(notifyListeners); } } diff --git a/lib/providers/transactions_provider.dart b/lib/providers/transactions_provider.dart index 810fd010..5d508d1b 100644 --- a/lib/providers/transactions_provider.dart +++ b/lib/providers/transactions_provider.dart @@ -8,7 +8,7 @@ import 'package:sidesail/rpc/rpc_sidechain.dart'; class TransactionsProvider extends ChangeNotifier { MainchainRPC get _mainchainRPC => GetIt.I.get(); - SidechainRPC get _rpc => GetIt.I.get(); + SidechainContainer get sidechain => GetIt.I.get(); // because the class extends ChangeNotifier, any subscribers // to this class will be notified of changes to these @@ -27,7 +27,7 @@ class TransactionsProvider extends ChangeNotifier { // call this function from anywhere to refetch transaction list Future fetch() async { - transactions = await _rpc.listTransactions(); + transactions = await sidechain.rpc.listTransactions(); transactions = transactions.reversed.toList(); mainchainTransactions = await _mainchainRPC.listTransactions(); diff --git a/lib/rpc/rpc.dart b/lib/rpc/rpc.dart index 6ab504b6..f62091c2 100644 --- a/lib/rpc/rpc.dart +++ b/lib/rpc/rpc.dart @@ -11,11 +11,9 @@ import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; abstract class RPCConnection extends ChangeNotifier { final _log = Logger(level: Level.debug); - RPCConnection() - : connectionError = '', - connected = false; - - Future createClient(); + RPCConnection({ + required this.conf, + }); // ping method that tests whether the connection is successful // should throw if call is not successful @@ -43,7 +41,7 @@ abstract class RPCConnection extends ChangeNotifier { } // values for tracking connection state, and error (if any) - late SingleNodeConnectionSettings connectionSettings; + SingleNodeConnectionSettings conf; String? connectionError; - bool connected; + bool connected = false; } diff --git a/lib/rpc/rpc_config.dart b/lib/rpc/rpc_config.dart index 78e03954..3b8ef1dd 100644 --- a/lib/rpc/rpc_config.dart +++ b/lib/rpc/rpc_config.dart @@ -1,7 +1,9 @@ import 'dart:io'; import 'package:collection/collection.dart'; +import 'package:sidesail/config/sidechains.dart'; import 'package:sidesail/logger.dart'; +import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; class Config { final String path; @@ -28,7 +30,7 @@ const network = 'regtest'; // 2. Inspect cookie // 3. Defaults // -Future readRpcConfig(String datadir, String confFile) async { +Future readRpcConfig(String datadir, String confFile, Sidechain? sidechain) async { final networkDir = _filePath([datadir, network]); final conf = File(_filePath([datadir, confFile])); @@ -75,16 +77,16 @@ Future readRpcConfig(String datadir, String confFile) async { } host ??= 'localhost'; - port ??= confFile.startsWith('testchain') ? _defaultSidechainPorts[network]! : _defaultMainchainPorts[network]!; + port ??= sidechain == null ? _defaultMainchainPorts[network]! : sidechain.rpcPort; // Make sure to not include password here log.i('resolved conf: $username@$host:$port'); - return Config( - path: conf.path, - host: host, - port: port, - username: username, - password: password, + return SingleNodeConnectionSettings( + conf.path, + host, + port, + username, + password, ); } @@ -119,43 +121,10 @@ String mainchainDatadir() { } } -// TODO: make this configurable when adding support for more sidechains -// TODO: this might need permissions configuration for Windows and Linux? -String testchainDatadir() { - final home = Platform.environment['HOME'] ?? Platform.environment['USERPROFILE']; // windows! - if (home == null) { - throw 'unable to determine HOME location'; - } - - if (Platform.isLinux) { - return _filePath([ - home, - '.testchain', - ]); - } else if (Platform.isMacOS) { - return _filePath([ - home, - 'Library', - 'Application Support', - 'Testchain', - ]); - } else if (Platform.isWindows) { - throw 'TODO: windows'; - } else { - throw 'unsupported operating system: ${Platform.operatingSystem}'; - } -} - String _filePath(List segments) { return segments.where((element) => element.isNotEmpty).join(Platform.pathSeparator); } -// TODO: this would need to take chain into account -// TODO: add more nets -Map _defaultSidechainPorts = { - 'regtest': 18743, -}; - // TODO: add more nets Map _defaultMainchainPorts = { 'regtest': 18443, diff --git a/lib/rpc/rpc_ethereum.dart b/lib/rpc/rpc_ethereum.dart index 891ef1a0..fd80061c 100644 --- a/lib/rpc/rpc_ethereum.dart +++ b/lib/rpc/rpc_ethereum.dart @@ -1,12 +1,16 @@ import 'package:http/http.dart'; import 'package:sidesail/config/sidechains.dart'; -import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/rpc/models/core_transaction.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; import 'package:web3dart/json_rpc.dart' as jsonrpc; import 'package:web3dart/web3dart.dart'; -abstract class EthereumRPC extends SidechainSubRPC { +abstract class EthereumRPC extends SidechainRPC { + // TODO: implement authed RPCs + EthereumRPC({ + required super.conf, + }) : super(chain: EthereumSidechain()); + EthereumAddress? account; Future newAccount(); } @@ -14,7 +18,12 @@ abstract class EthereumRPC extends SidechainSubRPC { class EthereumRPCLive extends EthereumRPC { final sgweiPerSat = 1000000000; - late Web3Client _client; + EthereumRPCLive({required super.conf}); + + Web3Client get _client => Web3Client( + 'http://${conf.host}:${conf.port}', + Client(), + ); @override Future callRAW(String method, [params]) async { @@ -30,37 +39,6 @@ class EthereumRPCLive extends EthereumRPC { } } - // Apparently Ethereum doesn't have a conf file? - @override - Future createClient() async { - final url = 'http://${connectionSettings.host}:${connectionSettings.port}'; - _client = Web3Client(url, Client()); - } - - EthereumRPCLive._create() { - chain = EthereumSidechain(); - try { - _setAndGetAccount(); - } catch (error) { - // - } - } - - static Future create() async { - final rpc = EthereumRPCLive._create(); - await rpc._init(); - return rpc; - } - - Future _init() async { - // TODO: implement authed RPCs - // TODO: make this configurable - connectionSettings = SingleNodeConnectionSettings('', 'localhost', 8545, '', ''); - - await createClient(); - await testConnection(); - } - @override Future ping() async { await _client.getChainId(); diff --git a/lib/rpc/rpc_mainchain.dart b/lib/rpc/rpc_mainchain.dart index bb4e1821..b41bf602 100644 --- a/lib/rpc/rpc_mainchain.dart +++ b/lib/rpc/rpc_mainchain.dart @@ -2,13 +2,13 @@ import 'dart:async'; import 'package:dart_coin_rpc/dart_coin_rpc.dart'; import 'package:dio/dio.dart'; -import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/rpc/models/core_transaction.dart'; import 'package:sidesail/rpc/rpc.dart'; -import 'package:sidesail/rpc/rpc_config.dart'; /// RPC connection to the mainchain node. abstract class MainchainRPC extends RPCConnection { + MainchainRPC({required super.conf}); + Future estimateFee(); Future getWithdrawalBundleWorkScore(int sidechain, String hash); Future> listTransactions(); @@ -18,57 +18,36 @@ abstract class MainchainRPC extends RPCConnection { } class MainchainRPCLive extends MainchainRPC { - RPCClient? _client; + RPCClient _client() { + final client = RPCClient( + host: conf.host, + port: conf.port, + username: conf.username, + password: conf.password, + useSSL: false, + ); + + // Completely empty client, with no retry logic. + client.dioClient = Dio(); + return client; + } // responsible for pinging the node every x seconds, // so we can update the UI immediately when the values change Timer? _connectionTimer; - // hacky way to create an async class - // https://stackoverflow.com/a/59304510 - MainchainRPCLive._create(); - - static Future create() async { - final rpc = MainchainRPCLive._create(); - await rpc._init(); - return rpc; - } - - Future _init() async { - final config = await readRpcConfig(mainchainDatadir(), 'drivechain.conf'); - connectionSettings = SingleNodeConnectionSettings( - config.path, - config.host, - config.port, - config.username, - config.password, - ); - await createClient(); - await testConnection(); - _connectionTimer = Timer.periodic(const Duration(seconds: 10), (timer) async { - await testConnection(); + MainchainRPCLive({required super.conf}) { + // Wait for the initial setup to be done, then start a timer + initDone.then((value) { + _connectionTimer = Timer.periodic(const Duration(seconds: 10), (timer) async { + await testConnection(); + }); }); - - // could connect, aaand we start polling! - } - - @override - Future createClient() async { - _client = RPCClient( - host: connectionSettings.host, - port: connectionSettings.port, - username: connectionSettings.username, - password: connectionSettings.password, - useSSL: connectionSettings.ssl, - ); - - // Completely empty client, with no retry logic. - _client!.dioClient = Dio(); } @override Future estimateFee() async { - final estimate = await _client?.call('estimatesmartfee', [6]) as Map; + final estimate = await _client().call('estimatesmartfee', [6]) as Map; if (estimate.containsKey('errors')) { // 10 sats/byte return 0.001; @@ -84,7 +63,7 @@ class MainchainRPCLive extends MainchainRPC { @override Future> listTransactions() async { // first list - final transactionsJSON = await _client?.call('listtransactions', [ + final transactionsJSON = await _client().call('listtransactions', [ '', 100, // how many txs to list. We have not implemented pagination, so we list all ]) as List; @@ -97,7 +76,7 @@ class MainchainRPCLive extends MainchainRPC { @override Future getWithdrawalBundleWorkScore(int sidechain, String hash) async { try { - final workscore = await _client?.call('getworkscore', [sidechain, hash]); + final workscore = await _client().call('getworkscore', [sidechain, hash]); return workscore; } on RPCException { // This exception can be thrown if the bundle hasn't been added to the @@ -108,25 +87,25 @@ class MainchainRPCLive extends MainchainRPC { @override Future> listSpentWithdrawals() async { - final withdrawals = await _client?.call('listspentwithdrawals') as List; + final withdrawals = await _client().call('listspentwithdrawals') as List; return withdrawals.map((w) => MainchainWithdrawal.fromJson(w)).toList(); } @override Future> listFailedWithdrawals() async { - final withdrawals = await _client?.call('listfailedwithdrawals') as List; + final withdrawals = await _client().call('listfailedwithdrawals') as List; return withdrawals.map((w) => MainchainWithdrawal.fromJson(w)).toList(); } @override Future> listWithdrawalStatus(int slot) async { - final statuses = await _client?.call('listwithdrawalstatus', [slot]) as List; + final statuses = await _client().call('listwithdrawalstatus', [slot]) as List; return statuses.map((e) => MainchainWithdrawalStatus.fromJson(e)).toList(); } @override Future ping() async { - await _client?.call('ping') as Map?; + await _client().call('ping') as Map?; } @override diff --git a/lib/rpc/rpc_sidechain.dart b/lib/rpc/rpc_sidechain.dart index bbb3fa09..e6deec96 100644 --- a/lib/rpc/rpc_sidechain.dart +++ b/lib/rpc/rpc_sidechain.dart @@ -1,67 +1,66 @@ import 'dart:async'; +import 'package:flutter/material.dart'; import 'package:sidesail/config/sidechains.dart'; -import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/rpc/models/core_transaction.dart'; import 'package:sidesail/rpc/rpc.dart'; /// RPC connection for all sidechain nodes -abstract class SidechainSubRPC extends RPCConnection { +abstract class SidechainRPC extends RPCConnection { + SidechainRPC({required super.conf, required this.chain}); + Future callRAW(String method, [List? params]); Future<(double, double)> getBalance(); Future> listTransactions(); - late Sidechain chain; + Sidechain chain; } -/// RPC connection for all sidechain nodes -class SidechainRPC extends SidechainSubRPC { - SidechainSubRPC subRPC; - - SidechainRPC({ - required this.subRPC, - }) { - chain = subRPC.chain; +// Wraps a sidechain, with logic for notifying listeners when the underlying +// RPC connection changes. +class SidechainContainer extends ChangeNotifier { + SidechainContainer(SidechainRPC rpc) : _rpc = rpc { + rpc.addListener(notifyListeners); + rpc.initDone.then( + (_) => _startConnectionTimer(), + ); } - // values for tracking connection state, and error (if any) - @override - SingleNodeConnectionSettings get connectionSettings => subRPC.connectionSettings; - @override - bool get connected => subRPC.connected; - @override - String? get connectionError => subRPC.connectionError; - - void setSubRPC(SidechainSubRPC newSubRPC) { - subRPC = newSubRPC; - chain = subRPC.chain; - notifyListeners(); + // responsible for pinging the node every x seconds, + // so we can update the UI immediately when the values change + Timer? _connectionTimer; + void _startConnectionTimer() { + _connectionTimer = Timer.periodic(const Duration(seconds: 10), (timer) async { + await _rpc.testConnection(); + }); } @override - Future callRAW(String method, [List? params]) async { - return await subRPC.callRAW(method, params); + void dispose() { + _connectionTimer?.cancel(); + _rpc.removeListener(notifyListeners); + super.dispose(); } - @override - Future<(double, double)> getBalance() async { - return subRPC.getBalance(); - } + SidechainRPC _rpc; + SidechainRPC get rpc => _rpc; + set rpc(SidechainRPC r) { + // remove the old listener + _rpc.removeListener(notifyListeners); - @override - Future> listTransactions() { - return subRPC.listTransactions(); - } + // assign the new var + _rpc = r; - @override - Future createClient() async { - return subRPC.createClient(); - } + // add the new listener + _rpc.addListener(notifyListeners); - @override - Future ping() async { - return subRPC.ping(); + _connectionTimer?.cancel(); + _startConnectionTimer(); + + unawaited(r.testConnection()); + + notifyListeners(); } } diff --git a/lib/rpc/rpc_testchain.dart b/lib/rpc/rpc_testchain.dart index de84aeae..09537b98 100644 --- a/lib/rpc/rpc_testchain.dart +++ b/lib/rpc/rpc_testchain.dart @@ -5,17 +5,19 @@ import 'package:dio/dio.dart'; import 'package:sidesail/bitcoin.dart'; import 'package:sidesail/config/sidechains.dart'; import 'package:sidesail/logger.dart'; -import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/rpc/models/bmm_result.dart'; import 'package:sidesail/rpc/models/bundle_info.dart'; import 'package:sidesail/rpc/models/core_transaction.dart'; import 'package:sidesail/rpc/models/raw_transaction.dart'; -import 'package:sidesail/rpc/rpc_config.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; import 'package:sidesail/rpc/rpc_withdrawal_bundle.dart'; /// RPC connection the sidechain node. -abstract class TestchainRPC extends SidechainSubRPC { +abstract class TestchainRPC extends SidechainRPC { + TestchainRPC({ + required super.conf, + }) : super(chain: TestSidechain()); + Future mainSend( String address, double amount, @@ -51,67 +53,37 @@ abstract class TestchainRPC extends SidechainSubRPC { } class TestchainRPCLive extends TestchainRPC { - RPCClient? _client; + RPCClient _client() { + final client = RPCClient( + host: conf.host, + port: conf.port, + username: conf.username, + password: conf.password, + useSSL: false, + ); + + // no retry logic! + client.dioClient = Dio(); + return client; + } // responsible for pinging the node every x seconds, // so we can update the UI immediately when the values change Timer? _connectionTimer; - // hacky way to create an async class - // https://stackoverflow.com/a/59304510 - TestchainRPCLive._create() { - chain = TestSidechain(); - } - - static Future create() async { - final rpc = TestchainRPCLive._create(); - await rpc._init(); - return rpc; - } - - Future _init() async { - final config = await readRpcConfig(testchainDatadir(), 'testchain.conf'); - connectionSettings = SingleNodeConnectionSettings( - config.path, - config.host, - config.port, - config.username, - config.password, - ); - await createClient(); - await testConnection(); - _connectionTimer = Timer.periodic(const Duration(seconds: 10), (timer) async { - await testConnection(); - }); - } - - @override - Future createClient() async { - _client = RPCClient( - host: connectionSettings.host, - port: connectionSettings.port, - username: connectionSettings.username, - password: connectionSettings.password, - useSSL: connectionSettings.ssl, - ); - - // Completely empty client, with no retry logic. - _client!.dioClient = Dio(); - - log.i('created client'); - } + TestchainRPCLive({required super.conf}); @override Future<(double, double)> getBalance() async { - final confirmed = await _client?.call('getbalance') as double; - final unconfirmed = await _client?.call('getunconfirmedbalance') as double; + final confirmed = await _client().call('getbalance') as double; + final unconfirmed = await _client().call('getunconfirmedbalance') as double; return (confirmed, unconfirmed); } @override Future refreshBMM(int bidSatoshis) async { - final res = await _client?.call('refreshbmm', [satoshiToBTC(bidSatoshis)]) as Map; + final res = await _client().call('refreshbmm', [satoshiToBTC(bidSatoshis)]) as Map; return BmmResult.fromJson(res); } @@ -127,7 +99,7 @@ class TestchainRPCLive extends TestchainRPC { final refund = await _getRefundAddress(); log.d('got refund address: $refund'); - final withdrawalTxid = await _client?.call('createwithdrawal', [ + final withdrawalTxid = await _client().call('createwithdrawal', [ address, refund, amount, @@ -142,30 +114,30 @@ class TestchainRPCLive extends TestchainRPC { @override Future mainGenerateAddress() async { - var address = await _client?.call('getnewaddress', ['Sidechain Peg In', 'legacy']); + var address = await _client().call('getnewaddress', ['Sidechain Peg In', 'legacy']); // This is actually just rather simple stuff. Should be able to // do this client side! Just needs the sidechain number, and we're // off to the races. - var formatted = await _client?.call('formatdepositaddress', [address as String]); + var formatted = await _client().call('formatdepositaddress', [address as String]); return formatted as String; } @override Future sideGenerateAddress() async { - var address = await _client?.call('getnewaddress', ['Sidechain Deposit']); + var address = await _client().call('getnewaddress', ['Sidechain Deposit']); return address as String; } Future _getRefundAddress() async { - var address = await _client?.call('getnewaddress', ['Sidechain Deposit', 'legacy']) as String; + var address = await _client().call('getnewaddress', ['Sidechain Deposit', 'legacy']) as String; return address; } @override Future sideEstimateFee() async { - final estimate = await _client?.call('estimatesmartfee', [6]) as Map; + final estimate = await _client().call('estimatesmartfee', [6]) as Map; if (estimate.containsKey('errors')) { // 10 sats/byte return 0.001; @@ -180,7 +152,7 @@ class TestchainRPCLive extends TestchainRPC { @override Future callRAW(String method, [dynamic params]) async { - return _client?.call(method, params).catchError((err) { + return await _client().call(method, params).catchError((err) { log.t('rpc: $method threw exception: $err'); throw err; }); @@ -188,7 +160,7 @@ class TestchainRPCLive extends TestchainRPC { @override Future sideSend(String address, double amount, bool subtractFeeFromAmount) async { - final withdrawalTxid = await _client?.call('sendtoaddress', [ + final withdrawalTxid = await _client().call('sendtoaddress', [ address, amount, '', @@ -202,7 +174,7 @@ class TestchainRPCLive extends TestchainRPC { @override Future> listTransactions() async { // first list - final transactionsJSON = await _client?.call('listtransactions', [ + final transactionsJSON = await _client().call('listtransactions', [ '', 9999, // how many txs to list. We have not implemented pagination, so we list all ]) as List; @@ -215,19 +187,19 @@ class TestchainRPCLive extends TestchainRPC { @override Future mainBlockCount() async { - final cached = await _client?.call('updatemainblockcache') as Map; + final cached = await _client().call('updatemainblockcache') as Map; return cached['cachesize']; } @override Future sideBlockCount() async { - return await _client?.call('getblockcount'); + return await _client().call('getblockcount'); } @override Future ping() async { - await _client?.call('ping') as Map?; + await _client().call('ping') as Map?; } @override @@ -238,7 +210,7 @@ class TestchainRPCLive extends TestchainRPC { @override Future lookupWithdrawalBundle(String hash, BundleStatus status) async { - final info = await _client?.call( + final info = await _client().call( 'getwithdrawalbundleinfo', [hash], ); @@ -247,7 +219,7 @@ class TestchainRPCLive extends TestchainRPC { final withdrawals = await Future.wait( withdrawalIDs.map( - (id) => _client!.call( + (id) => _client().call( 'getwithdrawal', [id], ).then((json) => Withdrawal.fromJson(json)), @@ -266,7 +238,7 @@ class TestchainRPCLive extends TestchainRPC { Future mainCurrentWithdrawalBundle() async { dynamic rawWithdrawalBundle; try { - rawWithdrawalBundle = await _client?.call('getwithdrawalbundle'); + rawWithdrawalBundle = await _client().call('getwithdrawalbundle'); } on RPCException catch (err) { if (err.errorCode == RPCError.errNoWithdrawalBundle) { return null; @@ -274,14 +246,14 @@ class TestchainRPCLive extends TestchainRPC { rethrow; } - final decoded = await _client?.call('decoderawtransaction', [rawWithdrawalBundle]); + final decoded = await _client().call('decoderawtransaction', [rawWithdrawalBundle]); final tx = RawTransaction.fromJson(decoded); return lookupWithdrawalBundle(tx.hash, BundleStatus.pending); } @override Future mainNextWithdrawalBundle() async { - final rawNextBundle = await _client?.call('listnextbundlewithdrawals') as List; + final rawNextBundle = await _client().call('listnextbundlewithdrawals') as List; return FutureWithdrawalBundle( cumulativeWeight: 0, // TODO: not sure how to obtain this diff --git a/test/dashboard_test.dart b/test/dashboard_test.dart index 46582c29..6f855c8f 100644 --- a/test/dashboard_test.dart +++ b/test/dashboard_test.dart @@ -21,7 +21,7 @@ final txProvider = TransactionsProvider(); void main() { setUpAll(() async { - GetIt.I.registerLazySingleton(() => MockSidechainRPC(subRPC: MockSidechainSubRPC())); + GetIt.I.registerLazySingleton(() => SidechainContainer(MockSidechainRPC())); GetIt.I.registerLazySingleton(() => MockMainchainRPC()); GetIt.I.registerLazySingleton(() => txProvider); diff --git a/test/mocks/rpc_mock_mainchain.dart b/test/mocks/rpc_mock_mainchain.dart index cd1a12c6..29dcbf7f 100644 --- a/test/mocks/rpc_mock_mainchain.dart +++ b/test/mocks/rpc_mock_mainchain.dart @@ -1,17 +1,15 @@ +import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/rpc/models/core_transaction.dart'; import 'package:sidesail/rpc/rpc_mainchain.dart'; class MockMainchainRPC extends MainchainRPC { + MockMainchainRPC() : super(conf: SingleNodeConnectionSettings('./mocked.conf', 'mocktown', 1337, '', '')); + @override Future estimateFee() async { return 0.001; } - @override - Future createClient() async { - return; - } - @override bool get connected => true; diff --git a/test/mocks/rpc_mock_sidechain.dart b/test/mocks/rpc_mock_sidechain.dart index 04729a24..bd828c47 100644 --- a/test/mocks/rpc_mock_sidechain.dart +++ b/test/mocks/rpc_mock_sidechain.dart @@ -1,11 +1,14 @@ import 'package:sidesail/config/sidechains.dart'; +import 'package:sidesail/pages/tabs/settings/node_settings_tab.dart'; import 'package:sidesail/rpc/models/core_transaction.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; class MockSidechainRPC extends SidechainRPC { - MockSidechainRPC({required super.subRPC}) { - chain = TestSidechain(); - } + MockSidechainRPC() + : super( + conf: SingleNodeConnectionSettings('mock town', 'mock mock', 1337, '', ''), + chain: TestSidechain(), + ); @override Future<(double, double)> getBalance() async { @@ -23,47 +26,6 @@ class MockSidechainRPC extends SidechainRPC { @override Future get initDone => Future.value(); - @override - Future createClient() async { - return; - } - - @override - Future ping() async { - return; - } - - @override - Future> listTransactions() async { - return List.empty(); - } -} - -class MockSidechainSubRPC extends SidechainSubRPC { - MockSidechainSubRPC() { - chain = TestSidechain(); - } - - @override - Future<(double, double)> getBalance() async { - return (1.12345678, 2.24680); - } - - @override - Future callRAW(String method, [dynamic params]) async { - return; - } - - @override - Future<(bool, String?)> testConnection() async { - return (true, null); - } - - @override - Future createClient() async { - return; - } - @override Future ping() async { return; From 5e14af6f0b48218911c8caa0ec92690e141e31da Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 16:11:59 +0100 Subject: [PATCH 07/10] providers: add note on arch + platform handling --- lib/providers/proc_provider.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/providers/proc_provider.dart b/lib/providers/proc_provider.dart index 74570b2d..94468b2e 100644 --- a/lib/providers/proc_provider.dart +++ b/lib/providers/proc_provider.dart @@ -25,7 +25,9 @@ class ProcessProvider extends ChangeNotifier { // Starts a binary located in the asset bundle included with the app. Future start(BuildContext context, String binary, List args) async { - // TODO: lookup based on arch + platform + // We're NOT looking up here based on platform and architecture. That is instead + // handled at app bundling time, where it's up the person/process cutting the + // release to place the appropriate binaries in the correct place. final binResource = await DefaultAssetBundle.of(context).load('assets/bin/$binary'); final temp = await getTemporaryDirectory(); From 20dd730dae45dc5ba3e6b813aa0f3863982e7b25 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 16:51:34 +0100 Subject: [PATCH 08/10] startup: launch sidechain on init --- lib/app.dart | 89 +++++++++++++++++++++----------- lib/config/sidechains.dart | 8 +++ lib/providers/proc_provider.dart | 25 +++++++-- lib/rpc/rpc.dart | 2 +- 4 files changed, 91 insertions(+), 33 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index fa77ac84..c68fdc17 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -14,6 +14,7 @@ import 'package:sidesail/config/sidechains.dart'; import 'package:sidesail/logger.dart'; import 'package:sidesail/providers/proc_provider.dart'; import 'package:sidesail/routing/router.dart'; +import 'package:sidesail/rpc/rpc.dart'; import 'package:sidesail/rpc/rpc_config.dart'; import 'package:sidesail/rpc/rpc_mainchain.dart'; import 'package:sidesail/rpc/rpc_sidechain.dart'; @@ -53,7 +54,8 @@ class SailAppState extends State with WidgetsBindingObserver { /// Unrecoverable error on startup we can't get past. dynamic _initBinariesError; - String mainchainStartupMessage = "Checking if 'drivechaind' is started"; + String mainchainStartupMessage = 'Checking if mainchain is started'; + String sidechainStartupMessage = 'Checking if sidechain is started'; bool binariesStarted = false; SailThemeData? theme; @@ -63,7 +65,24 @@ class SailAppState extends State with WidgetsBindingObserver { WidgetsBinding.instance.addObserver(this); unawaited(loadTheme()); unawaited( - initRPCs().then((_) => initBinaries()), + initRPCs().then( + (_) => Future.wait([ + initMainchainBinary(), + initSidechainBinary(), + // let the spinner work for at least one second, to avoid flickering + Future.delayed(const Duration(seconds: 1)), + ]) + .then( + (_) => setState(() { + binariesStarted = true; + }), + ) + .onError( + (error, stackTrace) => setState(() { + _initBinariesError = error.toString(); + }), + ), + ), ); } @@ -124,60 +143,71 @@ class SailAppState extends State with WidgetsBindingObserver { await Future.wait([mainchainFut, sidechainFut]); } - Future initBinaries() async { - log.d('init binaries: checking mainchain connection'); + Future initMainchainBinary() async { + return _initBinary('drivechaind', mainchain, (msg) { + setState( + () { + mainchainStartupMessage = msg; + }, + ); + }); + } - // First, let the mainchain connection check finish. - await mainchain.initDone; + Future initSidechainBinary() async { + return _initBinary(_sidechain.rpc.chain.binary, _sidechain.rpc, (msg) { + setState( + () { + sidechainStartupMessage = msg; + }, + ); + }); + } + + Future _initBinary(String binary, RPCConnection conn, void Function(String) updateMsg) async { + log.d('init binaries: checking $binary connection'); + + // First, let the RPC connection check finish. + await conn.initDone; // If we managed to connect, we're finished here! - if (mainchain.connected) { - log.d('init binaries: mainchain is already running, not doing anything'); - setState(() { - binariesStarted = true; - }); + if (conn.connected) { + updateMsg("'$binary' is already running"); + log.d('init binaries: $binary is already running, not doing anything'); return; } // We have to start the mainchain - final tempDir = await Directory.systemTemp.createTemp('drivechaind'); - final tempLogFile = await File('${tempDir.path}/drivechaind.debug.log').create(recursive: true); + final tempDir = await Directory.systemTemp.createTemp(binary); + final tempLogFile = await File('${tempDir.path}/$binary.debug.log').create(recursive: true); if (!context.mounted) { return; } + // TODO: update this when adding other nodes with different args final args = [ '-debuglogfile=${tempLogFile.path}', '-regtest', ]; - log.d('init binaries: starting drivechaind $args'); + log.d('init binaries: starting $binary $args'); try { - final pid = await processes.start(context, 'drivechaind', args); - log.d('init binaries: started drivechaind with PID $pid'); - setState(() { - mainchainStartupMessage = "Started 'drivechaind', waiting for successful RPC connection"; - }); + final pid = await processes.start(context, binary, args); + log.d('init binaries: started $binary with PID $pid'); + updateMsg("Started '$binary', waiting for successful RPC connection"); } catch (err) { - log.w('init binaries: unable to start drivechaind', error: err); - return setState(() { - _initBinariesError = err; - }); + throw 'unable to start $binary: $err'; } // Add timeout? - log.i('init binaries: waiting for mainchain connection'); + log.i('init binaries: waiting for $binary connection'); await waitForBoolToBeTrue(() async { - final (connected, _) = await mainchain.testConnection(); + final (connected, _) = await conn.testConnection(); return connected; }); - log.i('init binaries: mainchain connected'); - return setState(() { - binariesStarted = true; - }); + log.i('init binaries: $binary connected'); } Future loadTheme([SailThemeValues? themeToLoad]) async { @@ -205,6 +235,7 @@ class SailAppState extends State with WidgetsBindingObserver { spacing: SailStyleValues.padding25, children: [ SailText.primary20('Mainchain starting up: $mainchainStartupMessage'), + SailText.primary20('Sidechain starting up: $sidechainStartupMessage'), const SailCircularProgressIndicator(), ], ); diff --git a/lib/config/sidechains.dart b/lib/config/sidechains.dart index abd56f34..3dfc24d6 100644 --- a/lib/config/sidechains.dart +++ b/lib/config/sidechains.dart @@ -15,6 +15,8 @@ abstract class Sidechain { String get ticker { return 'SC$slot'; } + + String get binary; } class TestSidechain extends Sidechain { @@ -32,6 +34,9 @@ class TestSidechain extends Sidechain { @override int get rpcPort => 18743; + + @override + String get binary => 'testchaind'; } class EthereumSidechain extends Sidechain { @@ -49,6 +54,9 @@ class EthereumSidechain extends Sidechain { @override int get rpcPort => 8545; + + @override + String get binary => 'sidegeth'; } enum SidechainType { testChain, ethereum } diff --git a/lib/providers/proc_provider.dart b/lib/providers/proc_provider.dart index 94468b2e..63e81337 100644 --- a/lib/providers/proc_provider.dart +++ b/lib/providers/proc_provider.dart @@ -51,7 +51,6 @@ class ProcessProvider extends ChangeNotifier { args, mode: ProcessStartMode.normal, // when the flutter app quits, this process quit ); - log.d('started "$binary" with pid ${process.pid}'); _runningProcesses.add(process.pid); // Let output streaming chug in the background @@ -62,6 +61,9 @@ class ProcessProvider extends ChangeNotifier { // Error messages while starting up are written here _stderrStreams[process.pid] = process.stderr.transform(utf8.decoder); + // By default, this doesn't resolve to anything + var processExited = Completer(); + // Register a handler for when the process stops. unawaited( process.exitCode.then((code) async { @@ -72,8 +74,10 @@ class ProcessProvider extends ChangeNotifier { level = Level.info; } - final errLogs = await (_stderrStreams[process.pid] ?? const Stream.empty()).toList(); - log.log(level, '"$binary" exited with code $code: $errLogs'); + log.log(level, '"$binary" exited with code $code'); + + // Resolve the process exit future + processExited.complete(true); // Forward to listeners that the process finished. _exitCodes[process.pid] = code; @@ -82,6 +86,21 @@ class ProcessProvider extends ChangeNotifier { }), ); + // If the process exits within 0.5 second, it's not really properly started! + final exited = await Future.any([ + Future.delayed(const Duration(milliseconds: 500), () { + return false; + }), + processExited.future, + ]); + + if (exited) { + final errLogs = await (_stderrStreams[process.pid] ?? const Stream.empty()).toList(); + throw '"$binary" exited with code ${_exitCodes[process.pid]}: ${errLogs.last}'; + } + + log.d('started "$binary" with pid ${process.pid}'); + notifyListeners(); return process.pid; } diff --git a/lib/rpc/rpc.dart b/lib/rpc/rpc.dart index f62091c2..bde82009 100644 --- a/lib/rpc/rpc.dart +++ b/lib/rpc/rpc.dart @@ -29,7 +29,7 @@ abstract class RPCConnection extends ChangeNotifier { connectionError = null; connected = true; } catch (error) { - _log.e('could not ping: ${error.toString()}!'); + _log.t('could not ping: ${error.toString()}!'); connectionError = error.toString(); connected = false; } finally { From 6e0b3d18247e4f80f6f8c80c4fcebb965f21ed3b Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Mon, 13 Nov 2023 16:51:47 +0100 Subject: [PATCH 09/10] doc: update logo --- README.md | 10 ---------- logo.png | Bin 207700 -> 29706 bytes 2 files changed, 10 deletions(-) diff --git a/README.md b/README.md index f4dba981..525b70c6 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,6 @@ ![SideSail logo](logo.png) -
- -ChatGPT logo prompt - - -Clean logo emphasizing a sail with an embedded chain pattern. The design is minimalistic, utilizing cool blues, greys, and whites, with a slightly different shape for the sail. - - -
- A work-in-progress sidechain UI. ```shell diff --git a/logo.png b/logo.png index 0d01655f9c9fad6b19cb7a5368bc35d9fa077b2b..43224611e342d019ccdf427e3da93b21d6b68273 100644 GIT binary patch literal 29706 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∋9Tbe=}-k-VLuO1L4^jZ0cNPv&Cr$TCee~hCS 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 From 355b8e2e700ea05960881e436585d57ccdc21816 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Tue, 14 Nov 2023 09:55:50 +0100 Subject: [PATCH 10/10] tests: remove unused params --- test/test_utils.dart | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/test_utils.dart b/test/test_utils.dart index a46b4f72..a4bb6cc3 100644 --- a/test/test_utils.dart +++ b/test/test_utils.dart @@ -21,10 +21,8 @@ Future loadFonts() async { extension TestExtension on WidgetTester { Future pumpSailPage( - Widget child, { - bool requireIntensionKyc = false, - bool requireKycLevel2 = false, - }) async { + Widget child, + ) async { await _setDeviceSize(); await loadFonts(); await registerTestDependencies();