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
Brings back corenode.Options, which LayerTwo-Labs#2335 removed: the endpoint wallet calls go to, getwalletinfo for a fork that predates getbalances, and the address type getnewaddress asks for. Bbc and Elements pass no options and keep the behaviour they have. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
A chain lists a helper such as grpcurl among its dependencies, and a start puts it on disk before the chain names it in its boot arguments. The desktop app fetches grpcurl as it opens, but headless drivechaind never did, so a chain that reaches the enforcer through grpcurl fell back to whatever PATH held. A failed download only warns. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
FreeBank is back on its C++ chassis: freebankd is a Core 0.16 fork with a legacy wallet, released as the same freebank-<version> tarballs the download block already matches. - Restore sidechain/freebank from before LayerTwo-Labs#2302 and route "freebank" to it. Its Args pin the node to the mainchain: the enforcer transport, the REST port of BitWindow's Core, main as the chain, the fork block at the published fork height, and the grpcurl on disk. - Add own_wallet. A Core fork with it takes no starter and no wallet provisioning: freebankd creates its wallet.dat at startup and has no createwallet or importdescriptors. The return comes before GetOrDeriveSidechainStarter, so the boot never waits on the wallet service. Balance and addresses come from the node's own wallet at the root endpoint. - chains_config: port 8454, is_bitcoin_core, own_wallet, the Core directories, "Done loading", and grpcurl as a dependency. Migration 024 carries the change to existing installs. - Drop the Rust-only pieces: the CUSF conf spec, which would write a CUSF freebank.conf into ~/.freebank where freebankd reads its own; the bitcoin_balance reader; FreeBank in the explorer rebroadcast; and the freebankd arms of the CUSF directory layout. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
FreeBank is a Core fork again, so its log is debug.log in the Core network dir, its Linux datadir sits directly under $HOME (~/.freebank), and it takes the per-network subdir the CUSF chains do not have. Port back to 8454. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
Stop and the sync probe built a bare JSON-RPC proxy for every sidechain. A Core fork answers a call without its cookie with an empty 401, which surfaced as "decode response: EOF". On shutdown and Reset that did not read as a stop that never landed, so the orchestrator waited the whole grace period before signalling, and every binary after it waited too. The sync row showed an error for a healthy node. Both now take the client nodes.New builds, which reads the cookie, and the probe asks a Core fork only for its height. A stop that finds no cookie never went out, so it goes straight to the signal. The CUSF chains get the client they had. Bbc and Elements had the same bugs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
Dependencies now names tools that must be on disk as well as daemons that must be running. own_wallet and a client's WalletPath "/" only work together, so each doc comment points at the other. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gqbnw5hYV8j1ekU6P4GgYT
FreeBank was a Node and nothing more: its own refreshbmm made and paid
its bids, so the engine refused it ("produces its own blocks"). The
FreeBank client now implements BMMNode against three node RPCs that
match Bbc's, get_block_template, connect_block and get_bmm_inclusions,
so a BitWindow user can bid for FreeBank blocks from their own wallet,
with the engine's raises and settling.
FreeBank bids with a block's merkle root rather than its hash, because
the hash is fixed only once the winning mainchain block is written into
the header. So ChainHolds walks the chain comparing merkle roots, not
block hashes as Bbc's does. TemplateOnTip reads the parent from the
block hex as Bbc's does.
freebankd answers these from v0.2.16. An older node answers "method not
found", which the client turns into a sentence naming the release it
needs. corenode gains IsMethodNotFound for that.
FreeBank joins the audited BMM transports: connect_block goes through
the Core client, so it keeps its three-minute deadline.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ES4QHkwW4ByYRrG4H39PHo
FreeBank has no app of its own, so its bidding lives in BitWindow. A button beside FreeBank's settings opens a dialog with the engine's own BMM tab, bound to FreeBank through a lazily registered BMMProvider. Every block a bid wins carries the name the node writes into its coinbase (coinbasetag in freebank.conf, read at startup), and explorers credit the block to it. So the dialog asks for that name first, offered as bitwindow-xxxx to change, and bidding waits until one is saved. Saving edits that one line of the conf and restarts the node. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ES4QHkwW4ByYRrG4H39PHo
…dding to the engine freebankd answers get_block_template with -40 while its own block for the current mainchain tip is still arriving (for up to 60 s) or while it reindexes, and with -10 or -28 while it starts. A template error made the engine skip the whole mainchain block, so a late side block cost a round. The FreeBank client now reports those codes as sidechain.ErrNotReady, and CreateBid maps that to FailedPrecondition, which the engine already retries on the same tip every tick. Other chains are unaffected. The engine is the only bidder for a node BitWindow drives, so the node is started with -bmmbidder=engine: from v0.2.16 freebankd then makes no bids of its own. Older nodes ignore unknown options. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ES4QHkwW4ByYRrG4H39PHo
Contributor
Author
|
Tested on eCash beta, with a BitWindow GUI built from this branch (it includes #2392 and #2393) and the orchestrator at a0af19c. It ran headless on a Linux box, with the GUI on Xvfb, a full betanet node at the tip (970,372), and BitWindow's own downloaded enforcer (v0.3.4, 6e5f79f).
The end-to-end bid, win and connect, with the name showing on the explorer, waits for freebankd v0.2.16, which adds the three RPCs. This stays a draft until then.
|
Contributor
Author
|
End to end on eCash beta: a bid from BitWindow won, and the engine connected the FreeBank block. Ready for review. Setup:
The run:
Notes:
|
mblowes
marked this pull request as ready for review
September 26, 2026 07:57
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.






FreeBank has no app of its own, and the BMM engine refused it, so a BitWindow user could run FreeBank but never bid for its blocks.
The FreeBank client now implements BMMNode with Bbc's three node RPCs, and a dialog on the sidechains page holds the engine's own BMM tab.
A bid from a BitWindow wallet won eCash block 970,377 on 2026-09-26, and the engine connected FreeBank block 159.