From 9ff3ab057aec9f2e41c37fd190f210ddb73d79d8 Mon Sep 17 00:00:00 2001 From: Kadan Stadelmann Date: Sun, 26 Oct 2025 18:20:48 +0100 Subject: [PATCH 1/2] more logging --- .../bch_activation_strategy.dart | 57 +++++++++++++++++-- .../custom_erc20_activation_strategy.dart | 38 +++++++++++-- .../erc20_activation_strategy.dart | 32 ++++++++++- .../eth_task_activation_strategy.dart | 49 ++++++++++++---- .../eth_with_tokens_activation_strategy.dart | 49 ++++++++++++---- .../qtum_activation_strategy.dart | 31 +++++++++- .../tendermint_activation_strategy.dart | 41 +++++++++++-- .../utxo_activation_strategy.dart | 33 ++++++++++- .../zhtlc_activation_strategy.dart | 22 +++++++ 9 files changed, 306 insertions(+), 46 deletions(-) diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/bch_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/bch_activation_strategy.dart index 2901b58c..c59b3f41 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/bch_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/bch_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_types/komodo_defi_types.dart'; @@ -82,16 +85,39 @@ class BchActivationStrategy extends ProtocolActivationStrategy { ), ); + final slpTokensRequests = children + ?.map( + (child) => TokensRequest(ticker: child.id.id), + ) + .toList() ?? + []; + + // Debug logging for BCH activation + log( + '[RPC] Activating BCH platform: ${asset.id.id}', + name: 'BchActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'slp_token_count': children?.length ?? 0, + 'slp_tokens': children?.map((e) => e.id.id).toList() ?? [], + 'activation_params': bchConfig.toRpcParams(), + })}', + name: 'BchActivationStrategy', + ); + // Enable BCH with SLP support final response = await client.rpc.slp.enableBchWithTokens( ticker: asset.id.id, params: bchConfig, - slpTokensRequests: children - ?.map( - (child) => TokensRequest(ticker: child.id.id), - ) - .toList() ?? - [], + slpTokensRequests: slpTokensRequests, + ); + + log( + '[RPC] Successfully activated BCH with ${children?.length ?? 0} SLP tokens', + name: 'BchActivationStrategy', ); yield ActivationProgress( @@ -129,10 +155,29 @@ class BchActivationStrategy extends ProtocolActivationStrategy { ), ); + // Debug logging for SLP token activation + log( + '[RPC] Activating SLP token: ${asset.id.id}', + name: 'BchActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'parent_id': asset.id.parentId?.id, + })}', + name: 'BchActivationStrategy', + ); + await client.rpc.slp.enableSlpToken( ticker: asset.id.id, params: SlpActivationParams(), ); + + log( + '[RPC] Successfully activated SLP token: ${asset.id.id}', + name: 'BchActivationStrategy', + ); yield ActivationProgress.success( details: ActivationProgressDetails( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/custom_erc20_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/custom_erc20_activation_strategy.dart index c3aed6b1..6b932aca 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/custom_erc20_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/custom_erc20_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_types/komodo_defi_type_utils.dart'; @@ -60,13 +63,38 @@ class CustomErc20ActivationStrategy extends ProtocolActivationStrategy { throw StateError('Protocol data is missing from custom token config'); } + final activationParams = Erc20ActivationParams.fromJsonConfig( + asset.protocol.config, + ); + final platform = protocolData.value('platform'); + final contractAddress = protocolData.value('contract_address'); + + // Debug logging for custom ERC20 token activation + log( + '[RPC] Activating custom ERC20 token: ${asset.id.id}', + name: 'CustomErc20ActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'platform': platform, + 'contract_address': contractAddress, + 'activation_params': activationParams.toRpcParams(), + })}', + name: 'CustomErc20ActivationStrategy', + ); + await client.rpc.erc20.enableCustomErc20Token( ticker: asset.id.id, - activationParams: Erc20ActivationParams.fromJsonConfig( - asset.protocol.config, - ), - platform: protocolData.value('platform'), - contractAddress: protocolData.value('contract_address'), + activationParams: activationParams, + platform: platform, + contractAddress: contractAddress, + ); + + log( + '[RPC] Successfully activated custom ERC20 token: ${asset.id.id}', + name: 'CustomErc20ActivationStrategy', ); yield ActivationProgress.success( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/erc20_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/erc20_activation_strategy.dart index 1a1b4e90..438fca80 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/erc20_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/erc20_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_types/komodo_defi_types.dart'; @@ -63,11 +66,34 @@ class Erc20ActivationStrategy extends ProtocolActivationStrategy { ); try { + final activationParams = Erc20ActivationParams.fromJsonConfig( + asset.protocol.config, + ); + + // Debug logging for ERC20 token activation + log( + '[RPC] Activating ERC20 token: ${asset.id.id}', + name: 'Erc20ActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'parent_id': asset.id.parentId?.id, + 'activation_params': activationParams.toRpcParams(), + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'Erc20ActivationStrategy', + ); + await client.rpc.erc20.enableErc20( ticker: asset.id.id, - activationParams: Erc20ActivationParams.fromJsonConfig( - asset.protocol.config, - ), + activationParams: activationParams, + ); + + log( + '[RPC] Successfully activated ERC20 token: ${asset.id.id}', + name: 'Erc20ActivationStrategy', ); yield ActivationProgress.success( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_task_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_task_activation_strategy.dart index a19bc18b..6586d379 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_task_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_task_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_sdk/src/transaction_history/strategies/etherscan_transaction_history_strategy.dart' @@ -71,19 +74,43 @@ class EthTaskActivationStrategy extends ProtocolActivationStrategy { ), ); + final activationParams = EthWithTokensActivationParams.fromJson(asset.protocol.config) + .copyWith( + erc20Tokens: + children + ?.map((e) => TokensRequest(ticker: e.id.id)) + .toList() ?? + [], + txHistory: const EtherscanProtocolHelper() + .shouldEnableTransactionHistory(asset), + privKeyPolicy: privKeyPolicy, + ); + + // Debug logging for ETH task-based activation + log( + '[RPC] Activating ETH platform (task-based): ${asset.id.id}', + name: 'EthTaskActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'token_count': children?.length ?? 0, + 'tokens': children?.map((e) => e.id.id).toList() ?? [], + 'activation_params': activationParams.toRpcParams(), + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'EthTaskActivationStrategy', + ); + final taskResponse = await client.rpc.erc20.enableEthInit( ticker: asset.id.id, - params: EthWithTokensActivationParams.fromJson(asset.protocol.config) - .copyWith( - erc20Tokens: - children - ?.map((e) => TokensRequest(ticker: e.id.id)) - .toList() ?? - [], - txHistory: const EtherscanProtocolHelper() - .shouldEnableTransactionHistory(asset), - privKeyPolicy: privKeyPolicy, - ), + params: activationParams, + ); + + log( + '[RPC] Task initiated for ${asset.id.id}, task_id: ${taskResponse.taskId}', + name: 'EthTaskActivationStrategy', ); yield ActivationProgress( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_with_tokens_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_with_tokens_activation_strategy.dart index 88227591..f72110ed 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_with_tokens_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/eth_with_tokens_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_sdk/src/transaction_history/strategies/etherscan_transaction_history_strategy.dart' @@ -90,19 +93,43 @@ class EthWithTokensActivationStrategy extends ProtocolActivationStrategy { ), ); + final activationParams = EthWithTokensActivationParams.fromJson(asset.protocol.config) + .copyWith( + erc20Tokens: + children + ?.map((e) => TokensRequest(ticker: e.id.id)) + .toList() ?? + [], + txHistory: const EtherscanProtocolHelper() + .shouldEnableTransactionHistory(asset), + privKeyPolicy: privKeyPolicy, + ); + + // Debug logging for ETH platform activation + log( + '[RPC] Activating ETH platform: ${asset.id.id}', + name: 'EthWithTokensActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'token_count': children?.length ?? 0, + 'tokens': children?.map((e) => e.id.id).toList() ?? [], + 'activation_params': activationParams.toRpcParams(), + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'EthWithTokensActivationStrategy', + ); + await client.rpc.erc20.enableEthWithTokens( ticker: asset.id.id, - params: EthWithTokensActivationParams.fromJson(asset.protocol.config) - .copyWith( - erc20Tokens: - children - ?.map((e) => TokensRequest(ticker: e.id.id)) - .toList() ?? - [], - txHistory: const EtherscanProtocolHelper() - .shouldEnableTransactionHistory(asset), - privKeyPolicy: privKeyPolicy, - ), + params: activationParams, + ); + + log( + '[RPC] Successfully activated ETH platform: ${asset.id.id} with ${children?.length ?? 0} tokens', + name: 'EthWithTokensActivationStrategy', ); yield const ActivationProgress( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/qtum_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/qtum_activation_strategy.dart index 9092f927..fb8ace6f 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/qtum_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/qtum_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_types/komodo_defi_types.dart'; @@ -37,11 +40,33 @@ class QtumActivationStrategy extends ProtocolActivationStrategy { ); try { + final activationParams = asset.protocol.defaultActivationParams( + privKeyPolicy: privKeyPolicy, + ); + + // Debug logging for QTUM activation + log( + '[RPC] Activating QTUM coin: ${asset.id.id}', + name: 'QtumActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'activation_params': activationParams.toRpcParams(), + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'QtumActivationStrategy', + ); + final taskResponse = await client.rpc.qtum.enableQtumInit( ticker: asset.id.id, - params: asset.protocol.defaultActivationParams( - privKeyPolicy: privKeyPolicy, - ), + params: activationParams, + ); + + log( + '[RPC] Task initiated for ${asset.id.id}, task_id: ${taskResponse.taskId}', + name: 'QtumActivationStrategy', ); var isComplete = false; diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/tendermint_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/tendermint_activation_strategy.dart index ea50326c..34929a17 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/tendermint_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/tendermint_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_types/komodo_defi_types.dart'; @@ -96,14 +99,40 @@ class TendermintWithTokensActivationStrategy ), ); + final tokensParams = children + ?.map((child) => TendermintTokenParams(ticker: child.id.id)) + .toList() ?? + []; + final nodes = protocol.rpcUrlsMap.map(TendermintNode.fromJson).toList(); + + // Debug logging for Tendermint activation + log( + '[RPC] Activating Tendermint platform: ${asset.id.id}', + name: 'TendermintWithTokensActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'chain_id': protocol.chainId, + 'account_prefix': protocol.accountPrefix, + 'token_count': children?.length ?? 0, + 'tokens': children?.map((e) => e.id.id).toList() ?? [], + 'rpc_nodes': nodes.map((n) => n.toJson()).toList(), + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'TendermintWithTokensActivationStrategy', + ); + final taskResponse = await client.rpc.tendermint.taskEnableTendermintInit( ticker: asset.id.id, - tokensParams: - children - ?.map((child) => TendermintTokenParams(ticker: child.id.id)) - .toList() ?? - [], - nodes: protocol.rpcUrlsMap.map(TendermintNode.fromJson).toList(), + tokensParams: tokensParams, + nodes: nodes, + ); + + log( + '[RPC] Task initiated for ${asset.id.id}, task_id: ${taskResponse.taskId}', + name: 'TendermintWithTokensActivationStrategy', ); yield ActivationProgress( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/utxo_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/utxo_activation_strategy.dart index fa293f33..c1ba95ef 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/utxo_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/utxo_activation_strategy.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_types/komodo_defi_types.dart'; @@ -58,9 +61,37 @@ class UtxoActivationStrategy extends ProtocolActivationStrategy { ), ); + final activationParams = protocol.defaultActivationParams(privKeyPolicy: privKeyPolicy); + + // Debug logging for UTXO/Electrum activation + log( + '[ELECTRUM] Activating UTXO coin: ${asset.id.id}', + name: 'UtxoActivationStrategy', + ); + log( + '[ELECTRUM] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'mode': activationParams.mode?.rpc, + 'utxo_params': activationParams.toRpcParams(), + 'protocol_type': protocol.subClass.formatted, + 'tx_version': protocol.txVersion, + 'pubtype': protocol.pubtype, + 'p2shtype': protocol.p2shtype, + 'wiftype': protocol.wiftype, + 'electrum_servers': protocol.requiredServers.toJsonRequest(), + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'UtxoActivationStrategy', + ); + final taskResponse = await client.rpc.utxo.enableUtxoInit( ticker: asset.id.id, - params: protocol.defaultActivationParams(privKeyPolicy: privKeyPolicy), + params: activationParams, + ); + + log( + '[ELECTRUM] Task initiated for ${asset.id.id}, task_id: ${taskResponse.taskId}', + name: 'UtxoActivationStrategy', ); yield ActivationProgress( diff --git a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/zhtlc_activation_strategy.dart b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/zhtlc_activation_strategy.dart index c59377a9..2afeff84 100644 --- a/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/zhtlc_activation_strategy.dart +++ b/packages/komodo_defi_sdk/lib/src/activation/protocol_strategies/zhtlc_activation_strategy.dart @@ -1,6 +1,9 @@ // TODO(komodo-team): Allow passing the start sync mode; currently hard-coded // to sync from the time of activation. +import 'dart:convert'; +import 'dart:developer' show log; + import 'package:komodo_defi_rpc_methods/komodo_defi_rpc_methods.dart'; import 'package:komodo_defi_sdk/src/activation/_activation.dart'; import 'package:komodo_defi_sdk/src/activation/protocol_strategies/zhtlc_activation_progress.dart'; @@ -93,6 +96,25 @@ class ZhtlcActivationStrategy extends ProtocolActivationStrategy { yield ZhtlcActivationProgress.validation(protocol); + // Debug logging for ZHTLC activation + log( + '[RPC] Activating ZHTLC coin: ${asset.id.id}', + name: 'ZhtlcActivationStrategy', + ); + log( + '[RPC] Activation parameters: ${jsonEncode({ + 'ticker': asset.id.id, + 'protocol': asset.protocol.subClass.formatted, + 'activation_params': params.toRpcParams(), + 'zcash_params_path': userConfig.zcashParamsPath, + 'scan_blocks_per_iteration': userConfig.scanBlocksPerIteration, + 'scan_interval_ms': userConfig.scanIntervalMs, + 'polling_interval_ms': effectivePollingInterval.inMilliseconds, + 'priv_key_policy': privKeyPolicy.toJson(), + })}', + name: 'ZhtlcActivationStrategy', + ); + // Initialize task and watch via TaskShepherd final stream = client.rpc.zhtlc .enableZhtlcInit(ticker: asset.id.id, params: params) From b1af3970e353a862e00e620ba9cebc14bcf65f93 Mon Sep 17 00:00:00 2001 From: Kadan Stadelmann Date: Sun, 26 Oct 2025 18:22:59 +0100 Subject: [PATCH 2/2] add missing func to test mock class --- .../test/src/trezor/trezor_auth_service_test.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/komodo_defi_local_auth/test/src/trezor/trezor_auth_service_test.dart b/packages/komodo_defi_local_auth/test/src/trezor/trezor_auth_service_test.dart index af0cbd67..5ffa0ed7 100644 --- a/packages/komodo_defi_local_auth/test/src/trezor/trezor_auth_service_test.dart +++ b/packages/komodo_defi_local_auth/test/src/trezor/trezor_auth_service_test.dart @@ -105,6 +105,8 @@ class _FakeAuthService implements IAuthService { bool signOutCalled = false; ({String walletName, String password, AuthOptions options})? lastSignInArgs; ({String walletName, String password, AuthOptions options})? lastRegisterArgs; + bool ensureHealthyReturn = true; + int ensureHealthyCalls = 0; @override Stream get authStateChanges => _authStateController.stream; @@ -198,6 +200,12 @@ class _FakeAuthService implements IAuthService { required String currentPassword, required String newPassword, }) async => throw UnimplementedError(); + + @override + Future ensureKdfHealthy() async { + ensureHealthyCalls++; + return ensureHealthyReturn; + } } void main() {