Skip to content

Releases: plumb-node/plumb

Plumb v29.4.2.knots20260508.plumb5

Choose a tag to compare

@jasonsopko jasonsopko released this 04 Oct 14:52
v29.4.2.knots20260508.plumb5
b1ac1e2

Built on Bitcoin Knots v29.4.2.knots20260508. Same consensus, same chain.

User agent

Peers see /Satoshi:29.4.2/Knots:20260508/Plumb:5/ again: the Knots field keeps Knots' own form and Plumb has a field of its own, as in plumb1 to plumb3. The number is the one bitcoind -version and bitcoin-cli -version print as .plumb5. plumb4 showed /Satoshi:29.4.2/Knots:20260508.plumb4/, so a count of Plumb nodes should look for /Plumb: again.

No filter changes from plumb4.

Filters

Option From Since
-rejectfakeoutputs knots#389 plumb1
-rejectdeadbranches knots#400 plumb1
-rejectbareenvelopes knots#319 plumb2
-rejectfakemultisig knots#422 plumb3
-rejecttokenmessages plumb#2, Plumb's own plumb4

What each one rejects, what it leaves alone, an example transaction and how to turn it off: plumb/FILTERS.md.

Getting it

git clone https://github.com/plumb-node/plumb
cd plumb
git verify-tag v29.4.2.knots20260508.plumb5
git checkout v29.4.2.knots20260508.plumb5
cmake -B build -DBUILD_GUI=OFF
cmake --build build -j"$(nproc)"

Upgrading from an earlier Plumb or switching from Knots 29.4.2: stop bitcoind, install the new binaries, start it. The data directory and bitcoin.conf stay as they are.

Plumb plumb4 for StartOS (x86_64)

Pre-release

Choose a tag to compare

@jasonsopko jasonsopko released this 04 Oct 01:56
v29.4.2.knots20260508.plumb4-startos
ea8ebf7

Plumb v29.4.2.knots20260508.plumb4 for StartOS, x86_64, to sideload. This is a pre-release: I have not installed it on a StartOS server yet.

What's in it

The package builds bitcoind and bitcoin-cli from the signed tag v29.4.2.knots20260508.plumb4. The build stops unless the tag points at commit 68190a1c71 and verifies against the Plumb release key 89F0E41D72CE523F4AA1CDB692CDFFB7C40CD1BA. The StartOS wrapper is Retropex's knots-startos at v29.4.2.knots20260508 with Plumb's build, key, name and docs, and the switch rules below; its source is branch startos.

Installing

The package lists StartOS 0.4.0-beta.10 as its OS version and runs on x86_64 only. Check the download (below), click Sideload in the StartOS top bar, drop the file in, then click Install, or Switch if Bitcoin Knots is installed.

It installs as package bitcoind, flavor #plumb.

  • From Retropex's Bitcoin Knots package for the BLAKE2b chain, version 29.4.1 or a later 29.x, StartOS switches to Plumb in place with the same data and settings. Older builds of that package update to 29.4.1 or later first.
  • From Plumb, StartOS can switch back to that Knots package at version 29.4.2:3 or later.
  • Plumb's package does not list Bitcoin Core among the versions it takes data from.

Plumb's filters are on by default and have no switches of their own on the settings screens. The node lists them in its log at startup (Plumb filter lines).

Checking the download

gpg --keyserver hkps://keys.openpgp.org --recv-keys 89F0E41D72CE523F4AA1CDB692CDFFB7C40CD1BA
sha256sum -c SHA256SUMS
gpg --verify SHA256SUMS.asc SHA256SUMS

SHA256SUMS.asc is signed by the Plumb release key above.

Tested

  • On regtest, the image reported v29.4.2.knots20260508.plumb4 and user agent /Satoshi:29.4.2/Knots:20260508.plumb4/, logged all five filters on, and had no missing libraries.
  • The bitcoind and bitcoin-cli in this package are byte for byte the ones that ran.
  • The Knots switches above, through a port of StartOS's switch rule (uninit_target) with the SDK's own migration code: against Retropex's Knots package at v29.4.2.knots20260508, and against stand-in Knots packages at 29.4:5, 29.4.1:1, 29.5.0 and 29.9.0. Not on a server.

Not tested

  • Installing on a StartOS server.
  • Pruned nodes. On a disk under 900 GB the package prunes and routes RPC through Start9's btc-rpc-proxy v0.8.0, which fetches pruned blocks from peers. I have not checked it against BLAKE2b headers.
  • Services that depend on the Knots package. Plumb declares that it satisfies #knots:29.4.2:3 for them.

Plumb v29.4.2.knots20260508.plumb4

Choose a tag to compare

@jasonsopko jasonsopko released this 03 Oct 19:19
v29.4.2.knots20260508.plumb4
68190a1

Built on Bitcoin Knots v29.4.2.knots20260508. Same consensus, same chain.

New filter

Token messages, -rejecttokenmessages, default on, from plumb#2. Knots' -rejecttokens refuses Runes, Counterparty and OLGA. Two token formats it does not match have been mined since the fork: JSON objects that name their protocol in a "p" field, the BRC-20 format, and Omni Layer messages. Plumb now refuses both.

Over every non-coinbase transaction from block 961640 to 975264 (3,278,236), it refuses 1,055 that pass plumb3's standardness checks: 1,022 JSON token messages, mostly ico-20 and crc-20 mints, and 33 Omni messages. Each of the 1,055 carries a token message in its OP_RETURN. 860 of the JSON messages are mints, and 809 of those sit in a 41- or 42-byte OP_RETURN output, so -datacarriersize=42 does not stop them either.

The payload has to start as a JSON object with a top-level "p" member whose value is a string. Nine OP_RETURN payloads in transactions that pass plumb3's checks start with { and are not JSON; they still pass.

It is the first filter in Plumb with no Knots pull request behind it; Luke's open issue knots#64 asks for "Filters for other spam (runes, HG, CBRC-20, etc)".

User agent

Peers now see /Satoshi:29.4.2/Knots:20260508.plumb4/, the Knots field with Plumb's suffix, instead of a separate /Plumb:3/ field. A count of Plumb nodes should look for .plumb in the Knots field.

Lower data limits

plumb/FILTERS.md now says what -datacarriersize=42, -datacarriersize=8 and -datacarrier=0 refuse on top of Plumb's defaults, measured over the same blocks.

Filters

Option From Since
-rejectfakeoutputs knots#389 plumb1
-rejectdeadbranches knots#400 plumb1
-rejectbareenvelopes knots#319 plumb2
-rejectfakemultisig knots#422 plumb3
-rejecttokenmessages plumb#2, Plumb's own plumb4

What each one rejects, what it leaves alone, an example transaction and how to turn it off: plumb/FILTERS.md.

Getting it

git clone https://github.com/plumb-node/plumb
cd plumb
git verify-tag v29.4.2.knots20260508.plumb4
git checkout v29.4.2.knots20260508.plumb4
cmake -B build -DBUILD_GUI=OFF
cmake --build build -j"$(nproc)"

Upgrading from an earlier Plumb or switching from Knots 29.4.2: stop bitcoind, install the new binaries, start it. The data directory and bitcoin.conf stay as they are.

Plumb v29.4.2.knots20260508.plumb3

Choose a tag to compare

@jasonsopko jasonsopko released this 02 Oct 05:40
v29.4.2.knots20260508.plumb3
2dd1d81

Built on Bitcoin Knots v29.4.2.knots20260508. Same consensus, same chain.

New filter

Fake multisig keys, -rejectfakemultisig, from knots#422, default on. The bpub encoder publishes files as 1-of-15 multisig spends where one key signs and the other 14 are 31-byte file chunks. Keys that no signature in the spend can prove, beyond ten per script, now count as data.

Over every transaction from block 961640 to 975113 (3,241,877) it refuses 85 of the 87 reveals, 6.27 MB of file chunks. Stock Knots relays all of them. The two it misses are single-input reveals carrying 465 bytes between them.

The rule is kwsantiago's, with LionThunderFingers' extension to tapscript multi_a. Plumb puts it behind its own option and raises the allowance from 2 to 10 unproven keys per script: at 2 it refused 456 ordinary transactions since the fork, mostly 2-of-5 and 2-of-6 consolidations. The widest real wallet since the fork, a 2-of-3 vault with timelocked recovery branches, leaves 10 keys unsigned and passes.

Known cost. A Liquid federation spend through its 2-of-3 emergency branch leaves 16 keys unsigned and is refused; there has been one since the fork, at block 963410. Other nodes and miners still carry it, and rejectfakemultisig=0 relays it.

Plumb's fake-output filter (-rejectfakeoutputs, plumb1) already refuses the transactions that fund these reveals, so a Plumb node now refuses both halves.

Filters

Option From Since
-rejectfakeoutputs knots#389 plumb1
-rejectdeadbranches knots#400 plumb1
-rejectbareenvelopes knots#319 plumb2
-rejectfakemultisig knots#422 plumb3

What each one rejects, what it leaves alone, an example transaction and how to turn it off: plumb/FILTERS.md.

Getting it

git clone https://github.com/plumb-node/plumb
cd plumb
git verify-tag v29.4.2.knots20260508.plumb3
git checkout v29.4.2.knots20260508.plumb3
cmake -B build -DBUILD_GUI=OFF
cmake --build build -j"$(nproc)"

Upgrading from an earlier Plumb or switching from Knots 29.4.2: stop bitcoind, install the new binaries, start it. The data directory and bitcoin.conf stay as they are.

Plumb v29.4.2.knots20260508.plumb2

Choose a tag to compare

@jasonsopko jasonsopko released this 02 Oct 04:42
v29.4.2.knots20260508.plumb2
45c69cc

Built on Bitcoin Knots v29.4.2.knots20260508. Same consensus, same chain.

New filter

Bare data envelopes, -rejectbareenvelopes, from knots#319, default on. Counts a run of pushes ended by OP_DROP or OP_2DROP as data, the inscription envelope that needs no OP_IF. Over every transaction from block 961640 to 974573 (3,103,397) it rejects 7, all inscriptions, and no payments. Stock Knots relays all seven.

The rule is kwsantiago's. Plumb puts it behind its own option; with the option off, counting is exactly what it was before.

Fix

The dead-branch analysis in -rejectdeadbranches (knots#400, in plumb1) had no cost bound, and ran before the witness size check. A script built around OP_ROLL took 506 ms to analyze at 390 KB, on a transaction the node then rejects at no cost to the sender. Inputs over -maxscriptsize are now skipped and the analysis stops at four steps per script byte; the same script takes 92 µs at 1,650 bytes. Counts on every transaction since the fork are unchanged. AuthintegX raised it. plumb1 nodes should upgrade.

Filters

Option From Since
-rejectfakeoutputs knots#389 plumb1
-rejectdeadbranches knots#400 plumb1, cost fix in plumb2
-rejectbareenvelopes knots#319 plumb2

What each one rejects, what it leaves alone, an example transaction and how to turn it off: plumb/FILTERS.md.

Getting it

git clone https://github.com/plumb-node/plumb
cd plumb
git verify-tag v29.4.2.knots20260508.plumb2
git checkout v29.4.2.knots20260508.plumb2
cmake -B build -DBUILD_GUI=OFF
cmake --build build -j"$(nproc)"

Upgrading from plumb1 or switching from Knots 29.4.2: stop bitcoind, install the new binaries, start it. The data directory and bitcoin.conf stay as they are.

Plumb v29.4.2.knots20260508.plumb1

Choose a tag to compare

@jasonsopko jasonsopko released this 01 Oct 22:28
v29.4.2.knots20260508.plumb1
f3b6421

First Plumb release.

Built on Bitcoin Knots v29.4.2.knots20260508. Same consensus, same chain.

Filters

Option Default From Commit
-rejectfakeoutputs on knots#389 34ce3a5763
-rejectdeadbranches on knots#400 e704b7a713

Both have run on a mainnet node with the Knots release underneath since 2026-09-29.

Other changes from Knots

  • Version string ends in .plumb1; the user agent adds /Plumb:1/.
  • debug.log prints the Plumb banner and each filter's value at startup.
  • Homepage, bug report and source links point here.

Getting it

Source only. Build from the signed tag:

git clone https://github.com/plumb-node/plumb
cd plumb
git verify-tag v29.4.2.knots20260508.plumb1
git checkout v29.4.2.knots20260508.plumb1
cmake -B build -DBUILD_GUI=OFF
cmake --build build -j"$(nproc)"

Switching from Knots 29.4.2: stop bitcoind, install the new binaries, start it. The data directory and bitcoin.conf stay as they are, and going back to Knots works the same way.