Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
ba843e2
BIP69: fix output inconsistency and update to python3
prestoalvarez Aug 22, 2025
d988817
Fix file permissions for bip-0069_examples.py
prestoalvarez Sep 7, 2025
6441993
BIP-310: fix version-rolling.min-bit-count parameter spec
lisenokdonbassenok Dec 18, 2025
3050bb6
Squashed 'bip-0374/secp256k1lab/' content from commit 44dc4bd
theStack Jan 14, 2026
d2ceae1
Merge commit '3050bb6b25c0c20b62e2fc1a23276a09d50d151b' as 'bip-0374/…
theStack Jan 14, 2026
4e18ee6
BIP-374: avoid using sys.path[0] to find current working directory
theStack May 20, 2025
459d977
BIP-374: replace secp256k1.py with vendored copy of secp256k1lab
theStack May 20, 2025
436a3dd
BIP-374: use `tagged_hash` and `xor_bytes` routines from secp256k1lab
theStack Jan 14, 2026
2b7f079
BIP-374: mention secp256k1lab in BIP text
theStack Jan 15, 2026
9630c4c
BIP434: p2p feature negotiation
ajtowns Dec 5, 2025
48c0f20
BIP324: Add Version header and Changelog section
ajtowns Jan 16, 2026
6a0636d
Add BIP-346: OP_TXHASH
stevenroose Sep 6, 2023
4c80568
BIP324: supporting 1 byte message type ids means supporting the equiv…
ajtowns Dec 11, 2025
40e6634
BIP324: define message_length
ajtowns Dec 11, 2025
4c2f656
Merge pull request #1500 from stevenroose/txhash
murchandamus Jan 27, 2026
3177af3
Merge pull request #2076 from ajtowns/202512-p2p-feature
murchandamus Jan 27, 2026
e169a61
Merge pull request #2084 from theStack/bip374-vendor-secp256k1lab
murchandamus Jan 28, 2026
43e3983
Merge pull request #2086 from ajtowns/202512-bip324-shortid-alias
murchandamus Jan 29, 2026
a3370b5
BIP 324: Add auxiliary file tracking assignments of one-byte message …
ajtowns Jan 30, 2026
df1f098
BIP324, BIP183: Add utreexo's p2pv2 message type ids
ajtowns Jan 31, 2026
a50c0ea
BIP324, BIP434: Assign message type id for "feature" message
ajtowns Jan 31, 2026
29b4812
Merge pull request #2092 from ajtowns/202601-feature-shortid
murchandamus Feb 3, 2026
3709d73
BIP 434: fix license inconsistency
ajtowns Feb 3, 2026
5d0f70a
Merge pull request #2094 from ajtowns/202601-bip434-copyright
murchandamus Feb 3, 2026
57869d5
BIP 89: Chain Code Delegation for Private Collaborative Custody (#2004)
jurvis Feb 4, 2026
10c7888
Escape pipe character in markdown table (#2095)
futurepaul Feb 4, 2026
ed7af6a
BIP 110: Reduced Data Temporary Softfork (#2017)
dathonohm Feb 7, 2026
eae7d9f
BIP360: Pay to Merkle Root (P2MR) (#1670)
cryptoquick Feb 11, 2026
97781ea
BIP85: fix typo in byte value (#2100)
YoYo860224 Feb 13, 2026
9e407af
BIP352: Add Sebastian Falbesoner as Author
murchandamus Feb 24, 2026
bd56416
Merge pull request #2107 from murchandamus/2026-02-bip352-add-thestack
murchandamus Feb 25, 2026
9ff061f
BIP128: Timelock-Recovery Storage Format (#2068)
oren-z0 Feb 27, 2026
edb6856
BIP-117: add missing BIP8 reference (#2080)
MoNyAvA Feb 27, 2026
53dac1b
bip-0044: add Requires header for BIP32 and BIP43 (#2072)
MohammadEglil Feb 27, 2026
e76f043
BIP-383: remove extra stray </tt> (#2061)
MoNyAvA Feb 27, 2026
0780663
BIP129: Add Requires header (#2019)
jonatack Feb 27, 2026
95465e0
BIP20,21: add Superseded-By and Replaces headers (#1984)
jonatack Feb 27, 2026
0f30778
BIP-174: port public key terminology from BIP 373 (#2085)
rkrux Feb 28, 2026
ced2410
Merge pull request #2065 from lisenokdonbassenok/fix/bip310-min-bit-c…
jonatack Feb 28, 2026
f665c2c
BIP-352: introduce per-group recipient limit K_max (=2323)
theStack Jan 30, 2026
3aa17ca
BIP-352: test vectors: allow specifying repeated recipients for sending
theStack Feb 26, 2026
f14132f
BIP-352: test vectors: allow to check found output count for receiving
theStack Feb 26, 2026
9830fad
BIP-352: add test vector for exceeding K_max limit [sender side]
theStack Feb 26, 2026
b4bc0a8
BIP-352: add test vector for exceeding K_max limit [receiver side]
theStack Feb 26, 2026
9fb88a1
bip347: Complete OP_CAT (#2090)
EthanHeilman Mar 2, 2026
6eb01f0
Merge pull request #2106 from theStack/bip352_limit_max-k-PR
murchandamus Mar 2, 2026
6eb7cb3
Merge pull request #2110 from casey/fix-readme-link
casey Mar 2, 2026
53b590e
Squashed 'bip-0352/secp256k1lab/' content from commit 44dc4bd
theStack Mar 2, 2026
511bb99
Merge commit '53b590e190f798131a10a16194261243abdf6b4d' as 'bip-0352/…
theStack Mar 2, 2026
f2ffa99
BIP-352: take use of vendored secp256k1lab for reference implementation
theStack Jan 16, 2026
f61d4b8
BIP442: OP_PAIRCOMMIT (#1699)
moonsettler Mar 3, 2026
ddd5db9
BIP-110: Clarify rule 2 witness stack element exclusions
dathonohm Mar 4, 2026
44b7221
BIP-110: Update deployment section with EXPIRED state; add GBT subsec…
dathonohm Mar 4, 2026
b3ab91f
Merge remote-tracking branch 'origin-pull/2115/head'
luke-jr Mar 5, 2026
41f9957
BIP392: Silent Payment Output Script Descriptors (#2047)
craigraw Mar 5, 2026
1656f62
Merge pull request #1943 from prestoalvarez/patch-1
jonatack Mar 5, 2026
c0644a0
BIP32: edits by ddustin for clarity (picks up PR785) (#1903)
jonatack Mar 5, 2026
249bdef
BIP-352: mention secp256k1lab in BIP text
theStack Jan 16, 2026
b382728
Merge pull request #2087 from theStack/bip352-vendor-secp256k1lab
murchandamus Mar 6, 2026
351ceef
BIP-128: exact specification for the checksum calculation (#2121)
oren-z0 Mar 16, 2026
6c68c16
bip360: throw error when leaf version is non-standard ( 192 / c0 )
jbride Mar 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .typos.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ extend-ignore-re = [
"ser.*",
"prefix.*",
"value: .*",
"pqNTRUsign",
"Strnad",
]

[default.extend-words]
Expand Down
64 changes: 60 additions & 4 deletions README.mediawiki
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
People wishing to submit a BIP should first describe their idea to the [https://groups.google.com/g/bitcoindev
bitcoindev@googlegroups.com] mailing list to gather feedback on viability and community interest before working on a
People wishing to submit a BIP should first describe their idea to the [https://groups.google.com/g/bitcoindev bitcoindev@googlegroups.com]
mailing list to gather feedback on viability and community interest before working on a
formal description. Please open a pull request to this repository only when substantial progress on the draft has been
made, preferably when the draft is nearing completion. Authors do <em>not</em> assign a number to their own proposal.
After a proposal meets the editorial criteria, a BIP Editor will assign a number to it and publish the proposal by
Expand Down Expand Up @@ -512,6 +512,13 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Dmitry Petukhov
| Informational
| Complete
|-
| [[bip-0089.mediawiki|89]]
| Applications
| Chain Code Delegation
| Jesse Posner, Jurvis Tan
| Specification
| Draft
|- style="background-color: #cfffcf"
| [[bip-0090.mediawiki|90]]
|
Expand Down Expand Up @@ -617,6 +624,13 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Gavin Andresen
| Specification
| Closed
|-
| [[bip-0110.mediawiki|110]]
| Consensus (soft fork)
| Reduced Data Temporary Softfork
| Dathon Ohm
| Specification
| Draft
|- style="background-color: #cfffcf"
| [[bip-0111.mediawiki|111]]
| Peer Services
Expand Down Expand Up @@ -736,6 +750,13 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Steven Roose
| Specification
| Draft
|-
| [[bip-0128.mediawiki|128]]
| Applications
| Timelock-Recovery Storage Format
| Oren Z
| Specification
| Draft
|- style="background-color: #ffffcf"
| [[bip-0129.mediawiki|129]]
| Applications
Expand Down Expand Up @@ -1171,12 +1192,19 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Specification
| Closed
|-
| [[bip-0346.md|346]]
| Consensus (soft fork)
| OP_TXHASH
| Steven Roose, Brandon Black
| Specification
| Draft
|- style="background-color: #ffffcf"
| [[bip-0347.mediawiki|347]]
| Consensus (soft fork)
| OP_CAT in Tapscript
| Ethan Heilman, Armin Sabouri
| Specification
| Draft
| Complete
|-
| [[bip-0348.md|348]]
| Consensus (soft fork)
Expand Down Expand Up @@ -1209,7 +1237,7 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| [[bip-0352.mediawiki|352]]
| Applications
| Silent Payments
| josibake, Ruben Somsen
| josibake, Ruben Somsen, Sebastian Falbesoner
| Specification
| Complete
|- style="background-color: #ffffcf"
Expand All @@ -1219,6 +1247,13 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Matt Corallo, Bastien Teinturier
| Specification
| Complete
|-
| [[bip-0360.mediawiki|360]]
| Consensus (soft fork)
| Pay-to-Merkle-Root (P2MR)
| Hunter Beast, Ethan Heilman, Isabel Foxen Duke
| Specification
| Draft
|- style="background-color: #cfffcf"
| [[bip-0370.mediawiki|370]]
| Applications
Expand Down Expand Up @@ -1346,6 +1381,13 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Informational
| Draft
|-
| [[bip-0392.mediawiki|392]]
| Applications
| Silent Payment Output Script Descriptors
| Craig Raw
| Specification
| Draft
|-
| [[bip-0431.mediawiki|431]]
| Applications
| Topology Restrictions for Pinning
Expand All @@ -1360,6 +1402,20 @@ users (see also: [https://en.bitcoin.it/wiki/Economic_majority economic majority
| Informational
| Draft
|-
| [[bip-0434.md|434]]
| Peer Services
| Peer Feature Negotiation
| Anthony Towns
| Specification
| Draft
|-
| [[bip-0442.md|442]]
| Consensus (soft fork)
| OP_PAIRCOMMIT
| moonsettler, Brandon Black
| Specification
| Draft
|-
| [[bip-0443.mediawiki|443]]
| Consensus (soft fork)
| OP_CHECKCONTRACTVERIFY
Expand Down
1 change: 1 addition & 0 deletions bip-0020.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
Type: Specification
Assigned: 2011-01-10
License: BSD-2-Clause
Proposed-Replacement: 21
</pre>

BIP 0020 is based off an earlier document by Nils Schneider. '''And has been replaced by BIP 0021'''
Expand Down
1 change: 1 addition & 0 deletions bip-0021.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
Status: Closed
Type: Specification
Assigned: 2012-01-29
Replaces: 20
Proposed-Replacement: 321
</pre>

Expand Down
4 changes: 2 additions & 2 deletions bip-0032.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ Addition (+) of two coordinate pair is defined as application of the EC group op
Concatenation (||) is the operation of appending one byte sequence onto another.

As standard conversion functions, we assume:
* point(p): returns the coordinate pair resulting from EC point multiplication (repeated application of the EC group operation) of the secp256k1 base point with the integer p.
* point(p): returns the coordinate pair resulting from EC point multiplication (repeated application of the EC group operation) of the secp256k1 base point with the integer p (i.e., the operation used to compute a public key from a private key).
* ser<sub>32</sub>(i): serialize a 32-bit unsigned integer i as a 4-byte sequence, most significant byte first.
* ser<sub>256</sub>(p): serializes the integer p as a 32-byte sequence, most significant byte first.
* ser<sub>P</sub>(P): serializes the coordinate pair P = (x,y) as a byte sequence using SEC1's compressed form: (0x02 or 0x03) || ser<sub>256</sub>(x), where the header byte depends on the parity of the omitted y coordinate.
* ser<sub>P</sub>(P): serializes the coordinate pair P = (x,y) (i.e., the public key) as a byte sequence using [https://www.secg.org/sec1-v2.pdf SEC1]'s compressed form: (0x02 or 0x03) || ser<sub>256</sub>(x), where the header byte depends on the parity of the omitted y coordinate.
* parse<sub>256</sub>(p): interprets a 32-byte sequence as a 256-bit number, most significant byte first.


Expand Down
1 change: 1 addition & 0 deletions bip-0044.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
Status: Deployed
Type: Specification
Assigned: 2014-04-24
Requires: 32, 43
</pre>

==Abstract==
Expand Down
18 changes: 12 additions & 6 deletions bip-0069/bip-0069_examples.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/usr/bin/env python3
import binascii
from functools import cmp_to_key

#returns -1 if barr1 is less, 1 if barr1 is greater, and 0 if equal
def bytearr_cmp(barr1, barr2):
Expand Down Expand Up @@ -32,9 +34,10 @@ def input_cmp(input_tuple1, input_tuple2):
raise ValueError('Matching previous transaction hash and previous transaction output index for two distinct inputs. Invalid!')

def sort_inputs(input_tuples):
return sorted(input_tuples, cmp=input_cmp)
return sorted(input_tuples, key=cmp_to_key(input_cmp))

def print_inputs(ordered_input_tuples):
print("inputs")
index = 0
for prev_tx_hash_byte_arr_little_endian, prev_tx_output_index in ordered_input_tuples:
prev_tx_hash_hex = binascii.hexlify(bytearray(prev_tx_hash_byte_arr_little_endian))
Expand All @@ -52,9 +55,10 @@ def output_cmp(output_tuple1, output_tuple2):
return bytearr_cmp(output_tuple1[1], output_tuple2[1])

def sort_outputs(output_tuples):
return sorted(output_tuples, cmp=output_cmp)
return sorted(output_tuples, key=cmp_to_key(output_cmp))

def print_outputs(ordered_output_tuples):
print("outputs")
index = 0
for amount, scriptPubKey_byte_arr in ordered_output_tuples:
scriptPubKey_hex = binascii.hexlify(bytearray(scriptPubKey_byte_arr))
Expand Down Expand Up @@ -82,6 +86,7 @@ def main():
([0x7d, 0x03, 0x7c, 0xeb, 0x2e, 0xe0, 0xdc, 0x03, 0xe8, 0x2f, 0x17, 0xbe, 0x79, 0x35, 0xd2, 0x38, 0xb3, 0x5d, 0x1d, 0xea, 0xbf, 0x95, 0x3a, 0x89, 0x2a, 0x45, 0x07, 0xbf, 0xbe, 0xeb, 0x3b, 0xa4], 1),
([0x6c, 0x1d, 0x56, 0xf3, 0x1b, 0x2d, 0xe4, 0xbf, 0xc6, 0xaa, 0xea, 0x28, 0x39, 0x6b, 0x33, 0x31, 0x02, 0xb1, 0xf6, 0x00, 0xda, 0x9c, 0x6d, 0x61, 0x49, 0xe9, 0x6c, 0xa4, 0x3f, 0x11, 0x02, 0xb1], 1),
([0xb4, 0x11, 0x2b, 0x8f, 0x90, 0x0a, 0x7c, 0xa0, 0xc8, 0xb0, 0xe7, 0xc4, 0xdf, 0xad, 0x35, 0xc6, 0xbe, 0x5f, 0x6b, 0xe4, 0x6b, 0x34, 0x58, 0x97, 0x49, 0x88, 0xe1, 0xcd, 0xb2, 0xfa, 0x61, 0xb8], 0)]
print("\ntx 0a6a357e2f7796444e02638749d9611c008b253fb55f5dc88b739b230ed0c4c3")
tx_0a6a_sorted_input_tuples = sort_inputs(tx_0a6a_input_tuples)
print_inputs(tx_0a6a_sorted_input_tuples)

Expand All @@ -94,10 +99,11 @@ def main():

#reference data: https://blockchain.info/rawtx/28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f thanks @quantabytes!
tx_2820_input_tuples = [
# (prev_tx_hash, prev_tx_output_index)
("35288d269cee1941eaebb2ea85e32b42cdb2b04284a56d8b14dcc3f5c65d6055", 0),
("35288d269cee1941eaebb2ea85e32b42cdb2b04284a56d8b14dcc3f5c65d6055", 1)] #duplicate prev_tx_hash
# (prev_tx_hash_byte_arr_little_endian, prev_tx_output_index)
([0x55, 0x60, 0x5d, 0xc6, 0x5f, 0x3c, 0xcc, 0x4d, 0xb1, 0xd8, 0x56, 0x4a, 0x28, 0x04, 0x2b, 0xdb, 0x2c, 0x2b, 0xe3, 0x85, 0xea, 0xb2, 0xeb, 0xea, 0x41, 0x19, 0xee, 0x9c, 0x26, 0x8d, 0x28, 0x35], 0),
([0x55, 0x60, 0x5d, 0xc6, 0x5f, 0x3c, 0xcc, 0x4d, 0xb1, 0xd8, 0x56, 0x4a, 0x28, 0x04, 0x2b, 0xdb, 0x2c, 0x2b, 0xe3, 0x85, 0xea, 0xb2, 0xeb, 0xea, 0x41, 0x19, 0xee, 0x9c, 0x26, 0x8d, 0x28, 0x35], 1)] #duplicate prev_tx_hash

print("\ntx 28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f")
tx_2820_sorted_input_tuples = sort_inputs(tx_2820_input_tuples)
print_inputs(tx_2820_sorted_input_tuples)

Expand All @@ -106,7 +112,7 @@ def main():
(100000000, [0x41, 0x04, 0x6a, 0x07, 0x65, 0xb5, 0x86, 0x56, 0x41, 0xce, 0x08, 0xdd, 0x39, 0x69, 0x0a, 0xad, 0xe2, 0x6d, 0xfb, 0xf5, 0x51, 0x14, 0x30, 0xca, 0x42, 0x8a, 0x30, 0x89, 0x26, 0x13, 0x61, 0xce, 0xf1, 0x70, 0xe3, 0x92, 0x9a, 0x68, 0xae, 0xe3, 0xd8, 0xd4, 0x84, 0x8b, 0x0c, 0x51, 0x11, 0xb0, 0xa3, 0x7b, 0x82, 0xb8, 0x6a, 0xd5, 0x59, 0xfd, 0x2a, 0x74, 0x5b, 0x44, 0xd8, 0xe8, 0xd9, 0xdf, 0xdc, 0x0c, 0xac]),
(2400000000, [0x41, 0x04, 0x4a, 0x65, 0x6f, 0x06, 0x58, 0x71, 0xa3, 0x53, 0xf2, 0x16, 0xca, 0x26, 0xce, 0xf8, 0xdd, 0xe2, 0xf0, 0x3e, 0x8c, 0x16, 0x20, 0x2d, 0x2e, 0x8a, 0xd7, 0x69, 0xf0, 0x20, 0x32, 0xcb, 0x86, 0xa5, 0xeb, 0x5e, 0x56, 0x84, 0x2e, 0x92, 0xe1, 0x91, 0x41, 0xd6, 0x0a, 0x01, 0x92, 0x8f, 0x8d, 0xd2, 0xc8, 0x75, 0xa3, 0x90, 0xf6, 0x7c, 0x1f, 0x6c, 0x94, 0xcf, 0xc6, 0x17, 0xc0, 0xea, 0x45, 0xaf, 0xac])]
tx_2820_sorted_output_tuples = sort_outputs(tx_2820_output_tuples)
print_outputs(tx_2820_output_tuples)
print_outputs(tx_2820_sorted_output_tuples)

if __name__ == "__main__":
main()
4 changes: 2 additions & 2 deletions bip-0085.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ OUTPUT:
====18 English words====
BIP39 English 18 word mnemonic seed

196 bits of entropy as input to BIP39 to derive 18 word mnemonic
192 bits of entropy as input to BIP39 to derive 18 word mnemonic

INPUT:
* MASTER BIP32 ROOT KEY: xprv9s21ZrQH143K2LBWUUQRFXhucrQqBpKdRRxNVq2zBqsx8HVqFk2uYo8kmbaLLHRdqtQpUm98uKfu3vca1LqdGhUtyoFnCNkfmXRyPXLjbKb
Expand Down Expand Up @@ -443,7 +443,7 @@ BIP32, BIP39

===2.0.0 (2025-09-19)===

====Fixed====
====Fixed====

* Fixed the human-readable datetime string for BIP85 GPG Keys that was incorrectly stated as '2009-01-03 18:05:05' rather than '2009-01-03 18:15:05'. Implementations that relied on the previously incorrect datetime string instead of UNIX Epoch timestamp 1231006505 will produce different key fingerprints.
Expand Down
Loading