Bitcoin Forum
September 17, 2026, 05:05:24 PM *
News: Latest Bitcoin Core release: 31.1 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: [ANN] BlockYard 0.1.2 — Node monitor, 3D block-space viewer and block explorer  (Read 166 times)
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2100
Merit: 6371


Your Favorite Gay Negro from Outer Space


View Profile
September 14, 2026, 10:14:21 PM
Last edit: Today at 04:56:55 AM by BobLawblaw
Merited by klarki (5), nutildah (4), vapourminer (1), JayJuanGee (1), psycodad (1), [btc] (1)
 #1

[ANN] BlockYard 0.1.2 — a third security audit with every finding fixed, a resumable address index, one sky per board, and Scorched Yard

Repository: https://github.com/BobClawblaw/blockyard
Release: https://github.com/BobClawblaw/blockyard/releases/tag/v0.1.2
npm: npm install -g blockyard
Licence: Apache-2.0



A day after 0.1.0, here is 0.1.2. It is mostly a hardening release. We ran a third security audit over the whole codebase and fixed every finding it made, the same day, each with a test that holds the fix. The address index now resumes an interrupted build instead of starting its hours-long read again, and the test suite checks it against a second, deliberately simple implementation. Every board picks its own sky, and the Earth sky gained a warm sun, a glowing moon with its real phases, and softer clouds. And there is a new Diversion: Scorched Yard, Scorched Earth on the block engine.

If you are new here: BlockYard is a self-hosted web app you point at your own Bitcoin Core node. You get a live dashboard of the node and the network, a 3D view of the block space being built in the mempool, a block, transaction and address explorer with its own address index, a mining dashboard, opt-in exchange prices, and a kiosk view. It is plain JavaScript on Node.js with zero dependencies and zero telemetry, read-only toward your node, and it ships hardened: bound to this machine, sign-in on, HTTPS with a certificate it makes itself.



The third security audit, and every finding fixed

The first two audits were on 09-13 and 09-14. For the third, four AI auditors worked in parallel, one each on the network-facing server, the chain parsing and data stores, the browser code, and the scripts and supply chain. They ran hostile fake nodes, a real headless browser, fuzzers over the block and undo file decoders, and proofs of concept against throwaway instances. The full report, with every proof and every fix, is in the repo.

It found 1 high, 8 medium, 17 low and 6 informational issues. All of them are fixed in 0.1.2, and 55 new tests cover the fixes. The tests for the high and for the wallet fix were run against the old code and failed. For the index build, we re-ran the proof of concept against the old build, and it deleted the planted file again. What it found, in short:

  • High: a stalled stream reader was never dropped. A client that opened the live update stream and stopped reading kept every update queued in the server's memory. 400 such connections took a test instance from 73 MB to 1.5 GB in three minutes. Now a client whose connection is full is sent nothing more until it catches up. It is dropped at 4 MB behind or after a minute blocked, and one address holds at most 16 streams.
  • Open mode was safe only against browsers. With sign-in switched off, the check that refuses cross-site requests stops a browser, never a script. A script on the LAN could repoint the saved node connection, so the node's RPC cookie would go to it after the next restart. It could also use the connection test to read internal web pages through the server. With sign-in off, the node connection form now answers only on the machine itself.
  • The RPC console allowed two wallet reads that return private keys, listdescriptors and gethdkeys, through its list and get rules. Every wallet method is now refused by name.
  • The address index build deleted its output directory without checking it, so a mistyped path such as a home directory would have been wiped. It now refuses any directory that holds files an index does not write, and only ever removes its own.
  • The rest of the mediums:
    • Request bodies had no time limit.
    • A 900 KB RPC method name, sent sixty times, could push real events out of the audit log.
    • The npm package included two private notes. 0.0.9 on npm still does, and they hold internal paths, no credentials.
    • The shipped systemd unit had almost no sandbox.
  • The lows, among them:
    • A redirect after sign-in that could leave the site.
    • A few node values shown as HTML rather than text. A hostile node could inject markup, but the security policy stopped any script from running.
    • A coinbase byte that stalled pool attribution.
    • An exchange order book that could freeze the server.
    • A log line that took minutes to parse.
    • A sign-in lockout that one address could use to lock out everyone.

The report says plainly what was not found too: the fixes from both earlier audits held, the RPC allowlist resisted every case, whitespace and batch trick tried, and no credential reaches any response.



