OpenSats Work-Log 9

Thursday, April 30, 2026

This is a copy of the 9th work-log I sent to OpenSats for my LTS grant.

Disclaimer: Some information that is not (or not yet) meant to be published may have been redacted.

What did you work on?

In February, March, and April of 2026, I flew to Brazil to mentor upcoming Vinteum and B4OS devs as well as to give multiple talks at btc++, worked on peer-observer by writing code and reviewing code, posted to the BNOC forum, worked on mainnet-observer and various bitcoin-data datasets, and more.

Publications / Talks / Streams

BNOC

https://bnoc.xyz

THe BNOC forum saw quite a bit of activity over the last few months. Happy to see it being adopted. BNOC now has a data-share (https://bitcoin-noc.github.io/datashare-website/). Brink.dev offered some of their unused Google Drive space for this (thanks Brink!). I want to highlight some BNOC topics I started or contributed here:

peer-observer

Tooling

https://github.com/peer-observer/peer-observer

After visiting Vinteum BDL and the B4OS Residency in Brazil and presenting on, for example, peer-observer, I got help from a bunch new developers picking up issues and tasks. My main work shifted from writing code myself to reviewing code someone else (or their LLM) wrote. I still hope to find time to push forward changes myself too, but am currently still behind on reviewing PRs. Many of the projects that were picked up by others resulted in large additions of code that require focus and time to review. This is, as before, a limited resource for me next to all the other stuff I have been working and thinking about.

I posted a bit more general update about the peer-observer project on delving: https://delvingbitcoin.org/t/peer-observer-a-tool-and-infrastructure-for-monitoring-the-bitcoin-p2p-network-for-attacks-and-anomalies/1988/3 - but also want to highlight a few PRs and issues below:

  • #350: metrics-tool: enhanced orphanage metrics: I’ve added basic orphanage monitoring in https://github.com/peer-observer/peer-observer/pull/340, but I think this can be enhanced quite a bit. I think this is important, as the orphanage in it’s current state is rather new code (https://github.com/bitcoin/bitcoin/pull/31829), but it requires time and focus to come up with reasonable things to monitor. So keeping it as a project for the future.
  • #351: rpc-extractor: use version-agnostic corepc model types where possible; otherwise use version-specific types explicitly
  • #352: add: metric for private transaction broadcast connections: With the merge of private transaction broadcast in Bitcoin Core and it’s release in v31.0, I wanted to have a metric for the number of private broadcast connections arriving at a node. This is implemented by naively counting the number of version messages we receive with /pynode:0.0.1/.
  • #360: add: try catching intermittent test failures in CI: The peer-observer tooling has integration tests, and these are, as all integration tests, not immune to weird races and timing issues on slower CI runners. To catch intermittent failures a bit earlier, the integration test are now run multiple times in a row at the end of CI.
  • #364: refactor: Websocket clients can now subscribe to specific subjects: To not spam the websocket HTML pages with unrelated messages, it’s nice to be able to subscribe to only the message types one is interested in. @m4ycon implemented this and I reviewed it.
  • #370: Implement an experimental ipc-extractor against the Bitcoin Core chain IPC interface (proposed in #29409): Opened this issue with the hope of facilitating some more review and testing of https://github.com/bitcoin/bitcoin/pull/29409.
  • #379: Add IPC extractor: I’ve reviewed this PR by @xyzconstant which initially tried to address #370, but now implements an minimal, experimental IPC-extractor.
  • #373: add(archiver, replayer): archive and replay peer-observer events: peer-observer produces a bunch of events. To archive and later replay these events, @octaviolucca worked on tooling for this. I tested and reviewed the PR.
  • #383: Alerts tool: We know that some node or network behavior can be detected by pre-defined heuristics. To alert on these conditions, @GuiSchet worked on a minimal alerts tool and I reviewed and tested this.
  • #386: add(rpc-extractor, metrics): estimatesmartfee metric: @m4ycon added support for feerate estimation events and metrics and I reviewed.
  • and many more…

infra

https://github.com/peer-observer/infra-library

  • #85: change: proxy node endpoints through single nginx: Previously, we were opening multiple ports on the wireguard interface to have the webserver fetch from nodes. This simplified this a lot.
  • #88: change: split nix fmt step into own ci job
  • #93: add: parca server & agent module for continues profiling: To have data on where the nodes spend their CPU time, for example to analyze DoS attacks, we now use parca.dev for continues profiling on the nodes.
  • #98: add: option to enable log-extractor: with the log-extractor merged into the tooling repository, I added optional support for it on the infra side. https://github.com/peer-observer/infra-library/pull/111 later turned it on by default.
  • #110: Support rpc-extractor prometheus metrics scraping: added support for the rpc-fetch metrics from https://github.com/peer-observer/peer-observer/pull/339 on the infra side.
  • #117: update: Bitcoin Core v31.0rc1 by default: to test release candidates…
  • #130: update: Bitcoin Core v31.0rc1 -> v31.0 (release): and then later upgraded to the release
  • and many more…

0xB10C/mainnet-observer

bitcoin-data/stale-blocks

Dataset of stale blocks observed on the Bitcoin network.

Added a bunch of stale blocks to the dataset and later automated parts of it:

  • #66: add: 935497
  • #67: add: add stale block at 935976
  • #70: Automated: add recent stale block(s) 2026-02-18
  • #74: Automated: add recent stale block(s) 2026-02-19
  • #75: Automated: add recent stale block(s) 2026-02-20
  • #89: Automated: add recent stale block(s) 2026-03-23
  • #97: add: stale blocks at 945119 and 945952
  • #98: add: stale block at 946239
  • #99: Automated: add recent stale block(s) 2026-04-25

Reviewed a bunch of PRs from people adding their stale blocks (thank you!):

  • #76: add my stale blocks
  • #77: Add stale block headers and block data from ancient ssd
  • #80: Add my stale blocks from old chain at 389533
  • #82: Add block 929640
  • #83: Automated: add recent stale block(s) 2026-03-02
  • #90: add: stale blocks for 941881 & 941882
  • #94: add: 1,089 Namecoin AuxPoW-recovered stale block headers (2011-2026)
  • #96: add: (some) 7 March 2013 fork headers
  • #86: add: stale headers and blocks by anon

Some other improvements:

  • #68: Add automatic fetch of stale-blocks from mempool-space endpoints: This reduces the manual work I have to do, but still requires review and adding blocks mempool-space didn’t see.
  • #71: Add GH pages website: Will added a page…
  • #72: add stale block chart: and a chart for the page
  • #84: (Re)license the stale-block dataset and surrounding code (CC0 and MIT): As the dataset didn’t have a license when I originally started working on it, I retroactively got all contributors to agree to re-license it under CC0 and did so in #85: add licenses for code and data

0xB10C/nix

A collection of Nix packages and modules for software I’m using.

  • https://github.com/0xb10c/nix

  • #295: change: ci: update packages in parallel: instead of evaluating package updates one at a time, we can do so in parallel

  • #318: add: rpc-extractor support –prometheus-address: added support for the rpc-extractors new prometheus endpoint

  • #321: remove: useFetchCargoVendor from github-metadata-backup

  • #326: build: fix flake build on darwin: reviewed to add support for darwin

  • #340: Update github-metadata-mirror to python version

  • #348: change: enable mainnet- and stratum-observer in macOS CI

  • #351: add: Bitcoin Core v31 tracing

bitcoin-core/guix.sigs

Added my signed GUIX build signatures for a bunch of releases and release candidates.

  • #2218: add v29.3 all b10c
  • #2228: add: 28.4rc1 noncodesigned b10c
  • #2274: add: 28.4rc2 b10c all
  • #2276: add 31.0rc1 b10c non-codesigned
  • #2321: add: 28.4 all b10c
  • #2327: v31.0rc2 non-codesigned b10c
  • #2341: add 31.0rc2 all
  • #2345: ci: Move cirrus.yml to GHA yaml
  • #2357: add: 31.rc4 all
  • #2379: add: b10c v31.0 non-codesigned
  • #2393: add: v31.0 all b10c

bitcoin/bitcoin

0xB10C/github-metadata-mirror

GitHub metadata mirror - generates a GitHub metadata (Issues/PRs) mirror - uses https://github.com/0xB10C/github-metadata-backup data

bitcoin-data/block-arrival-times

A dataset of millisecond-precision block arrival timestamps as seen by multiple Bitcoin nodes.

0xB10C/rawtx-rs

Makes information about Bitcoin transactions accessible. This crate should be considered as ‘unfinished’ and ‘under development’.

https://github.com/0xB10C/rawtx-rs

  • #40: add: InputSigChecks and TransactionSigChecks traits including tests: reviewed
  • #42: Misc cleanups
  • #43: WIP: benchmarks and performance improvements: started working on benchmarks and improvements, but haven’t gotten to finishing it yet.

NixOS/nixpkgs

https://github.com/NixOS/nixpkgs

  • #511775: bitcoin: 30.2 -> 31.0: updated the Nixpkgs bitcoin package shortly after release
  • #512820: Backport release-25.11 bitcoin: 30.2 -> 31.0:

0xB10C/p2p-observer

https://github.com/0xB10C/p2p-observer

Started working on a WIP and DO_NOT_USE_YET tool for active P2P measurements across the network (i.e. Block Propagation Measurement Tooling). While I’ve used it for https://b10c.me/observations/16-slow-block-propagation-validation-signet/, I don’t think it’s ready for any real usage yet. I need to find time to polish it a bunch and get it ready for mainnet. Should be good to have monitoring for block propagation and similar.

bitcoin-core/asmap-data

Joining in on three ASMap file generation runs.

https://github.com/bitcoin-core/asmap-data

  • #44: Collaborative Launch 1772726400 (Thursday March 5, 2026 16:00 UTC)
  • #46: Collaborative Launch 1775145600 (Thursday April 2, 2026 16:00 UTC)
  • #47: Collaborative Launch 1776960000 (Thursday April 23, 2026 16:00 UTC)

jamesob/discourse-archive

  • #3: fix: off-by-one error in post fetching: Opened a PR for a off-by-one bug in the discourse archive script. Thinking about taking this over in my fork and adding mirroring and image archiving too.

Plans for Next Quarter

In the next quarter, next to continuing e.g. join asmap run, maintain the bitcoin-data datasets, GUIX building for Bitcoin Core (and more) I plan to work on in roughly the order of importance to me:

  • peer-observer: continue reviewing PRs from contributors and pick up some of the issues I’ve hadn’t had time to work on during the last months. There’s a bunch of followups to pick up from the PRs that added the experimental Proof-of-Concepts. Generally, I want to work towards a peer-observer v1.0 and make sure it’s stable.
  • BNOC: Over the past few months, the BNOC forum has attracted regular visitors and posters. I want to continue building this out, posting there, moderating, and working on adjacent topics like the BNOC data share. A strech goal includes an unofficial, optional, but well documented banlist for IP addresses of mass-connectors, spy-nodes, and similar that exist on the network today.
  • I want to work on simulations for https://github.com/bitcoin/bitcoin/issues/34019, as I happen to have some addrman snapshots that are useful. The simulation would also show that a potential fix mitigates the problem.
  • REDACTED
  • IPC based tracing interface: I hope to get to benchmarking the feasibility of an IPC based Events/tracing interface that allows us to decide if we want to move forward with it or not.
  • p2p-observer: I want to bring this into a runnable, and well rounded place so we can start capturing block propagation measurements.
  • work on a benchmark for ASMap lookups in Bitcoin Core and do the same for a Rust asmap library I’ve been thinking about. This library will come in handy for peer-observer and p2p-observer in the future. Likely adding AS information (name, type) to it as well.
  • REDACTED
  • discourse-archive: set up an archive and mirroring of delvingbitcoin and the BNOC forum.
  • likely more :)

Use of Funds

With the weak USD (and a grant that’s denominated in USD, but me not spending USD) and costs rising everywhere else, I started think more about finances this quarter. To be able to raise my personal salary (which is quite modest for my area), I’ve been thinking about where to cut costs, looking for potential supplementary grant, or doing consulting / freelance work again.

Use-of-funds:

  • living expenses (i.e. a modest salary in my region)
  • server and hosting expenses
  • hardware
  • travel expenses (e.g. conferences & CoreDev)
  • office rent
  • accounting expenses
  • paying taxes
  • insurances (health, liability, …)


My open-source work is currently funded by an OpenSats LTS grant. You can learn more about my funding and how to support my work on my funding page.

Creative Commons License Text and images on this page are licensed under the Creative Commons Attribution-ShareAlike 4.0 International License

Previous

Image for OpenSats Work-Log 8

January 31, 2026

OpenSats Work-Log 8

This is a copy of the 8th work-log I sent to OpenSats for my LTS grant.