Skip to content
This repository has been archived by the owner on Sep 17, 2024. It is now read-only.

Commit

Permalink
feat: Added chains use case & update chains rpc via Github json
Browse files Browse the repository at this point in the history
  • Loading branch information
reasje committed Oct 23, 2023
1 parent 83f11b2 commit e5ce2a3
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
9 changes: 9 additions & 0 deletions lib/core/src/providers/providers_use_cases.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:datadashwallet/common/common.dart';
import 'package:datadashwallet/features/common/account/log_out_use_case.dart';
import 'package:datadashwallet/features/common/common.dart';
import 'package:datadashwallet/features/common/contract/chains_use_case.dart';
import 'package:datadashwallet/features/common/contract/nft_contract_use_case.dart';
import 'package:datadashwallet/features/common/contract/pricing_use_case.dart';
import 'package:datadashwallet/features/common/contract/tweets_use_case.dart';
Expand Down Expand Up @@ -146,3 +147,11 @@ final Provider<AppVersionUseCase> appVersionUseCaseProvider = Provider(
ref.watch(web3RepositoryProvider),
),
);

final Provider<ChainsUseCase> chainsUseCaseProvider = Provider(
(ref) => ChainsUseCase(
ref.watch(web3RepositoryProvider),
ref.watch(chainConfigurationUseCaseProvider),
ref.watch(authUseCaseProvider),
),
);
88 changes: 88 additions & 0 deletions lib/features/common/contract/chains_use_case.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import 'dart:async';

import 'package:datadashwallet/core/core.dart';
import 'package:datadashwallet/features/settings/subfeatures/chain_configuration/domain/chain_configuration_use_case.dart';
import 'package:mxc_logic/mxc_logic.dart';

class ChainsUseCase extends ReactiveUseCase {
ChainsUseCase(
this._repository, this._chainConfigurationUseCase, this._authUseCase);

final Web3Repository _repository;
final ChainConfigurationUseCase _chainConfigurationUseCase;
final AuthUseCase _authUseCase;

Future<ChainsRpcList> getChainsRpcUrls() async {
return await _repository.chainsRepository.getChainsRpcUrls();
}

void updateChainsRPCUrls() async {
try {
final chainsRpcUrls = await getChainsRpcUrls();
final networks = _chainConfigurationUseCase.networks.value;

for (ChainRpcUrl chainRpcUrl in chainsRpcUrls.chainList ?? []) {
final foundIndex = networks
.indexWhere((element) => element.chainId == chainRpcUrl.chainId);

if (foundIndex != -1) {
final network = networks.elementAt(foundIndex);

// If any change is detected
if (network.web3RpcHttpUrl != chainRpcUrl.httpUrl ||
network.web3RpcWebsocketUrl != chainRpcUrl.wssUrl) {
final updatedNetwork = network.copyWith(
web3RpcHttpUrl: chainRpcUrl.httpUrl,
web3RpcWebsocketUrl: chainRpcUrl.wssUrl);
// Update in DB
_chainConfigurationUseCase.updateItem(updatedNetwork, foundIndex);

if (network.enabled) {
_chainConfigurationUseCase.updateSelectedNetwork(updatedNetwork);
_authUseCase.resetNetwork(updatedNetwork);
}
}
}
}
} catch (e) {
// This update necessary since, RPC change might be essential.
updateChainsRPCUrls();
}
}

// void checkChainsRpcUrls(void Function(Network) resetNetwork, Network selectedNetwork) async {
// try {
// final chainsRpcUrls = await getChainsRpcUrls();

// for (ChainRpcUrl chain in chainsRpcUrls.chainList ?? []) {
// await checkChainRpcUrls(chain);
// }
// } catch (e) {
// checkChainsRpcUrls();
// }
// }

// Future<void> checkChainRpcUrls(ChainRpcUrl chain) async {
// for (String url in chain.rpcUrls ?? []) {
// try {
// if (url.contains('wss')) {
// await checkWebSocketRpcUrl(url);
// } else {
// await checkRpcUrl(url);
// }
// // select the rpc url
// } catch (e) {
// continue;
// }
// }
// }

// // TODO: check websocket link
// Future<int> checkWebSocketRpcUrl(String url) async {
// return _repository.chainsRepository.getBlockNumber(url);
// }

// Future<int> checkRpcUrl(String url) async {
// return _repository.chainsRepository.getBlockNumber(url);
// }
}
3 changes: 3 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ void main() {
final appVersionUseCase = container.read(appVersionUseCaseProvider);
await appVersionUseCase.checkLatestVersion();

final initializationUseCase = container.read(chainsUseCaseProvider);
initializationUseCase.updateChainsRPCUrls();

runApp(
UncontrolledProviderScope(
container: container,
Expand Down

0 comments on commit e5ce2a3

Please sign in to comment.