Scorched Yard

Scorched Earth, the 1991 artillery game, on BlockYard's block engine, under the Diversions menu. The field is dirt cubes that fall when the ground under them is blown away. The rules follow the original manual:

  • The shop: the manual's thirty-three weapons at the manual's prices, packs and blast radii, with the original behaviours. Leap Frog's three growing warheads, the Funky Bomb, the MIRV, the diggers, napalm and the rest.
  • Shells: each of the twenty-seven that fly looks like itself.
  • Computer players: the manual's eight personalities, from Moron to Spoiler.
  • Tanks: up to eight at the table.

What we added:

  • Controls built for a mouse and a keyboard:
    • An aim gauge over your tank, and keys that accelerate as you hold them.
    • Click an enemy to mark it. After your shot, the panel says how far over or short you were, and C sets the power that miss implies.
    • A weapon grid on W.
    • A restart button for when you are knocked out in round one.
  • Cheat mode: draws the firing solution live as you aim, under this round's wind and gravity.
  • Wind is a real fluid simulation. A small Stable Fluids solver runs behind the land, which acts as the solid floor, so the air rises over the hills and curls into eddies behind them. What you see are flow lines carried by that air. The direction holds for a round, and the strength changes every turn.
  • Opponents you can read at a glance. Each game deals a fresh mix of personalities, and each personality wears its own colour: the Shooter blue, the Chooser purple, the Spoiler red, and so on.
  • Opponents that aim like people. They work out the shot, then miss by an error that grows with distance and shrinks each time they fire at you. About one Shooter shot in four lands first time, two in five for a Chooser, and four in five for a Spoiler.
  • Attract mode: hands your seat to a computer player, for a wall screen.

One sky per board

Until now there was one global sky switch and six "star field" switches scattered across the board tabs, and nothing said which board drew which sky. Now Display settings → Sky is a map: every board that draws a sky, and a choice beside it of Galaxy, Earth or none. Below the map, one section describes each sky. Existing settings are migrated, so every board keeps what it drew.

The Galaxy is BlockYard's star field with its turning spiral arms, and is the default everywhere except Scorched Yard. The Earth sky is a real day from the machine's clock, and it got a lot of attention this release:

  • The sun is warm gold overhead and deep orange at the horizon, not white, with a soft halo.
  • The moon glows, stronger the fuller it is, and follows the real calendar through its phases.
  • The clouds: high cirrus is soft gas, no longer a row of discs.
  • Scorched Yard draws each round at its own hour.

The address index

  • An interrupted build resumes. The first build reads about 880 GB of block files and runs for hours. Stopping BlockYard, Ctrl-C in the installer, a crash or a reboot used to throw all of it away. The build now keeps a checksummed journal of what it has proven done. Block files are checkpointed at most a minute apart, and each sorted bucket is recorded as it finishes. A restart picks up from there and writes the same index, byte for byte. A journal that is torn or edited, or that doesn't match the chain, is discarded, and the log says why.
  • Checked against a second implementation. The suite builds a seeded synthetic chain: 301 blocks, 6,346 transactions and 384 addresses across eight script types, with obfuscated block and undo files. It then compares every address's balance and full history with a deliberately naive replay of the UTXO set that shares no code with the index. It checks again after the live follower folds in more blocks, and after a reorganisation and a restart. It found no discrepancy, and it fails on each of five deliberately introduced faults.
  • Three flaws in reading Core's undo files, found by property tests. Thousands of seeded encodings, truncated and byte-flipped, now check the decoders against the file formats as Core writes them.
    • An output amount above about 10 million BTC was read slightly wrong. No real output comes close.
    • An undo record cut short in its last script was accepted as whole.
    • A corrupt number could decode as an enormous block height.

Smaller things

  • Games load when first opened. The seven games no longer load with every page. What loads at startup went from 39 modules and 1.42 MB to 21 modules and 1.09 MB.
  • blockyard setup no longer echoes the RPC password. It also takes the password from a file or from stdin.
  • CI actions are pinned to commit hashes, and the game files have a hash manifest.
  • 1,070 tests, up from 945. They still need nothing but Node.

Upgrading from 0.1.0

