1
0
mirror of https://github.com/bitcoin/bips.git synced 2026-06-08 17:25:25 +00:00
Commit Graph

4649 Commits

Author SHA1 Message Date
Jon Atack
42dc3270db Merge pull request #2168 from stevenroose/complete-127
BIP-0127: Prune some unfinished part and mark complete
2026-06-01 13:31:48 -07:00
Jon Atack
d58e12ae83 Merge pull request #2160 from omipheo/bip-0352-class-method-annotations
BIP352: complete type annotations on bitcoin_utils class methods
2026-06-01 13:11:40 -07:00
Jon Atack
e85e7ff2a7 Merge pull request #2185 from theStack/bip352-update-headers
BIP-352: sync "Version" header, add "Requires" header
2026-05-31 08:45:50 -07:00
Sebastian Falbesoner
46e7339e9c BIP-352: update "Version" header, add "Requires" header 2026-05-31 13:19:21 +02:00
Jon Atack
1495b684ff Merge pull request #2183 from evanlinjin/fix/174-explicitly-mention-proprietary-fields-as-unknown 2026-05-30 03:22:40 -07:00
志宇
a4668bb203 BIP174: Clarify proprietary fields are retained on finalization
Note that the Input Finalizer retains PSBT_IN_PROPRIETARY fields it does
not understand, treating them like unknown fields so it does not clear
proprietary data it cannot interpret.
2026-05-30 08:04:11 +00:00
Murch
790c777aeb Merge pull request #2178 from pythcoiner/bip_68
BIP68: fix wrong upper bound for nHeight
2026-05-29 16:22:11 -07:00
Murch
fae52468c9 Merge pull request #2182 from evanlinjin/fix/174-input-finalizer-clarification
BIP174: Mention sighash type requirement in Input Finalizer section
2026-05-29 12:00:38 -07:00
Jon Atack
b4241dc504 Merge pull request #2181 from ajtowns/202605-bip434-edits
BIP-434: Various rationale edits
2026-05-29 10:07:18 -07:00
志宇
9633048fc2 BIP174: Mention sighash type requirement in Input Finalizer section
This mirrors the existing PSBT_IN_SIGHASH_TYPE constraint from the
per-input field description. Added to the Input Finalizer section so it
is not missed.
2026-05-29 08:05:19 +00:00
Anthony Towns
18ff6bb77b BIP-434: Various rationale edits 2026-05-29 15:31:11 +10:00
Jon Atack
7f9434c9c8 Merge pull request #2093 from yyhrnk/fix/txfs-index-bounds
BIP-346: correct TxFieldSelector index upper bound
2026-05-28 12:15:54 -07:00
pythcoiner
6ac8c26870 BIP68: fix wrong upper bound for nHeight 2026-05-28 16:11:57 +02:00
Jeremy Rubin
76d434e5fc BIP449: OP_TWEAKADD (#1944)
* BIP: OP_TWEAKADD

* BIP TweakAdd: note on commutativity of tweaking and add test cases

* BIP TweakAdd: Invert Argument Order

* BIP Tweakadd: fix typo & add note on even-y tweaking

* BIP TweakAdd -- add mailing list discussion

* BIP TweakAdd: Add Alpen and MATT mentions

* BIP TweakAdd Formatting Edits

* BIP TWEAKADD remove conventions section

* BIP TWEAKADD formatting fix

* BIP TWEAKADD Move Vectors to end

* BIP TweakAdd: Condense compatibility section

* [BIP-0449] Updates post assignemnt

* [BIP-0449] Normalize Metadata

* Update bip-0449.md Link Text to point to OP of ML Thread
2026-05-23 07:03:53 -07:00
phrwlk
2d12e67b00 BIP-119: use self.stack[-1] in execute_bip_119 (#2043) 2026-05-22 17:22:38 -07:00
Murch
43a4941b37 Merge pull request #2172 from darosior/2605_bip54_complete
BIP 54: progress to Complete
2026-05-22 11:20:32 -07:00
Antoine Poinsot
c47655654c bip-0054: move to complete 2026-05-22 13:53:51 -04:00
Antoine Poinsot
809ca9939a bip-0054: link to Bitcoin Core reference implementation rebased on latest version 2026-05-22 13:43:31 -04:00
Jon Atack
5b118aa337 Merge pull request #2171 from murchandamus/bip10-record-withdrawal
bip10: Record Withdrawal in Changelog
2026-05-21 12:51:38 -07:00
Murch
a766a6e127 Merge pull request #2170 from darosior/bip54_rationale_additions
BIP 54: improve and deduplicate parts of rationale and motivation
2026-05-21 12:06:24 -07:00
Antoine Poinsot
6c61126d74 bip-0054: mention Luke's extranonce concern in rationale 2026-05-21 14:49:48 -04:00
Antoine Poinsot
b75238ffb3 bip-0054: rephrase/dedup motivation and rationale for BIP 34 cleanup
The rationale was duplicating some of the motivation. The motivation had a sentence that read weird.
While rephrasing the sentence, take the opportunity to link to the now-proposed Utreexo BIP. Also
remove a duplicate link reference.
2026-05-21 14:49:40 -04:00
Murch
7571cd4489 bip10: Record Withdrawal in Changelog 2026-05-21 10:54:22 -07:00
Jon Atack
242f7d2605 Merge pull request #2167 from murchandamus/bip1-record-close-reason
bip1: Record close reason
2026-05-21 09:54:12 -07:00
Murch
6d95a22232 bip176: Advance to Complete (#2169) 2026-05-21 08:35:25 -07:00
Murch
fefc5c1925 bip127: Add Changelog 2026-05-21 08:30:35 -07:00
Jon Atack
6a36c4d8b6 Merge pull request #2164 from murchandamus/bip38-deployed
bip38: Advance to Deployed
2026-05-21 08:25:41 -07:00
Steven Roose
ce477589c8 bip-127: Mark complete 2026-05-21 08:00:21 -07:00
Antoine Poinsot
ec24fd371c bip-0054: more correct worst case validation times
The sentence was misleading, with 'lower end devices' potentially applying to the whole range, and the range itself being understated.
2026-05-21 10:56:42 -04:00
Jon Atack
4fb5a8afd0 Merge pull request #2166 from murchandamus/bip78-Deployed
bip78: Advance to Deployed
2026-05-21 07:44:53 -07:00
Steven Roose
7563199c2d bip-127: Remove uncomplete and unused protocol buffers part
This part was never implemented by anyone and it is not complete in the
current state.
2026-05-21 16:27:34 +02:00
Murch
92d5ce5684 bip1: Record close reason
This commit forgoes introducing a version, as the BIP has been closed
for a decade and it is no longer necessary to update the readers
regarding specification changes of BIP1.
2026-05-20 17:41:21 -07:00
Murch
e872e76a3f bip78: Advance to Deployed
According to the BIP78 itself, there are multiple projects that have
implemented support for this proposal on mainnet:
https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki#implementations
2026-05-20 15:49:09 -07:00
Murch
885c7062cd bip38: Advance to Deployed 2026-05-20 15:00:19 -07:00
Antoine Poinsot
19caed45a1 bip-0054: rephrase Timewarp motivation 2026-05-20 16:43:11 -04:00
Yuri S Villas Boas
d293ae1a10 BIP450: Formosa—Seed Encoding per Themed Mnemonic Stories (#2108)
* Formosa as BIP

Mnemonic *sentences* instead of words proposed as forwards- and backwards-compatible expansion to BIP39, itself as Bitcoin Improvement Proposal.

* Update bip.mediawiki

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>

* Update bip.mediawiki

Satisfying requirement of title in fewer than 50 characters.

* Formosa: address PR #2108 review feedback

Restructure the draft to follow BIP-3 conventions and resolve the issues
raised by reviewers in https://github.com/bitcoin/bips/pull/2108:

- Introduce explicit Specification section with a Terminology subsection
  that distinguishes 'word', 'category', 'theme', 'sentence' and
  'mnemonic' / 'mnemonic story', removing the ambiguity of using
  'sentence' at two different scales.
- Replace the unclear 'if the category is led by another category'
  wording with an explicit LED_BY field description and a step-by-step
  algorithm that covers both the leaderless and led cases.
- Reflow the theme-property list (previously a/b/c/d/e split by an
  intervening paragraph) into a single numbered list so it renders as a
  list rather than as code blocks.
- Add a dedicated Rationale section covering the 33-bit sentence size,
  themed sentences, free-form theme schema, the LED_BY mechanism, the
  re-encoding-through-BIP-39 design, and why custom themes are
  discouraged.
- Add a dedicated Backwards Compatibility section describing
  compatibility at the mnemonic, entropy, and seed levels.
- Add a worked Example section showing a 128-bit entropy being encoded
  into a 4-sentence mnemonic story under a small illustrative theme,
  including bit splitting, FILLING_ORDER vs NATURAL_ORDER, and the
  LED_BY lookup.
- Tighten the Abstract and Motivation; clarify that BIP-39 is itself a
  Formosa theme.

* Formosa: spell out abbreviated table labels

Reviewer on PR #2108 asked for no abbreviations in table labels. Replace:

- ENT / CS / S / MS column headers with 'Initial entropy bits',
  'Checksum bits', 'Total bits', 'Number of sentences', 'Mnemonic
  words (6-word theme)' and 'Mnemonic words (BIP-0039)'.
- 'List size / Bits / Chars to identify / Density (bits/char)' with
  'Wordlist size / Bits per word / Characters to identify / Density
  (bits per character)'.
- ADJ. with ADJECTIVE in the example bit-assignment diagram, and the
  surrounding narrative ENT/MS uses with the spelled-out forms.

The accompanying formulas now use the expanded names too, so the
algorithm description and the table column headers stay consistent.

* Formosa: rebuild Example on the real medieval_fantasy theme

Replace the previous hypothetical 5-category example with one that
mirrors the medieval_fantasy theme actually shipped at
https://github.com/Yuri-SVB/formosa/tree/master/src/mnemonic/themes,
including:

- the real 6 categories with their actual BIT_LENGTHs
  (VERB=5, SUBJECT=6, OBJECT=6, ADJECTIVE=5, WILDCARD=6, PLACE=5,
  summing to 33);
- the real FILLING_ORDER and NATURAL_ORDER;
- the real lead tree (VERB → SUBJECT; SUBJECT → OBJECT and WILDCARD;
  OBJECT → ADJECTIVE; WILDCARD → PLACE), showing that a single
  leader can have several dependent categories;
- a 33-bit block whose decoded indices (28, 32, 63, 27, 46, 29)
  pick existing words and existing sub-list entries: VERB[28]
  =unveil, SUBJECT_under_unveil[32]=king, OBJECT_under_king[63]
  =wine, ADJECTIVE_under_wine[27]=sweet, WILDCARD_under_king[46]
  =queen, PLACE_under_queen[29]=throne_room, yielding the sentence
  'king unveil sweet wine queen throne_room'.

This keeps the worked example faithful to the reference
implementation rather than to a fabricated theme, so that anyone can
reproduce the encoding by parsing medieval_fantasy.json.

* Formosa: explain LED_BY as a primitive next-word predictor

Add a paragraph to the LED_BY rationale clarifying that a Formosa theme
behaves as a primitive language model (next-word predictor): each LED_BY relation
skews the conditional distribution over the next word so that probability
mass falls only on the 2^BIT_LENGTH words compatible with the already-
chosen leader, and zero elsewhere. The theme designer plays the role of
training data, hand-curating which combinations are semantically coherent.
This framing makes explicit why themes produce sentences that 'sound right'
while still covering all 2^33 bit patterns of a sentence.

* Cite the companion project Mooncake (https://github.com/T3-Infosec/mooncake)
which builds on this property by rendering each Formosa category as an
on-screen table whose rows and columns are permuted per input session.

Combined with the randomized-indexation property,
an attacker watching only the screen still learns nothing without also
recovering the press sequence.

Add a Rationale paragraph explaining a further benefit of splitting the
vocabulary into several short wordlists (32-128 entries each): such tables
fit on a mobile-device screen and admit input via on-screen lookup, which
a single 2048-word list does not.

The randomized indexation:

- defeats pure key-logging (keystrokes alone don't reveal words; the
  attacker also needs the session permutation),
- raises the bar for shoulder surfing (same as key-logging: only keys
  AND session's permutation suffice. Either alone is uniformative).

This gives an operational, security-focused argument for the
many-small-lists design that complements the existing memorization and
information-density arguments.

Formosa: document Mooncake's volume-key input on mobile

Add a paragraph to the Mooncake rationale describing the proposed mobile
input mechanism: reuse of the volume-up / volume-down keys as a two-button
binary selector. Because every Formosa category is sized 2^BIT_LENGTH and
the on-screen table is laid out in rows, sub-rows and columns whose counts
are powers of two, narrowing to a single cell takes exactly BIT_LENGTH
presses (5 for a 32-entry category, 6 for 64, 7 for 128). The per-category
press count is invariant therefore uninformative, and equal to the bits of
entropy encoded, and the 'one bit per press' bound matches the existing
side-channel argument.

Add three concrete reasons why volume-key input on mobile resists visual

shoulder surfing better than an on-screen keyboard:

- Subtler input motions: a single finger pressing a side rocker, much
  harder to read from a distance than multi-finger taps on a glass
  keyboard.
- Easy occlusion with the second hand: both volume keys are on one edge
  of the device, so the free hand (or the holding hand's thumb) can
  cover them without obscuring the screen for the user.
- Pocket input via headphone volume buttons: because the protocol is
  purely binary, headphone volume controls are sufficient, letting the
  user keep the buttons in a pocket while operating it by feel and
  removing the input motion from the observer's field of view entirely.

* Update bip.mediawiki

Fixed typo from "dektop"  to "desktop"
Fixed agreement of number from "Those of a mobile device" to "Those of mobile devices"

* Update bip.mediawiki

Substituted triple hyphen for —

Co-authored-by: Murch <murch@murch.one>

* Update bip.mediawiki

Updated title to mention Formosa and be more self-explanatory.

Co-authored-by: Murch <murch@murch.one>

* renamed bip.mediawiki to bip-0450.mediawiki
added 450 to BIP number in preamble
added assigned date to 2023-05-02 (date of first mention in email group) in preamble
added correspondent entry on README.md table

* fixed assignment dated
shortened title

* BIP-450: fix CI lint failures (field order + README filename)

Two issues caused Build-Table-Checks and Diff-Checks to fail on PR #2108:

1. Preamble field order: scripts/buildtable.pl enforces @FieldOrder
   (...License, Discussion, ..., Requires...). The preamble had Requires
   before Discussion, causing buildtable.pl to die "Field order is
   incorrect", which fails Build-Table-Checks and cascades into
   Diff-Checks. Moved the Discussion block above Requires.

2. README table row referenced bip-0450.md, but the file is
   bip-0450.mediawiki. buildtable.pl emits the .mediawiki name, so the
   README row never matched the generated table and Diff-Checks failed.
   Corrected the link target to bip-0450.mediawiki.

Verified locally: buildtable.pl exits 0, diffcheck.sh reports "README
table matches expected table from BIP files", link-format-chk.sh passes.

* bip450: Add dates to discussion header
2026-05-20 12:51:22 -07:00
Jon Atack
16e81515be Merge pull request #2159 from darosior/2505_64b_clarifications_and_rationale
BIP 54: clarify 64-byte transactions item description and rationale
2026-05-19 15:57:51 -07:00
Jon Atack
53cc4e36e9 Merge pull request #2162 from scgbckbone/bip322_break_changes
BIP-322 nit fixes
2026-05-19 14:46:13 -07:00
Antoine Poinsot
f1f1c36ff2 bip-0054: add a footnote with known workarounds for SPV verifiers 2026-05-19 09:59:50 -04:00
Antoine Poinsot
9e8e357b03 bip-0054: disambiguate use of "mitigation"
Jon pointed that i use "mitigation" to refer both to the items of this
BIP, and for the existing workarounds to make SPV verifiers safe in the
presence of 64-byte txs. This commit rephrases the latter usage.
2026-05-19 09:59:40 -04:00
Antoine Poinsot
47a2d72539 bip-0054: less redundancy in 64-byte rationale, move caching risk to footnote 2026-05-19 09:58:44 -04:00
scgbckbone
6a36f95565 nit fixes 2026-05-19 12:35:02 +02:00
Antoine Poinsot
8ae3af58e0 bip-0054: state explicitly fake inclusion proofs only concern SPV verifier 2026-05-15 10:51:01 -04:00
omipheo
1259a23acc BIP352: complete type annotations on bitcoin_utils class methods
Direct follow-up to PR #2154 (which annotated the free-function half
of bip-0352/bitcoin_utils.py) and 2f7117c ("BIP352: fix Any typing").
The four classes in this file — COutPoint, VinInfo, CScriptWitness,
and CTxInWitness — still had unannotated `__init__`, `serialize`,
`deserialize`, and `is_null` methods. mypy could not flow types
through the surrounding reference.py code that constructs and passes
these objects.

Annotate every method on all four classes:

- COutPoint:    __init__ (hash, n), serialize -> bytes, deserialize -> None
- VinInfo:      __init__ (typed Optional defaults for the three
                construct-on-None fields)
- CScriptWitness: __init__ -> None, is_null -> bool, plus an inline
                stack: List[bytes] declaration matching what the
                rest of the file already assumes
- CTxInWitness: __init__ -> None, deserialize -> "CTxInWitness"
                (forward ref since it returns self), is_null -> bool

Adds Optional to the existing typing import (List was already added
by #2154). No behavior changes.

Verified: mypy --ignore-missing-imports ./bip-0352/bitcoin_utils.py
reports "Success: no issues found in 1 source file"; round-trip
smoke tests on COutPoint serialize/deserialize, CScriptWitness
is_null with empty + non-empty stack, CTxInWitness deserialize
returning self, and VinInfo default-construction all match the
pre-change behavior.
2026-05-15 11:24:44 +02:00
Antoine Poinsot
5c67f90fa8 bip-0054: clarify rationale for invalidating 64-byte txs
As Eric points out on the mailing list: 1. the rationale section should mention and address the
"seam" objection directly rather than burying it in a footnote; 2. the full node consensus split
issue should not be used as sole rationale for invalidating 64-byte txs (but it's fair to point out
it's fixed as a nice to have byproduct).

ML thread: https://gnusha.org/pi/bitcoindev/43996cb3-9133-4627-8944-5fe08427be68n@googlegroups.com/T/#md66e252f0748f4ef7569d5e15d42631e12b66c0b,
2026-05-14 09:09:56 -04:00
Murch
6deafd07ff Merge pull request #2155 from guggero/bip-0322-follow-up
BIP-0322: polishing follow-up
2026-05-14 05:26:27 -07:00
Oli
46bfccd318 BIP-0322: grammar and readability touchup
Co-authored-by: Jon Atack <jon@atack.com>
2026-05-14 11:30:45 +02:00
Jon Atack
fa4e128f66 Merge pull request #2157 from arminsabouri/fix-bip322-link
Fix bip322 link in bip174 type registry
2026-05-13 10:26:07 -07:00
Armin Sabouri
e5863eb96d Fix bip322 link in bip174 type registry 2026-05-13 11:49:18 -04:00
Oli
352c66b783 BIP-0322: clarify sighash flag for P2TR 2026-05-13 12:49:05 +02:00