← notes

A support matrix that has to say what "supports SegWit" means

Mar 28, 2017

Add a Bitcoin Ruby library to the SegWit support list on bitcoincore.org.

A one-line contribution to a compatibility matrix, and worth a note because the matrix has a definitional problem a boolean column cannot express.

“Supports SegWit” is not one capability. A library might parse a transaction containing a witness without being able to construct one. It might construct one without deriving bech32 addresses. It might do all of that and compute the BIP143 signature hash incorrectly, which is the part that actually determines whether the transaction is valid. Four independent things, implemented in whatever order a maintainer got to them, collapsed into a single checkmark that is true for some users and false for others.

The right structure is a capability per row rather than a project per row, which is more work to fill in and to read, and is the only version that answers the question someone is actually asking.

Maintenance is the other half. A support matrix is a set of claims about other people’s software that go stale silently, nobody notifies the list when a library drops support or stops being released. Same decay as awesome-base, on a list where being wrong has consequences for someone’s transaction.

Verifying before publishing is the only defence and it does not scale.