npm install -g blockyard (or git pull), then restart. Things you may notice:

  • Node.js 22.2 or newer is now required, up from 22.0.
  • With sign-in off, the node connection form only works from the machine itself. Set auth.openNodeConfigFromNetwork: true to allow it from anywhere again. With sign-in on, an admin can use it from anywhere, as before.
  • The RPC console refuses every wallet method, reads included.
  • The systemd unit is sandboxed. If you install it again, edit its ReadWritePaths= lines to your install's data and config directories, and add your index directory.
  • Point addressIndex at a new or empty directory, or at an existing index. The build refuses anything else.

How it was made

As before, every line was written by an AI, directed by a human. That includes the audit, the fixes, the fluid simulation, the tests and this post. The operator decided what mattered, what was wrong and what looked bad, and never typed a line of it. It is still experimental pre-release software. Expect bugs, and tell us what broke.

Links


Apache-2.0. Run your own node.
cAPSLOCK
Legendary
*
Offline

Activity: 4508
Merit: 8197


Balakay2b edition!


View Profile
September 14, 2026, 11:42:11 PM
 #2

Cool!
Cinexa
Member
**
Offline

Activity: 82
Merit: 113


View Profile WWW
September 15, 2026, 02:09:54 PM
Merited by BobLawblaw (5), vapourminer (4)
 #3

Looked through the github, the v0.0.9 release, the npm package, and the security/docs links. A ton of the marketing adds up: Apache-2.0, empty dependencies, npm tarball matches the github one, docs exist, and node --test gave me 862/862 passes (seems like release notes that say 864 are slightly off). CSP, realpath-contained static serving, scrypt sessions, and the default-deny rpc allowlist are real engineering, not just fluff in the readme.

Default is 0.0.0.0 with auth disabled, so anyone that can hit port 21000 gets node state plus the read RPC console. Your own published audit also shows you previously shipped a HIGH open-mode credential leak on /api/config/node/test (fixed same day, with a PoC in-repo) - good that you documented it, bad that it existed at all. AI self-audits are not a value-add independent review. Also plan for ~125 GB of address-index disk on the same machine as Core, this is not a light side panel.

Interesting project, but I would run it only bound to 127.0.0.1, with BLOCKYARD_AUTH=1, behind SSH/TLS, and having read the security docs - not as a casual LAN dashboard.
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2100
Merit: 6371


Your Favorite Gay Negro from Outer Space


View Profile
September 15, 2026, 03:29:40 PM
Last edit: September 15, 2026, 07:14:12 PM by BobLawblaw
 #4

Interesting project, but I would run it only bound to 127.0.0.1, with BLOCKYARD_AUTH=1, behind SSH/TLS, and having read the security docs - not as a casual LAN dashboard.

I'll harden it for the official 0.1.0 release... next week probably.

Appreciate the feedback.

EDIT: Hope to have 0.0.10 out later this afternoon that will be hardened by default. I got DOOM up-and-running with zero dependancies in a DOS Emulator, running shareware v1.9 in the Diversions.

BobLawblaw (OP)
Legendary
*
Offline

Activity: 2100
Merit: 6371


Your Favorite Gay Negro from Outer Space


View Profile
September 16, 2026, 01:40:25 AM
 #5

0.0.9 Archive Post

[ANN] BlockYard 0.0.9 — a live monitor, 3D block-space viewer and block explorer for your own Bitcoin Core node. Zero dependencies. 100% AI-written, human-directed.

Repository: https://github.com/BobClawblaw/blockyard
Release: https://github.com/BobClawblaw/blockyard/releases/tag/v0.0.9
npm: npm install -g blockyard
Licence: Apache-2.0



What it is

BlockYard is a self-hosted web app you point at your own Bitcoin Core node. Open a browser and you get a live dashboard of the node and the network, a 3D view of the block space being built in the mempool, a full block / transaction / address explorer, exchange prices with order-book depth, and a kiosk view for a wall screen. Every number on every page comes from your node or from a public exchange API — no third party sits between you and the chain.

It is written in plain JavaScript on Node.js with zero dependencies. Not "few": zero. package.json has no dependencies and no devDependencies. No framework, no bundler, no CSS library, no chart library, no 3D library, no test framework beyond node:test. There is no CDN in the browser app and no telemetry anywhere. npm install installs nothing but BlockYard itself. The 862 unit tests run with npm test and need nothing but Node.

It is read-only toward your node by default. It never signs, never spends, never asks for a wallet.

What it does

