4923 Commits
Author SHA1 Message Date
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 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
Jon Atack 93f161194f Merge pull request #2338 from fengxueweilai/my_feature
scripts: isolate diffcheck temporary files
2026-10-23 17:14:06 -06:00
Jon Atack 1fec65e55b Merge pull request #2336 from fametrano/bip322-taproot-upgradeable
BIP-0322: name taproot upgrade mechanisms in the upgradeable rules
2026-10-23 14:49:47 -06:00
Ferdinando Ametrano 99ece780c8 BIP-0322: name taproot upgrade mechanisms in the upgradeable rules
The upgradeable rules list the to_sign version, NOPs reserved for
upgrades and segwit versions above 1. BIP341 and BIP342 also reserve
unknown leaf versions, OP_SUCCESSx, unknown public key types and the
annex for upgrades. A verifier that follows the BIP322 text calls a
signature using any of them valid. Name them, so that these give the
inconclusive state like the other upgrade mechanisms.

Bump the version to 2.1.0 and add a changelog entry.
Add 342 to Requires.
2026-10-23 17:05:38 +02:00
fengxueweilai 9b1a7ef537 fix(scripts): isolate diffcheck temporary files
Signed-off-by: fengxueweilai <fengxueweilai@outlook.com>
2026-10-23 17:49:57 +08:00
Jon Atack c0c5aea41e Merge pull request #2334 from ViniciusCestarii/bip-0374-wording-nits 2026-10-21 22:14:03 -06:00
ViniciusCestarii af1e6e27c7 bip374: clarify DLEQ verification wording 2026-10-20 14:03:39 -03:00
Fabian Jahr 1eb496599c bip-0458: Add vendored secp256k1lab library
Add a vendored copy of the secp256k1lab library (master branch, commit
a265da139aea27386085a2a8760f8698e1bda64e) that the half-aggregation
reference implementation and test vector scripts depend on.
2026-10-20 17:53:54 +02:00
ViniciusCestarii e80c8549a1 bip374: justify G as input with a better reasoning 2026-10-20 10:13:45 -03:00
Murch 130b8e0fa7 Merge pull request #2332 from jonatack/2026-10-bip3-update-discussion-headers-to-bip3
bip3: update discussion headers to bip3 format
2026-10-19 14:21:00 -07:00
Jon AtackandAnthony Towns ef5b6ba9d0 bip3: update discussion headers to bip3 format
Co-Authored-By: Anthony Towns <aj@erisian.com.au>
2026-10-19 15:09:00 -06:00
Antoine Poinsot 927b6de991 Address some wording nits in BIP 54 (#2313) 2026-10-02 06:27:57 -07:00
Jon Atack 3a10b5b5f0 Merge pull request #2308 from FlashWayne/bip54-vectors-readme 2026-09-28 08:24:34 -07:00
FlashW b58f8ef865 bip54: describe the tree format of the timestamp test vectors
Since 977300d timestamps.json is a single JSON object whose children are
nested recursively in extensions arrays, with valid and comment only on the
leaves, but the README still described a flat array of objects with a
header_chain entry.
2026-09-28 18:56:05 +04:00
Jon Atack 4f979daf78 Merge pull request #2286 from wangjingshuiku/master
BIP375: validate PSBT_OUT_SP_V0_LABEL length
2026-09-27 10:55:17 -07:00
Jon Atack 124324eef1 BIP375: add 0.1.2 changelog for LABEL length validation 2026-09-27 11:51:59 -06:00
Jon Atack 02bebeb5ef Merge pull request #2306 from 0xShadowX/bip98-example-proof
bip98: fix the third SKIP hash in the example proof
2026-09-25 11:50:40 -07:00
Jon Atack f4353baf2c Merge pull request #2304 from Bruce039/bip375-sync-dleq
bip375: sync vendored DLEQ code with BIP-374
2026-09-25 11:10:59 -07:00
Jon Atack 3adfd07791 Merge pull request #2302 from ViniciusCestarii/bip-0352-overview
bip352: fix up undefined index in Overview section
2026-09-25 09:04:51 -07:00
Murch 03cc8540e7 Merge pull request #2305 from 0xShadowX/psbt-registry-p2c-tweak
bip174: add PSBT_IN_P2C_TWEAK to the type registry
2026-09-25 07:33:48 -07:00
Shadow b48abb1624 bip98: fix the third SKIP hash in the example proof
The example says the skipped hashes are 0x00..., 0x66... and 0x22...,
and traversal-example.dot has 0x22... as the SKIP branch of D, but the
base64 proof ended with 32 bytes of 0x44, which is one of the VERIFY
hashes. Re-encode the proof with 0x22... as the last hash. The length
(101 bytes) and the tree serialization are unchanged.
2026-09-25 16:01:55 +04:00
Shadow 7fb28fa640 bip174: add PSBT_IN_P2C_TWEAK to the type registry
BIP-372 defines PSBT_IN_P2C_TWEAK = 0x19, but the per-input table in the
type registry goes from 0x18 straight to 0x1a.
2026-09-25 15:58:30 +04:00
Bruce0X 7999f8aa1c bip375: sync vendored DLEQ code with BIP-374
bip-0375/deps/dleq.py is adapted from the BIP-374 reference code but
predates the change that treats the challenge e as a scalar (#2262).
Reduce the challenge hash mod n and reject proofs with e >= n, so the
copy used by the BIP-375 validator matches the current BIP-374
reference.
2026-09-25 15:55:49 +04:00
Murch 8c4d9e258b Merge pull request #2300 from Sjors/2026/09/bip138-recipients
bip138: clarify key selection and apply exclusions across expressions
2026-09-24 20:19:29 -07:00
Sjors Provoost 346008db89 bip138: record recipients clarifications in changelog 2026-09-24 20:13:08 -07:00
Sjors Provoost 299442b7de bip138: exclude roots exposed by another expression
A root selected through a derived xpub can also appear bare or as a
literal key. Once a spend reveals it, anyone could decrypt the backup.
Exclude such cases.
2026-09-24 20:11:31 -07:00
Sjors Provoost bde776ecb8 bip138: collect and deduplicate recipient keys across the backup 2026-09-24 20:11:28 -07:00
Sjors Provoost 11a3be7458 bip138: clarify MuSig participant eligibility
MuSig aggregation hides participant keys, so account xpubs do not need
individual trailing derivation.

Specify that encryption uses participant roots rather than the aggregate key.

Add MuSig2 test vectors: one for a bare aggregate and one for aggregate
derivation.
2026-09-24 20:11:20 -07:00
Sjors Provoost 5fc05e2b17 bip138: generalize key-selection test vectors
Rename keys_types.json to recipient_keys.json and generalize the format
to support multiple descriptors and multiple recipient keys:

- "key": a single key-expression string becomes "descriptors": an array
  of complete descriptor strings.
- "expected": an x-only key string becomes "expected_keys": an array
  containing that key; null remains null.

Convert the nine existing cases by wrapping each key expression in tr(),
except the uncompressed literal uses pk(), since tr() does not accept it.
Each case has one descriptor.
2026-09-24 20:09:33 -07:00
ViniciusCestarii a99b3d36a7 bip352: fix notation inconsistencies in overview 2026-09-24 19:02:02 -03:00
Murch d1d2042c85 Merge pull request #2299 from Sjors/2026/09/bip138-encoding
bip138: binary encoding clarifications
2026-09-24 14:54:12 -07:00
Sjors Provoost 62dc1c4e8f bip138: record encoding clarifications in changelog 2026-09-24 14:48:22 -07:00
Sjors Provoost bf64a12098 bip138: clarify rejection of empty payloads
Clarify that an empty payload contains zero content items. Add a
vector that rejects a payload consisting only of the 0x00 terminator.
2026-09-24 14:47:16 -07:00
Sjors Provoost aa098559bf bip138: clarify that 0x00 ends payload parsing
Specify that parsing stops immediately. Add a vector with an item followed
by a terminator and ignored bytes.

Clarify that TYPE 0x00 also doesn't require TYPE_LENGTH.
2026-09-24 14:47:14 -07:00
Sjors Provoost 0f8c26b7c2 bip138: specify empty associated data
Make the associated-data input explicit in the encryption and decryption
formulas and specify that it is empty, as used by the existing vectors.
2026-09-24 14:47:10 -07:00
Jon Atack 7c7cb232c2 Merge pull request #2298 from Sjors/2026/09/bip138-metadata
bip138: clarify receive-only descriptor set, 0 birth time, and BIP32 range
2026-09-24 12:18:39 -07:00
Jon Atack e8987d3e76 Merge pull request #2277 from fametrano/psbt-finalizer-clearing
BIP370: add Input Finalizer section; BIP371: remove finalizer clause from an output field
2026-09-23 16:44:15 -07:00
Ferdinando Ametrano 8629462a94 bip-0371: drop the finalizer clause from PSBT_OUT_TAP_BIP32_DERIVATION
The six taproot input fields say "Finalizers should remove this field
after PSBT_IN_FINAL_SCRIPTWITNESS is constructed", and so does the
output field PSBT_OUT_TAP_BIP32_DERIVATION. An output has no
PSBT_IN_FINAL_SCRIPTWITNESS, the clause names no input, and its two
neighbours in the output table carry no such clause. Drop it; Bitcoin
Core does not clear output fields on finalization.
2026-09-23 22:59:15 +02:00
Ferdinando Ametrano 1e431879af bip-0370: say what the Input Finalizer keeps in a version 2 input
BIP 174 tells the Input Finalizer to clear all other data except the
UTXO and unknown fields from a finalized input. It was written when the
unsigned transaction was a global field. PSBTv2 moves the data that
defines the input into the input map, and a finalizer that follows the
sentence literally removes it: without PSBT_IN_PREVIOUS_TXID or
PSBT_IN_OUTPUT_INDEX the result is invalid, and without
PSBT_IN_SEQUENCE and the locktime fields the Transaction Extractor
builds a different transaction.

BIP 370 amends Creator, Updater, Signer and Transaction Extractor for
PSBTv2, adds the Constructor, and says nothing about the Input
Finalizer. Add the section: the five fields are kept. Bitcoin Core
does this today: at 19b0ff2fa0, PSBTInput::Serialize in src/psbt.h
writes them for every PSBTv2 input, finalized or not.
2026-09-23 22:59:14 +02:00
Murch fc1b9f40ea Merge pull request #2275 from Sjors/2026/09/psbt-sighash
bip174: add combiner test vector for PSBT_IN_SIGHASH_TYPE
2026-09-23 10:25:00 -07:00
Murch 722d01e5e0 174: consistently indent test vectors 2026-09-23 10:22:22 -07:00
Sjors Provoost 8c1314949e bip138: record metadata clarifications in changelog
Record this branch's clarifications and test vectors under draft document
version 0.1.1. Keep the initial-publication entry in the shared first commit.
2026-09-23 13:59:05 +02:00