Skip to content

fix(thorchain): skip /status fetch when no vault uses THORChain#4376

Merged
johnnyluo merged 7 commits into
mainfrom
aminsato/4366_skip_thorchain_status_when_unused
May 4, 2026
Merged

fix(thorchain): skip /status fetch when no vault uses THORChain#4376
johnnyluo merged 7 commits into
mainfrom
aminsato/4366_skip_thorchain_status_when_unused

Conversation

@aminsato
Copy link
Copy Markdown
Collaborator

@aminsato aminsato commented May 3, 2026

Summary

  • InitializeThorChainNetworkIdUseCase only gated the THORChain /status call on vaultRepository.hasVaults() (from fix: skip THORChain network id fetch on startup when no vaults exist #4321). A user with vaults but no THORChain enabled still triggered GET https://gateway.liquify.com/chain/thorchain_rpc/status on every cold start.
  • Add an additional short-circuit: if no vault has Chain.ThorChain in its enabled coins, skip both the cache read and the network fetch. Cached/default THORCHAIN_NETWORK_ID is fine because nothing in the app consumes it without a THORChain-enabled vault.

Closes #4366

Test plan

  • ./gradlew :data:testDebugUnitTest --tests "*.InitializeThorChainNetworkIdUseCaseImplTest" — added "skips when no vault uses THORChain"; all four cases pass.
  • ./gradlew :data:ktfmtFormat
  • Manual: cold start with a non-THORChain-only vault → confirm no GET .../thorchain_rpc/status request fires.
  • Manual: cold start with a THORChain-enabled vault → confirm /status still fires and the network id initializes.

Summary by CodeRabbit

  • New Features

    • THORChain network ID initialization now waits for a vault containing THORChain and skips initialization when no THORChain coins exist, reducing needless network activity.
    • Initialization is now reactive — it triggers when THORChain vaults appear rather than running once at startup.
  • Tests

    • Tests updated to cover skip behavior, reactive initialization, fresh-cache fetching, and preserving cached ID when fetch fails.

InitializeThorChainNetworkIdUseCase only gated on hasVaults(): a user with
vaults but no THORChain enabled still triggered GET .../thorchain_rpc/status
on every cold start. Extend the gating to also short-circuit when no vault
has Chain.ThorChain in its enabled coins.

Closes #4366

Co-Authored-By: aminsato <Amin.saradar@yahoo.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 3, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

invoke() now gates THORChain network-id initialization on whether any vault coin is on Chain.ThorChain via vaultRepository.hasAnyCoinOnChain(Chain.ThorChain). Vault/DAO/repository APIs, ViewModel trigger, and tests were updated accordingly; the cached-then-fetch logic and exception behavior remain unchanged.

Changes

THORChain Network ID Conditional Initialization

Layer / File(s) Summary
Data Shape / Imports
data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt
Adds import for com.vultisig.wallet.data.models.Chain.
DAO
data/src/main/kotlin/com/vultisig/wallet/data/db/dao/VaultDao.kt
Adds suspend fun hasCoinOnChain(chainId: String): Boolean with @Query("SELECT EXISTS(SELECT 1 FROM coin WHERE chain = :chainId)") to test existence of coins on a given chain.
Repository API / Impl
data/src/main/kotlin/com/vultisig/wallet/data/repositories/VaultRepository.kt
Adds suspend fun hasAnyCoinOnChain(chain: Chain): Boolean to interface and implements it by delegating to vaultDao.hasCoinOnChain(chain.id).
Core Guard / Use Case
data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt
Replaces early-return guard from hasVaults() to hasAnyCoinOnChain(Chain.ThorChain) and updates the log message; cached-then-fetch flow and exception handling are unchanged.
ViewModel Wiring
app/src/main/java/com/vultisig/wallet/app/activity/MainViewModel.kt
Removes one-time initializer call; adds a reactive flow over vaultRepository.getAllAsFlow() that waits until any vault contains Chain.ThorChain (map+distinctUntilChanged+filter+first) then calls initializeThorChainNetworkId().
Tests
data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt
Replaces hasVaults()-based stubs/verifications with vaultRepository.hasAnyCoinOnChain(Chain.ThorChain) expectations; adds a fresh-install test for null cached id; updates assertions around cached vs fetched behavior.
Manifest / Build
*.gradle*
Build manifest lines recorded as modified in diff summary.

Sequence Diagram

sequenceDiagram
    participant VM as MainViewModel
    participant VaultRepo as VaultRepository
    participant UseCase as InitializeThorChainNetworkIdUseCase
    participant ThorRepo as ThorChainRepository
    participant Helper as ThorChainHelper

    VM->>VaultRepo: observe getAllAsFlow() -> map/distinctUntilChanged/filter/first
    VaultRepo-->>VM: emits "has THORChain == true"
    VM->>UseCase: initializeThorChainNetworkId()
    UseCase->>VaultRepo: hasAnyCoinOnChain(Chain.ThorChain)
    alt no THORChain coins
        VaultRepo-->>UseCase: false
        UseCase->>UseCase: log "no vault uses THORChain" (return)
    else has THORChain coins
        VaultRepo-->>UseCase: true
        UseCase->>ThorRepo: getCachedNetworkChainId()
        ThorRepo-->>UseCase: cachedId / null
        alt cachedId present
            UseCase->>Helper: set THORCHAIN_NETWORK_ID (cachedId)
        end
        UseCase->>ThorRepo: fetchNetworkChainId()
        ThorRepo-->>UseCase: fetchedId / throws
        alt fetchedId
            UseCase->>Helper: set THORCHAIN_NETWORK_ID (fetchedId)
        else throws
            ThorRepo-->>UseCase: CancellationException or other
            UseCase-->>UseCase: rethrow CancellationException / log others
        end
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I hop and sniff through vaults with care,
If Thor's not found, I leave it there.
But once a coin on Thor I spy,
I fetch the id and lift it high.
Quiet hops, network calls stay fair.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: modifying the use case to skip THORChain /status fetch when no vault uses THORChain.
Linked Issues check ✅ Passed The PR addresses the core objective from issue #4366: preventing unnecessary THORChain RPC /status requests by skipping the fetch when THORChain is unused (no vault uses the chain).
Out of Scope Changes check ✅ Passed All changes are directly related to the objective: new DAO/repository methods to check THORChain presence, updated use case logic, reactive ViewModel trigger, and comprehensive tests.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch aminsato/4366_skip_thorchain_status_when_unused

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt (1)

20-29: ⚡ Quick win

Consider removing the hasVaults() + getAll() double read

Line 21 and Line 53 both hit the repository. You can read vaults once and derive both checks from that list, which reduces I/O and avoids state drift between calls.

Diff suggestion
 override suspend fun invoke() {
-    if (!vaultRepository.hasVaults()) {
+    val vaults = vaultRepository.getAll()
+    if (vaults.isEmpty()) {
         Timber.d("Skipping THORChain network id init: no vaults")
         return
     }

-    if (!isThorChainEnabledInAnyVault()) {
+    if (!vaults.any { vault -> vault.coins.any { it.chain == Chain.ThorChain } }) {
         Timber.d("Skipping THORChain network id init: no vault uses THORChain")
         return
     }
@@
-    private suspend fun isThorChainEnabledInAnyVault(): Boolean =
-        vaultRepository.getAll().any { vault -> vault.coins.any { it.chain == Chain.ThorChain } }
+    // helper can be removed if not reused

Also applies to: 52-53

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt`
around lines 20 - 29, Read the vaults once instead of calling
vaultRepository.hasVaults() and then isThorChainEnabledInAnyVault(); in
InitializeThorChainNetworkIdUseCase.invoke() call vaultRepository.getAll() into
a local variable, check if that list is empty to replace hasVaults(), and use
that same list to determine if any vault uses THORChain (the logic currently in
isThorChainEnabledInAnyVault()) before proceeding; remove the separate
hasVaults() call to avoid double repository access and possible state drift.
data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt (1)

51-62: ⚡ Quick win

Tighten branch assertion with repository interaction checks

Since this test targets the “vaults exist but none use THORChain” branch, also verify getAll() is called once (and hasVaults() once) to make the branch intent explicit.

Diff suggestion
         useCase()

+        coVerify(exactly = 1) { vaultRepository.hasVaults() }
+        coVerify(exactly = 1) { vaultRepository.getAll() }
         coVerify(exactly = 0) { thorChainRepository.getCachedNetworkChainId() }
         coVerify(exactly = 0) { thorChainRepository.fetchNetworkChainId() }
         assertEquals("default-id", ThorChainHelper.THORCHAIN_NETWORK_ID)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt`
around lines 51 - 62, Update the test "skips fetch and cache when no vault uses
THORChain" to assert repository interactions explicitly: after calling
useCase(), add coVerify(exactly = 1) { vaultRepository.hasVaults() } and
coVerify(exactly = 1) { vaultRepository.getAll() } so the branch where vaults
exist but none use THORChain is tightened while keeping the existing coVerify
checks for thorChainRepository.getCachedNetworkChainId() and
fetchNetworkChainId().
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt`:
- Around line 20-29: Read the vaults once instead of calling
vaultRepository.hasVaults() and then isThorChainEnabledInAnyVault(); in
InitializeThorChainNetworkIdUseCase.invoke() call vaultRepository.getAll() into
a local variable, check if that list is empty to replace hasVaults(), and use
that same list to determine if any vault uses THORChain (the logic currently in
isThorChainEnabledInAnyVault()) before proceeding; remove the separate
hasVaults() call to avoid double repository access and possible state drift.

In
`@data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt`:
- Around line 51-62: Update the test "skips fetch and cache when no vault uses
THORChain" to assert repository interactions explicitly: after calling
useCase(), add coVerify(exactly = 1) { vaultRepository.hasVaults() } and
coVerify(exactly = 1) { vaultRepository.getAll() } so the branch where vaults
exist but none use THORChain is tightened while keeping the existing coVerify
checks for thorChainRepository.getCachedNetworkChainId() and
fetchNetworkChainId().

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2e425fad-c2d5-4e8c-a491-f48e2c70a491

📥 Commits

Reviewing files that changed from the base of the PR and between 259b4ac and c21dbff.

📒 Files selected for processing (2)
  • data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt
  • data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt

@aminsato
Copy link
Copy Markdown
Collaborator Author

aminsato commented May 3, 2026

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 3, 2026

✅ Actions performed

Full review triggered.

aminsato added 2 commits May 3, 2026 05:20
Read vaults once and derive both empty/ThorChain checks from that list,
removing the redundant hasVaults() repository call and inlining the
helper.

Co-Authored-By: aminsato <Amin.saradar@yahoo.com>
Production code now does a single vaultRepository.getAll() read; the
hasVaults() mocks were dead setups. Mock getAll() returning emptyList()
explicitly for the no-vaults branch and add coVerify(exactly = 1) for
getAll() to lock in the single-read contract.

Co-Authored-By: aminsato <Amin.saradar@yahoo.com>
@aminsato
Copy link
Copy Markdown
Collaborator Author

aminsato commented May 3, 2026

@coderabbitai both nitpicks addressed in 88d490f:

  1. Single-read refactor — production code already does this on the latest push (vaultRepository.getAll() is read once and used for both the empty check and the THORChain check). No hasVaults() call remains in the use case.

  2. Test interaction assertions — added coVerify(exactly = 1) { vaultRepository.getAll() } to the relevant cases. Also dropped the stale coEvery { vaultRepository.hasVaults() } setups (production no longer calls hasVaults()), and made the no-vaults branch explicit by mocking getAll() returns emptyList() instead of relying on the relaxed default.

All four tests still pass: ./gradlew :data:testDebugUnitTest --tests "*.InitializeThorChainNetworkIdUseCaseImplTest".

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 3, 2026

Tip

For best results, initiate chat on the files or code changes.

@aminsato Thanks for the thorough follow-up! Both points look well-handled:

  1. Single-read refactor — Consolidating to a single vaultRepository.getAll() call and deriving both checks from it is cleaner and avoids any potential consistency issues between two separate repository calls.

  2. Test interaction assertions — The explicit coVerify(exactly = 1) { vaultRepository.getAll() }, removal of the now-stale hasVaults() stubs, and the explicit emptyList() mock for the no-vaults branch all make the test intent much clearer and properly validate the interaction contract.

All four cases passing confirms the implementation is solid. ✅

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt (1)

81-88: ⚡ Quick win

Assert repository interactions in the fetch-failure test as well.

Right now this test only asserts the final state. Adding call-count checks will ensure the fetch-failure branch is actually exercised (and not silently skipped in a future regression).

Proposed test hardening
     `@Test`
     fun `keeps cached value when fetch fails`() = runTest {
         coEvery { vaultRepository.getAll() } returns listOf(vaultWithChains(Chain.ThorChain))
         coEvery { thorChainRepository.getCachedNetworkChainId() } returns "thorchain-cached"
         coEvery { thorChainRepository.fetchNetworkChainId() } throws RuntimeException("boom")
 
         useCase()
 
+        coVerify(exactly = 1) { vaultRepository.getAll() }
+        coVerify(exactly = 1) { thorChainRepository.getCachedNetworkChainId() }
+        coVerify(exactly = 1) { thorChainRepository.fetchNetworkChainId() }
         assertEquals("thorchain-cached", ThorChainHelper.THORCHAIN_NETWORK_ID)
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt`
around lines 81 - 88, Update the test "keeps cached value when fetch fails" in
InitializeThorChainNetworkIdUseCaseImplTest to verify repository interactions so
the failure branch is exercised: after invoking useCase(), add coVerify checks
that vaultRepository.getAll() was called once,
thorChainRepository.getCachedNetworkChainId() was called once, and
thorChainRepository.fetchNetworkChainId() was called once (use coVerify(exactly
= 1) for each) to assert the fetch was attempted and the cached value was read.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt`:
- Around line 81-88: Update the test "keeps cached value when fetch fails" in
InitializeThorChainNetworkIdUseCaseImplTest to verify repository interactions so
the failure branch is exercised: after invoking useCase(), add coVerify checks
that vaultRepository.getAll() was called once,
thorChainRepository.getCachedNetworkChainId() was called once, and
thorChainRepository.fetchNetworkChainId() was called once (use coVerify(exactly
= 1) for each) to assert the fetch was attempted and the cached value was read.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 87fe7a5d-2229-43a6-83d8-9b21f8157912

📥 Commits

Reviewing files that changed from the base of the PR and between 32b5a62 and 88d490f.

📒 Files selected for processing (1)
  • data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt

Co-Authored-By: aminsato <Amin.saradar@yahoo.com>
…ain coin

- Replace `vaultRepository.getAll()` (5 SQL + per-coin token hydration) with
  a single `SELECT EXISTS(...)` against the coin table for the THORChain
  presence check, so non-THORChain users no longer pay full vault hydration
  on cold start.
- Wire MainViewModel to await the first vault-list emission containing
  Chain.ThorChain and re-invoke the use case, so adding a THORChain coin
  (or importing a THORChain vault) mid-session initializes the live network
  id instead of silently relying on the default `thorchain-1` constant.
- Add a fresh-install test (`getCachedNetworkChainId() == null` + successful
  fetch) to lock down the path that wasn't covered by the existing tests.

Co-Authored-By: aminsato <Amin.saradar@yahoo.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/src/main/java/com/vultisig/wallet/app/activity/MainViewModel.kt`:
- Around line 107-118: The current block in viewModelScope.safeLaunch uses
vaultRepository.getAllAsFlow() which hydrates full Vault objects; replace that
call with a lightweight DAO/Repository flow that only observes presence of a
chain (e.g., add a method like vaultRepository.hasVaultWithChainFlow(chain:
Chain): Flow<Boolean> or getAnyVaultContainsChainFlow(Chain.ThorChain)) and
subscribe to that flow instead, then keep the same distinctUntilChanged().filter
{ it }.first() and call initializeThorChainNetworkId(); update references in
MainViewModel to use the new hasVaultWithChainFlow(Chain.ThorChain) rather than
getAllAsFlow() to avoid full vault hydration.

In
`@data/src/main/kotlin/com/vultisig/wallet/data/repositories/VaultRepository.kt`:
- Around line 95-96: The hasAnyCoinOnChain implementation uses chain.id but
CoinEntity stores the chain key as chain.raw (see toCoinEntity() writing
CoinEntity.chain from chain.raw), so change VaultRepository.hasAnyCoinOnChain to
query the DAO with chain.raw instead of chain.id (i.e., call
vaultDao.hasCoinOnChain(chain.raw)); ensure the DAO signature/column matches the
raw representation used by CoinEntity so the query and stored values use the
same key.

In
`@data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt`:
- Around line 21-23: The current invoke() in InitializeThorChainNetworkIdUseCase
only skips initialization when no vault coin exists but does not check backend
feature/config; add a pre-check for the backend config/feature flag for
THORChain before calling vaultRepository.hasAnyCoinOnChain so invoke() returns
early if THORChain is disabled by backend. Specifically, in
InitializeThorChainNetworkIdUseCase.invoke(), query the appropriate
feature/config provider (e.g., a backendConfig or featureToggle repository
method that reports whether Chain.ThorChain is enabled) and if it reports
disabled, log and return before making any network /status calls or checking
vaultRepository.hasAnyCoinOnChain. Ensure the new check uses the same
Chain.ThorChain symbol and short-circuits execution when disabled.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 94d9e012-416f-4d17-8ad6-5b7f9eed2569

📥 Commits

Reviewing files that changed from the base of the PR and between dff7c65 and d2e9b2b.

📒 Files selected for processing (5)
  • app/src/main/java/com/vultisig/wallet/app/activity/MainViewModel.kt
  • data/src/main/kotlin/com/vultisig/wallet/data/db/dao/VaultDao.kt
  • data/src/main/kotlin/com/vultisig/wallet/data/repositories/VaultRepository.kt
  • data/src/main/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCase.kt
  • data/src/test/kotlin/com/vultisig/wallet/data/usecases/InitializeThorChainNetworkIdUseCaseImplTest.kt

Comment thread app/src/main/java/com/vultisig/wallet/app/activity/MainViewModel.kt
aminsato and others added 2 commits May 4, 2026 03:55
Previously MainViewModel collected `vaultRepository.getAllAsFlow()` to wait for
the first emission containing THORChain. That hydrates the full vault graph
(coins, signers, keyshares, chainPublicKeys + per-coin token logos) on every
emission for users who never use THORChain — undoing the cold-start cost
reduction the new `EXISTS` query was meant to deliver.

Add a flow variant of the targeted query (`Flow<Boolean>` from
`SELECT EXISTS(SELECT 1 FROM coin WHERE chain = :chainId)`), expose it via
`VaultRepository.observeHasAnyCoinOnChain`, and use it from MainViewModel.
Room re-emits when the `coin` table changes, so adding a THORChain coin or
importing a THORChain vault still flips the flow and re-triggers init — without
ever building a `Vault` object on this path.

Co-Authored-By: aminsato <Amin.saradar@yahoo.com>
Copy link
Copy Markdown
Collaborator

@rkokhatskyi rkokhatskyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@johnnyluo johnnyluo enabled auto-merge May 4, 2026 22:54
@johnnyluo johnnyluo added this pull request to the merge queue May 4, 2026
Merged via the queue into main with commit 34bf71e May 4, 2026
2 checks passed
@johnnyluo johnnyluo deleted the aminsato/4366_skip_thorchain_status_when_unused branch May 4, 2026 23:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

App requests THORChain RPC status even when THORChain is disabled in backend

3 participants