Live monitor. The Overview is the node at a glance: sync state with an honest ETA, block flow (the blocks being projected, the block being built, recent blocks with who mined them), mempool size and fee charts, peers and bandwidth, the node's event stream, and a provenance table that says where every figure came from and how old it is. Pages for Chain & Sync, Mempool, Peers, Network, Mining, Events, and a read-only RPC console behind a default-deny allowlist. Everything updates live over one server-sent-events stream; several people can watch the same node from several screens.

Block space, in 3D. The next block's worth of the mempool as a board of glowing stones: area is vbytes, colour is feerate. When the pool changes, the blocks lift, travel in collision-free lanes and land under gravity. At rest the board comes alive with thirty idle effects — ripples, light cycles, a lightning ball, ball lightning that arcs from stone to stone, a UFO's tractor beam, Missile Command, a centipede, fireworks, a code rain, a spiral galaxy turning behind it — every one of them a switch, with sliders for how often they play. Neon tubes, metallic and chrome finishes, a movable lamp, perspective, a star field. It is the part of the project we spent the most time on because it is the part that makes people stop and look.



An explorer that looks the part. Search a height, a block hash, a txid or an address. Block pages with the full transaction list, fee distribution and miner attribution (151 pools). Transaction pages with fee, fee rate and dollar value, feature badges (SegWit, Taproot, RBF, consolidation, OP_RETURN, coinbase), a flow diagram from inputs to outputs, and links to where every coin came from and where it went.

Address pages with full history, balance and unspent outputs. Bitcoin Core has no address index at any setting — getaddressbalance and friends belong to forks, and stock Core answers Method not found — so BlockYard builds its own from the node's block and undo files: one row per (address, transaction) with the net amount, kept current as blocks arrive, balances checked against scantxoutset to the satoshi. It builds in the background the first time you start (expect a few hours, and ~125 GB of disk) while every other page keeps working.



Markets. Public prices from Coinbase, Kraken, Bitstamp, Bitfinex and OKX: a 3D candle board on the same engine as the block space, with a neon price line and its own set of effects; a precise flat candlestick chart; an exchange table; and a bitcoinity-style order-book depth chart. Fetched by the server only while someone is looking at the page.



Kiosk. The 3D markets board, a price panel and the block-space board side by side, full screen in one click. Put it on the wall.

Diversions. Three playable games built on the same 3D engine, because we could: Tetrust (Tetris in the block-space well, with music synthesised in the browser), Blockout (Breakout against a wall of block-space stones) and Blockanoid (Arkanoid, with capsules and enemies).

Multi-user, with accounts. Viewer, operator and admin roles, rate limiting, a security posture documented in the repo. Display settings live on the server, so every screen sees the same board.

Setting it up

You need Bitcoin Core 25.0 or later with server=1 and txindex=1, Node.js 22 or later, and BlockYard on the same machine as the node — it reads the node's block files to build the address index, so a node on another machine is not supported.

From npm (the package is blockyard; a global install keeps its config and index under ~/.blockyard):

Code:
npm install -g blockyard
blockyard setup
blockyard start

From GitHub (a checkout keeps its config in config/ and its index in data/ inside the checkout — handy if you want to read the code, run the tests, or run the current main):

Code:
git clone https://github.com/BobClawblaw/blockyard.git
cd blockyard
npm test          # optional: the 862 unit tests, nothing to install first
npm run setup
npm start

Either way, setup finds your bitcoin.conf, reads the RPC settings out of it, proves the credentials, the chain, txindex, the block files and how fast the node answers, writes its config, and starts the address index build in the background with a notification in the app when it is done. Then open http://127.0.0.1:21000. The 0.0.9 release tarball is also on the GitHub release page. Full walk-through for macOS and Linux in docs/GETTING-STARTED.md; Windows is in the CI matrix.

Uninstalling. BlockYard touches nothing outside its own directories — it never edits bitcoin.conf and leaves the node exactly as it found it — so removing it is deleting them. From npm: stop it, then

Code:
npm uninstall -g blockyard
rm -rf ~/.blockyard          # its config, history, accounts and the address index

From a GitHub checkout: stop it and delete the checkout (config/ and data/, index included, live inside it). If you put the index somewhere else at setup time, delete that directory too; if you installed the systemd unit, docs/INSTALL.md §12 has the three lines for that.

How it was made — a love letter to Bitcoin and to agentic AI

