Repository navigation
Conversation
FreeBank had no RPC connection in BitWindow, so its Sidechains row had no settings button, and never showed Stop, the status dot, the sync bar or Your balance while the node ran. FreeBankRPC reads all of it through the orchestrator's generic routes, so any FreeBank build works. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
FreeBankRPC is now an abstract SidechainRPC with a FreeBankLive implementation, as every other chain has. BitWindow registers FreeBankLive. The deposit modal shows "Unsupported operation: fetching a FreeBank address. Paste one from your FreeBank wallet." The other unsupported calls no longer name the app. The class doc is one line and no longer says it works for any FreeBank build: the row reports balance and sync only where the orchestrator serves them for FreeBank. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
This was referenced Sep 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Branch
mb/freebank-gear(two commits, b9fa087 and 1245ff6, on origin/master 882de28). Dart only: no proto, no chains_config, no Go.The settings button. Each row of the Sidechains table ends with a cog (
SailSVGAsset.settings). It opensChainSettingsModal: the version (the orchestrator runs--version), repository, release and install dates, download file, hash check, paths, and "Wipe and reinstall".Why FreeBank has none (and Elements Alpha and BBC have none either). The cog renders only when
SidechainsViewModel.rpcForSlot(slot)returns anRPCConnection. That switch lists the L1 daemons and the seven L2L chains, then_ => null. FreeBank (slot 130), Elements Alpha (slot 24) and BBC (slot 1) have no connection registered in BitWindow, so their cell stays an empty 32 px box.The missing connection hides more than the cog.
BinaryProvider.isConnected/isInitializing/isStopping/connectionErrorandBackendStateProvider's mirror ofListBinariesall look the chain's connection up the same way. So while freebankd ran, the FreeBank row still showed Start, with no status dot, no Stop, no sync bar and no "Your balance".What this adds.
sidechain_core/lib/rpcs/freebank_rpc.dart:abstract class FreeBankRPC extends SidechainRPCandclass FreeBankLive extends FreeBankRPC, the same shape as the other chains.FreeBankLivehas no client of its own and only talks to the orchestrator:GetSidechainBalance(BINARY_TYPE_FREEBANK)GetSyncStatusStopBinary("freebank")ListBinariesbyBackendStateProvider, like every other chainUnsupportedError, asBbcRPCdoes: addresses, sends, fees, coins, transactions, mining, withdrawal bundles and raw calls. The deposit modal shows "Unsupported operation: fetching a FreeBank address. Paste one from your FreeBank wallet." and keeps the address field open for a paste. Without this it said "FreeBank is not running" while the node ran. BitWindow therefore cannot hand out a FreeBank deposit address; the orchestrator has no generic sidechain address route.FreeBankLive()is registered inbitwindow/lib/main.dartand added to theBalanceProviderlist.rpcForSlot,_sidechainRPC,_sidechainType, the deposit modal's lookup,BackendStateProvider._rpcForBinaryNameandBinaryProvider._rpcFor. I checked every other switch that lists the L2L chains and left it alone. Those switches cover sidechain apps, update feeds, CLI names and avatars, and FreeBank has no Flutter app. For the same reasonmocks.dartgets noMockFreeBankRPC: its mocks serve each chain's own app tests, and the tests here runFreeBankLiveagainst a fake orchestrator.When FreeBank is not installed or not running. The row shows Download or Start as before. The cog still opens the settings.
BalanceProviderskips a chain that is not connected, so there is no orchestrator call and no log line. A chain that fails to answer logs its error once, as today.Orchestrator side. The C++ (Core-fork) freebankd needs two orchestrator changes, and #2392 makes both. It removes the BitAssets
bitcoin_balancereader forfreebank, so the balance comes from freebankd's own wallet throughgetwalletinfowith cookie auth. It also gives the sidechain sync probe a cookie-authenticated Core path. Land #2392 first, then this PR with it or after it. Under today's Rust entry the row already works, because the Rust node answers the unauthenticated probe andbitcoin_balance.Seen in a running BitWindow. This was on eCash betanet, with a GUI built from this branch and #2392, and a C++ freebankd running:
ChainSettingsModalwith FreeBank's version (0.2.12), repository, release and install dates, and its paths.Tests (Flutter 3.44.8 / Dart 3.12.2)
sidechain_core/test/freebank_rpc_test.dart(7 tests) runs against a fake orchestrator. It checks four things:GetSidechainBalancefor FreeBank, in sats converted to BTCStopBinaryUnsupportedError, and the deposit-address message is exactBinaryProviderreads FreeBank's state, andBalanceProvidermakes no orchestrator call for a stopped FreeBankbitwindow/test/sidechains_table_test.dartgets a new FreeBank group (5 tests):ChainSettingsModalwith the orchestrator's versionbitwindow/test/deposit_modal_test.dartgets one test: with FreeBank running, the address field stays open and the modal shows the exact message above.dart analyze: no issues in sidechain_core, bitwindow or sail_ui.dart format: clean.flutter test --concurrency=2: sidechain_core 196 passed, bitwindow 879 passed, sail_ui 489 passed.Not in this PR.
.freebankrather than an absolute path, and a Core fork has no "Binary arguments" row, because the orchestrator computes its arguments at launch. Both come from shared modal code.BbcRPC). I left them to their owners.BalanceProvider.balanceFordefaults to zero. That holds for every chain; showing the dash until a first successful read is a small generic change for a separate PR.🤖 Generated with Claude Code
https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT