Commit Graph
4965 Commits
Author SHA1 Message Date
Jon Atack 99e21c8154 Merge pull request #2349 from craigraw/bip392-fix-xkey-examples
BIP392: Fix xprv/xpub examples to use BIP352 derivation paths
2026-11-09 09:55:18 -06:00
Craig Raw bba6223aa1 BIP392: Fix xprv/xpub examples to use BIP352 derivation paths 2026-11-09 16:43:28 +01:00
Murch a34f044bb8 Merge pull request #2310 from zjubiology/master
BIP375: check SegWit versions in non-witness UTXOs
2026-11-07 16:41:44 +01:00
zjubiology 97b6274626 BIP375: check SegWit versions in non-witness UTXOs
Signed-off-by: zjubiology <zjubiology@outlook.com>
2026-11-07 22:20:18 +08:00
Murch f9cff97a6b Merge pull request #2348 from Yudis-bit/fix/bip352-vector-input-encoding
bip-0352: fix input encodings in test vectors
2026-11-06 21:00:44 +01:00
Murch 55916fd835 Merge pull request #2251 from jeanpablojp/rawtr-descriptor
BIP394: rawtr() Output Script Descriptors
2026-11-06 20:57:37 +01:00
jeanpablojp bc8b68c9cf BIP394: rawtr() Output Script Descriptors 2026-11-06 13:10:19 +00:00
Jon Atack c9547b9dad Merge pull request #2347 from ajtowns/202611-bip95-bump
BIP95: Change proposed Testnet 5 genesis block structure
2026-11-05 19:34:21 -06:00
Murch a50f8f8cb9 Merge pull request #2238 from fametrano/bip174-witnessscript-vector-pubkey
BIP-174: test data: make the witnessScript in the invalid-key case match its P2WSH hash
2026-11-05 23:46:36 +01:00
Jon Atack d4dea2a230 Merge pull request #2207 from macgyver13/bip375-labeled-spend
BIP-375: correct labeled test vectors to include labeled-spend key in PSBT_OUT_SP_V0_INFO
2026-11-05 12:05:54 -06:00
Jon Atack e30a8b0523 Merge pull request #2257 from fametrano/bip375-sp-info-identifier-serialization
bip-0375: say the version byte belongs to the identifier, not to the field
2026-11-05 11:40:33 -06:00
Murch 758c231cd4 Merge pull request #2342 from ajtowns/202611-bip34-early
BIP34: clarify encoding for early blocks
2026-11-05 18:20:32 +01:00
Anthony Towns 69ec29d518 BIP95: Change proposed Testnet 5 genesis block structure
This moves the anti-pre-mine commitment back into `pszTimestamp` and
keeps it as ASCII text, rather than using it as a fake public key. The
genesis transaction's output is replaced by an `OP_RETURN` to avoid
confusion over spendability. Using the `OP_RETURN` output and `nVersion`
rolling for additional nonce bits are explicitly allowed.
2026-11-06 03:17:59 +10:00
Murch a0190d01a1 Merge pull request #2339 from Eunovo/bip352-invalid-control-block-vector
Bip352: Add consensus-validity requirement to Scanning requirements
2026-11-05 18:10:07 +01:00
Yudis-bit 04393c98c0 bip-0352: fix input encodings in test vectors
BIP352 scanning assumes consensus-valid transactions. These fixtures
have a Taproot control parity mismatch and ECDSA encodings without
a sighash byte.

Correct both sending and receiving copies. The DER lengths and R/S
stay unchanged. Append SIGHASH_ALL outside DER as an encoding
correction. Complete transaction signature validity remains outside
these input-only fixtures.

The 29 vectors pass the official reference runner before and after.
Expected outputs, addresses and shared secrets are unchanged.
2026-11-05 20:37:13 +07:00
Novo bbb2794d9e BIP352: add consensus validity scanning requirements
Silent Payments transaction scanning assumes that the transaction is consensus-valid. The test vectors do not include consensus-invalid transactions.
2026-11-05 13:29:16 +01:00
Anthony Towns d433c2e35d BIP34: clarify encoding for early blocks 2026-11-05 16:56:02 +10:00
Anthony Towns 4e3f4a95a7 BIP34: Add version header and changelog section 2026-11-05 16:55:30 +10:00
macgyver13 d31236854b BIP-375: update validation to match sorting outputs with same scan key
Fix output script validation for silent payment output ordering when multiple 
outputs share the same scan key (labeled addresses of one recipient).
2026-11-04 18:26:44 -05:00
macgyver13 434a4d2659 BIP-375: update labeled test vectors
Now PSBT_OUT_SP_V0_INFO provides labeled-spend public key not the base-spend
public key.

Modify test vector with labeled-spend key to the same recipient from:
two sp outputs - output 0 uses label=3 / output 1 uses label=1
to:
three sp outputs (same scan key) - output 0 uses label=1, outputs 1 and 2 uses label=2 (same spend key)
This vector excercises the BIP375 sorting outputs with same scan key properly.

The next commit will fix the validation logic and address this failing test.

bump ChangeLog to 0.1.3
2026-11-04 18:14:49 -05:00
Ferdinando Ametrano a2c1248774 bip-0375: say the version byte belongs to the identifier, not to the field
"The PSBT_OUT_SP_V0_INFO should be serialized as a zero byte for the
version, followed by the 33 bytes of the scan key and then 33 bytes for
the spend key" names the field, and the field is 66 bytes: its table
entry is "<33 byte scan key> <33 byte spend key>", the test vectors carry
66, and the validator refuses anything else.

The sentence is in the Unique Identification section and was added with
it, so what it describes is the output script that stands in for a silent
payment output when building the unsigned transaction that identifies the
psbt -- 67 bytes there, and nothing about the field. Read as the field's
own serialization it contradicts the table, which is how it first read
here.

Only the wording changes.
2026-11-05 00:13:24 +01:00
Ferdinando Ametrano 8bd2e39a36 BIP-174: test data: make the witnessScript in the invalid-key case match its P2WSH hash
In the "PSBT with invalid output witnessScript typed key" case, the
value of the PSBT_OUT_WITNESS_SCRIPT record no longer hashes to the
P2WSH program in the output's redeemScript: 65f0b3dd trimmed it to its
last six bytes while fixing a short read.

Re-encode the record as `02 0100 25 <script>`: the key stays one byte
too long, which is what the case tests, and the value is the original
37-byte script again. Same total length, same layout as the "invalid
output redeemScript typed key" case.
2026-11-04 23:56:11 +01:00
Jon Atack a0c977f375 Merge pull request #2346 from fjahr/95port
BIP95: Change default P2P port to 18353
2026-11-04 10:26:40 -06:00
Fabian Jahr ab3f20041f BIP95: Change default P2P port to 18353 2026-11-05 00:38:08 +09:00
Jon Atack a763725aa4 Merge pull request #2345 from MrHodlX/bip373-output-vector
BIP373: replace the duplicated x-only output participant vector
2026-11-04 09:15:00 -06:00
MrHodlX e315654e75 BIP373: replace the duplicated x-only output participant vector 2026-11-04 08:43:47 -05:00
Jon Atack 61ff3f1361 Merge pull request #2311 from jonatack/2026-09-bip375-reference-implementation
bip375: replace stale TODO with reference implementation
2026-11-03 21:42:17 -06:00
Jon Atack ea875b262c Merge pull request #2343 from achow101/375-deputize
375: Add deputy
2026-11-03 21:38:48 -06:00
Jon Atack d5ca385c8e Merge pull request #2212 from fjahr/cisa
BIP460: CISA for Taproot Key Path Spends
2026-11-03 21:33:06 -06:00
Ava Chow e4e02e14cf 375: Deputize macgyver 2026-11-03 19:28:09 -08:00
Fabian Jahr 3886890d7e bip-0460: Add entry to the README index 2026-11-04 11:01:32 +09:00
Fabian Jahr 6ee9ac116e bip-0460: Add CISA for Taproot key path spends 2026-11-04 11:00:26 +09:00
Fabian Jahr 55167425a1 bip-0460: Add vendored BIP 459 reference code 2026-11-04 11:00:26 +09:00
Fabian Jahr 4a801194d5 bip-0460: Add vendored BIP 458 reference code 2026-11-04 11:00:26 +09:00
Fabian Jahr 2106e90394 bip-0460: Add vendored secp256k1lab library 2026-11-04 11:00:25 +09:00
Liam Gilligan 5bbeeae962 BIP461: add test vectors and reference implementation (#2328)
All vectors were tested against libsecp256k1, and
all verification vectors were checked against OpenSSL.
A check was also added to the `verify` specification
to reject pubkeys with x or y coordinates greater than
or equal to `p`.
2026-11-03 14:23:55 -08:00
Jon Atack 21bfd24d6e Merge pull request #2210 from fjahr/fullagg
BIP459: DahLIAS fully aggregated signatures for secp256k1
2026-11-03 12:18:06 -06:00
Fabian Jahr 960e863e57 BIP459: Add entry to the README index 2026-11-03 21:40:46 +09:00
Fabian Jahr f3d1668891 BIP459: Add DahLIAS fully aggregated signatures for secp256k1 2026-11-03 21:39:57 +09:00
Fabian Jahr bd478d5087 BIP459: Add vendored secp256k1lab library
Add a vendored copy of the secp256k1lab library (master branch, commit
a265da139aea27386085a2a8760f8698e1bda64e) that the full-aggregation
reference implementation and test vector scripts depend on.
2026-11-03 21:39:56 +09:00
Jon Atack ada341963a Merge pull request #2205 from fjahr/halfagg
BIP458: Half-Aggregation of BIP 340 Signatures
2026-11-02 10:59:00 -06:00
Fabian Jahr fe7836100e bip-0458: Add entry to the README index 2026-11-01 07:56:15 +01:00
Fabian Jahr 2d439430b1 bip-0458: Add half-aggregation of BIP 340 signatures 2026-11-01 07:56:15 +01:00
Jon Atack 5aadddb511 Merge pull request #2337 from Eunovo/bip352-key-spend-annex-vector
BIP352: add taproot key-path spend with annex vector
2026-10-26 20:41:58 -06:00
Jon Atack f428b62526 Merge pull request #2335 from ViniciusCestarii/bip-374-new-test-vectors
bip374: add new test vectors checking for boundaries
2026-10-26 20:39:29 -06:00
Novo f7b78df024 BIP352: validate control block size in reference impl 2026-10-26 14:45:39 +01:00
Novo f827c44063 BIP352: add changelog for 1.1.2
Add key-spend with annex test vector log
2026-10-26 14:30:46 +01:00
ViniciusCestarii afaa856630 bip374: add new test vectors checking for boundaries 2026-10-26 07:17:45 -03:00
Novo 3c68d3f3a1 BIP352: add taproot key-path spend with annex vector
Add a BIP-352 test vector where a taproot input is spent via the key path with an annex (2-item witness). The annex must be stripped before deciding between key-path and script-path spends, so the input is still eligible and all expected values match the plain key-path case.

The annex is 0x50 followed by the BIP341 NUMS point H, so an implementation that fails to strip it reads it as a control block with the NUMS internal key and wrongly skips the input.
2026-10-25 17:20:33 +01:00
pythcoiner 100ba872c8 Add BIP139: Wallet Metadata Backup Format (#2130)
* bip139: wallet metadata format

* bip139: add the Version header to the preamble

* bip139: keep a single psbts field and fix the spend status link

* bip139: fold the version section and bip field into the version value

* bip139: capitalize Bitcoin Core and clarify the change_descriptor note

* bip139: replace the three account birth time fields with birth_block

* bip139: drop descriptor_id and change_descriptor_id

* bip139: drop field aliases, keeping name and labels

* bip139: restrict descriptor and change_descriptor to a string

* bip139: make version, type, descriptor, key, txid, outpoint and tweak mandatory

* bip139: move field definitions to a companion registry

* bip139: add the wallet survey behind these decisions

* bip139: replace the wallet description field with a backup note

* bip139: add the backup date field

* bip139: add the account gap_limit field

* bip139: add the multi_bip380 account type

* bip139: give the bip352_labels range an explicit encoding

* bip139: add a general coin object

* bip139: move signers above the account

* bip139: add signer modality and device records

* bip139: add bip85 application and index

* bip139: add Bitkey to the wallet survey

* bip139: state how to derive birth_block from a creation date

* bip139: define the timestamp format once

* bip139: rename the transaction time field to block_time

* bip139: keep last_height on the account only

* bip139: state that type names the descriptor language

* bip139: drop output_type, the descriptor already states it

* bip139: replace the account active flag with a status enum

* bip139: add mutinynet and scope a backup to one network

* bip139: record that the label gap belongs to BIP-329

* bip139: record that proprietary needs no change

* bip139: make the survey annex-ready

* bip139: record that mainnet mnemonics stay out of scope

* bip139: reword the mnemonic evidence heading

* bip139: correct the birth_block evidence, Sparrow stores a height

* bip139: type and descriptor fit every surveyed wallet

* bip139: correct the addr descriptor solvability note

* bip139: re-assess every partial score against fillability

* bip139: store psbts once at wallet level, reference them per account

* bip139: store transactions once at wallet level, reference them per account

* bip139: txid is the transaction map key, not a field

* bip139: refresh the matrix after the fillability re-assessment

* bip139: electrum holds no bip39 mnemonic at all

* bip139: sp_output.label has no constituency

* bip139: collapse the survey to a two-value scale

* bip139: drop the obsolete partial-score analysis

* bip139: size the matrix field column from the data

* bip139: cut the survey down to the table and its results

* bip139: recompute liana compat against the current draft

* bip139: correct the liana breaking-change count

* bip139: make network mandatory

* bip139: network no longer breaks liana on import

* bip139: render wallet fields as a wrapped table

* bip139: render account fields as a wrapped table

* bip139: render every field section as a wrapped table

* bip139: the registry is part of the bip, not a reference to it

* bip139: drop the registration process from the registry intro

* bip139: put field rationale in the cell, not below the table

* bip139: keep code spans whole when wrapping cells

* bip139: render field tables as preformatted blocks

* bip139: drop link definitions the tables no longer use

* bip139: use a bordered grid for the field tables

* bip139: give birth_block an estimation formula and drop the enum underscore

* bip139: merge silent payment outputs into the coin object

* bip139: restore spend_status and give the sp label scalar a home

* bip139: register the transaction fee field

* bip139: rebuild the survey matrix against the current field set

* bip139: drop survey findings the draft now addresses

* bip139: bar passphrase-protected seeds from bip39_mnemonic

* bip139: record the missing-field decisions in the survey

* bip139: cut the survey down to its revision list and matrix

* bip139: reword the survey as a wallet to field mapping

* bip139: reference the wallet support annex from the spec

* bip139: list the mandatory fields in the registry tables

* bip139: point the spec at the registry as the complete field list

* bip139: spell out mandatory and optional in the registry req column

* bip139: mark only the optional fields in the registry tables

* bip139: retitle and reframe the BIP around moving between wallets

* bip139: call the artefact an export throughout

* bip139: scope the mnemonic advice to exports kept as backups

* bip139: say that most metadata cannot be recovered from the chain

* bip139: clarify account and signer metadata fields

* bip139: cut the registry cells back to the field description

* bip139: reword the registry field descriptions

* bip139: give the device record its own registry table

* bip139: keep an unknown enum value from failing the import

* bip139: define the device transports field

* bip139: point the devices row at the device object

* bip139: backup -> export in README

* bip139: clarify export fields and remove survey annex

* bip139: Drop Version header in absence of Changelog
2026-10-24 08:11:13 -07:00