Every line of BlockYard was written by an AI, directed by a human. The server, the browser app, the 3D engine, the games, the tests, the installer and every document in the repository — 100% machine-generated code, under the direction of one human operator who never typed a line of it. The direction was real work: what to build, what was wrong, what was ugly, what was too often, what was too dark, what did not translate. The coding was the machine's.

The auditing was also done by AI, and it is all published in the repository: two security audits, a defects register with the measurements behind every claim, and a measurements log where every performance number in the docs was actually taken. When the audit found something, the fix and the finding are both in the history. We think that is the honest way to ship a thing like this: not "trust us", but "here is everything, including what we got wrong".

This is a love letter to Bitcoin — a node is a beautiful thing, and it deserves a front end that shows you what it is doing without asking anyone else — and a love letter to agentic AI, because a year ago a project of this size with this level of polish was not something one person could direct into existence in their spare time. Now it is. We wanted to find out what that looks like when you take it all the way, and this is what it looks like.

It is experimental pre-release software. Expect bugs. The number is 0.0.9 for a reason. If you run it, tell us what broke — issues and pull requests are open — and if you read the code, tell us what you think of code that no human wrote.

Links


Apache-2.0. Run your own node.
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2100
Merit: 6371


Your Favorite Gay Negro from Outer Space


View Profile
September 16, 2026, 07:26:27 PM
 #6

Added a re-creation of the classic 90's game "Scorched Earth", and it's now included as a Diversion as "Scorched Yard".

npm has not been updated, but syncing latest from github is the best way to stay up-to-date with my in-progress tinkering.

Enjoy.

Cinexa
Member
**
Offline

Activity: 82
Merit: 113


View Profile WWW
Today at 12:09:03 AM
Merited by vapourminer (1)
 #7

Good move archiving the 0.0.9 post, and making 0.1.0 your true baseline - that one was definitely a rough draft. Reviewed 0.1.0 vs. what I've highlighted above. Defaults are in a far more sensible place now: 127.0.0.1, auth on on first start, HTTPS default, market polling off until somebody turns it on. (That's actual follow-through, not just changelog noise.) As a self-hosted Core front-end that's much less intimidating to try than 0.0.9.

Scorched Yard's another fun distraction over that DOOM / Quake stuff too. Confirmed this is in main, npm is still on 0.1.0, so yup – GitHub sync is the right choice for anyone chasing your latest hacking.
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2100
Merit: 6371


Your Favorite Gay Negro from Outer Space


View Profile
Today at 04:51:03 AM
Merited by OutOfMemory (1)
 #8

Archive Post 0.1.0



[ANN] BlockYard 0.1.0 — a live monitor, 3D block-space viewer and block explorer for your own Bitcoin Core node. Zero dependencies. Zero telemetry. Hardened by default. 100% AI-written, human-directed.

Repository: https://github.com/BobClawblaw/blockyard
Release: https://github.com/BobClawblaw/blockyard/releases/tag/v0.1.0
npm: npm install -g blockyard
Licence: Apache-2.0



Two days ago we posted 0.0.9, the initial release. This is 0.1.0 — everything since, in one release, and the first one we would call the real starting point. The short version: it ships hardened by default, it makes no outbound connection to anyone but your node until you say so, every page fits one screen, the layout's colours are yours to choose, the Mining tab is a proper dashboard, and yes, it runs DOOM. Also Wolfenstein 3D and Quake.

What it is

BlockYard is a self-hosted web app you point at your own Bitcoin Core node. Open a browser and you get a live dashboard of the node and the network, a 3D view of the block space being built in the mempool, a full block / transaction / address explorer with its own address index, exchange prices with order-book depth (opt-in), a mining dashboard, and a kiosk view for a wall screen. Every number on every page comes from your node — or, only if you switch it on, from a public exchange API.

It is written in plain JavaScript on Node.js with zero dependencies. Not "few": zero. package.json has no dependencies and no devDependencies. No framework, no bundler, no CSS library, no chart library, no 3D library, no TLS library — the certificate generator is ours too — and no test framework beyond node:test. There is no CDN in the browser app. npm install installs nothing but BlockYard itself. The 945 unit tests run with npm test and need nothing but Node.

It is read-only toward your node by default. It never signs, never spends, never asks for a wallet.

Zero telemetry, and we mean it

The first review of 0.0.9 in this thread pointed out, correctly, that a monitor which binds every interface with no sign-in is not something to ship. 0.1.0 is the answer, and it goes further than the review asked.

  • Nothing leaves your machine unless you switch it on. Out of the box BlockYard talks to your node and to nobody else. No update check, no crash reports, no analytics, no fonts or scripts from a CDN, no "phone home" of any kind — there is no code path for it. The one feature that talks to the outside world, the exchange price feed, is off by default and behind an explicit switch: Display settings → Markets & Price → Enable market polling. Until a human ticks that box, the Markets and Kiosk tabs say so and show nothing, the Overview shows no price line and the explorer shows no dollar figures. Tick it and the server polls five exchanges' public APIs — only while someone is looking at the page, and it stops ten minutes after the last look. Untick it and the feed parks at once. An operator who wants to be certain can set BLOCKYARD_MARKETS=0 and the switch cannot turn it on.
  • Bound to this machine. The default bind is 127.0.0.1. Reach it from elsewhere over an SSH tunnel, or bind a LAN address on purpose — the installer asks twice before it writes a non-loopback address.
  • Sign-in on. The first start creates the admin account and prints its password once (or takes it from BLOCKYARD_ADMIN_PASSWORD). Passwords are stored as scrypt hashes; there are viewer, operator and admin roles, rate limits and an audit log. Open read-only access is still a choice (BLOCKYARD_AUTH=0) — announced at boot, never silent.
  • HTTPS by default. Every listener serves HTTPS. With no certificate of your own named, the first start makes a self-signed one — and because the project has no dependencies, that meant writing an X.509 certificate generator in plain Node: a v3 certificate assembled in DER, ECDSA P-256 over SHA-256, naming the bound hosts, the machine's addresses and its hostname, remade near expiry or when a bound address is missing from it. The browser warns once per address and remembers it. Your own certificate replaces it, blockyard tls remakes it with extra names, and BLOCKYARD_TLS=0 serves plain HTTP behind your own reverse proxy.
  • A content-security policy with no inline scripts and no inline styles, a default-deny allowlist in front of the RPC console, and a security posture written up in the repo with two AI audits and their remediations.

What it does

Live monitor. The Overview is the node at a glance: sync state with an honest ETA, block flow (the blocks being projected, the block being built, recent blocks with who mined them), mempool size and fee charts, peers and bandwidth, the node's event stream, and a provenance table that says where every figure came from and how old it is. Pages for Chain & Sync, Mempool, Peers, Network, Mining, Events, and a read-only RPC console. Everything updates live over one server-sent-events stream; several people can watch the same node from several screens. New in 0.1.0: every page fits one screen — we measured each tab at a laptop's 1093×945 and at 1600×1000 and packed it until it did.

Block space, in 3D. The next block's worth of the mempool as a board of glowing stones: area is vbytes, colour is feerate. When the pool changes, the blocks lift, travel in collision-free lanes and land under gravity. At rest the board comes alive with thirty-odd idle effects — ripples, light cycles, ball lightning, a UFO's tractor beam, Missile Command, a centipede, fireworks, a supernova, an x-ray sweep, a spiral galaxy turning behind it — every one a switch, with sliders for how often they play. Neon tubes, metallic and chrome finishes, a movable lamp, perspective, a star field.



Mining, the mempool.space way. New in 0.1.0: reward stats over the last 144 blocks, the difficulty period with the estimated and previous change and the next halving, a week of pools as a labelled pie (every pool named beside its slice with a leader line), a year of hashrate with the difficulty's steps, and the last twelve adjustments — laid out like mempool.space's mining dashboard with a View more » on each card that opens it full screen. Every figure comes from your own node's getblockstats and block headers; dollar figures appear only if you switched the price feed on.



An explorer that looks the part. Search a height, a block hash, a txid or an address. Block pages with the full transaction list, fee distribution and miner attribution (151 pools). Transaction pages with fee, fee rate, feature badges (SegWit, Taproot, RBF, consolidation, OP_RETURN, coinbase), a flow diagram from inputs to outputs, and links to where every coin came from and where it went. Address pages with full history, balance and unspent outputs — Bitcoin Core has no address index at any setting, so BlockYard builds its own from the node's block and undo files, kept current as blocks arrive, balances checked against scantxoutset to the satoshi. It builds in the background the first time you start (a few hours, ~125 GB of disk) while every other page keeps working.



Markets (opt-in). Public prices from Coinbase, Kraken, Bitstamp, Bitfinex and OKX: a 3D candle board on the same engine as the block space with a neon price line and its own effects — a black hole that crosses the chart and bends the price line round it, a supernova, a light saber, a light curtain — a precise flat candlestick chart, an exchange table and a bitcoinity-style order-book depth chart. Fetched by the server only while someone is looking, and only after you tick the switch.



Appearance. New in 0.1.0: the layout's colours are a setting. Light, Dark or System (follows the OS); five themes as cards with swatches — BlockYard (the shipped look), Mono, Nous, GitHub Light/Dark Default and Catppuccin Latte/Mocha — and Custom: nine colour pickers with the rest of the scheme derived from them, and a customise button that copies the current theme into the pickers so you start from a look. The charts' axes, grids and tooltips follow the theme too. Saved on the server, so every screen agrees.



Kiosk. The 3D markets board, a price panel and the block-space board side by side, full screen in one click. Put it on the wall.



Can it run DOOM?

Naturally. Someone asked after 0.0.9, and the answer is now Wolfenstein 3D, DOOM and Quake under the Diversions menu, next to Tetrust, Blockout and Blockanoid. The three id Software shareware releases run unmodified — the original WOLF3D.EXE, DOOM.EXE and QUAKE.EXE with their data files, dropped into a games/ directory — on a PC emulated in the browser, written for this project with no dependencies: an i386 interpreter with a 487, real mode for Wolfenstein, the DOS/4GW and go32/CWSDPMI extenders for DOOM and Quake, DOS, DPMI, BIOS, timer, keyboard, a planar VGA, and a Sound Blaster Pro 2 with an OPL3 for the music and effects. Demos, menus, savegames, high scores and ENDOOM all work; savegames stay in your browser. The server never touches the game files except to hand them to the page.

Getting it to a good frame rate was the interesting part. The page's content-security policy forbids eval, so there is no JIT to hide behind: the interpreter has to run tens of millions of x86 instructions a second in plain JavaScript. What that took, in the order we found it:
  • Every value is an int32. An unsigned 32-bit result written as >>> 0 above 2^31 becomes a double, and a double in a closure variable is an allocation; the first cut spent its time in the garbage collector. Unsigned comparisons flip the sign bit instead.
  • Lazy flags. Arithmetic records its operands and result in an Int32Array; CF, ZF, SF, OF, PF and AF are computed only when something reads them — a conditional jump reads a compare's operands directly.
  • One try/catch around the loop, not around each instruction (that alone cost 14%).
  • Decoded instructions are cached. Each instruction is decoded once into three int32s — a handler number with its registers packed beside it, a displacement, an immediate — in an Int32Array per 4 KB page, and the run loop dispatches on the handler number with one switch. Not closures: a closure per instruction made every call site megamorphic and ran slower than the plain interpreter. Writes into a page holding decoded code invalidate only the instructions they overlap, which matters because DOOM and Quake both patch constants into their own span-drawing code on every call.
  • A handler per ALU operation with its flag bookkeeping inline rather than one shared routine branching on the operation, and the x87 forms Quake runs most decoded to handlers of their own.
  • Memory addresses formed inline in the loop before the switch, and aligned reads and writes inlined in the hottest moves: the switch is too big for V8 to inline helpers into every case, and those calls were most of what was left.
The numbers, all in the repo's measurements log: Quake went from 77 to about 141 million instructions a second on one core, and its timedemo demo1 from 28.9 to 52.5 frames a second of wall time; in the browser Quake plays at 40–50 fps, DOOM at its own 35 fps cap with a hundred million instructions a second to spare, and Wolfenstein 3D at its full 70 fps. Two things we tried and removed, because the measurements said so: fused compare-and-branch dispatch, and "no flags" instruction forms chosen by flag liveness — the look-ahead re-ran on every re-decode of DOOM's self-patching drawer and gained nothing.

Setting it up

You need Bitcoin Core 25.0 or later with server=1 and txindex=1, Node.js 22 or later, and BlockYard on the same machine as the node — it reads the node's block files to build the address index.

From npm (config and index under ~/.blockyard):

Code:
npm install -g blockyard
blockyard setup
blockyard start

From GitHub (config in config/ and the index in data/ inside the checkout):

Code:
git clone https://github.com/BobClawblaw/blockyard.git
cd blockyard
npm test          # optional: the 945 unit tests, nothing to install first
npm run setup
npm start

setup finds your bitcoin.conf, reads the RPC settings out of it, proves the credentials, the chain, txindex, the block files and how fast the node answers, writes its config, and starts the address index build in the background. The first start prints listening on https://127.0.0.1:21000 and the admin password, once. Open https://127.0.0.1:21000, accept the self-signed certificate, sign in. If you want prices, tick Display settings → Markets & Price → Enable market polling. Full walk-through for macOS and Linux in docs/GETTING-STARTED.md.

Updating from 0.0.9: git pull and restart. Because the defaults hardened, the first start after the update serves HTTPS on the same port, creates the admin account and prints its password once, and leaves the price feed off until you tick it. docs/INSTALL.md §11 has the details, including how to keep an open, plain-HTTP setup if that is what you want.

Uninstalling is deleting BlockYard's own directories; it never edits bitcoin.conf and leaves the node exactly as it found it.

Changelog since 0.0.9

Security
  • Binds 127.0.0.1 by default; sign-in on by default with a first-start admin account; the installer asks twice before writing a non-loopback bind.
  • HTTPS by default, with a self-signed certificate made in pure Node on the first start; blockyard tls to remake it; BLOCKYARD_TLS=0 for a proxy.
  • Market polling off by default behind an explicit switch shared by every screen; BLOCKYARD_MARKETS=0 removes the feed entirely. No other outbound connection exists.
Appearance
  • A first Display settings tab: Light / Dark / System, five themes (BlockYard, Mono, Nous, GitHub, Catppuccin) each with a light and a dark face, and a Custom scheme from nine pickers with the rest derived; "customise" copies the current theme into the pickers. Charts follow the theme.
Mining
  • The network row: 144-block reward stats, the difficulty period, a week of pools as a labelled pie, a year of hashrate and difficulty, the last twelve adjustments — from this node alone.
  • mempool.space's two-column layout with View more » panels; dollar figures via a new /api/price that never starts the polling itself.
  • A streak of stale full-pool poll drops is one event with a counter, not one event per drop.
Every tab on one screen
  • Overview, Block space, Chain & Sync, Mempool, Explorer, Markets, Kiosk, Peers, Network, Mining, Events, Node & RPC, Admin, About, the settings sheet, sign-in and the 404 page, each measured and packed; Markets puts the exchange table and the depth chart side by side; the Diversions take the window's height; the DOS screen is always 4:3.
DOS Diversions
  • Wolfenstein 3D, DOOM and Quake on an emulated PC written here (i386 + 487, real mode, DOS/4GW and DJGPP extenders, VGA, Sound Blaster Pro 2 + OPL3), with the optimisations above; an exit from full screen (button, or hold Esc).
Markets and the effects
  • New: black hole (crossing the board, bending the price line), supernova (white-hot flash, 128 gas plumes, a violet nebula, a pulsar), x-ray, breathe, light saber; fireworks as a real display (off by default); the energy pulse as plasma; the scan line as a light curtain; ball lightning as a light source.
  • The Markets board keeps its price fit across refreshes; effects never repeat before every other has played; layered soft fills add up correctly; a Kiosk test plays every effect on the small panels.
Fixed
  • The donation QR shows on Safari (a PNG instead of 800 SVG rects).
  • A dead address-index worker fails the build with a named cause instead of hanging it at "1 s left" for an hour and a half.
Full detail, every item: https://github.com/BobClawblaw/blockyard/blob/main/CHANGELOG.md

How it was made

Every line of BlockYard was written by an AI, directed by a human. The server, the browser app, the 3D engine, the games, the PC emulator, the certificate generator, the tests, the installer and every document — machine-generated, under the direction of one human operator who never typed a line of it. The direction was real work: what to build, what was wrong, what was ugly, what was too often, what was too dark, what did not fit on the screen. The coding was the machine's, and so was the auditing; the audits, the defects register and the measurements behind every number in the docs are all in the repository. When a review in this thread found a problem, the fix landed the next day and this post says so.

It is still experimental pre-release software. Expect bugs. If you run it, tell us what broke — issues and pull requests are open — and if you read the code, tell us what you think of code that no human wrote.

Links


Apache-2.0. Run your own node.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!