Compare commits

..

3707 Commits

Author SHA1 Message Date
reflecttypefor
764f75e338
script: check link format in nested mediawiki files (#2199)
* script: check link format in nested mediawiki files

Signed-off-by: reflecttypefor <reflecttypefor@outlook.com>
2026-06-26 12:25:30 -07:00
Jon Atack
b9883fbb4b
Merge pull request #2196 from fjahr/bip-t5-draft
Some checks failed
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
BIP95: Testnet 5
2026-06-25 14:40:45 -07:00
Fabian Jahr
c134c7db55
BIP95: Testnet 5 2026-06-25 23:30:46 +02:00
Jon Atack
861e235e93
Merge pull request #2165 from murchandamus/bip52-closed
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
bip52: Update to Closed
2026-06-19 12:13:55 -07:00
Murch
4894bcc4eb
bip52: Update to Closed
This proposal appears abandoned, as it has not had any updates in over
four years, and cursory search did not produce any public discussions of
it since it was published either. Attempts to contact the authors did
not receive a response within four weeks.
2026-06-18 21:11:57 -07:00
conduition
6740c533e8
bip360: depth-zero script trees should be anyone-can-spend (#2198)
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
* bip360: depth zero trees should be anyone-can-spend

* bip360: update changelog and bump version to 0.12.0
2026-06-18 18:14:23 -07:00
Jon Atack
40cd7b4dd6
Merge pull request #2197 from ajtowns/202606-434-complete
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-434: Add ref impl, mark complete / CI: add version check
2026-06-11 07:11:18 -07:00
Anthony Towns
50eaa0d730 process: Check for pre-1.0 versions in complete/deployed bips 2026-06-11 23:55:42 +10:00
Anthony Towns
b14d7c34e5 BIP-434: Add reference implementation, bump to 1.0.0, mark complete 2026-06-11 23:47:57 +10:00
Jon Atack
4f17dbfa27
script: update Typos section in CONTRIBUTING.md (#2193)
Some checks failed
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
2026-06-08 18:22:17 -07:00
Jon Atack
2125990370
Merge pull request #2189 from jonatack/2026-06-update-typos-exclusions
Update typos exclusions
2026-06-08 10:54:39 -07:00
Jon Atack
c6c1559b3f
Merge pull request #2186 from DanGould/dangould/bip77-issue-1487-v1-fallback
BIP 77: Specify v1-fallback response mechanism
2026-06-08 10:47:26 -07:00
DanGould
9997e00576
BIP 77: Specify v1-fallback response mechanism
The receiver-to-sender response section presented HPKE encryption and
POST as the only path, when v2 receivers servicing v1 (BIP 78) senders
in the wild send the cleartext base64 PSBT via PUT to their own mailbox.
Add a forward-reference from the v2 path to Backwards compatibility,
and specify the v1-fallback response (no HPKE; PUT method; UTF-8 body;
receiver's own mailbox as target) normatively in that section.

Addresses payjoin/rust-payjoin#1487. Partially addresses
payjoin/rust-payjoin#844 (PUT/POST gap).
2026-06-09 00:52:41 +08:00
Jon Atack
2ffcd9a4a1
Merge pull request #2190 from guggero/bip322-version-fix
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-0322: use MAJOR version for address optionality
2026-06-05 08:11:26 -07:00
Oli
4061a54418
BIP-0322: use MAJOR version for address optionality
Addresses a review comment in #2188:
https://github.com/bitcoin/bips/pull/2188#issuecomment-4623250085
2026-06-05 08:32:18 +02:00
Jon Atack
c81d4236f3
Merge pull request #2188 from guggero/bip322-fix
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
BIP-0322: remove address optionality for PoF
2026-06-04 07:42:12 -07:00
Oli
e94e3c5698
BIP-0322: clarify sequence semantics for Proof of Funds
This commit clarifies that even for Proof of Funds signatures the
sequence of the first input is considered as "age S".
The reasoning behind this is that only the first input is a synthetic
one that doesn't reference a real transaction to which the height could
be compared against. Even though the Proof of Funds inputs could have
higher sequence values, those heights might have already been long
reached and would make the sequence values irrelevant compared to the potential
restrictions in the challenge script.
2026-06-04 10:54:11 +02:00
Oli
2923854e7a
BIP-0322: remove address optionality for PoF
This is cleaning up an artifact that was left over from #1352.
The alternative to removing the optionality of the address
would be to assume OP_TRUE in case of an empty address.
But that sounds like it could open up any number of potential
vulnerabilities.
And a user still has the ability to use an OP_TRUE script
in a p2wsh or p2tr address.
2026-06-04 10:54:11 +02:00
Jon Atack
291ba6803a Update typos exclusions 2026-06-03 09:33:53 -06:00
Shinobi
b69b8fef21
bip343: change status from deployed to closed (#2187)
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
* Update bip-0343.mediawiki

As a co-author I would like to move this BIP's status to Closed due to its current irrelevance and lack of any known deployments on the network. 

If I could I would delete it fully, or better yet go back in time to prevent it from being written.

* bip343: Fix table entry for move to Closed

* bip343: Record Close reason

---------

Co-authored-by: Murch <murch@murch.one>
2026-06-01 17:56:45 -07:00
Jon Atack
42dc3270db
Merge pull request #2168 from stevenroose/complete-127
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
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
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
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
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
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
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
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
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
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)
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
* 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)
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
2026-05-22 17:22:38 -07:00
Murch
43a4941b37
Merge pull request #2172 from darosior/2605_bip54_complete
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
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
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
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)
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
* 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
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
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
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
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
Some checks are pending
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
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
Oli
52b2e6d81b
BIP-0322: link to later sections for clarity 2026-05-13 12:49:05 +02:00
Oli
ad0e02f746
BIP-0322: change role to author, add required BIPs 2026-05-13 12:49:04 +02:00
Matt Corallo
622e47722c
Add BIP323: 24 nVersion bits for general purpose use (#2116)
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
2026-05-12 16:06:55 -07:00
Jon Atack
fd250df396
Merge pull request #2154 from omipheo/bip-0352-typing-return-annotations
Some checks are pending
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
BIP352: complete return type annotations in bitcoin_utils
2026-05-12 09:19:51 -07:00
Antoine Poinsot
346f93844f bip-0054: spell out in more places that 64 bytes is for witness-stripped size 2026-05-12 07:06:15 -04:00
omipheo
3b76c84d6f BIP352: complete return type annotations in bitcoin_utils
The serialization helpers in bip-0352/bitcoin_utils.py were partially
typed: ser_uint32, hash160, is_p2tr, is_p2wpkh, is_p2sh and is_p2pkh
already declare argument and return types, but the surrounding
from_hex / ser_uint256 / deser_uint256 / deser_txid / deser_compact_size
/ deser_string / deser_string_vector helpers omit them.

Annotate the missing return types (and fill in the obvious argument
types) so the file is consistent and so static analysis can flow types
through callers in reference.py. No behavior changes.
2026-05-08 07:39:17 +02:00
Jon Atack
9fce983a96
Merge pull request #2141 from guggero/bip-0322-finalization
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-0322: clarify motivation/purpose, add prefix, clarify Proof of Funds format, describe PSBT based signing
2026-05-07 20:13:01 -07:00
Jon Atack
e98e42cf0a Merge branch 'Snezhkko-chore/fix-create-outputs-recipients-typing'
* Snezhkko-chore/fix-create-outputs-recipients-typing:
  BIP352: fix Any typing
  BIP352: Fix recipients typing in create_outputs to List[Dict[str, str]]
2026-05-07 21:05:21 -06:00
Jon Atack
2f7117c6e9 BIP352: fix Any typing
`any` is a built-in logic function but not a valid type hint

Instead, use `Any`, the special construct from the typing module
that informs static analysis tools.
2026-05-07 21:04:24 -06:00
Snezhkko
c5c76f355a BIP352: Fix recipients typing in create_outputs to List[Dict[str, str]] 2026-05-07 21:04:11 -06:00
nervana21
acf99fc160
BIP 54: grammar improvements (#2151)
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
* bip54: Clarify deployment cost wording

* bip54: Clarify merkle tree wording

* bip54: Clarify sigops wording

* bip54: Clarify timewarp wording

* bip54: Clarify miner preparation cost wording
2026-05-07 12:24:34 +02:00
Oli
40dc3e1a19
README+BIP-0322: add changelog, mark Complete 2026-05-06 12:20:12 +02:00
Oli
414e16f5a2
BIP-0322: remove comments, add discussion links
As described in BIP-0003, the comments section is no longer required.
Instead we add all relevant discussions.
2026-05-06 12:20:12 +02:00
Oli
e69e2f9717
BIP-0322: add guggero as deputy 2026-05-06 12:20:12 +02:00
Oli
d77863fb9e
BIP-0322: update test vectors
This commit updates the test vectors to reflect all the changes in the
previous commits and also introduces new test vectors for the Proof of
Funds variant.
2026-05-06 12:20:11 +02:00
Oli
0dd436e7d4
BIP-0174+BIP-0322: describe PSBT based signing
This commit proposes a new PSBT input field type for transporting the
message to be signed to different signers in a multisig signing use
case.
2026-05-06 12:20:11 +02:00
bubb1es71
2cf4272948
BIP451: Dust UTXO Disposal Protocol (#2150)
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
* Add draft BIP for dust utxo disposal protocol

* Assign number 451, update preamble, rename BIP file, and add entry to README table

* Small edits

* Change title, abstract, motivation to focus on dust attack UTXOs
* Simpify dust selection section
* Add batching to address consolidation rules
* Fix core version in privacy preservation
* Fix table units

* Add confirmed utxo rationale

* Revert title back to original

* Change output to always be OP_RETURN ash
2026-05-06 09:22:45 +02:00
Jon Atack
ca418babb7
Merge pull request #2091 from EthanHeilman/fixlinks
Fix broken anchor links
2026-05-05 13:44:36 -07:00
Jon Atack
eda049e920
Merge pull request #2113 from schjonhaug/fix/bip119-pseudocode-typo
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-119: Fix missing self. prefix on stack reference in pseudocode
2026-05-01 13:16:17 -07:00
Murch
442e9628b3
Eliminate remaining "user-content" anchor links 2026-04-27 17:29:24 -07:00
Murch
b3a069464a
Fix other broken anchors
Used the following `sed` command and manually verified the unstaged
changes. Special cases that were not committed included external links
to Wikipedia which are case-sensitive, links specific lines in code, a
link to a title with a slash that had to be cleaned up, and links to
citations on the BIP repository that contain an underscore.

```
sed -E -i '
s/(\[\[[^][]*#)([^]|]*)(\||\]\])/\1\L\2\E\3/g
:again
s/(\[\[[^][]*#)([^]|]*)([: _]+)([^]|]*)(\||\]\])/\1\2-\4\5/g
t again
' bip-0*mediawiki
```
2026-04-27 17:26:49 -07:00
Murch
32b7adf847
BIP342: Fix anchor links 2026-04-27 17:26:47 -07:00
Murch
5137d59442
BIP23: Fix anchor links 2026-04-27 17:26:45 -07:00
Murch
42303cbdf8
BIP22: fix anchor links 2026-04-27 17:26:43 -07:00
Ethan Heilman
835e7107b8
Fix broken anchor links 2026-04-27 17:26:41 -07:00
craigraw
5253e9a294
BIP-0329: Add spscan label type for labelling silent payments wallets (#2149)
Some checks failed
GitHub Actions Check / Typo Checks (push) Has been cancelled
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
* Add spscan label type

* minor edits
2026-04-27 08:01:58 -07:00
Jon Atack
178ba65952
Merge pull request #1946 from strmfos/master
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-158: replace deprecated io/ioutil with os.ReadFile
2026-04-24 18:57:07 -07:00
Jon Atack
554be702d7
Merge pull request #2148 from boskodev790/fix/bip-0003-reference-broken-link-in-changelog-entries
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
Fix BIP3 link in BIP360, touch up BIP3 reference in BIP347
2026-04-23 20:03:26 -07:00
SeedHammer
9eb67f5764
Merge pull request #1548 from seedhammer/master
BIP391: Binary Output Descriptors
2026-04-23 11:17:01 -07:00
Murch
78494dbcc0
Merge pull request #2144 from murchandamus/bip388-update-changelog
Some checks are pending
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
bip388: Update Changelog
2026-04-23 07:56:28 -07:00
boskodev790
1609a4f576 Fix broken BIP 3 reference in bip-0347 and bip-0360 changelogs
Both BIPs added a changelog entry on 2026-01-23 referencing the updated
BIP Process meta-BIP with the wrong form:

- bip-0360.mediawiki:404 rendered `[[bip-0003.mediawiki|BIP 003]]`, but
  the actual file is `bip-0003.md`. The MediaWiki link therefore failed
  to resolve to the BIP 3 page on the bitcoin/bips GitHub wiki render
  and on the bips.dev / bip339 style mirrors — readers of the bip-0360
  changelog landed on a 404.

- bip-0347.mediawiki:170 wrote the same reference as bare text
  `BIP 003` with no link at all, so readers of bip-0347 had no way to
  navigate to the BIP 3 they were meant to follow.

Rewrite both entries to use the canonical form `[[bip-0003.md|BIP 3]]`:

- `bip-0003.md` matches the actual filename.
- `BIP 3` matches the display text convention the README (line 40) and
  every other BIP in this repository already use when linking to
  bip-0003 — "BIP 003" with the three-digit zero-pad appears nowhere
  else in the repo for any BIP and is not part of the display style
  described in BIP 2.

Also drops the trailing whitespace on the bip-0347 line while we are
there (the `typos` CI tolerates it but it is inconsistent with every
other line in the same changelog block).
2026-04-23 04:03:40 +02:00
Murch
69a63f629f
Merge pull request #2143 from murchandamus/bip174-fixup-changelog
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
bip174: Explain BIP2 status in Changelog
2026-04-21 13:34:32 -07:00
Jon Atack
50c6ce7636
Merge pull request #2146 from conduition/361/corrections
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
Corrections to BIP-0361 on rescue protocols
2026-04-20 07:49:09 -07:00
Oli
c2850a0010
BIP-0322: add prefix to message signature 2026-04-20 09:43:30 +02:00
Oli
833a1a8a89
BIP-0322: encode finalized PSBT for Proof of Funds
This commit proposes a fix for the problem that an offline verifier
previously was not able to even verify the witness stack of additional
inputs. By providing the full finalized PSBT, a verifier has all the
input data necessary to run the script through the validation engine.

We require the PSBT to be finalized to make sure it contains the final
script witness or final script sig but no extra potentially
privacy-sensitive fields. The Non-Witness and Witness UTXO fields are
explicitly allowed for finalized PSBTs, which makes the format perfect
for the use case.
2026-04-20 09:43:30 +02:00
Oli
8a46a5bfa5
BIP-0322: clarify terminology used
Since the term "signature" can be pretty overloaded dependin on the
context, we clarify what it actually means in this BIP.
2026-04-20 09:43:30 +02:00
Oli
0a20483c65
BIP-0322: update motivation, clarify Proof of Funds purpose
This addresses two discussion items:
 - The list of UTXOs should not be interpreted as a "proof that no other
   UTXOs for an address exist".
 - The BIP only addresses "signer receives funds with the address" and
   not "signer sent a previous transaction" use case.
2026-04-20 09:43:30 +02:00
Oli
665d96065f
BIP-0322: reference btcd implementation 2026-04-20 09:43:30 +02:00
Oli
bbaf40ce1d
BIP-0322: small semantic and formatting fixes
This fixes small inconsistencies or incomplete definitions based on
previous, already merged changes.
2026-04-20 09:43:29 +02:00
Oli
6f3fce21e6
BIP-0322: wrap long lines at 100 characters
This re-formats the document for easier editing and diff viewing.
Wiki syntax is weird for lists and line wraps break them. Simple lists
were changed to <ul> or <ol> tags but complex lists remain as they are
to not bloat the diff too much.
2026-04-20 09:43:29 +02:00
conduition
da7cc678d5
Fix BIP32 links and consistency
Co-authored-by: Jon Atack <jon@atack.com>
2026-04-17 10:44:09 -06:00
Jon Atack
83c1fc8ed2
Merge pull request #2142 from macgyver13/bip352-intermediate-sum
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-352: add test vector for edge case - input key intermediate sum zero
2026-04-17 09:23:51 -07:00
conduition
ab2ebe2c5d
Corrections to BIP-0361 on rescue protocols 2026-04-17 15:22:59 +00:00
Murch
eec42583f0
Merge pull request #2046 from macgyver13/bip375-reference-testvectors-pr
BIP375: Add test vectors + validator
2026-04-16 17:47:48 -07:00
macgyver13
8c0a9bfa57 BIP-375: add changelog section
Add Changelog section
Begin with version 0.1.0 as this BIP is Draft phase
2026-04-16 14:03:48 -04:00
macgyver13
00957af80e BIP-352: update changelog and correct typo
Add patch version 1.1.1 to Changelog
Remove extra leading double-quote in CoinJoin ref name
2026-04-16 12:06:56 -04:00
macgyver13
c2ac36f48f BIP-352: add test vector for edge case - input key intermediate sum zero
Exercises [A, -A, A] input key pattern where the intermediate sum
hits zero after the first two keys, but the final sum is non-zero.
Implementations that validate after each pairwise addition (rather
than summing all keys first) will incorrectly reject this case.
2026-04-16 12:05:12 -04:00
Murch
e1755b8257
bip174: Fix relative paths to other BIPs 2026-04-16 06:57:49 -07:00
Murch
cfff971940
bip388: Add missing Version header, rename Changelog 2026-04-15 11:32:28 -07:00
Murch
db131ef7b9
bip388: Amend assignment date
BIP3 clarified the content of the ambiguous Created header and renamed it to Assigned.
BIP388 was assigned per
https://github.com/bitcoin/bips/pull/1389#pullrequestreview-1796535592
on 2023-12-26.
The prior "Created:" field content was moved to a Changelog entry.
2026-04-15 11:31:40 -07:00
Murch
78fcc3130b
Merge pull request #2122 from darosior/2603_bip54_improvements
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
BIP 54 test vectors improvements following review in Inquisition
2026-04-15 10:44:47 -07:00
Murch
777ca76c2e
bip174: Explain BIP2 status in Changelog 2026-04-15 08:31:40 -07:00
Murch
588431816a
Merge pull request #2135 from murchandamus/2026-04-08-deduplicate-psbt-tables
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
BIP174: Deduplicate type definitions by introducing registry file
2026-04-14 17:19:22 -07:00
Jameson Lopp
86dfa19bef
BIP361: Post Quantum Migration and Legacy Signature Sunset (#1895)
* BIP-361

* bip361: Fix background color

* address feedback
2026-04-14 07:37:58 -07:00
Ava Chow
d6ff1bec1d
174: Add changelog and version number 2026-04-13 08:12:35 -07:00
Murch
0a23dbf56a
BIP174: Deduplicate per-output type definitions 2026-04-13 08:12:30 -07:00
Murch
d71cd39f69
BIP174: Deduplicate input type definitions 2026-04-13 08:12:00 -07:00
Murch
762e8c785b
BIP174: Deduplicate global type definitions 2026-04-13 08:11:19 -07:00
Murch
eb497966e4
Merge pull request #2136 from guggero/bip-0322-clarifications
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
BIP-322: add clarifications and more test vectors
2026-04-10 16:47:56 -07:00
nymius
ef7703ed8a
BIP376: Spending Silent Payment outputs with PSBTs (#2089) 2026-04-10 15:06:48 -07:00
Oli
3ab70c98a7
BIP-0322: turn test vectors into JSON, add more
This commit turns the existing test vectors into a JSON and then adds
more test cases covering the most common script types.
2026-04-10 09:06:36 +02:00
Oli
805bb0b6fc
BIP-0322: clarify scriptSig on to_sign for legacy transactions
Before this commit it was not clear that non-native SegWit outputs
(e.g. P2PKH or P2SH-P2WPKH) only work if the correct scriptSig is
provided.
This then also makes it more clear why P2SH-P2WPKH outputs are NOT
supported by the "simple" variant.
2026-04-10 09:06:36 +02:00
Oli
4d36f73e7b
BIP-0322: add format clarification table
This commit adds a table that clarifies what script types are compatible
with what signing variant and also makes more clear what the exact
format for the signatures of the different variants are.
2026-04-10 09:06:36 +02:00
macgyver13
b217897a62 BIP-375: fix label byte order used by labelhash
Test vectors with labels now use big-endian byte order instead of little-endian, matching BIP-352 specification

Summary of test vector changes:
- psbt structure: missing PSBT_OUT_SP_V0_INFO field when PSBT_OUT_SP_V0_LABEL set
- can finalize: one P2WPKH input / two mixed outputs - labeled sp output and BIP 32 change
- can finalize: two sp outputs - output 0 uses label=3 / output 1 uses label=1
2026-04-09 18:07:10 -04:00
Oghenovo Usiwoma
c77a6c5996
BIP-352: warn against stopping scan due to wallet policy filtering (#2134)
Some checks failed
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
Adds a warning to the "if no matches are found, stop" scanning
step. Without it, wallet developers may be tempted to apply policy
filtering (e.g. dust) before deciding to continue,
causing subsequent outputs for the same sender to be missed.
2026-04-07 13:51:12 -07:00
Murch
2dfdfba3e3
BIP440: Varops Budget for Script Runtime Constraint, BIP441: Restoration of disabled Script (tapleaf 0xc2) (#2118)
Some checks are pending
GitHub Actions Check / Link-Format-Checks (push) Waiting to run
GitHub Actions Check / Build-Table-Checks (push) Waiting to run
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Waiting to run
GitHub Actions Check / Typo Checks (push) Waiting to run
* Varops: Two BIPs for Script Restoration: varops calculations and tapleaf version (0xc2).

Special thanks to Murch for teaching me mediawiki, and so much great
formatting and clarity advice.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

* script restoration: fix MUL cost to account to round up B to word boundary.
Julian points out that the implementation does this, which improves accuracy
for the case of small B (since the term is multiplied: for normal OP_ADD etc
we don't bother, since the difference is very bounded).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

* BIP 440, 441: official numbers, into README.mediawiki and renamed.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

---------

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2026-04-07 08:33:54 -07:00
craigraw
6c2023e542
Merge pull request #2099 from craigraw/descriptorannotations
BIP393: Output Script Descriptor Annotations
2026-04-07 08:31:42 -07:00
Murch
e3874ca825
Merge pull request #2111 from darosior/2603_bip370_output_amount
BIP 370: drop redundant requirement from PSBT_OUT_SCRIPT field description
2026-04-07 08:26:19 -07:00
Murch
02bdb13f13
Merge pull request #2132 from andrewtoth/bip370_missing_test_vectors
BIP370: missing test vectors
2026-04-07 08:24:52 -07:00
macgyver13
897455dab7 BIP-375: skip ineligible inputs when combining ecdh shares
add fake ecdh share and dleq proof to P2SH input for valid test: two inputs using per-input ECDH shares - only eligible inputs contribute shares (P2SH excluded)

remove unused return string from is_input_eligible
2026-04-05 20:52:23 -04:00
macgyver13
6295a70405 BIP-375: clarify eligible inputs restriction in Computing the Output Scripts text 2026-04-05 19:55:53 -04:00
macgyver13
9536c863cf BIP-375: clarify eligible input restriction in Signer text 2026-04-05 19:55:53 -04:00
macgyver13
7b4f1d6b4e BIP-375: address review feedback
correctly label witness_utxo vs non_witness_utxo key in supplementary inputs

Summary of test vector changes:
removed test: 
- psbt structure: empty PSBT_OUT_SCRIPT field when sending to non-sp output
modified test:
- ecdh coverage: only one ineligible P2SH multisig input when PSBT_OUT_SCRIPT set for sp output
- can finalize: one P2PKH input single-signer
- can finalize: two inputs using per-input ECDH shares - only eligible inputs contribute shares (P2SH excluded)
added test: 
- can finalize: two inputs using global ECDH share - only eligible inputs contribute shares (P2SH excluded)
2026-04-05 19:55:53 -04:00
Andrew Toth
1e15fc6fae
BIP-370: add invalid test vector for missing PSBT_GLOBAL_TX_VERSION in PSBTv2 2026-04-05 19:24:59 -04:00
Andrew Toth
a07ffa8ccb
BIP-370: add invalid test vector for PSBT_GLOBAL_UNSIGNED_TX in PSBTv2 2026-04-05 19:24:59 -04:00
Andrew Toth
87522e80e3
BIP-370: add invalid test vector for PSBT_IN_REQUIRED_HEIGHT_LOCKTIME of 0 2026-04-05 19:24:59 -04:00
macgyver13
cf7a16a5f9 BIP-375: update documentation
Update Test Vectors section
Add README.md to explain validation tooling and dependencies
2026-04-04 09:17:46 -04:00
macgyver13
fb105b7e51 BIP-375: add output scripts validation
Add support for computing bip352 output scripts
Extract ECDH shares and public key from PSBT and aggregate both if necessary
Refactor validate_ecdh_coverage to use collect_input_ecdh_and_pubkey
2026-04-04 09:17:46 -04:00
macgyver13
ab30224051 BIP-375: add input eligibility validation
Verify segwit version >1 not used if silent payment outputs present (bip352)
Verify SIGHASH_ALL requirement
2026-04-04 09:17:46 -04:00
macgyver13
6a91f88030 BIP-375: add ecdh coverage validation
Add deps/dleq.py (Adapted from bip-0374/reference.py)
Extract pubkey from PSBT inputs 
- PSBT_IN_BIP32_DERIVATION
- PSBT_IN_WITNESS_UTXO for P2TR
Add script type helpers
- bip352 input eligibility helpers
2026-04-04 09:17:46 -04:00
macgyver13
66053ae879 BIP-375: add test_runner and validate PSBT structure
Implement psbt structure checks
Add test_runner.py for processing test vectors
2026-04-04 09:17:46 -04:00
macgyver13
fc9918d8c0 BIP-375: add BIP375PSBT extension classes
BIP375PSBT (a PSBT subclass that deserializes into BIP375PSBTMap instances)
BIP375PSBTMap (a PSBTMap subclass with BIP-375 field access helpers)
2026-04-04 09:17:46 -04:00
macgyver13
8b46bd63b5 BIP-375: add test vector file 2026-04-04 09:17:46 -04:00
Rusty Russell
78e7562de3 BIP 440, 441: official numbers, into README.mediawiki and renamed.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2026-03-29 14:33:12 +10:30
Rusty Russell
32035058b4 script restoration: fix MUL cost to account to round up B to word boundary.
Julian points out that the implementation does this, which improves accuracy
for the case of small B (since the term is multiplied: for normal OP_ADD etc
we don't bother, since the difference is very bounded).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2026-03-29 14:33:12 +10:30
Rusty Russell
977342a943 Varops: Two BIPs for Script Restoration: varops calculations and tapleaf version (0xc2).
Special thanks to Murch for teaching me mediawiki, and so much great
formatting and clarity advice.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2026-03-29 14:32:59 +10:30
moonsettler
805c9b54f6
BIP442: Update reference links (#2129)
Some checks failed
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff Checks (fails until number assignment) (push) Has been cancelled
GitHub Actions Check / Typo Checks (push) Has been cancelled
2026-03-24 13:37:30 -07:00
macgyver13
e70510193f Merge commit '96000a36c22f6528e834c54f0d115db675198e57' as 'bip-0375/deps/secp256k1lab' 2026-03-23 17:42:04 -04:00
macgyver13
eedb7f9a31 Squashed 'bip-0375/deps/secp256k1lab/' content from commit 44dc4bd
git-subtree-dir: bip-0375/deps/secp256k1lab
git-subtree-split: 44dc4bd893b8f03e621585e3bf255253e0e0fbfb
2026-03-23 17:42:04 -04:00
macgyver13
a8aa5ed548 BIP-375: Add bitcoin test framework as dependency - deps/bitcoin_test 2026-03-23 17:42:04 -04:00
Mark "Murch" Erhardt
4e1d44ed72
Merge pull request #2127 from theStack/bip174-global_version-mandatory-in-v2
BIP-174: mark PSBT_GLOBAL_VERSION as required for v2
2026-03-23 11:37:52 -07:00
Sebastian Falbesoner
fa731d21c4 BIP-174: mark PSBT_GLOBAL_VERSION as required for v2 2026-03-20 16:45:50 +01:00
Gregory Sanders
2778442c21
Add BIP446: OP_TEMPLATEHASH, BIP448: Taproot-native (Re)bindable Transactions (#1974)
Co-authored-by: Antoine Poinsot <darosior@protonmail.com>
2026-03-17 13:01:23 -07:00
Oren
351ceef274
BIP-128: exact specification for the checksum calculation (#2121) 2026-03-16 11:25:46 -07:00
Antoine Poinsot
fa608987ea bip54: add another transaction size test case
Ariard mentioned he would like to see a test case for a 64-byte transaction spending a Taproot
output with an annex. I took the opportunity to also make the output be an OP_RETURN with a 2-byte
push, as another semi-realistic transaction.
2026-03-16 10:21:04 -04:00
Antoine Poinsot
977300dad6 bip54: restructure timestamp test vectors into a tree
The test vectors were initially designed to maximally simple, which led to much redundancy. That was
probably too close to one extreme on the spectrum between simplicity and efficiency.

Here we shave off 20k lines by simply representing the header chains as a tree instead of list of
lists by duplicating all common headers.
2026-03-16 10:21:04 -04:00
Antoine Poinsot
4f94c5f01f bip54: make test vectors POSIX-compliant (newline at EOF)
This was pointed out during the Bitcoin Inquisition PR review
2026-03-13 16:50:48 -04:00
Antoine Poinsot
78126a5f0c bip54: move comment as first element in txsize test vectors
This is part of feedback received during the Bitcoin Inquisition PR review.
2026-03-13 16:50:33 -04:00
Antoine Poinsot
ff39733e70 bip54: update sigops test vectors following Inquisition review
This is a batch update to the tests vectors for the limit on legacy signature-checking operations
introduced in BIP 54, following feedack received on the Bitcoin Inquisition PR and from Chris
Stewart's implementation in Bitcoin-S.
2026-03-13 16:50:32 -04:00
Antoine Poinsot
1f21139957 bip54: expand on rationale for non-final coinbase nSequence
Making sure that the coinbase is timelocked is a neat simplification in reasoning about duplicates,
but it has caused some confusions. For instance here:
https://gnusha.org/pi/bitcoindev/e758af9b-72fc-4fdd-8e07-e1126635780an@googlegroups.com/

Fix this by explicitly stating the implications.
2026-03-13 14:21:41 -04:00
Antoine Poinsot
aef4d9e084 bip54: reword "potentially executed" language in sigops limit specification
The paragraph in its entirety is already unambiguous that all signature-checking operations
*present* in the Script (as opposed to *executed*) are counted. However i received feedback that the
"potentially executed" language in the first sentence of this paragraph may be confusing. This is
because it is in theory possible to have a more accurate upper bound by analyzing the possible
spending paths and use the maximum number of signature-checking operations in either to check
against the limit.

This commit rewords the first sentence to use the word "present" to be extra-clear before even
describing how the accounting is performed in later sentences.
2026-03-13 11:14:20 -04:00
Mark "Murch" Erhardt
b382728379
Merge pull request #2087 from theStack/bip352-vendor-secp256k1lab
BIP-352: vendor secp256k1lab and use it for reference implementation
2026-03-06 14:39:56 -05:00
Sebastian Falbesoner
249bdef156 BIP-352: mention secp256k1lab in BIP text
also fix a small grammar nit (s/are provided/is provided/)
2026-03-06 15:19:09 +01:00
Jon Atack
c0644a054f
BIP32: edits by ddustin for clarity (picks up PR785) (#1903)
Co-authored-by: Dusty Daemon <dustinpaystaxes@gmail.com>
Co-authored-by: Pieter Wuille <pieter@wuille.net>
Co-authored-by: Murch <murch@murch.one>
2026-03-05 14:29:32 -05:00
Jon Atack
1656f62a44
Merge pull request #1943 from prestoalvarez/patch-1
BIP69: examples file fixes and update to python3
2026-03-05 10:52:14 -08:00
craigraw
41f9957630
BIP392: Silent Payment Output Script Descriptors (#2047)
* Add sp() output descriptor format for BIP352 Silent Payments

* Update headers and remove space after comma in descriptors

* Add label ranges with examples

* Update with assigned number and adjust preamble for BIP3

* BIP392: Add table entry to README

* Add two argument key expression form and remove birthday and label arguments

* Add BIP392 sp() descriptor to BIP380 script expressions table

* Add sp() descriptor to BIP390 allowed expressions and add musig() example to BIP392

* Add changelog and version header to BIP390
2026-03-05 11:02:52 -05:00
Luke Dashjr
b3ab91fa46 Merge remote-tracking branch 'origin-pull/2115/head' 2026-03-05 03:38:54 +00:00
Dathon Ohm
44b72212f2
BIP-110: Update deployment section with EXPIRED state; add GBT subsection to specification 2026-03-04 21:22:52 -06:00
Dathon Ohm
ddd5db9a63
BIP-110: Clarify rule 2 witness stack element exclusions 2026-03-04 21:01:23 -06:00
Antoine Poinsot
175790ee7f BIP 370: remove redundant field inclusion comment in OUT_SCRIPT description
There are already "Requiring inclusion" / "Requiring exclusion" columns that specify that.
2026-03-04 10:15:46 -05:00
Andreas Schjønhaug
703609f236
bip119: fix stack[-1] -> self.stack[-1] in pseudocode
The execute_bip_119 pseudocode references `stack[-1]` on line 74
instead of `self.stack[-1]`, inconsistent with all other stack
references in the function. The C++ reference implementation
correctly uses `stack.back()` throughout.
2026-03-04 13:39:30 +01:00
moonsettler
f61d4b8ba3
BIP442: OP_PAIRCOMMIT (#1699)
* Add: PAIRCOMMIT

* New revision with Brandon Black

* Fix: Authors and spelling merklize

* Fix: header

* Rework based on feedback from PR 1699

commit ae69991b77830021c34e31d1a65ac6987e2ca1ba
Author: moonsettler <moonsettler@protonmail.com>
Date:   Tue Sep 23 02:23:43 2025 +0200

    Update references

commit 6adcb4e559cd2b67553fa57d193474906c138721
Author: moonsettler <moonsettler@protonmail.com>
Date:   Tue Sep 23 02:15:14 2025 +0200

    General computation simplify wording

commit 2f911cb4ab4b938697e39cb34974fa6fc12bf3b2
Author: moonsettler <moonsettler@protonmail.com>
Date:   Tue Sep 23 01:36:41 2025 +0200

    Rework based on feedback from PR 1699

* More readeable scripts & fix footnotes

* Format and readability improvements

* Update general computation section

* THIKCS cost compare

* Reference BIP-446

* Standard -> Specification

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

* Update header to BIP-3 compatible

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

* Add: Post-History

* Update Cost comparison table

* Post-History -> Discussion

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2026-03-03 14:38:26 -05:00
Sebastian Falbesoner
f2ffa99a4a BIP-352: take use of vendored secp256k1lab for reference implementation
This allows to remove secp256k1.py and replace the secp256k1-specific
parts in the reference implementation. Replacement guide:

    * ECKey -> Scalar
    * ECKey.set(seckey_bytes) -> Scalar.from_bytes_checked(seckey_bytes)
    * seckey.get_pubkey() -> seckey * G
    * seckey.get_bytes() -> seckey.to_bytes()
    * seckey.add(tweak_bytes) -> seckey + Scalar.from_bytes_checked(tweak_bytes)
    * seckey.negate() -> seckey = -seckey
    * seckey.sign_schnorr -> schnorr_sign(..., seckey.to_bytes(), ...)

    * ECPubKey -> GE
    * ECPubKey.set(pubkey_bytes) -> GE.from_bytes_{xonly,compressed}(pubkey_bytes)
    * pubkey.get_y() % 2 == 0 -> pubkey.has_even_y()
    * pubkey.get_bytes(False) -> pubkey.to_bytes_compressed()
    * pubkey.get_bytes() -> pubkey.to_bytes_xonly()
    * not pubkey.valid -> pubkey.infinity
    * pubkey.verify_schnorr -> schnorr_verify(..., pubkey.to_bytes_xonly(), ...)

    * TaggedHash -> tagged_hash
    * hashlib.sha256(preimage).digest() -> hash_sha256(preimage)
2026-03-02 19:17:21 +01:00
Sebastian Falbesoner
511bb99dc4 Merge commit '53b590e190f798131a10a16194261243abdf6b4d' as 'bip-0352/secp256k1lab' 2026-03-02 19:16:00 +01:00
Sebastian Falbesoner
53b590e190 Squashed 'bip-0352/secp256k1lab/' content from commit 44dc4bd
git-subtree-dir: bip-0352/secp256k1lab
git-subtree-split: 44dc4bd893b8f03e621585e3bf255253e0e0fbfb
2026-03-02 19:16:00 +01:00
Casey Rodarmor
6eb7cb38fb
Merge pull request #2110 from casey/fix-readme-link
Fix mailing list link in readme
2026-03-02 11:56:42 -05:00
Mark "Murch" Erhardt
6eb01f01bc
Merge pull request #2106 from theStack/bip352_limit_max-k-PR
BIP-352: introduce per-group recipient limit K_max (=2323)
2026-03-02 11:54:09 -05:00
Ethan Heilman
9fb88a11b7
bip347: Complete OP_CAT (#2090)
* OP_CAT to BIP 0003 format, add usecase

* draft --> complete

* Update bip-0347.mediawiki

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

* BIP347: Update table entry to complete

* Fix breaking test

* Add test vectors

---------

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2026-03-02 10:34:26 -05:00
Sebastian Falbesoner
b4bc0a88b7 BIP-352: add test vector for exceeding K_max limit [receiver side]
Test case: even though there are 2324 outputs targeted to the recipient,
only 2323 are found due to the introduced K_max limit. Any
implementation following the new BIP protocol rule wouldn't create such
a transaction in the first place, but an attacker might do.

Can be tested by
`$ ./bip-0352/reference.py ./bip-0352/send_and_receive_test_vectors.json`
2026-03-02 13:31:46 +01:00
Sebastian Falbesoner
9830fad214 BIP-352: add test vector for exceeding K_max limit [sender side]
Test case: as the (only) recipient group contains 2324 addresses and
thus exceeds the K_max limit by one, sending fails.

Can be tested by
`$ ./bip-0352/reference.py ./bip-0352/send_and_receive_test_vectors.json`
2026-03-02 13:27:28 +01:00
Sebastian Falbesoner
f14132fc77 BIP-352: test vectors: allow to check found output count for receiving
Introduce an optional "n_outputs" field as alternative to the detailed
"outputs" objects (the field was already specified, but not used so
far). Also update the documentation of the fields.
2026-03-02 13:26:31 +01:00
Sebastian Falbesoner
3aa17caaa3 BIP-352: test vectors: allow specifying repeated recipients for sending
Introduce an optional "count" field for recipient objects.
Also update the documentation of the fields.
2026-03-02 13:26:31 +01:00
Sebastian Falbesoner
f665c2c142 BIP-352: introduce per-group recipient limit K_max (=2323)
In theory this is a backwards incompatible protocol change.
Practically, no existing Silent Payments wallets out there supports
sending to such a high quantity of recipients (not even in terms of
_total_ number of recipients), so the K_max limit should be safe to
introduce, without any negative effects in the wallet ecosystem.
2026-03-02 13:26:25 +01:00
Jon Atack
ced24101c7
Merge pull request #2065 from lisenokdonbassenok/fix/bip310-min-bit-count-param 2026-02-28 05:41:50 -08:00
rkrux
0f307780aa
BIP-174: port public key terminology from BIP 373 (#2085)
The changes are ported from PR 1705 so that the same public key
terminology is reflected in BIP 174 as well. Please refer this
other PR for more details.
2026-02-27 17:16:00 -08:00
Jon Atack
95465e0b4f
BIP20,21: add Superseded-By and Replaces headers (#1984) 2026-02-27 15:43:46 -08:00
Jon Atack
0780663be1
BIP129: Add Requires header (#2019) 2026-02-27 15:18:38 -08:00
MoNyAvA
e76f0439b3
BIP-383: remove extra stray </tt> (#2061) 2026-02-27 15:03:55 -08:00
Mohammad Eglil
53dac1ba29
bip-0044: add Requires header for BIP32 and BIP43 (#2072) 2026-02-27 14:52:53 -08:00
MoNyAvA
edb6856d25
BIP-117: add missing BIP8 reference (#2080) 2026-02-27 14:40:25 -08:00
Oren
9ff061f8b9
BIP128: Timelock-Recovery Storage Format (#2068)
* new bip: timelock recovery storage format

* Comparison with Script-Based Wallets

* Type is Specification

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

* Change Authors to a single Author

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

* Replace OP_VAULT mention with OP_CHECKCONTRACTVERIFY

* Only the Alert Transaction needs to be non-malleable

* Adding discussion link

* limiting the transactions weight

This is important in order to prevent users from creating
recovery-plans that are hard to propagate.

* Explain anchor-addresses

* fix typo

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

* add surname initial to author name

* Explain unintentional initiation of rrecovery-plan.

* limit alert_inputs length to 2439

* updating bip number to 128

* rename to bip-0128.mediawiki

* BIP 128: Timelock-Recovery storage format

* fix field order, change title to uppercase

* Making plugin_version optional

Relevant only in wallets where
the feature is implemented
via a plugin.

* Removing mainnet

Irrelevant. Obviously a monitoring
service for mainnet should
verify that the addresses
are on mainnet.
2026-02-27 12:24:33 -08:00
Mark "Murch" Erhardt
bd56416786
Merge pull request #2107 from murchandamus/2026-02-bip352-add-thestack
BIP352: Add Sebastian Falbesoner as Author
2026-02-25 10:22:21 -08:00
Murch
9e407af625
BIP352: Add Sebastian Falbesoner as Author 2026-02-24 12:55:34 -08:00
YoCheng
97781eae4d
BIP85: fix typo in byte value (#2100) 2026-02-13 11:18:59 -08:00
Hunter Beast
eae7d9fc57
BIP360: Pay to Merkle Root (P2MR) (#1670)
Review comments and assistance by:
  Armin Sabouri <armins88@gmail.com>
  D++ <82842780+dplusplus1024@users.noreply.github.com>
  Jameson Lopp <jameson.lopp@gmail.com>
  jbride <jbride2001@yahoo.com>
  Joey Yandle <xoloki@gmail.com>
  Jon Atack <jon@atack.com>
  Jonas Nick <jonasd.nick@gmail.com>
  Kyle Crews <kylecrews@Kyles-Mac-Studio.local>
  Mark "Murch" Erhardt <murch@murch.one>
  notmike-5 <notmike-5@users.noreply.github.com>
  Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>

Co-authored-by: Ethan Heilman <ethan.r.heilman@gmail.com>
Co-authored-by: Isabel Foxen Duke <110147802+Isabelfoxenduke@users.noreply.github.com>
2026-02-11 13:01:47 -08:00
Dathon Ohm
ed7af6ae7e
BIP 110: Reduced Data Temporary Softfork (#2017)
* Reduced Data Temporary Softfork

* BIP-RDTS: update and expand according to PR feedback

* BIP-RDTS: minor updates to wording to address feedback

* Address PR comments: update Reference Implementation and Deployment

* Address PR comments: Clarify deployment name and bit

* Address PR comments: Update BIP number, creation date, and README entry

* Address @murchandamus X comment: Add activation threshold

* Address PR comments: Update to BIP-3; clarify rationale and deployment

* Address PR comments: Clarify scriptPubKey limit rationale and LOCKED_IN behavior
2026-02-06 16:28:07 -08:00
Paul Miller
10c7888885
Escape pipe character in markdown table (#2095) 2026-02-04 14:39:50 -08:00
Jurvis Tan
57869d524a
BIP 89: Chain Code Delegation for Private Collaborative Custody (#2004)
* Add Chaincode Delegation BIP

* Update license to BSD-3-Clause and expand blinded signing documentation

* Address initial PR comments

* Update with BIP number assignment

* Fix delegator_sign test vector

* Upgrade secp256k1lab and add license file

- Upgrade vendored secp256k1lab to commit a265da1 (adds type annotations)
- Add COPYING file to satisfy MIT license requirements
- Document secp256k1lab commit reference in BIP text

* Fix type checker and linter issues in reference implementation

- Fix TweakContext to use Scalar types for gacc/tacc
- Replace HashFunction enum with Callable type alias
- Fix bytearray to bytes conversion in blind_sign
- Move imports to top of file
- Fix boolean comparison style (use 'not' instead of '== False')
- Add proper type annotations and casts for dict handling
- Remove unused imports and type ignore comments

* Address PR review comments on terminology and clarity

- Add intro explaining delegation naming (chain code is delegated, not
  signing authority)
- Reorder terminology to list Delegator before Delegatee
- Replace "quorum" with clearer "can co-sign for UTXOs" language
- Clarify derivation constraints in terms of delegatee's extended key
- Rename "Delegatee Signing" section to "Signing Modes"
- Fix "delegatee can apply" to "delegator can produce" (line 112)
- Replace undefined "caller" with "delegatee" (line 173)
- Clarify "Change outputs" to "Tweaks for change outputs" (line 98)
- Add note that message is separate from CCD bundle
- Add note on application-specific verification (addresses, amounts)
- Add transition sentence clarifying non-concurrent protocol scope

* Add changelog entry for 0.1.3

* Fix header: use Authors (plural) for multiple authors

* Fix BIP header format for CI compliance

- Change Type from 'Standards Track' to 'Specification' (valid type)
- Change 'Created' to 'Assigned' (correct field name per BIP format)
- Change 'Post-History' to 'Discussion' (recognized field in buildtable.pl)

* Apply suggestion from @murchandamus

---------

Co-authored-by: Jesse Posner <jesse.posner@gmail.com>
2026-02-04 12:58:08 -08:00
Mark "Murch" Erhardt
5d0f70a5cf
Merge pull request #2094 from ajtowns/202601-bip434-copyright
BIP 434: fix license inconsistency
2026-02-02 21:01:54 -08:00
Anthony Towns
3709d73c2f BIP 434: fix license inconsistency 2026-02-03 14:47:51 +10:00
Mark "Murch" Erhardt
29b48129b1
Merge pull request #2092 from ajtowns/202601-feature-shortid
BIP 324, 434: Specify p2p v2 one-byte identifier for FEATURE message
2026-02-02 16:22:41 -08:00
yyhrnk
e3c4dede41
fix: correct TxFieldSelector index upper bound 2026-02-02 19:48:05 +02:00
Anthony Towns
a50c0ea32b BIP324, BIP434: Assign message type id for "feature" message 2026-01-31 17:47:59 +10:00
Anthony Towns
df1f098a8b BIP324, BIP183: Add utreexo's p2pv2 message type ids 2026-01-31 17:46:29 +10:00
Anthony Towns
a3370b5c9d BIP 324: Add auxiliary file tracking assignments of one-byte message type IDs 2026-01-31 17:46:29 +10:00
Mark "Murch" Erhardt
43e3983e4b
Merge pull request #2086 from ajtowns/202512-bip324-shortid-alias
BIP 324: Clarify equivalence between 1 and 13 byte message types
2026-01-29 10:18:01 -08:00
Mark "Murch" Erhardt
e169a61940
Merge pull request #2084 from theStack/bip374-vendor-secp256k1lab
BIP-374: vendor secp256k1lab and use it for reference implementation
2026-01-28 10:31:32 -08:00
Mark "Murch" Erhardt
3177af3bbf
Merge pull request #2076 from ajtowns/202512-p2p-feature
BIP 434: Peer Feature Negotiation
2026-01-27 07:22:58 -08:00
Mark "Murch" Erhardt
4c2f6567b3
Merge pull request #1500 from stevenroose/txhash
BIP346: OP_TXHASH
2026-01-27 07:21:12 -08:00
Anthony Towns
40e6634a2e BIP324: define message_length 2026-01-24 16:38:00 +10:00
Anthony Towns
4c80568652 BIP324: supporting 1 byte message type ids means supporting the equivalent 12 byte ASCII message types 2026-01-24 16:38:00 +10:00
Steven Roose
6a0636da32 Add BIP-346: OP_TXHASH 2026-01-22 22:59:40 -03:00
Jon Atack
ecb074d487
Merge pull request #2088 from murchandamus/backfill-bip14-discussion 2026-01-16 20:35:03 -08:00
Murch
1761675f67
BIP14: Backfill discussion URLs 2026-01-16 13:11:13 -08:00
Anthony Towns
48c0f201aa BIP324: Add Version header and Changelog section 2026-01-16 10:04:38 +10:00
Anthony Towns
9630c4c8d0 BIP434: p2p feature negotiation 2026-01-15 17:20:45 +10:00
Sebastian Falbesoner
2b7f07986b BIP-374: mention secp256k1lab in BIP text 2026-01-15 01:55:55 +01:00
Sebastian Falbesoner
436a3dd1fa BIP-374: use tagged_hash and xor_bytes routines from secp256k1lab 2026-01-15 00:56:13 +01:00
Sebastian Falbesoner
459d977d9b BIP-374: replace secp256k1.py with vendored copy of secp256k1lab 2026-01-15 00:47:29 +01:00
Sebastian Falbesoner
4e18ee641b BIP-374: avoid using sys.path[0] to find current working directory
This approach is incompatible with the sys.path extension approach
in the next commit which is used to to find the vendored copy of
secp256k1lab, so use __file__ instead which works as well.
2026-01-15 00:45:33 +01:00
Sebastian Falbesoner
d2ceae1dd6 Merge commit '3050bb6b25c0c20b62e2fc1a23276a09d50d151b' as 'bip-0374/secp256k1lab' 2026-01-15 00:43:29 +01:00
Sebastian Falbesoner
3050bb6b25 Squashed 'bip-0374/secp256k1lab/' content from commit 44dc4bd
git-subtree-dir: bip-0374/secp256k1lab
git-subtree-split: 44dc4bd893b8f03e621585e3bf255253e0e0fbfb
2026-01-15 00:43:29 +01:00
Jack D
68df14bf8c
BIP174: Specify PSBT_IN_PREVIOUS_TXID serialization order (#2001)
* specify PSBT_IN_PREVIOUS_TXID serialization order

* fix: remove ambiguous use of endianness language
2026-01-14 13:44:17 -08:00
Mark "Murch" Erhardt
df57b45a63
Merge pull request #2083 from jonatack/2026-bip3-edits
README intro edits
2026-01-14 13:41:19 -08:00
Jon Atack
48beda420e README edits 2026-01-14 14:49:18 -06:00
Jon Atack
845e7d7005
Merge pull request #1820 from murchandamus/2025-04-bip3-activation
Process: Activate BIP3
2026-01-14 09:06:43 -08:00
Dan Gould
1c4fe8dfea
BIP77: Change sequence diagrams to text format (#2064)
Updated sequence diagrams to use text format instead of mermaid syntax.

I cargo cult'd the RFC Rules:

> “How are images handled for the plain text version of an RFC?”
> The RFC Editor will accept both ASCII art and SVG. If only ASCII art is provided, it will be included in all publication formats. If ASCII art and SVG are both provided, ASCII art will be included in the plain text, and SVG in all other outputs. A note indicating alternative artwork is available is strongly advised. If only SVG is provided, a URI will be included in the plain-text publication format pointing to the HTML version. All artwork and figures should have a complete written description to support assisted reader technology.

see: https://www.rfc-editor.org/rse/format-faq/

Since BIPs don't publish html/pdf renders, ASCII art seems like the right choice to render everywhere. Since normative prose is already provided, I chose not to include a written description of the diagrams to support assisted reader tech.
2026-01-13 12:50:52 -08:00
Murch
4486d6de91
process: Backfill missing Version headers
…for BIPs that have a Changelog section that mentions a version.
BIP 1 and BIP 340 have Changelog sections, but do not define versions.
2026-01-12 14:36:33 -08:00
Murch
76efa4aabf
process: Fix up license sections to match preamble
Co-authored-by: Jon Atack <jon@atack.com>
2026-01-12 14:30:03 -08:00
Tim Ruffing
8586c32fa2
process: Use "official" SPDX identifiers
See https://spdx.org/licenses/
2026-01-12 14:30:02 -08:00
Tim Ruffing
764409cb37
bip2: Use correct SPDX license ids in the text
See https://spdx.org/licenses/
2026-01-12 14:30:00 -08:00
Tim Ruffing
7c3fab6fa7
bip134: Remove wrong License header
The Copyright section specifies additional conditions, so the License
header is not correct (or at least misleading). So let's just remove it.
This is pragmatic because the field was only added as part of the
activation of BIP 2 anyway, and there are other old BIPs with a License
header.
2026-01-12 14:29:59 -08:00
Anthony Towns
2885f13d3f
Convert licenses to SPDX codes 2026-01-12 14:29:57 -08:00
Murch
24e96e870f
process: Created ↦ Assigned
```
sed -z -i 's/Created: /Assigned: /' bip-0*.md
sed -z -i 's/Created: /Assigned: /' bip-0*.mediawiki
```
2026-01-12 14:29:51 -08:00
Yuval Kogman
85c9385e20
Allow Version field in checks as per BIP 3 2026-01-12 14:29:16 -08:00
Murch
ebefd42cc8
editor: Remove outdated comment from README table 2026-01-12 14:29:15 -08:00
Murch
6829b943bd
process: Drop unused Discussions-To Header 2026-01-12 14:29:13 -08:00
Murch
38f525beac
BIP372: Drop redundant Discussions-To Header
BIP2 states that the Discussions-To header should only be used if the
proposal was discussed somewhere else beside the Bitcoin Developer
Mailing List. Therefore, the only use of the Discussions-To header in
the repository is unnecessary and can be removed before the header is
abolished.
2026-01-12 14:29:12 -08:00
Murch
b712509434
process: Update license check 2026-01-12 14:29:10 -08:00
Murch
fea4a0b0c5
process: Increase title limit 2026-01-12 14:29:09 -08:00
Murch
3fddf95984
process: Allow Deputies header 2026-01-12 14:29:07 -08:00
Murch
5207ef92a5
process: Author ↦ Authors
```
sed -z -i 's/Author: /Authors: /' bip-0*.md
sed -z -i 's/Author: /Authors: /' bip-0*.mediawiki
```

Also align correctly in case of multiple authors.
2026-01-12 14:29:00 -08:00
Murch
59730dec4f
process: Remove Comments-URI and -Summary
```
sed -i '0,/Comments-Summary/{/Comments-Summary/d}' bip-0*md
sed -i '0,/Comments-Summary/{/Comments-Summary/d}' bip-0*mediawiki
sed -i '0,/Comments-URI/{/Comments-URI/d}' bip-0*md
sed -i '0,/Comments-URI/{/Comments-URI/d}' bip-0*mediawiki
```

Then reset the BIPs with non-empty comment wikis:

- bip-0037.mediawiki
- bip-0038.mediawiki
- bip-0039.mediawiki
- bip-0042.mediawiki
- bip-0044.mediawiki
- bip-0047.mediawiki
- bip-0049.mediawiki
- bip-0060.mediawiki
- bip-0061.mediawiki
- bip-0074.mediawiki
- bip-0075.mediawiki
- bip-0077.md
- bip-0084.mediawiki
- bip-0090.mediawiki
- bip-0118.mediawiki
- bip-0125.mediawiki
- bip-0150.mediawiki
- bip-0151.mediawiki
- bip-0152.mediawiki
- bip-0171.mediawiki
- bip-0172.mediawiki
- bip-0173.mediawiki
- bip-0174.mediawiki
- bip-0176.mediawiki
- bip-0178.mediawiki
- bip-0199.mediawiki
- bip-0322.mediawiki
- bip-0340.mediawiki
- bip-0341.mediawiki
2026-01-12 14:28:37 -08:00
Murch
01352f7f40
process: Post-History ↦ Discussion
Also line up with additional items in the lines below.

```
sed -i -z 's/  Post-History: /  Discussion:   /' bip-0*.md
sed -i -z 's/  Post-History: /  Discussion:   /' bip-0*.mediawiki
```
2026-01-12 14:28:06 -08:00
Murch
863573ab0f
BIP135: Move discussion to correct header 2026-01-12 14:22:41 -08:00
Murch
a233bde4af
process: Standards Track ↦ Specification
```
sed -z -i 's/Type: Standards Track/Type: Specification/' bip-0*.md
sed -z -i 's/Type: Standards Track/Type: Specification/' bip-0*.mediawiki
```

After the scripted changes, the changes to BIP-40, BIP-41, and BIP-63
were undone, because it breaks CI.

These three BIPs only exist conceptually and their proposal documents
are missing which causes changes to them ot break the CI. I defer the
changes to these BIPs to a separate pull request to get CI to pass.
2026-01-12 14:22:40 -08:00
Murch
ff1f3b36f8
process: Superseded-By ↦ Proposed-Replacement
sed -z -i 's/Superseded-By: /Proposed-Replacement: /' bip-0*.md
sed -z -i 's/Superseded-By: /Proposed-Replacement: /' bip-0*.mediawiki
2026-01-12 14:22:38 -08:00
Murch
66defbdc03
process: Deferred/Obsolete/Rejected/Replaced/Withdrawn ↦ Closed
```
sed -z -i 's/Status: Deferred/Status: Closed/' bip-0*.md
sed -z -i 's/Status: Deferred/Status: Closed/' bip-0*.mediawiki
sed -z -i 's/Status: Obsolete/Status: Closed/' bip-0*.md
sed -z -i 's/Status: Obsolete/Status: Closed/' bip-0*.mediawiki
sed -z -i 's/Status: Rejected/Status: Closed/' bip-0*.md
sed -z -i 's/Status: Rejected/Status: Closed/' bip-0*.mediawiki
sed -z -i 's/Status: Replaced/Status: Closed/' bip-0*.md
sed -z -i 's/Status: Replaced/Status: Closed/' bip-0*.mediawiki
sed -z -i 's/Status: Withdrawn/Status: Closed/' bip-0*.md
sed -z -i 's/Status: Withdrawn/Status: Closed/' bip-0*.mediawiki
```

```
    sed -i 's/| Deferred/| Closed/' README.mediawiki
    sed -i 's/| Obsolete/| Closed/' README.mediawiki
    sed -i 's/| Rejected/| Closed/' README.mediawiki
    sed -i 's/| Replaced/| Closed/' README.mediawiki
    sed -i 's/| Withdrawn/| Closed/' README.mediawiki
```
2026-01-12 14:22:36 -08:00
Murch
5d3ceb3773
process: Final/Active ↦ Deployed
```
sed -z -i 's/Status: Active/Status: Deployed/' bip-0*.md
sed -z -i 's/Status: Active/Status: Deployed/' bip-0*.mediawiki
sed -z -i 's/Status: Final/Status: Deployed/' bip-0*.md
sed -z -i 's/Status: Final/Status: Deployed/' bip-0*.mediawiki
sed -i 's/| Active/| Deployed/' README.mediawiki
sed -i 's/| Final/| Deployed/' README.mediawiki
```
2026-01-12 14:22:33 -08:00
Murch
6760ba8738
process: Proposed ↦ Complete
Amend CI script to new statuses and update existing status field values
in table and BIPs.

```
sed -z -i 's/Status: Proposed/Status: Complete/' bip-0*.md
sed -z -i 's/Status: Proposed/Status: Complete/' bip-0*.mediawiki
sed -i 's/| Proposed/| Complete/' README.mediawiki
```
2026-01-12 14:22:30 -08:00
Murch
2f497a2bbe
process: Clarify handling of controversial BIPs
It is preferable to close PRs over having them stuck in controversy
limbo indefinitely.
2026-01-12 14:22:29 -08:00
Murch
68c12c7f7a
process: Update README to match BIP3 2026-01-12 14:22:27 -08:00
Murch
4f412a4af0
process: Activate BIP3, close BIP2 2026-01-12 14:22:25 -08:00
Olaoluwa Osuntokun
1a75a3dc13
Merge pull request #1982 from instagibbs/2025-09-p2a
BIP 433: Add P2A BIP
2026-01-08 19:18:05 -08:00
Tim Ruffing
e2f9fe0c04
BIP-327: correct DeterministicSign pubnonce and key length (#2071)
Co-authored-by: lisenokdonbassenok <lisdonbassa@gmail.com>
2026-01-05 10:23:11 -08:00
Jon Atack
fc00f51c22
Merge pull request #2057 from maradini77/patch-2
BIP158, refactor: remove duplicate conditional
2025-12-26 07:24:58 -08:00
Anthony Towns
04b448b599
CI: commit README.mediawiki delta from script to git (#2063)
Use a hardcoded delta rather than requiring the delta to never change,
so that it can be changed deliberately when desired without breaking CI.
Also avoids the need to checkout the previous commit, so no longer
changes the repository state.
2025-12-19 19:18:41 -08:00
lisenokdonbassenok
6441993757
BIP-310: fix version-rolling.min-bit-count parameter spec 2025-12-18 14:46:10 +02:00
Jon Atack
46858e5b1f
Merge pull request #2058 from kurahin/fix/bip322-proof-of-funds-inputs 2025-12-16 17:59:57 -08:00
VolodymyrBg
1e663c2150
BIP-337: fix incorrect reference in Input Data Outpoint row (#2053)
* BIP-337: fix incorrect reference in Input Data Outpoint row

* Fix typo in BIP 337
2025-12-15 18:17:04 -08:00
Jon Atack
f427295acc
Merge pull request #2051 from murchandamus/2025-12-bip3-address-activation-motion-feedback 2025-12-15 15:16:23 -08:00
Jon Atack
870c7629ae
Merge pull request #2056 from ajtowns/202512-bip325-signet-powlimit
bip-325: document signet minimum difficulty
2025-12-15 10:40:23 -08:00
Ben Westgate
98935ff1f9
BIP93: terminology, typo, and phrasing fixups (#2052)
* Change master seed to secret in most places, ''t'' to ''k'' and other term fixes

* Replace deleted linebreak, delete vestigal oxford commas

* errors->random errors, fix newlines, vector5: secret seed->codex32 secret

reduced the heading level of checksum and error correction to make the table of contents easier to parse.

Moved Master seed Encoding to be below Unshared Secret.

* BIP93: change codex32 characters to bech32 characters

* Fix hrp length off by 1 bug. Refactor validity condition to read easier.
2025-12-15 09:29:21 -08:00
kurahin
80b4b2a6bd
BIP-322: fix proof-of-funds inputs wording 2025-12-14 22:32:04 +02:00
maradini77
76059ea230
Update gentestvectors.go 2025-12-14 17:54:59 +01:00
Anthony Towns
56e909458b bip-325: document signet minimum difficulty
This was implicit in the genesis block's nbits value, but better to be clearer.
2025-12-14 06:00:53 +10:00
Murch
897fa1b9df
bip3: Do not waste community’s time
Co-authored-by: jon@atack.com
2025-12-11 13:30:24 -08:00
Murch
a9308f362e
bip3: Require technical soundness
Co-authored-by: jon@atack.com
2025-12-11 09:12:46 -08:00
Murch
41fe83f750
bip3: Add and backfill Changelog section
The Version header is omitted at this time, as it is not permitted under BIP 2.
2025-12-11 08:56:35 -08:00
Murch
f389e9b1bb
bip3: Avoid onus 2025-12-11 08:56:33 -08:00
Murch
f29514f21c
bip3: Fix capitalization and drop footnote 2025-12-11 08:56:31 -08:00
Luke Dashjr
5fd4162378
bip-0003: Changes from BIP 2: Make it match actual spec 2025-12-11 08:56:30 -08:00
Luke Dashjr
86d9737e41
bip-0003: Move Type header responsibility to the author(s) 2025-12-11 08:56:28 -08:00
Murch
e44d11ebb9
bip3: Clarify that draft needs to be discussed on ML 2025-12-11 08:56:27 -08:00
Murch
25810a0a4a
bip3: Avoid implying BIP editors must reply to every ML post
Co-authored-by: Luke Dashjr <luke-jr+git@utopios.org>
2025-12-11 08:56:25 -08:00
Murch
6f62034db8
bip3: Clarify editor assignment of BIP numbers
Adopted from:
a399d0791dk

Co-authored-by: luke+github_public@dashjr.org
2025-12-11 08:56:22 -08:00
Murch
56ac1c2686
bip3: Broaden reference implementation formats
Based on Luke Dashjr’s b46e8195914fc3479760fef4c443390c01825e63
2025-12-09 15:54:39 -08:00
Murch
3d07d12de5
Revert "BIP3: add guidance on originality, quality, LLMs"
This reverts commit d083ce5a9b.
2025-12-09 14:53:26 -08:00
Galoretka
6ce21f4eae
bip-373: Fix GLOBAL_XPUB key name and clean up compressed vs x-only note (#2007)
* bip-373: Fix GLOBAL_XPUB key name and clean up compressed vs x-only note

* add requires
2025-12-09 08:33:04 -08:00
Jon Atack
7635df6fd3
Merge pull request #2034 from hodlinator/2025/11/bip53/inversion_typo 2025-12-09 08:30:36 -08:00
Greg Sanders
ab9bc69f93 Add BIP433 Pay to Anchor (P2A) 2025-12-09 11:11:03 -05:00
Jon Atack
d00a52376d
Merge pull request #2009 from radik878/fix/bip-0371-psbt-key-sig-name
BIP-371: use canonical PSBT_IN_TAP_KEY_SIG in invalid test titles
2025-12-08 12:53:29 -08:00
Mark "Murch" Erhardt
618ce32488
Merge pull request #2028 from scgbckbone/bip-0373-wording
nit: improve `PSBT_IN_MUSIG2_PARTIAL_SIG` wording
2025-12-08 11:38:05 -08:00
Mark "Murch" Erhardt
e15bba9273
Merge pull request #1971 from brunoerg/2025-09-psbt-invalid-data-size
bip174: add test case for an invalid valuedata due to its size
2025-12-08 11:34:42 -08:00
Mark "Murch" Erhardt
28616a4d0c
Merge pull request #2050 from yyhrnk/fix/bip390-musig-rawtr-usage
BIP-390: allow musig() under rawtr()
2025-12-08 11:10:44 -08:00
Mark "Murch" Erhardt
afa18e4dbb
Merge pull request #2044 from darosior/2511_bip54_forward_compat
bip-0054: update forward compat section with Bitcoin Core v30
2025-12-08 10:21:46 -08:00
yyhrnk
7e8facb479
BIP-390: allow musig() under rawtr() 2025-12-08 18:14:55 +02:00
Hodlinator
c569e23641
BIP53: Use different notation for txids and tx-bytes 2025-11-27 21:03:42 +01:00
Hodlinator
cbaedf2dfc
BIP53: Clarify wording around implementation complexity
Co-authored-by: Chris Stewart <stewart.chris1234@gmail.com>
2025-11-26 17:30:44 +01:00
Jon Atack
9a30c28574
Merge pull request #2045 from darosior/bip54_vectors_link
bip-0054: correct link typo in test vectors README
2025-11-25 16:58:16 -08:00
Antoine Poinsot
a86abbe2c1 bip-0054: correct link typo in test vectors README 2025-11-25 18:18:01 -05:00
Antoine Poinsot
1076d90678 bip-0054: update forward compat section with Bitcoin Core v30
The BIP 54 sigops limit was made a standardness rules in Bitcoin Core 30.0.
2025-11-25 14:03:52 -05:00
Jon Atack
2624ef7b83
Merge pull request #2015 from darosior/2509_consensus_cleanup_test_vectors
BIP54: Consensus Cleanup test vectors
2025-11-25 09:56:13 -08:00
Jon Atack
3851847d0a
Merge pull request #2035 from Bashmunta/fix/bip8
BIP-116: add link to bip-8 and fix collision
2025-11-20 12:10:54 -08:00
Mark "Murch" Erhardt
66a41d32bf
Merge pull request #2036 from instagibbs/2025-11-bip54_sum_sigops
bip54: clarify sigops counting, borrow bip16 language
2025-11-17 10:45:55 -08:00
Greg Sanders
459298ab0e bip54: clarify sigops counting, borrow bip16 language 2025-11-14 10:18:38 -05:00
Mark "Murch" Erhardt
bbaea3182b
Merge pull request #2020 from jonatack/2025-10-bip3-dedicated-ML-thread
BIP 3: mention posting a dedicated ML thread
2025-11-12 16:57:50 -08:00
Bashmunta
22fc58d746
Update bip-0116.mediawiki 2025-11-11 23:30:23 +02:00
Mark "Murch" Erhardt
445e445144
Merge pull request #2022 from jonatack/2025-10-bip3-number-assignment
BIP3: clarify number assignment
2025-11-10 08:20:07 -08:00
scgbckbone
65daaf2fa3 nit: improve PSBT_IN_MUSIG2_PARTIAL_SIG wording 2025-11-02 02:19:20 +01:00
Jon Atack
b13e4913b0 bip3: clarify number assignment 2025-10-28 15:43:48 -06:00
Jon Atack
5607f64d0d bip3: mention posting a dedicated ML thread 2025-10-27 11:12:26 -06:00
Antoine Poinsot
0777a81367 bip-0054: document the test vectors 2025-10-27 04:10:26 -04:00
Jon Atack
c9a6ca6297
Merge pull request #2018 from sashass1315/fix-broken-link
BIP-119: fix broken link
2025-10-26 14:54:13 -07:00
sashass1315
5948b7243b
BIP-119: fix broken link 2025-10-26 20:35:30 +02:00
Jon Atack
fd7fe26a7e
Merge pull request #2016 from real-or-random/202510-fix-gen-test-vectors 2025-10-24 04:23:31 -07:00
Tim Ruffing
713f000a20 bip324: Update generated files 2025-10-23 14:18:35 +02:00
phrwlk
d51f2dcaeb BIP324: Fix features bitmask for decoding-case selection 2025-10-23 14:18:35 +02:00
Mark "Murch" Erhardt
964ce2d371
Merge pull request #1975 from brunoerg/2025-09-torv2
bip155: mark torv2 as no longer in use
2025-10-23 10:13:11 +02:00
Bruno Garcia
7fd375c0e9 bip155: add changelog 2025-10-23 09:52:13 +02:00
Jon Atack
34c584d54a
Merge pull request #2011 from Forostovec/master 2025-10-22 18:24:18 -07:00
Mark "Murch" Erhardt
6953b72947
Merge pull request #2006 from jonatack/2025-10-bip3-adjustments
BIP3: add guidance on originality, quality, LLMs
2025-10-22 09:24:37 +02:00
Jon Atack
d083ce5a9b BIP3: add guidance on originality, quality, LLMs
and soundness, and ensure it was proposed to the ML by one of the BIP authors
2025-10-21 09:32:48 -06:00
Antoine Poinsot
30b0084808 bip-0054: add test vectors for each mitigation
This introduces a set of test vectors for each of the 4 mitigations in the BIP. The sigops and
transaction size vectors were generated using the unit tests included with the Bitcoin Core
implementation of BIP54, available at https://github.com/darosior/bitcoin/tree/2509_inquisition_consensus_cleanup.
The timestamps and coinbases required mainnet blocks for maximum compatibility, and were generated
by two dedicated unit tests not included with the Bitcoin Core implementation above but available at
https://github.com/darosior/bitcoin/tree/bip54_miner.
2025-10-20 08:53:57 -04:00
Antoine Poinsot
89dfe03a64 bip-0054: add a reference implementation section 2025-10-20 08:53:51 -04:00
Forostovec
1bb1aee5b0
BIP-374: Pass G and m to VerifyProof in GenerateProof self-check 2025-10-19 13:21:14 +03:00
radik878
2bdb5ec72f
BIP-371: use canonical PSBT_IN_TAP_KEY_SIG in invalid test titles 2025-10-18 22:28:16 +03:00
Jon Atack
1d186274ea
Merge pull request #2002 from MozirDmitriy/fix/bip340-test-harness-keygen-failure-flag 2025-10-16 04:02:23 -07:00
3rd Iteration
ab9d5b8b5d
BIP85: fix datetime string to align with UNIX Epoch time (#1967)
* Fix BIP85 human-readable datetime string and update the Changelog

Genesis block time is correct in Unix time, but the human-readable datetime string is off by 10 minutes.

Co-authored-by: Jon Atack <jon@atack.com>
2025-10-15 10:14:53 -07:00
MozirDmitriy
f98774a68c
bip-340: set all_passed=False on key generation mismatch 2025-10-14 23:38:26 +03:00
Mark E. Jeftovic
1cf4130876
BIP‑353: Clarify TXT record structure and concatenation order (single RR; RDATA order; no cross‑RR joins) (#2000) 2025-10-10 17:12:06 -07:00
Mark "Murch" Erhardt
3d0bab3cc2
Merge pull request #1998 from jonatack/2025-10-typo-and-editorial-fixups
Collect and curate various minor fixups from Jul/Aug/Sept
2025-10-06 14:38:45 -07:00
viktorking7
664d376c8a CI: improve date validation regex in buildtable.pl
and quote filename variable in link format checker script

Co-authored-by: bigbear <155267841+aso20455@users.noreply.github.com>
Co-authored-by: Jon Atack <jon@atack.com>
2025-10-03 13:35:31 -06:00
sashaodessa
6340cecfbc BIPs 119, 330, 352: code typo and style fixups
Co-authored-by: Tomass <155266802+zeroprooff@users.noreply.github.com>
Co-authored-by: emmmm <155267286+eeemmmmmm@users.noreply.github.com>
2025-10-03 13:35:31 -06:00
Skylar Ray
9297c12729 BIPs 327, 340: remove unused imports
Co-authored-by: Snezhkko <snezhkodaria38@gmail.com>
2025-10-03 13:35:31 -06:00
Tomás Andróil
5d06b3b976 BIPs 16, 388, 443: typo and editorial fixups
Co-authored-by: futreall <86553580+futreall@users.noreply.github.com>
2025-10-03 13:34:51 -06:00
MozirDmitriy
a00fb712c5 BIP10: typo fix, replace TXSIGS with SIG in TxDP merge section 2025-10-03 13:13:05 -06:00
Bruno Garcia
c85c818e3f bip155: torv2 is no longer operational 2025-10-02 08:43:24 -03:00
Mark "Murch" Erhardt
b92cb0b627
Merge pull request #1983 from jonatack/2025-09-BIP321-add-reference-implementation
BIP321: add reference implementation, mention BIP21 replacement
2025-10-01 14:35:32 -07:00
Jon Atack
5e178c980c
Merge pull request #1996 from jonatack/2025-10-update-typos-linter
CI: appease typos linter
2025-10-01 12:35:55 -07:00
Jon Atack
6c725aa4f5 CI: appease typos linter 2025-10-01 13:31:48 -06:00
Jon Atack
c16a33647a BIP321: mention replacement of BIP21
rather than only modification, for consistency with the "Replaces: 21" header
2025-09-30 10:22:43 -06:00
Jon Atack
daf64c4253 BIP321: add reference implementation section 2025-09-30 10:22:25 -06:00
Jon Atack
c5cb824795
Merge pull request #1912 from TheBlueMatt/2025-08-dnssec-proof-tests
Add some BIP 353 DNSSEC proof test vectors and links
2025-09-24 15:49:24 -07:00
Jon Atack
898693d83e
Merge pull request #1980 from murchandamus/2025-09-active-to-final
BIP327,353: Update to Final and Proposed instead of Active
2025-09-24 08:20:30 -07:00
Matt Corallo
c02809a75a Correct monospacing in BIP 353
mediawiki doesn't render backticks, so we have to use
`<code></code>`.
2025-09-23 22:00:49 +00:00
Matt Corallo
87bafc1cd0 Add some BIP 353 DNSSEC proof test vectors and links 2025-09-23 21:58:18 +00:00
Murch
cc68e6d753
BIP327,353: Correct statuses
- 327 should be Final instead of Active
- 353 should be Proposed, as Testvectors are still in the works (see
  #1912)
2025-09-23 14:49:38 -07:00
Jon Atack
e757aaf19a
Merge pull request #1979 from murchandamus/2025-09-advance-BIP353
BIP353: Advance to Active
2025-09-23 14:17:12 -07:00
Murch
e9b1100912
BIP353: Advance to Active
BIP 353 has been implemented by multiple projects.
2025-09-23 13:56:54 -07:00
Jon Atack
1c4d41937b
Merge pull request #1911 from TheBlueMatt/2024-03-uris-without-bodies
Mark BIP21 as replaced by 321, update 321 from Draft to Proposed
2025-09-23 10:22:40 -07:00
Jon Atack
87f3fe1644
Merge pull request #1970 from murchandamus/2025-09-assigned-header
BIP3: Rename Created to Assigned
2025-09-19 16:31:04 -07:00
Bruno Garcia
97885721b8 bip174: add test case for an invalid valuedata due to its size 2025-09-18 16:58:20 -03:00
Murch
d7847195aa
BIP3: Rename Created to Assigned 2025-09-18 12:50:30 -07:00
Jon Atack
6730ee8a1e
Merge pull request #1926 from radik878/test/dleq-pass-message-in-tampered-proof
BIP374: in tests, pass message when verifying proof with message
2025-09-17 09:52:16 -07:00
Mark "Murch" Erhardt
869fd7765f
Merge pull request #1963 from jonatack/2025-09_update_BIPs_157-158_to_final
BIPs 157, 158: update status to Final, add Requires header
2025-09-15 13:53:46 -07:00
Jon Atack
02fb392db9 BIPs 157, 158: add "Requires" headers to each other 2025-09-10 21:37:39 -06:00
Jon Atack
662cc78c3e BIP158: update status from Draft to Final 2025-09-10 21:29:43 -06:00
Jon Atack
3ba957d8d5 BIP157: update status from Draft to Final 2025-09-10 21:29:05 -06:00
Mark "Murch" Erhardt
abf3bdab29
Merge pull request #1956 from jonatack/2025-09-update-BIP111-status-from-Proposed-to-Final
BIP111: update status from Proposed to Final
2025-09-10 14:10:03 -07:00
prestoalvarez
d9888173b6 Fix file permissions for bip-0069_examples.py 2025-09-07 23:29:24 +03:00
Jon Atack
d1af997a6f BIP111: update status from Proposed to Final 2025-09-05 11:19:59 -06:00
Jon Atack
eabb63cb53
Merge pull request #1953 from macgyver13/bip352-generate-intermediate-comp
BIP352: Add intermediate vector material for silent payments
2025-09-05 08:46:36 -07:00
macgyver13
b7c79dcbc0 address feedback (newline + extra whitespace) 2025-09-04 17:17:38 -04:00
Jon Atack
f420c7f614
Merge pull request #1952 from MozirDmitriy/mzd
BIP388: fix variable name in from_descriptor() to prevent NameError
2025-09-04 13:35:53 -07:00
macgyver13
b26f77db65 add intermediate vector material, validate added material in reference tests 2025-09-04 11:52:17 -04:00
MozirDmitriy
25ffcfcf36
fix(wallet_policies): use descriptor instead of desc to prevent NameError 2025-09-04 10:22:16 +03:00
Jon Atack
4d6cd518a0
Merge pull request #1950 from darosior/2509_bip54_fix_date
bip54: fix off-by-one in creation date
2025-09-03 14:06:40 -07:00
Antoine Poinsot
32bcfd6801 bip54: fix off-by-one in creation date 2025-09-03 16:55:29 -04:00
Jon Atack
d588494bec
Merge pull request #1947 from aso20455/master
BIP328: fix assignment in bytes_to_point function
2025-09-02 16:57:25 -07:00
Mark "Murch" Erhardt
260da85921
Merge pull request #1933 from jonatack/2025-08-update-BIP155-status
BIP155: update status from Draft to Final
2025-09-02 15:35:32 -07:00
Jon Atack
862d9ca106 BIP155: update Draft status to Final
BIP155 was deployed in Bitcoin Core version v0.21.0, and has been in use for
almost 5 years.

New networks may be added to the reserved network IDs table when they're
needed, either in this BIP or in a new one.

If BIP3 is activated, I think BIP155 would become Deployed.

Co-authored-by: Murch <murch@murch.one>
Co-authored-by: laanwj <126646+laanwj@users.noreply.github.com>
2025-09-01 09:08:50 -06:00
bigbear
9d3ca7f31f
fix: correct variable assignment in bytes_to_point function 2025-08-30 11:41:58 +02:00
strmfos
0712585a1c
BIP-158: replace deprecated io/ioutil with os.ReadFile 2025-08-28 13:11:57 +02:00
Mark "Murch" Erhardt
86b29c5d81
Merge pull request #1941 from jonatack/2025-08-bip2-licenses
BIP2: license section fixups
2025-08-25 11:58:40 -07:00
Alvarez
ba843e29b1 BIP69: fix output inconsistency and update to python3
- Fix print_outputs() to use sorted output tuples instead of unsorted
- Add Python 3 compatibility using functools.cmp_to_key()
- Convert string hashes to byte arrays in second example
- Make file executable with shebang for python3
- Add clearer output formatting with transaction hashes and section headers
2025-08-23 12:27:05 +03:00
Jon Atack
c23b8a958e BIP2: fix 301 redirects in license URLs
Co-authored-by: 1BitcoinBoWP1FZ4xwTNkq6XksKidmgYYw <contact@bitcoin.foundation>
2025-08-21 16:44:59 -06:00
Jon Atack
7511c7ec77 BIP2: update MIT license name
per both of:

- https://opensource.org/license/MIT
- https://spdx.org/licenses/MIT

Co-authored-by: Murch <murch@murch.one>
2025-08-21 16:44:34 -06:00
Mark "Murch" Erhardt
2e3dd3f273
Merge pull request #1940 from jonatack/2025-08-bip3-licenses
BIP3: license section updates
2025-08-21 14:34:35 -07:00
Jon Atack
3f2a403f69
Merge pull request #1939 from ethicnology/master
BIP85: replace Base64 by Base85 in PWD BASE85 section
2025-08-21 08:48:35 -07:00
ethicnology
3e9befd444
refactor: unify capitalization 2025-08-21 07:46:21 -04:00
ethicnology
2fc8da8871
fix: replace Base64 by Base85 encoding in PWD BASE85 section 2025-08-21 07:31:26 -04:00
Jon Atack
3f61b68f22 BIP3: update MIT license name
per both of:

- https://opensource.org/license/MIT
- https://spdx.org/licenses/MIT
2025-08-20 21:53:17 -06:00
1BitcoinBoWP1FZ4xwTNkq6XksKidmgYYw
e98fb73faa BIP3: add MIT-0 to acceptable licenses 2025-08-20 21:53:17 -06:00
1BitcoinBoWP1FZ4xwTNkq6XksKidmgYYw
d610c8a232 BIP3: fix license URLs with 301 redirects 2025-08-20 21:52:51 -06:00
sashass1315
4f00b499c9
BIP345: fix broken links (#1938)
* BIP345: fix broken links
2025-08-18 12:43:37 -07:00
Jon Atack
ebfcfa4808
Merge pull request #1935 from Fibonacci747/unused-import
BIP352: remove unused import from reference.py
2025-08-15 08:40:37 -07:00
Fibonacci747
4463068012
feat: remove unused permutations import from bip-0352/reference.py 2025-08-15 10:58:43 +02:00
Jon Atack
9a55a542cc
Merge pull request #1934 from strmfos/master
scripts: remove unused FILES variable in link-format-chk.sh
2025-08-14 07:05:45 -07:00
Jon Atack
e9181258a1
Merge pull request #1932 from ANtutov/broken-link
BIP345: fix broken link
2025-08-14 05:20:41 -07:00
strmfos
e8b9da9284
scripts: remove unused FILES variable in link-format-chk.sh 2025-08-14 11:53:03 +02:00
Jon Atack
9a2791bf8b
Merge pull request #1929 from jonatack/2025-08-ci-update
ci: update github actions checkout version
2025-08-13 07:40:26 -07:00
ANtutov
b786c64080
bip-0345: fix broken link 2025-08-13 08:56:35 +03:00
Jon Atack
647e40ea04
Merge pull request #1914 from Forostovec/fix/broken-link
BIP 70: fix link to payment request generator
2025-08-12 09:30:42 -07:00
Jon Atack
3eff7c9626 ci: update github actions checkout version
see https://github.com/actions/checkout/releases/tag/v5.0.0
2025-08-11 09:52:58 -06:00
radik878
90091a2d06
test(reference): pass message when verifying tampered proof 2025-08-11 10:36:43 +03:00
Jon Atack
4f1359d0f8
Merge pull request #1920 from strmfos/master
BIP374: remove debug print from test runner
2025-08-10 14:40:59 -07:00
strmfos
1421be407e
BIP374: remove debug print statement from BIP-374 test runner 2025-08-09 19:17:39 +02:00
Jon Atack
e97c908096
Merge pull request #1918 from murchandamus/bip3-reformat-existing-licenses
BIP3: Update License header format on activation
2025-08-09 10:05:07 -07:00
Murch
1fc26cbb24
BIP3: Update License header format on activation
Addresses follow-up from #1892
2025-08-08 17:21:17 -07:00
Jon Atack
3821aa3a1c
Merge pull request #1797 from shesek/patch-3 2025-08-08 11:59:09 -07:00
Matt Corallo
c7e9befc2e Mark BIP 21 as replaced (by BIP 321) and mark BIP 321 as Proposed 2025-08-07 11:57:06 +00:00
Forostovec
4a68f37bf7
fix: broken link to payment request generator 2025-08-07 12:48:58 +03:00
Mark "Murch" Erhardt
6c5d396fba
Merge pull request #1910 from bethoffman/fix-typo
BIP443: fix typo in the section "Transaction-wide initialization"
2025-08-05 15:40:32 -07:00
josie
3e15178a43
BIP352: add warning against omitting outputs (#1908)
* doc: add warning against omitting outputs

While implied by the specification, add an explicit warning that
generated outputs MUST not be omitted from the final transaction.

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2025-08-04 09:36:01 -07:00
hoffman
c72c59a8db
Update bip-0443.mediawiki 2025-08-02 11:42:07 +08:00
Jon Atack
31450c3dbd
Merge pull request #1905 from otc-png/patch-1
[bip-0010]: remove repeated "the"
2025-08-01 06:27:04 -07:00
Jon Atack
5dd89238bd
Merge pull request #1907 from anim001k/master
Fix dead link in BIP-70: Update Mozilla root store URL
2025-08-01 06:25:56 -07:00
Jon Atack
4dc2165dba
Merge pull request #1906 from GarmashAlex/links
Fix broken MES16.pdf link in BIP-347
2025-08-01 06:25:30 -07:00
anim001k
c038164697
Update bip-0070.mediawiki 2025-07-30 16:34:43 +02:00
Mark "Murch" Erhardt
b8a39dfba3
Merge pull request #1904 from jonatack/2025-07-remove-License-Code-from-BIP3
BIP3: drop optional License Code header
2025-07-29 08:33:01 -07:00
Jon Atack
6f2f4aa233 BIP3: refer to CC0 1.0 Universal
per https://creativecommons.org/publicdomain/zero/1.0/legalcode.en

and add a missing word

Co-authored-by: Tim Ruffing <crypto@timruffing.de>
2025-07-28 16:52:41 -06:00
Jon Atack
12dc0e04a2 BIP3: drop optional License Code header
Co-authored-by: Tim Ruffing <crypto@timruffing.de>
Co-authored-by: Murch <murch@murch.one>
2025-07-28 16:52:29 -06:00
GarmashAlex
f4787bdb6f
fix broken link 2025-07-29 00:28:51 +03:00
otc group
a3e4d14e0d
remove repeated "the" 2025-07-28 23:14:16 +02:00
Mark "Murch" Erhardt
7f13f8f9f5
Merge pull request #1899 from dplusplus1024/patch-7
BIP32: Use plural “bytes”
2025-07-28 13:53:04 -07:00
Jon Atack
0a8c271715
Merge pull request #1902 from josibake/bip352-updates
BIP352: be explicit for the input_hash corner case
2025-07-25 08:22:15 -07:00
josibake
c70bc9f018
doc: be explicit for the input_hash corner case 2025-07-25 15:07:52 +01:00
Jon Atack
e8c02024f0
Merge pull request #1901 from crStiv/typo
BIP77: fix links to Client/Directory interactions
2025-07-21 13:11:08 -07:00
crStiv
c83aeb8d28
Update bip-0077.md 2025-07-21 21:11:36 +02:00
Jon Atack
0f8a2269c2 Merge branch 'nothingmuch-field-ordering-pr'
* nothingmuch-field-ordering-pr:
  CI: Enforce BIP 2 & 3 field ordering requirements
  scripted-diff: fix BIP 2 field order violations
2025-07-20 14:29:41 -06:00
Yuval Kogman
0eb3718c5d CI: Enforce BIP 2 & 3 field ordering requirements
The specified field order is consistent with both BIPs 2 and 3. The
ordering of fields which are only present in one or the other is
ambiguous, e.g. as in `Proposed-Replacement` and `Superseded-By` but
only one of these applies to a given BIP.

The `Editor` field is spurious, only being used in BIP 69, and appears
after Author.
2025-07-20 14:29:13 -06:00
Yuval Kogman
cd19d89e58 scripted-diff: fix BIP 2 field order violations
-BEGIN VERIFY SCRIPT-
set -e
perl <<'-END PERL-'
use strict;
use warnings;

my $topbip = 9999;

my @FieldOrder = qw(
	BIP
	Layer
	Title
	Author
	Authors
	Editor
	Deputies
	Discussions-To
	Comments-Summary
	Comments-URI
	Status
	Type
	Created
	License
	License-Code
	Discussion
	Post-History
	Version
	Requires
	Replaces
	Proposed-Replacement
	Superseded-By
);

my $bipnum = 0;
while (++$bipnum <= $topbip) {
	my $fn = sprintf "bip-%04d.mediawiki", $bipnum;
	my $is_markdown = 0;
	if (!-e $fn) {
		$fn = sprintf "bip-%04d.md", $bipnum;
		$is_markdown = 1;
	}
	-e $fn || next;
	open my $F, "<", $fn or die "$!";

	my (@before, %preamble, @after);

	if ($is_markdown) {
		while (<$F>) {
			push @before, $_;
			last if m[^(?:\xef\xbb\xbf)?```$]
		}
		die "No ``` in $fn" if eof $F;
	} else {
		while (<$F>) {
			push @before, $_;
			last if m[^(?:\xef\xbb\xbf)?<pre>$];
		}
		die "No <pre> in $fn" if eof $F;
	}
	my %found;
	my ($title, $author, $status, $type, $layer);
	my ($field, $val, @field_order);
	while (<$F>) {
		push @after, $_ and last if ($is_markdown && m[^```$]);
		push @after, $_ and last if (!$is_markdown && m[^</pre>$]);

		if (m[^  ([\w-]+)\: (.*\S)$]) {
			$field = $1;
			$val = $2;
		} elsif (m[^  ( +)(.*\S)$]) {
			$val = $2;
		} else {
			die "Bad line in $fn preamble";
		}

		push @{$preamble{$field} ||= []}, $_;
	}
	push @after, <$F>;
	close $F or die $!;

	open my $W, ">", "$fn" or die "$!";

	print $W @before;
	print $W map { @$_ } grep { defined } delete @preamble{@FieldOrder};
	die "Unknown fields: @{[ keys %preamble ]}" if %preamble;
	print $W @after;

	close $W or die $!;
}
-END PERL-
-END VERIFY SCRIPT-
2025-07-20 14:29:13 -06:00
D++
651e273ee8
Fix: Use plural “bytes” in serialization table to match field size convention
Aligns the first field in the serialization table with the rest, which use plural “bytes” (e.g., “4 bytes: child number”) for consistency.
2025-07-19 18:07:10 -07:00
Jon Atack
340c1a3d53
Merge pull request #1892 from real-or-random/202507-spdx
bip3: Switch to SPDX identifiers
2025-07-18 13:45:02 -07:00
Tim Ruffing
88d29188c6 bip3: Editorial cleanup of the license lists 2025-07-18 13:29:46 +02:00
Tim Ruffing
7aa54dd696 bip3: Change License example to CC0-1.0 OR MIT
The actual reason why I suggest this is that I think that's a great
default choice for a new BIP, so it's a perfect example. CC0-1.0 is a
great liberal choice for the BIP document (and test vectors etc.), and
MIT is the common choice for code in our ecosystem. Putting both BIP and
code under the "OR" avoids any confusion about which part is licensed
under which terms and also avoids any hassle when reorganizing, e.g.,
when moving code out of the BIP Markdown file to a separate file etc.

But I don't want this PR to recommend a license, so let me sell this
change as an editorial change to an example, which is warranted because
the MIT is much more known than FSFAP, in particular in this ecosystem.
2025-07-18 13:29:46 +02:00
Tim Ruffing
0cc4d26e67 bip3: Editorial changes in "BIP Licensing" 2025-07-18 13:29:46 +02:00
Tim Ruffing
e1d72f0243 bip3: Recommend SPDX-License-Identifier comments 2025-07-18 13:29:46 +02:00
Tim Ruffing
3de6ed6dc0 bip3: Don't require omitting unacceptable licenses
I think that requirement is not helpful. I don't think hat including
additional licenses will be overwhelming to the reader. If anything, it
will obfuscates the actual licensing conditions. (Anyway, this should be
super rare.)
2025-07-18 13:29:46 +02:00
Tim Ruffing
d01e941188 bip3: Don't call CC0 a license
That's a bit of legal nitpicking, sorry. CC0 contains something like a
public domain dedication along with a fallback license, so it's neither
entirely. Some call it a "legal instrument". I prefer not calling it
anything.
2025-07-18 13:29:08 +02:00
Tim Ruffing
33d45d7f74 bip3: Use user-defined LicenseRef-PD instead of PD
SPDX doesn't have an official identifier for "public domain", at least
not for the simple "This document is placed into the public domain"
declarations used in some BIPs, see
https://wiki.spdx.org/view/Legal_Team/Decisions/Dealing_with_Public_Domain_within_SPDX_Files
for the rationale provided by their legal team. The rationale is sound,
but It's possible to create "user-defined" identifiers of the form
LicenseRef-X. This is a good idea here to make sure that all SPDX
expression will be formally valid.

And in our case, all "PD" BIPs match the following pseudo regex, so
there's not much potential for confusion:

    "This (document|BIP|work|proposal) is (hereby)? (placed)? in the
    public domain."

So it makes sense to keep using a single identifier for all of these.
2025-07-18 13:29:08 +02:00
Tim Ruffing
85a248f68e bip3: Fix SPDX id of Open Publication License 2025-07-18 13:29:08 +02:00
Tim Ruffing
e5748c9997 bip3: Fix SPDX id of FSF/GNU All Permissive 2025-07-18 13:29:08 +02:00
Tim Ruffing
c3b6691284 bip3: Switch to SPDX License Expressions 2025-07-18 13:29:08 +02:00
Mark "Murch" Erhardt
be3d2e4611
Merge pull request #1897 from Galoretka/rawe
BIP69: fix function name typo in example code
2025-07-16 16:27:14 -07:00
Galoretka
504c8439ce
Fix function name typo: use bytearr_cmp instead of bytearray_cmp 2025-07-16 21:35:15 +03:00
Mark "Murch" Erhardt
83ac8427e7
Merge pull request #1890 from nothingmuch/fragment-fixes
BIP 77: Delimit fragment params with  `-` instead of `+`
2025-07-10 15:04:58 -07:00
Yuval Kogman
8b83c34949 Specify lexicographical order for fragment params
The rationale for this change is that since `-` instead of `+` breaks
compatibility anyway, the marginal cost of removing this
unusual/surprising requirement for reverse lexicographical ordering is
zero.
2025-07-10 22:06:57 +02:00
Yuval Kogman
43f9688600 Separate fragment params with - instead of +
Since only Bull Bitcoin Mobile and Cake wallet are currently deployed in
production, both using PDK, and the `+` character is causing some
friction, this change seems justified to avoid similar issues with
future implementations.
2025-07-10 01:33:16 +02:00
Mark "Murch" Erhardt
c17a3dbceb
Merge pull request #1888 from achow101/380-drop-H
380: Disallow H as a hardened indicator
2025-07-03 14:49:16 -07:00
Guro
fd1955694b
bip373: add hyperlinks to other BIPs (#1886)
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2025-07-03 10:46:18 -07:00
Ava Chow
3cc71d7c22 380: Disallow H as a hardened indicator 2025-07-01 14:28:30 -07:00
Jon Atack
36618d1c3c
Merge pull request #1884 from scgbckbone/b388_fix_vector
BIP-0388: Fix test vector
2025-07-01 13:20:47 -07:00
scgbckbone
db8bad7ac9 fix: descriptor in "Taproot wallet policy with sortedmulti_a and a miniscript leaf" test vector which incorrectly uses @0 from keys info without key origin derivation 2025-06-30 12:44:04 +02:00
Mark "Murch" Erhardt
77b0bb297a
Merge pull request #1819 from murchandamus/2025-03-bip3-followups
BIP3: Address additional review
2025-06-27 10:17:21 -07:00
Murch
99b8541e09
bip3: Improve compatibility section 2025-06-27 10:15:26 -07:00
Murch
0bbe31b745
bip3: Restate recommendation to get early feedback 2025-06-27 10:15:24 -07:00
Murch
66cb7504b4
bip3: Explain why the Replaces header is unchanged 2025-06-27 10:15:23 -07:00
Murch
7101294a93
bip3: Describe acceptance as Adoption/Publication 2025-06-27 10:15:21 -07:00
Murch
2c57d8aee6
bip3: Fix minor phrasing and structure issues 2025-06-27 10:14:25 -07:00
Jon Atack
187d8859dc
Merge pull request #1876 from Merkleize/ccv-fixes
443: Fix some mistakes, and add paragraph on fees
2025-06-26 15:35:44 -07:00
Jon Atack
f9017e52a3
Merge pull request #1874 from bigspider/bip388-musig-fix
388: fix incorrect example
2025-06-25 10:41:05 -07:00
Kendra Karol Sevilla
f38f6c4e7b
[bip-390]: add hyperlinks to BIPs (327, 380, 389, 32) (#1877)
* add hyperlinks to BIPs

* Update bip-0390.mediawiki
2025-06-24 08:26:41 -07:00
Salvatore Ingala
e4e2b7ccd1
443: add paragraph on fee management 2025-06-22 20:46:37 +02:00
Salvatore Ingala
ff5703c755
443: fix some errors in the python pseudocode and a wrong reference. 2025-06-22 20:28:46 +02:00
Salvatore Ingala
dadbbc6de4
388: fix incorrect example
As per the test vectors, musig key expressions require the aggregation step
to precede the change/address_index derivations.
2025-06-21 12:03:15 +02:00
Jon Atack
e22eaa5a52
Merge pull request #1803 from quapka/hardened-indicator 2025-06-20 16:06:00 -07:00
Mark "Murch" Erhardt
db9e16eb5d
Merge pull request #1873 from lechpzn/master
[bip-0443]: fix link to bip-0341
2025-06-20 15:40:07 -07:00
Afounso Souza
0f47be10d6
BIP443: Fix links to other BIPs 2025-06-20 15:37:24 -07:00
Jon Atack
1889614e54
Merge pull request #1871 from achow101/desc-clarifications
390: clarifications on KEY expression restrictions
2025-06-19 19:20:40 -07:00
Ava Chow
c754a4d095 390: Additional clarifications on KEY expression restrictions 2025-06-18 17:13:07 -07:00
Ava Chow
bc66fdb166 descriptors: Require BIP 380
All of BIPs describing new descriptors require BIP 380
2025-06-18 15:09:43 -07:00
Mark "Murch" Erhardt
879ba82ab4
Merge pull request #1867 from achow101/390-clarifications
390: Allow repeated participant pubkeys and disallow ranged participants with aggregate derivation.
2025-06-18 14:10:44 -07:00
Ava Chow
530b91d86b 390: Allow repeated participant pubkeys 2025-06-18 12:32:52 -07:00
Jon Atack
a39a82f497
Merge pull request #1866 from rkrux/musig-multipath
390: mention about multipath key expression in musig descriptors
2025-06-18 11:23:02 -07:00
Mark "Murch" Erhardt
e82c925973 Merge pull request #1870 from notnout/patch-1
Update bip-0321.mediawiki to remove duplicate address example
2025-06-16 11:59:34 -07:00
Commander Nout
a211df4825
Update bip-0321.mediawiki to remove duplicate address example
Removing duplicate address example that's exactly the same as above.
2025-06-16 10:27:23 -05:00
rkrux
099b1807a4 390: mention about multipath key expression in musig descriptors
Also, adds an example for the same.
2025-06-06 13:29:11 +05:30
Jon Atack
dbb9617e5f
Merge pull request #1865 from achow101/383-fix-scripts
383: Fix output scripts and reword minimal encoding explanation
2025-06-05 13:32:51 -07:00
Ava Chow
ee7accaf5f 383: Fix output scripts and reword minimal encoding explanation
Co-Authored-By: Dr. Maxim Orlovsky <orlovsky@lnp-bp.org>
2025-06-05 13:22:17 -07:00
Jon Atack
820a044c81
Merge pull request #1861 from ethicnology/master
BIP21: clarify that example addresses are intentionally invalid
2025-06-04 13:24:38 -07:00
ethicnology
fad325e7a1
refactor: add warning about invalid example addresses in BIP-21 2025-06-04 15:57:44 -04:00
Mark "Murch" Erhardt
7d8b390c78
Merge pull request #1864 from jonatack/2025-06-various-fixups
BIPs 77, 175, 443: various fixups
2025-06-03 14:39:06 -07:00
strmfos
ca05d44e64 BIP175: remove out-of-date implementation (404) 2025-06-02 14:16:33 -06:00
Johan T. Halseth
6a311752dd BIP443: list stack elements in bottom-to-top order
and a few minor fixups
2025-06-02 14:16:33 -06:00
Brandon Lucas
88a1ae5782 BIP77: remove duplicate "the" 2025-06-02 14:16:27 -06:00
Jon Atack
72af87fc72
BIP77: remove redundant sentence line (#1858) 2025-05-28 11:56:35 -07:00
Dan Gould
ee587c5d2f
BIP 77: Async Payjoin (#1483)
* Draft payjoin v2 BIP

* Include mailing list feedback

* Include TABConf feedback

* Include padding

* Include production reference implementation

* Adopt BIP-77 for payjoin v2

* Distinguish payjoin directory from OHTTP Relay

* Detail OHTTP Key Configuration mechanism

* Fix punctuation

* Make base64URL references consistent

* Reference standardized Secp256k1 DHKEM for HPKE

* Add Comments-URI

* fixup: Format and spell check

Co-authored-by: spacebear <144076611+grizznaut@users.noreply.github.com>

* Add BIP 77 to README

* Add Payjoin V2 overview diagram

* Add Oblivious HTTP Sequence Diagram

* Correct links and spelling

Co-authored-by: thebrandonlucas <38222767+thebrandonlucas@users.noreply.github.com>

* Wrap <code> blocks

* Fix basic scheme actors

* Fix dead samourai links

* Orient motivation around a problem

* fix links

* Keyconfig s/should/must/ be provided

* Fix typos

Co-authored-by: thebrandonlucas <38222767+thebrandonlucas@users.noreply.github.com>

* s/pubkey/public key

* Incorporate jonatack's suggestions

* Incorporate more jonatack suggestions

* Incorporate satsie's suggesetions

* Rename "Async Payjoin"

* Replace BIP21 params with fragment params

* Revise document to describe Payjoin Sessions

Enrollment was a less clear than sessions

* Revise Sequence Diagram

* Spell initialize

* Update the bip to represent the stable protocol

* Spell according to Type Checks's job

* Mention the format of the ohttp fragment

* Reference BIP 78 attack vectors

* Remove straggling text

* Specify authorization mechanism

The specifics of a credential issuance are left out, however

* Use implicit session initialization

* Specify cryptographic handshake based on Noise IK

Co-authored-by: Yuval Kogman <nothingmuch@woobling.org>

* Add Spacebear's clarifications

Co-authored-by: spacebear <git@spacebear.dev>

* Document subdirectory Short IDs

* Require uppercase URL

bech32 fragment prefixes are case sensitive, and
alphanumeric mode only works on capital letters.

* Specify bech32 fragment parameter definitions

* Uppercase URL specifically only after subdirectory

* Note payload uniformity via padding and ellswift

* Include Message Byte Representations

This is the most straightforward way to explain the various padding
requirements.

* Document HPKE `info` strings

* Truncate lines to 120 characters

* Receiver's Original PSBT, not proposal

* Specify no mixed [output script]

* Remove extraneous pipe character

* Require BIPS 21, 78, 174

* Update checklist MUST/MUST NOT sections

MUST NOT contained MUST details. Move them to MUST.

* inputs ⇒ input

* Clarify BIP 78 payjoin version 1 connection

* Fix backwards compat language

* Payjoin version 2 URIs

* Reference Binary HTTP RFC

* Payjoin version 1 Proposal PSBTs

* Oblivous -> Oblivious

* Rm reference to 'production relays'

* Repeat the active agent by name

* Add Post-History

* Title 'Async Payjoin'

* Check spelling

* directory -> mailbox

* Move ohttp= fragment param to link to frag spec

* Mention URI keys as bootstrap mechanism

* Mailbox Discovery

* Remove superfluous word

* Clarify motivation

* Revise backwards compatiblity section for clarity

* Remove related protocol details

* Mv copyright out of flow

* Fix grammar (should be plural)

* Weaken language around addressing CIOH

"solves" implies this is the end of the story. Clarify that the problem
is the sole *explicit* problem mentioned in the paper.

* Simplify overview

- describe happy path protocol sequence
- introduce non-obvious key terms inherited from BIP 78
- no need for technical details that are clarified in the specification

* Describe optionality in overview

* Nitpicky sequence diagram fixes

* Clarify receiver's initial message in sequence diagram

* Simplify Basic Scheme section

* Mention OHTTP abbreviation on first mention

* Move sequence diagram up

* fragment parameter encoding corrections

- base64url was replaced by bech32
- formatting fixes
- some clarifications

* Use SHA-256 at independent mentions for consistency

* bootstrap grammar fix & correction

bootstrap would use a tor exit node, not a hidden service

* clarify proposal PSBT encryption layers

clarify which key is used for which layer of encryption (payjoin v2 e2ee vs.
OHTTP)

the message is not "authenticated" by the sender, rather it is tagged, it can be
authenticated during decryption.

* format original/proposal PSBT terms using italic, not <code>

* HRP of short ID is an implementation detail

it doesn't matter what is used since it's stripped after encoding

* Clarify checklist requirements

* "by intersection" unclear and unnecessary

* the fragment doesn't follow the pj param, it's part of it

* fix message diagram line intersections

* Correct encapsulated OHTTP diagram

The binary HTTP request is encrypted, and the AEAD tag is at the end, not the
beginning

* Clarifications for HPKE keys

Remove noise protocol framework mention. The IK pattern is not accurate, the
closest patterns are N or possibl NN, but neither is a perfect fit (N defines the
key as static, which it isn't, and NN is an interactive pattern)

* Remove note about forward secrecy

This is inaccurate, forward secrecy is defined with respect to long term
sessions, so the definition doesn't really extend to the request and response
messages, each of which is encrypted with ephemeral keys.

* Clarify OHTTP-relay bypassing by use of tor hidden service

* Update HPKE mode used for sender's message

Previously the reply key was included before the HPKE ciphertext, and the Auth
mode was used using this key. Since they are delivered together that only proves
the key was usable by the sender, not that the ciphertext is authentic. With the
key included as part of the encrypted plaintext, the HPKE mode was changed to
the base encryption to a public key mode with no authentication key.

* keep mailbox, but rename mailroom back to directory

Partly reverts a4d4065fa6f736f058e9173aa852e4fd12e75650, this change is hardly
more than a find & replace of mailroom to directory, and does not revert grammar
changes etc in addition to not reverting the subdirectory -> mailbox rename
which was the main point of confusion.

* Clarify allowed_purposes mechanism

First explain RFC 9540, then explain the extension mechanism.

Make roles in the interaction more explicit by changing the heading, "Directory
Discovery" sort of implies that clients discover these, when it describes relay
to directory interaction.

Clarify centralization pressure, that is alleviated by making senders' and
receivers' choices independent of each other.

* Correct payload uniformity section

We forgot about the OHTTP header which is 7 bytes of cleartext that also
specifies the DHKEM algoritm.

Additional clarifications and some restructuring to describe the details two
classes of messages each in its own self contained paragraph.

* rewrap paragraph to fix broken link

* fix bullet list formatting

- unindent to avoid <pre>
- fix broken URLs
- fix bullet items split into paragraphs

* rewrap section to fix broken links

* rewrap more paragraphs to fix broken links

* make attack vectors level 2 heading

as level 3 heading it was displayed under rationale in the table of contents

* Grammar/style fixes

* Order Requires

* Describe 'what' in the first sentence of the abstract.

* Be more specific about motivation.

* Make goal more explicit and consise

* Standardize "Common-input-ownership heuristic"

bitcoin wiki uses this.

* Replace Request expiration with Session Expiration

* Specify BIP 78 `v` parameter as redundant.

* Separate Short ID length rationale from spec

* Clairfy key nomeclature

- mailbox key
- reply key
- receiver key

as well as ephemerality and session nomeclature.

* Place byte diagrams with there respective message description.

* Include bitcoin URI subsection

* Top half reorg

* Add Yuval Kogman as Co-author

* NO mak typo

* Fix heirarchy

* Convert mediawiki to markdown

nix shell nixpkgs#pandoc --command bash -lc '
  pandoc -f mediawiki -t gfm bip-0077.mediawiki -o bip-0077.md'

rm bip-0077.mediawiki
reference bip-0077.md in README
surround bip-0077.md preamble in ``` to satisfy CI

* Strip link titles from mediawiki -> md conversion

sed -i.bak -E 's/\]\(([^ )]+) "[^"]*"\)/](\1)/g' bip-0077.md

* Strip leading/trailing spaces from inside links

sed -i.bak -E 's/\[[[:space:]]+/[/g; s/[[:space:]]+\]/]/g' bip-0077.md

* Fix spacing around inline code

* Take bitcoin URI example out of md link syntax

* Fence byte diagrams in backtics

* Replace sequence diagrams with mermaid

Better rendering and semantic source

* Collapse overview, basic scheme, and protocol sequence

These were all inconsitent levels of detail for the same thing. Leave the overview
the highest level and link to the specifics.

* Consistent short id singularity

* Remove straggling whitespace

* Link whitepaper

* Fix motivation flow

* Clarify abstract

* Clarify motivation

* Clarify overview

* Clarify bootstrapping

* Use singular to describe Payjoin URI

* Clarify mailbox endpoint

Specify that v2 mailboxes are OHTTP Targets.
Mention backwards compatibility.

* Clarify Receiver Fragment Parameters

* Revise messaging for clarity

* Add rationale for allowed_purposes

* Define ElligatorSwift according to BIP 324

* Clarify attacks, backwards compatibility

* Fix Receiver Proposal PSBT messaging header

for link.

* Add activation to sequence

* Correct #64-bit-short-id-length link

Co-authored-by: Yuval Kogman <nothingmuch@woobling.org>

* Clarify why not AES-GCM rationale

* Specify serialization of reply key in plaintext

* Specify the wire format for ChaCha20-Poly1305 ciphertext and tag

* Specify details of HPKE message wire format

Also clarifies that HPKE auth mode is used with the receiver's key,
authenticating the receiver as the sender of the encrypted Proposal PSBT.

* Correct diagram for OHTTP encapsulation

The order according to RFC 9458 and the code is is header, followed by
encapsulated key, followed by the ciphertext.

* OHTTP message encoding according to RFC 9458

* Rephrase abstract in active voice

* Deduplicate motivation word choice

- 'suitable for widespread implementation' vs appropriate, it's stronger
- 'mature solutions' to express that we chose those already based on iteration
- 'proven bitcoin primitives' to reflect the use of those battle tested like
  ElligatorSwift

* Simplify output batching motivation

* Reduce verbosity of linking exemplar conclusion

* Use PSBT 'update' verb in overview

Say 'appropriate intputs and/or outputs' because outputs might be merely
replaced, not necessarily added.

* Mention mutual exclusivity of Original and Proposal PSBTs

* Capitalize Uri -> URI

* Clarify URI parameter key/value distinction

* Backwards-compatible receivers *disable* pjos

* Use bech32 character set, not bech32

* Clarify session-specific parameter encoding

* Say 33-byte compressed public key

* Clarify v2 optional sender parameters application

* Clarify receiver session initiation overview

Co-authored-by: nothingmuch <nothingmuch@woobling.org>

* Mention sender's ephemeral mailbox in overview

Co-authored-by: nothingmuch <nothingmuch@woobling.org>

* Clarify cut-through optimization

* Replace mention of v1/v2 payjoin

Instead use 'This proposal', 'BIP 78', 'BIP 77', or omit the mention.

* Mention BIP 174 for PSBTv0

* Mention sender's *corresponding* public key

* Hyphenate '16-byte'

* Clarify who can post messagese direct to mailbox

* liu -> lieu

* Simplify cut through overview sentence structure

* Replace 'Payjoin exemplar' with 'A natural application..'

* Make motivation CIOH mention easier to read

Use language from sataoshi and don't mention input batching since the next
sentence already does.

* Specify Proposal PSBT MUST/MAY input/output inclusion rules

* remove duplicate 'and'

* Remove duplicate 'preserve'

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* The HRP is used as the parameter key

Co-authored-by: Yuval Kogman <nothingmuch@woobling.org>

* Add rationale for random padding in OHTTP

* Use "zero" instead of "0"

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

* epehmeral -> ephemeral

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* subject match tense

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* Capitalize Payjoin for protocol

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* Capitalize Payjoin for protocol

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* Capitalize Payjoin for protocol

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* Capitalize Payjoin for protocol

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* Capitalize Payjoin for protocol

Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>

* ("Version 2") relative to and described in ("Version 1")

Co-authored-by: Jon Atack <jon@atack.com>

* BIP78's requirements for Payjoin Version 1

Co-authored-by: Jon Atack <jon@atack.com>

* Include missing period

Co-authored-by: Jon Atack <jon@atack.com>

* which -> that

Co-authored-by: Jon Atack <jon@atack.com>

* Separate independent clauses with a semicolon

Co-authored-by: Jon Atack <jon@atack.com>

* Remove duplicate "at"

Co-authored-by: Jon Atack <jon@atack.com>

* Hyphenate "short-lived"

Co-authored-by: Jon Atack <jon@atack.com>

* Fix Attack Vectors URL

Co-authored-by: Jon Atack <jon@atack.com>

* which -> that

Co-authored-by: Jon Atack <jon@atack.com>

* Include colon to reference Oblivious HTTP Relay impl

Co-authored-by: Jon Atack <jon@atack.com>

* consist -> consists

Co-authored-by: Jon Atack <jon@atack.com>

* Remove double "the"

Co-authored-by: Jon Atack <jon@atack.com>

* Remove double "the"

Co-authored-by: Jon Atack <jon@atack.com>

* Correct Padded BHTTP Response length

144 bytes not 104

See: 87042266d1/payjoin-directory/src/lib.rs (L30-L31)

* which -> , which

* Note TLS is not available in Bitcoin Core

* Link to BIP21 forwards compatibility `reqparam`

* Require rev. lexicographical frag. param. order

A specific order might create a fingerprint for a specific wallet, imposing a privacy
risk. It seems impossible to impose an order on BIP21 parameters, but BIP 77 clients
may error on out-of-order fragment parameters to at least avoid some fingerprint there.

Reverse lecicographical ordering was chosen because that is how the existing implmentation
serializes the parameters already, so that no breaking change needs to be made.

Co-authored-by: nothingmuch <nothingmuch@woobling.org>

---------

Co-authored-by: spacebear <144076611+grizznaut@users.noreply.github.com>
Co-authored-by: thebrandonlucas <38222767+thebrandonlucas@users.noreply.github.com>
Co-authored-by: Yuval Kogman <nothingmuch@woobling.org>
Co-authored-by: spacebear <git@spacebear.dev>
Co-authored-by: spacebear <144076611+spacebear21@users.noreply.github.com>
Co-authored-by: Brandon Lucas <thebrandonlucas@gmail.com>
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
Co-authored-by: Jon Atack <jon@atack.com>
2025-05-28 11:49:12 -07:00
Jon Atack
5c7120f418
Merge pull request #1857 from strmfos/master
BIP69: fix link
2025-05-22 17:26:03 -07:00
strmfos
10941b1880
replace error link bip-0069.mediawiki 2025-05-22 20:08:39 +02:00
Mark "Murch" Erhardt
43d4a1ecec
Merge pull request #1760 from Christewart/2024-12-20-64bytetxs
BIP 53: Disallow 64-byte transactions
2025-05-21 17:58:42 -07:00
Jon Atack
039de4fddd
Merge pull request #1850 from murchandamus/Revert-bip48-update 2025-05-21 18:46:52 -06:00
Chris Stewart
4d495ab1a0 BIP53: Disallow 64-byte transactions
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>

Co-authored-by: Jon Atack <jon@atack.com>
2025-05-21 19:10:59 -05:00
Jon Atack
fd413c162d
Merge pull request #1844 from torrpriius/fix/update
BIP-99: fix footnotes and drop missing reference
2025-05-21 14:59:47 -06:00
Mark "Murch" Erhardt
ebab9b369a
Merge pull request #1854 from jonatack/2025-05-replace-broken-twitter-link
BIP341: replace broken twitter link
2025-05-20 14:33:50 -07:00
Torprius
7ab94f8be4
BIP99: Drop missing reference, fix formatting
Co-authored-by: Murch <murch@murch.one>
2025-05-20 14:26:15 -07:00
Jon Atack
a093c34607 bip341: replace broken twitter link 2025-05-20 08:08:27 -06:00
Jon Atack
36daa362c3
Merge pull request #1853 from kcalvinalvin/patch-1
bip-0331: correct size of version field in sendpackages
2025-05-19 09:32:55 -06:00
Calvin Kim
5d82f82693
bip-0331: correct size of version field in sendpackages
Since the version is denoted as uint64, the size should be 8 bytes.
2025-05-19 12:29:39 +09:00
Mark "Murch" Erhardt
3b76d78bdb
Merge pull request #1793 from Merkleize/ccv
BIP 443: OP_CHECKCONTRACTVERIFY
2025-05-16 09:58:31 -07:00
Mark "Murch" Erhardt
25f63964d0
Merge pull request #1849 from mutestt/fix/fix
BIP-372: Fix references and links formatting and minor typos
2025-05-16 09:51:53 -07:00
Mark Diloff
50a692d82e
BIP372: Fix footnote formatting, minor issues 2025-05-16 09:49:54 -07:00
Murch
adafc92b98
BIP48: Remove invitation to add more script types 2025-05-14 15:12:42 -07:00
Murch
fc946e1989
BIP48: Move to final 2025-05-13 13:07:53 -07:00
Murch
b2ce382603
Revert P2TR example from "BIP48: Add P2SH-P2WSH and P2TR mainnet examples"
This partially reverts commit 9c22bcef63.
2025-05-13 13:07:51 -07:00
Murch
f29553e085
Revert "BIP48: Add p2tr script type derivation"
This reverts commit e7cf2e9149.
2025-05-13 13:07:49 -07:00
Salvatore Ingala
ed6b6132f8
BIP draft for OP_CHECKCONTRACTVERIFY 2025-05-13 09:28:28 +02:00
Murch
60ac0e8fec
Merge pull request #1848 via 'jamesob-25-05-withdraw-vault' 2025-05-08 11:38:05 -07:00
James O'Beirne
b771054d4d
BIP-345: withdraw 2025-05-08 11:33:31 -07:00
Jon Atack
b8702ef497
Merge pull request #1846 from ben-kaufman/bip48-mainnet-examples
BIP48: Add P2SH-P2WSH and P2TR mainnet examples
2025-05-08 11:31:42 -06:00
Murch
bce061f009
Merge pull request #1841 from 0ceanSlim
- Adds BIP172: Define Bitcoin Subunits as Satoshis
2025-05-08 10:28:56 -07:00
0ceanSlim
c37927174e
Add BIP172: Define Bitcoin Subunits as Satoshis 2025-05-08 10:24:02 -07:00
Mark "Murch" Erhardt
4aa3aef572
Merge pull request #1821 from BitcoinErrorLog/master
BIP177: Redefine Bitcoin’s Base Unit
2025-05-08 09:52:03 -07:00
John Carvalho
59527bd92b
Add BIP177: Redefine Bitcoin's Base Unit
- Redefine bitcoin base unit to smallest unit
- Propose BIP 21Q: Redefine bitcoin base unit to smallest indivisible unit
- Adds comments acknowledging and handling sats and satoshis
- Make use of "base unit" and variations more consistent and intentional
- Make "bitcoin" v "Bitcoin" consistent
- Made "bitcoin" v "Bitcoin" consistent by using Bitcoin for the protocol and idea, and bitcoin for the units, which I believe is conventional style.
2025-05-08 09:49:28 -07:00
benk10
9c22bcef63 BIP48: Add P2SH-P2WSH and P2TR mainnet examples 2025-05-04 08:46:13 +03:00
Jon Atack
3365fb7a7e
Merge pull request #1835 from ben-kaufman/bip48-p2tr
BIP48: Add p2tr script type derivation
2025-04-30 21:07:28 -06:00
Jon Atack
74fc5b92b0
Merge pull request #1800 from darosior/consensus_cleanup
BIP 54: Consensus Cleanup
2025-04-29 16:23:51 -06:00
Mark "Murch" Erhardt
2fa52fcb0e
Merge pull request #1842 from gap-editor/bip-0197
BIP 197: Update the invalid link
2025-04-29 13:28:56 -07:00
benk10
e7cf2e9149 BIP48: Add p2tr script type derivation 2025-04-29 19:17:05 +03:00
Mark "Murch" Erhardt
a1ce143fc4
Merge pull request #1839 from jonatack/2025-04-collect-typo-fixups
Collect and curate typo fixups from April
2025-04-28 14:19:41 -07:00
Maximilian Hubert
9d960e9906
Update bip-0197.mediawiki 2025-04-28 20:51:55 +02:00
Antoine Poinsot
1ee43519dd Consensus Cleanup BIP draft 2025-04-28 14:30:31 -04:00
Maximilian Hubert
22806674f4
BIP 99: update invalid link to hardfork-timewarp-0.11 branch (#1836)
* Update bip-0099.mediawiki

* Update bip-0099.mediawiki
2025-04-28 11:02:04 -07:00
Maximilian Hubert
9abe24d2c6
BIP 154: fix link to cuckoo-profile.pdf (#1840)
* Update bip-0154.mediawiki

* Update bip-0154.mediawiki
2025-04-28 10:57:28 -07:00
Jon Atack
8137279570 Monthly typo fixups
Co-authored-by: xiaobei0715 <1505929057@qq.com>
Co-authored-by: wgyt <wgythe@gmail.com>
Co-authored-by: Ragnar <rodiondenmark@gmail.com>
2025-04-28 10:29:11 -06:00
Maximilian Hubert
b60b886414
bip-0112: fix links to Deployable Lightning paper (#1837) 2025-04-28 08:19:21 -07:00
Jon Atack
c11792bf18
Merge pull request #1838 from gap-editor/bip-0119
BIP 119: fix link to MES16 paper
2025-04-28 08:58:16 -06:00
Maximilian Hubert
f5e4b5b89c
Update bip-0119.mediawiki 2025-04-28 16:49:57 +02:00
Mark "Murch" Erhardt
fd3878a279
Merge pull request #1555 from TheBlueMatt/2024-03-uris-without-bodies
BIP 321: URI Scheme (Replace BIP 21 with a new BIP containing information about more modern usage of it)
2025-04-24 21:52:29 -07:00
Matt Corallo
f5cb29f9b7 Update BIP 321 with information about more modern usage of it
As Bitcoin has grown, the introduction of new address formats
describing new forms of payment instructions has become
increasingly fraught with compatibility issues. Not only does there
exist traditional on-chain addresses, but some recipients wish to
receive Lightning (when the sender supports it) or newer formats
such as Silent Payments.

This has led to increasing use of the BIP 21 query parameters to
encode further optional payment instructions.

Looking forward, as new payment instructions get adopted, it makes
much more sense to include them in query parameters rather than
replace the existing address field, ensuring compatibility with
senders and recipients who may or may not be upgraded to support
all the latest payment instructions.

This updates BIP 321 to suggest that future address formats do this.

Further, it updates BIP 321 to allow an empty bitcoin address in
cases where new payment instructions have moved to becoming
mandatory. This isn't a backwards-incompatible change any more than
switching to a new address format is, so doesn't impact existing
BIP 21 implementations in a new way, however provides a nice
conclusion to the query-parameter-based upgrade path - once a form
of payment instructions has broad adoption, senders can simply drop
the existing address field, keeping their existing query parameter
encoding, rather than replace the existing address field. It also
addresses the question of what to do if a wallet no longer wishes
to receive some legacy on-chain address, but has multiple payment
instruction formats that they wish to include - deciding which one
to place in the address field would be a difficult task.

Finally, it defines a new query parameter, the `pop` parameter,
which allows the initiating application to receive callbacks for
proof of payment completion.
2025-04-23 14:51:51 +00:00
Nicolas Dorier
bf8f197553
BIP388: List BTCPay Server and NBitcoin implementations
* BTCPay Server and NBitcoin supporting BIP388
* BIP388: Spelling improvements

Co-authored-by: Salvatore Ingala <6681844+bigspider@users.noreply.github.com>
2025-04-23 05:50:33 -07:00
Janus
757e15e568 Reject 199 (expired) 2025-04-21 15:18:24 -07:00
Tronica
6ceafc51b1
BIP-0374: fix incorrect bit index and modernize CSV reader usage in test vector scripts (#1817)
* Update run_test_vectors.py

* Update gen_test_vectors.py

* Regenerate test vectors after fixing message tampering logic in gen_test_vectors.py
2025-04-16 07:10:16 -07:00
Jon Atack
05d546d581
Merge pull request #1779 from VolodymyrBg/AE5959595959
BIP374: add subtraction operator for GE class
2025-04-16 08:08:34 -06:00
VolodymyrBg
7c80a699ff Implement subtraction operator for GE class in BIP-0374 reference code
This commit implements the subtraction operator (sub) for the GE (Group Element) class in the secp256k1.py file as requested in the TODO comment in reference.py.

The implementation is straightforward, leveraging the existing neg method to define subtraction as addition with the negated element: self + (-a).

After implementing the operator, the code in reference.py was simplified by replacing expressions like:
s * G + (-e * A) with s * G - e * A

This makes the code more readable and directly matches the mathematical notation used in the BIP-0374 specification.

Co-Authored-By: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
2025-04-15 14:39:09 +03:00
VolodymyrBg
c5220f8c3b
BIPs 78 and 329: minor grammar and typo fix-ups (#1825)
* BIP 329 fix typo

* BIP 78 fix typos
2025-04-14 12:35:42 -07:00
wgyt
befa252b51
BIP3,37,39,42,52,62: fix typos (#1824)
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2025-04-14 08:22:17 -07:00
leopardracer
4b568f2c37
BIP75: fix typo (#1823) 2025-04-14 08:17:43 -07:00
FT
8375f71ee6
BIP15,20: add missing words (#1822)
* Update bip-0015.mediawiki

* Update bip-0020.mediawiki

* Update bip-0035.mediawiki
2025-04-12 07:55:08 -07:00
kilavvy
1447ab990d
BIP381, 382: minor grammar fixups (#1816)
* Update bip-0382.mediawiki

* Update bip-0381.mediawiki
2025-04-11 13:01:50 -07:00
Mark "Murch" Erhardt
1163f3ab69
Merge pull request #1814 from leopardracer/patch-1
BIP-0374: fix typo
2025-04-07 13:03:00 -07:00
Jon Atack
8455e258b0
Merge pull request #1812 from leopardracer/master
BIP-0324: fix typo
2025-04-07 09:43:45 -06:00
leopardracer
f64e8255c6
Update bip-0374.mediawiki 2025-04-06 23:22:43 +03:00
leopardracer
54c39b27b9
Update reference.py 2025-04-06 22:56:17 +03:00
D++
f958360a27 Update to include newer address types
Added bech32 and bech32m address types to reflect the newer SegWit and Taproot addresses.

Co-Authored-By: Reese Russell <reese.russell@ymail.com>
2025-04-04 16:37:24 +00:00
Matt Corallo
7e6a583c8d Copy BIP 21 into a new BIP 321 with only the header changed 2025-04-04 16:37:24 +00:00
Mark "Murch" Erhardt
3ccc59dbdb
Merge pull request #1811 from futreall/master
BIP352: minor docstring fixups
2025-04-04 06:35:59 -07:00
futreall
a6cbb79a3f
fix err has to hash reference.py 2025-04-03 09:10:20 +03:00
Mark "Murch" Erhardt
7bc88ba4e2
Merge pull request #1810 from jonatack/2025-04-bip340-url-fixup
BIP340: fix url to test-vectors.py
2025-04-02 09:05:34 -07:00
Jon Atack
480921f66f BIP340: fix url to test-vectors.py 2025-04-02 09:47:31 -06:00
Jon Atack
74eee4c353
Merge pull request #1807 from real-or-random/340-code-license-change 2025-04-02 08:45:25 -06:00
Tim Ruffing
84a64ec1c6 bip340: Change license of code and test vectors
See https://github.com/bitcoin/bips/commits/master/bip-0340 for a list
of contributors. I have obtained permission to do this change from all
contributors in private. Nevertheless, it would be good to get an ACK
from every contributor in order to have publicly available evidence.

 - [ ] @sipa
 - [ ] @jonasnick
 - [ ] @theStack
 - [ ] @ysangkok

I haven't contacted @Sajjon and @satsie, whose contributions constitute
of fixing not more than two typos and are thus below the threshold of
originality required for copyright to be applicable.
2025-04-02 15:38:56 +02:00
Jon Atack
9847bc7704
Merge pull request #1808 from futreall/master
BIP328: minor docstring fixups
2025-04-01 13:13:40 -06:00
futreall
5772c6b40d fix error Base48 to Base58
chore: fix error Base48 to Base58

fix error Base48 to Base58
2025-04-01 21:18:06 +03:00
quapka
fade15caa2
BIP380: minor grammar fixups (#1802)
* Use pronoun only after recalling the sentence object

* Use singular form

* Fix phrasal verb form

---------

Co-authored-by: quapka <>
2025-03-29 07:58:33 -07:00
Murch
a7075ee434
BIP3: Fix link to BIP 123 2025-03-29 07:42:31 -07:00
Litvintech
816181f0d4
Update dead link in bip-0003.md 2025-03-29 16:56:16 +03:00
Mark "Murch" Erhardt
04b2ec649b
Merge pull request #1804 from darosior/2503_bip3_nits
bip3: a couple nits
2025-03-28 13:25:17 -07:00
Antoine Poinsot
5dcb2d46c9 bip3: link to ownership transfer section for complete->closed transition
Reading from top to bottom, the passive voice "they become BIP's author or deputy" left me wondering
how it would concretely work in practice. Link to the transferring ownership section for
clarification.
2025-03-28 11:54:13 -04:00
Antoine Poinsot
617db7a0fe bip3: rename 'shareholder' to 'stakeholder'
Shareholder refers to an individual or a legal entity owning a share of a company's share capital.
Since the Bitcoin system is not a company, but different actors across the industry have a stake in
its operation, i think the word "stakeholder" better conveys the intended meaning of the original
author here.
2025-03-28 11:49:20 -04:00
quapka
3d7ff96d7b Make specs consistent about hardened indicators 2025-03-27 21:43:12 +01:00
Jon Atack
02ad0e01c2
Merge pull request #1794 from murchandamus/2025-03-propose-BIP3
BIP3: Move to Proposed
2025-03-24 12:55:27 -06:00
Jon Atack
d7cc40ed69
Merge pull request #1798 from sky-coderay/master
BIP69: typo fixup in bip-0069_examples.py
2025-03-24 12:47:34 -06:00
Skylar Ray
b09a0aa7ca
Update bip-0069_examples.py 2025-03-24 19:51:48 +02:00
Nadav Ivgi
f23e3c7318
BIP 345: Fix OP_VAULT_RECOVER specification for the recovery-sPK-hash
The recovery scriptPubKey needs to be prefixed with its CompactSize-encoded length.
2025-03-22 23:40:12 +02:00
Mark "Murch" Erhardt
65b6d6d66d
Merge pull request #1791 from wgyt/wgyt-bips-patch
BIPs 67 and 301: fix links
2025-03-21 18:26:29 -07:00
wgyt
0e3a56c681 fix links 2025-03-22 09:15:16 +08:00
Mark "Murch" Erhardt
09564837a9
Merge pull request #1778 from sky-coderay/patch-1
BIP379: add missing hexadecimal notations
2025-03-21 09:29:37 -07:00
Jon Atack
7a32141336
Merge pull request #1584 from jonatack/2024-04-bip32-amendment
BIP32 amendment: base58chk-encoded extended keys are always 111 chars
2025-03-21 09:06:38 -06:00
Jon Atack
2fd67e5bd4
Merge pull request #1777 from vipocenka/fix/fix
BIP158: minor error message fixup in `gentestvectors.go`
2025-03-21 08:56:51 -06:00
Murch
b650373ded
Merge branch 'BIP-0060' 2025-03-21 07:22:27 -07:00
Jon Atack
335edb3519
Merge pull request #1792 from JeremyRubin/119-edits-2025
[BIP-119] language overhaul & cleanup
2025-03-21 08:18:30 -06:00
Mark "Murch" Erhardt
e946c66c77
Merge pull request #1795 from guspan-tanadi/pdfpathlinks
bip-0068: current pdf path links
2025-03-19 06:53:41 -07:00
Guspan Tanadi
7523f8ed0a
fix pdf path links bip-0068 2025-03-19 20:04:15 +07:00
Murch
76132ec284
bip3: Move to Proposed 2025-03-18 19:31:49 -07:00
Jeremy Rubin
88c0fb9b5b [BIP-119] language overhaul & cleanup 2025-03-18 09:28:18 -04:00
Mark "Murch" Erhardt
8a75e437c5
Merge pull request #1790 from futreall/fix
bip-0375.mediawiki fix duplicate 'the'
2025-03-17 18:05:43 -07:00
Jon Atack
59e7cb4334
Merge pull request #1782 from Roasbeef/testnet4-spec-reword
BIP-0094: reformat specification section for clarity and readability
2025-03-17 18:50:14 -06:00
futreall
9ae0cdc9fe
Update bip-0375.mediawiki 2025-03-15 19:42:21 +02:00
Jon Atack
00c13baff0
Merge pull request #1783 from wgyt/wgyt-bips-fix-link
Fix links in BIP300
2025-03-13 13:29:25 -06:00
Jon Atack
050d422b2a
Merge pull request #1789 from darosior/2503_bip348_ref_bip342
bip-0348: correct BIP number in referencing unknown key types
2025-03-10 13:56:09 -07:00
Antoine Poinsot
1dee483436 Remove now unused reference to bip-0341 2025-03-10 16:20:42 -04:00
Antoine Poinsot
97a7edb0da bip-0348: correct reference to Tapscript unknown key types
Author confused bip-0341, which defines the Taproot construction, with bip-0342, which defines the
Tapscript scripting system. Unknown key types are defined in the latter, as part of the semantics of
the CHECKSIG{VERIFY} and CHECKSIGADD opcodes.
2025-03-10 16:16:36 -04:00
Jon Atack
7e15925f91
Merge pull request #1788 from EthnTuttle/patch-1
BIP119 fix grammatical typos
2025-03-10 11:15:49 -07:00
Ethan Tuttle
9573e060e3
fix: grammatical typos 2025-03-09 21:01:44 -04:00
Jon Atack
33231097c2
Merge pull request #1785 from jonatack/2025-03-bip94-touchup
BIP94 PR1781 editorial fixups
2025-03-07 12:57:05 -08:00
Jon Atack
954a78ea1f BIP94 PR1781 fixup 2025-03-07 14:55:50 -06:00
Jon Atack
a9e0745a36
Merge pull request #1784 from jonatack/2025-03-appease-typos-linter-in-BIP119
BIP119: appease typos linter
2025-03-07 12:46:53 -08:00
Jon Atack
61a39ce66d
Merge pull request #1781 from Roasbeef/testnet4-port
BIP-0094: add default p2p port for testnet4
2025-03-07 12:40:54 -08:00
Jon Atack
3ee89adf9e BIP119: appease typos linter 2025-03-07 12:54:17 -06:00
wgyt
0140e2864b fix links in bip-0300 2025-03-07 13:43:25 +08:00
Olaoluwa Osuntokun
0dd4d3ec61
BIP-0094: reformat specification section for clarity and readability
Restructured the specification section to make the consensus rules
clearer and more scannable. The previous section interleaved commentary
and historical tidbits with the motivation and new rules, making it
difficult to quickly identify the exact rule changes.

The updated format:
- Numbers each rule for easier reference
- Adds explicit "Rule Specification" sections
- Uses structured lists with MUST statements following RFC/IETF
  conventions
- Provides a clear problem statement before each solution
- Separates explanatory text from the actual rules

These changes make it much easier for implementers to understand what
changes are required without having to parse through multiple paragraphs
of text.
2025-03-06 15:11:34 -08:00
Olaoluwa Osuntokun
fcd5d7224e
BIP-0094: add default p2p port for testnet4 2025-03-06 14:47:20 -08:00
Skylar Ray
091824b3bb
Update bip-0379.md 2025-02-28 20:52:42 +02:00
Skylar Ray
6312ae3e24
Update bip-0379.md 2025-02-28 17:33:21 +02:00
Ocenka
6cbe26685a
fix gentestvectors.go 2025-02-28 15:27:47 +00:00
Andrew Toth
24b4354e64
BIP374: Add message to rand computation (#1758)
* BIP374: Add message to rand computation

* BIP374: Update reference and test vectors

* Add changelog

* Format changelog according to BIP3

* Add creation date

Co-authored-by: Jon Atack <jon@atack.com>

* Grammar fix

Co-authored-by: Jon Atack <jon@atack.com>

* update changelog

---------

Co-authored-by: Jon Atack <jon@atack.com>
2025-02-27 08:37:46 -08:00
Mark "Murch" Erhardt
cc81fde273
Merge pull request #1768 from jonatack/2025-02-bip159
BIP159 updates
2025-02-26 09:57:23 -05:00
Jon Atack
bab21271d7
Merge pull request #1776 from craigraw/wallet-labels-edits
BIP329: PR 1750 follow-up edits
2025-02-26 05:52:45 -08:00
Craig Raw
cd1a279877 add address heights clarification to align with transaction height specification 2025-02-26 11:24:27 +02:00
Craig Raw
5262b495af add minor previously approved edits 2025-02-26 10:42:34 +02:00
Jon Atack
d13c7240de
Merge pull request #1772 from costcould/master
BIP75: fix BIP70 extensions url and clarify text
2025-02-25 20:19:47 -08:00
costcould
4d6fdda871 BIP0075: fix 404 status URL
Signed-off-by: costcould <fliter@myyahoo.com>
2025-02-26 11:53:18 +08:00
Murch
d44f70e77a BIP159 Risks section: clarifications and fixups 2025-02-25 17:46:43 -05:00
Mark "Murch" Erhardt
6d2f0d64fc
Merge pull request #1774 from fjahr/bip94-status
BIP 94: Move status to Final
2025-02-25 16:49:41 -05:00
Fabian Jahr
d2cfbae4c1
BIP 94: Move to Final 2025-02-25 16:47:01 -05:00
doc-hex
c8e208fb6c
BIP329: add optional data fields, fix a JSON type (#1750)
* Correct type error in sample JSON

* first pass: moar data

* more fiat and edits

* more edits

* add per-txn value

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* Update bip-0329.mediawiki

Co-authored-by: Jon Atack <jon@atack.com>

* edit

* include @craigraw feedback

* typo fix

* add comment

* further edits

* broaden uses for address.heights

---------

Co-authored-by: Jon Atack <jon@atack.com>
2025-02-25 12:26:27 -08:00
Jon Atack
c84af0bf29
Merge pull request #1771 from murchandamus/2025-02-bip-3-follow-ups
BIP3: Address follow-ups from #1712
2025-02-25 11:35:44 -08:00
Murch
1ceb362897
BIP3: Address follow-ups from #1712 2025-02-25 14:24:34 -05:00
Jon Atack
22f7f0477c BIP159: unwillingly -> unwittingly
Not the same meaning, so not a purely editorial fixup, but I think "unwittingly"
expresses the intended meaning.
2025-02-22 09:57:27 -06:00
Jon Atack
5b85dbe120 BIP159: editorial fixups 2025-02-22 09:57:27 -06:00
Jon Atack
8118a14dc8 BIP159: clarify pruned means not signaling serving complete block chain
e.g. that NODE_NETWORK is not set

See reference implementation

https://github.com/bitcoin/bitcoin/pull/10387

and this comment in that pull

https://github.com/bitcoin/bitcoin/pull/10387#discussion_r156861038
2025-02-22 09:57:20 -06:00
Jon Atack
3f86dc4ea6 BIP159: emphasize minimum number of blocks 2025-02-22 09:18:31 -06:00
Jon Atack
7916231ff6
Merge pull request #1712 from murchandamus/2024-12-update-bip-process
BIP3: Updated BIP Process
2025-02-20 15:21:22 -08:00
Murch
d5c189f328
BIP3: Update BIP Process 2025-02-20 17:18:08 -05:00
Jon Atack
1096b5fcbc
Merge pull request #1769 from achow101/373-test-fix
373: Correct test data mismatches
2025-02-17 08:42:07 -08:00
Ava Chow
529a0458d8 373: Correct test data mismatches
Corrects the 2 mismatches in the test vectors pointed out in https://github.com/bitcoin/bips/pull/1764#issuecomment-2661667939
2025-02-16 18:20:48 -08:00
Mark "Murch" Erhardt
2e71a7e758
Merge pull request #1762 from achow101/328-tests
328: test vectors, reference implementation, update to Proposed
2025-02-14 09:28:51 -05:00
Ava Chow
151ec96c83
328: Draft -> Proposed 2025-02-14 09:26:11 -05:00
Mark "Murch" Erhardt
ee78520bfe
Merge pull request #1764 from achow101/373-tests
373: test vectors, reference implementation, update to Proposed
2025-02-14 09:24:21 -05:00
Ava Chow
3adf43df82 373: Draft -> Proposed 2025-02-13 12:52:19 -08:00
Ava Chow
cf948d47a0 373: Correct Created date 2025-02-13 12:50:40 -08:00
Jon Atack
ce13af21b5
Merge pull request #1767 from murchandamus/390-created-date
390: Fix created date
2025-02-13 12:31:02 -08:00
Murch
cde668d903
390: Fix created date 2025-02-13 15:26:29 -05:00
Mark "Murch" Erhardt
62ba831736
Merge pull request #1763 from achow101/390-ref-impl
390: Add reference implementation
2025-02-13 15:19:27 -05:00
Mark "Murch" Erhardt
6651d5c82f
Merge pull request #1766 from jonatack/2025-02-implementors-to-implementers
spelling: globally change "implementor" to "implementer"
2025-02-13 15:15:23 -05:00
Jon Atack
0203ede3b4
Merge pull request #1765 from 0xBEEFCAF3/patch-2
BIP119: Fix `OP_EQUALVERIFY` typo
2025-02-13 10:20:41 -08:00
Jon Atack
468e9759ba spelling: globally change "implementor" to "implementer"
Although the variant "implementor" predominated for much of the late 20th
century, today "implementer" is considered standard, and the former spelling
triggers the typos spelling checker.
2025-02-13 11:56:17 -06:00
Armin Sabouri
f5ff1d22b2
Fix typo in bip-0119 2025-02-13 11:00:13 -05:00
Ava Chow
3827648acc 328: Correct Created date
Date that the BIP number was assigned is 2024-06-04.
2025-02-12 09:59:59 -08:00
Ava Chow
4e335af8bc 373: Add reference implementation 2025-02-11 16:43:48 -08:00
Ava Chow
88f40411b1 373: Add test vectors 2025-02-11 16:43:48 -08:00
Ava Chow
574589f2a6 390: Add reference implementation 2025-02-11 12:43:40 -08:00
Ava Chow
7ab43ce11f 328: Add reference implementation 2025-02-11 12:41:17 -08:00
Ava Chow
081aa9a22e 328: Add test vectors 2025-02-11 12:37:48 -08:00
Jon Atack
3c7b0d6498
Merge pull request #1759 from murchandamus/render-email-in-.md
Render author email addresses in markdown BIPs
2025-02-10 12:22:31 -08:00
Anthony Towns
726df6f4d5 Use code block instead of pre for markdown 2025-02-08 20:06:23 +10:00
Jon Atack
ea7aae8d1f
Merge pull request #1754 from nymius/fix/typo-in-PSBT_OUT_SP_V0_LABEL-in-BIP-375-and-BIP-174 2025-02-06 10:20:20 -08:00
Mark "Murch" Erhardt
b9f9a8d6e8
Merge pull request #1680 from jonatack/2024-10-BIP39-license-and-copyright-section
BIP39: add license and copyright section
2025-02-04 13:10:53 -05:00
Jon Atack
1ddcfcea7a
Merge pull request #1751 from stratospher/2025_01_DLEQ_G 2025-02-01 10:34:42 -06:00
nymius
a9729b28d4 fix(BIP174,BIP375): typo in PSBT_OUT_SP_V0_LABEL
Assuming a by one increment in the keytype of the silent payments output
fields, the following numeral to 0x09 in the hexadecimal system is 0x0a,
not 0x10.
2025-01-31 12:24:18 -03:00
Jon Atack
5333e5e951
Merge pull request #1752 from brawncode/patch-1
BIP388: Fix incorrect use of return for raising exception
2025-01-29 13:49:52 -06:00
stratospher
5f42eb64d4 BIP374: add test vector for optional message
- added 1 more successful test vectors.
  now there are 8 test vectors[test vectors 0..7].
- test vector 5 has optional message
- test vectors 5, 6, 7 have G=GENERATOR
2025-01-28 06:40:58 +05:30
stratospher
41e0f34f76 BIP374: add test vectors for secp256k1 generator point
- added 2 more successful test vectors.
  now there are 7 test vectors[test vectors 0..6].
- test vectors 5, 6 have G=GENERATOR
2025-01-27 14:20:45 +05:30
Brawn
607cac148e
fix: Fix incorrect use of return for raising exceptions Update wallet_policies.py 2025-01-25 22:49:57 +03:00
Jon Atack
58ffd93812
Merge pull request #1605 from DanGould/bip78-mixed-inputs-ok
BIP78: Allow mixed inputs Redux
2025-01-14 08:14:42 -07:00
Jon Atack
f1ad9188b4
Merge branch 'master' into bip78-mixed-inputs-ok 2025-01-14 08:13:20 -07:00
Jon Atack
2f862f75d1
Merge pull request #1396 from DanGould/patch-1
Fix BIP 78 & BIP 174 Conflict: Keep input utxo data through input finalization
2025-01-14 07:52:16 -07:00
Jon Atack
8c494fc9b8
Merge branch 'master' into patch-1 2025-01-14 07:51:07 -07:00
Jon Atack
a0677935bb
Merge pull request #1687 from andrewtoth/silent-payments-psbt
BIP375: Sending Silent Payments in PSBTs
2025-01-13 13:51:25 -07:00
Mark "Murch" Erhardt
1f41c172bf
Merge pull request #1745 from shesek/patch-2
BIP345: fix OP_SUCCESS188 hex value
2025-01-13 14:52:28 -05:00
Andrew Toth
eb10cdb4ce
Update fields in bip174 2025-01-13 12:20:04 -05:00
Andrew Toth
144c4a3a15
Update to BIP375 2025-01-13 10:33:52 -05:00
Andrew Toth
4a7a7cf746
Split up shares and proofs into global or per input fields 2025-01-13 10:29:22 -05:00
Andrew Toth
651ffdded8
Add ref for why sighash_all is required 2025-01-13 10:29:22 -05:00
Andrew Toth
9952599f32
Add newline 2025-01-13 10:29:22 -05:00
Andrew Toth
d29e2f81af
Clarify output script and sp info mutual exclusion and unique id 2025-01-13 10:29:22 -05:00
Andrew Toth
c12ea5ac58
Move updater to before signer 2025-01-13 10:29:22 -05:00
Andrew Toth
0d5e14ce19
Clarify motivation 2025-01-13 10:29:22 -05:00
Andrew Toth
f746ae700f
Add post history and BIP dependencies 2025-01-13 10:29:22 -05:00
Andrew Toth
8e90f02dc5
Update size of ECDH share and unify spacing 2025-01-13 10:29:21 -05:00
Andrew Toth
eb115afa7f
Update bip-PSBT-SP.mediawiki
Co-authored-by: Yuval Kogman <nothingmuch@woobling.org>
2025-01-13 10:29:21 -05:00
Andrew Toth
d02eed4337
Bip Draft: Sending Silent Payments in PSBTs 2025-01-13 10:29:21 -05:00
Nadav Ivgi
c532b53ca2
Fix typo in BIP 345
`OP_SUCCESS188` is `0xbc`, not `0xbb`.
2025-01-11 06:12:14 +02:00
Jon Atack
6a6ef3585f
Merge pull request #1741 from jonatack/2025-01-BIP341-explain-64-byte-signature-format
BIP341: Explain the 64-byte signature format
2025-01-07 06:52:20 -08:00
David Bakin
5767f44499 BIP-341: Explain the 64-byte signature format
Co-authored-by: Pieter Wuille <pieter@wuille.net>
Co-authored-by: Anthony Towns <aj@erisian.com.au>
2025-01-06 16:08:33 -07:00
Jon Atack
cc67871886
Merge pull request #1740 from jonatack/2025-01-merge-misc-fixups
BIP372, BIP381: editorial fixups
2025-01-06 08:47:17 -08:00
Jon Atack
e36714eefa BIP372: editorial grammar fixups 2025-01-06 09:34:05 -07:00
Huberto
450cdbbdaf BIP372, BIP381: trivial spelling fixups 2025-01-06 09:33:47 -07:00
Jon Atack
708162951c
Merge pull request #1726 from epysqyli/patch-1
BIP158: fix btcutil gcs broken link.
2025-01-03 20:58:18 -08:00
Jon Atack
b15a0a1aa9
Merge pull request #1736 from jonatack/2024-12-bip374-make-python-files-executable
BIP374: update reference.py and secp256k1.py to be executable
2025-01-01 16:04:57 -08:00
Jon Atack
4827bdfe60
Merge pull request #1735 from theStack/bip374-add_generated_test_vectors
BIP-374: add generated test vector .csv files
2024-12-31 08:28:35 -08:00
Sebastian Falbesoner
a00064fcfa BIP-374: add generated test vector .csv files 2024-12-30 17:19:55 +01:00
Jon Atack
cce668de3c bip374: update secp256k1.py to be executable 2024-12-28 18:20:56 -07:00
Jon Atack
a261439d92 bip374: update reference.py to be executable 2024-12-28 18:20:33 -07:00
Jon Atack
6c807b7502
Merge pull request #1734 from guggero/bip-0374-test-vector-fix
bip-0374: fix challenge generation, use correct generator point
2024-12-28 13:17:58 -08:00
Oliver Gugger
e141b9501d
bip-0374: remove default value for G in dleq_challenge
To avoid the mistake fixed in the previous commit, we remove the default
value from the G parameter of dleq_challenge.
2024-12-28 21:42:07 +01:00
Oliver Gugger
8bc42a2673
bip-0374: fix challenge generation, use correct G
Both generating and verifying a proof allows for specifying a custom
generator point G. But that custom generator point was not passed into
the dleq_challenge function, resulting in the default (secp256k1)
generator point to be used. This lead to the test vectors being
incorrect.
2024-12-28 15:58:08 +01:00
Mark "Murch" Erhardt
27e1394895
Merge pull request #1733 from andrewtoth/andrew/fix-formatting
BIP374: Fix link and formatting in reference section
2024-12-27 13:14:51 -05:00
Andrew Toth
81668ec98b
BIP374: Fix link and formatting in reference section 2024-12-27 13:05:52 -05:00
Mark "Murch" Erhardt
75b12ac591
Merge pull request #1689 from andrewtoth/dleq
BIP374: Discrete Log Equality Proofs (DLEQ)
2024-12-27 10:29:46 -05:00
Andrew Toth
248540e2ac
fix typo 2024-12-27 10:26:35 -05:00
Mark "Murch" Erhardt
b509e6c85f
Merge pull request #1731 from JeremyRubin/patch-12
[BIP-0349] Add Re-Keying explanation to OP_INTERNALKEY
2024-12-27 10:06:03 -05:00
Andrew Toth
cb3afee850
Move test vectors to bip-0374 directory, add tests for G 2024-12-26 14:17:52 -05:00
Andrew Toth
1842120907
Clarify restraints on given points 2024-12-26 14:16:57 -05:00
Andrew Toth
9d6dc6b681
Update README table, post-history, and comments-uri 2024-12-26 12:10:52 -05:00
Andrew Toth
1350bc423e
BIP374 2024-12-26 12:06:44 -05:00
Andrew Toth
b533b92ed3
Update bip-DLEQ.mediawiki
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-12-26 11:52:51 -05:00
Andrew Toth
5799659da0
Update bip-DLEQ.mediawiki
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-12-26 11:52:39 -05:00
Mark "Murch" Erhardt
0b37449aa0
Merge pull request #1730 from Gudnessuche/patch-6
Update bip-0370.mediawiki
2024-12-26 11:05:31 -05:00
Mark "Murch" Erhardt
665712c727
Merge pull request #1729 from theStack/fix-bip0340-test-vector-gen_lift_x
BIP-340: fix `lift_x` calls in test vector generation script
2024-12-23 16:09:41 -05:00
Mark "Murch" Erhardt
a0d4fb16f1
Merge pull request #1728 from JeremyRubin/patch-11
[BIP-0349] OP_INTERNALKEY add credit section
2024-12-23 16:05:38 -05:00
Andrew Toth
a0d8aad1df
Fix typo 2024-12-21 16:18:24 -05:00
Andrew Toth
0b590d0d5d
Add footnote recommending using fresh randomness for each proof 2024-12-21 16:17:11 -05:00
Andrew Toth
90e7027f19
Remove changelog 2024-12-21 16:11:46 -05:00
Andrew Toth
fd60d8eded
Add description of proof 2024-12-21 16:11:12 -05:00
Jeremy Rubin
337f559150
[BIP-0349] Add Re-Keying explanation to OP_INTERNALKEY 2024-12-21 14:43:40 -05:00
Andrew Toth
f5d1c12aa9
Add acknowledgements 2024-12-21 13:16:48 -05:00
Andrew Toth
687198d72b
Fail if any point is infinity when verifying 2024-12-21 12:52:54 -05:00
Andrew Toth
1f875a3706
Add note about generating and running test vectors 2024-12-21 12:52:28 -05:00
Jeremy Rubin
d3d34c04f3
[BIP-0349] wrap discussion link
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-12-21 12:39:05 -05:00
Jesus Christ
bc300dddd9
Update bip-0370.mediawiki
Minor grammar and punctuation errors
2024-12-21 14:46:35 +00:00
Sebastian Falbesoner
6b16952422 Add test vectors for DLEQ proof generation/verification
Squashed from the following commits:
- Add skeleton for generating DLEQ proof test vectors
- Add run_test_vectors.py counterpart for generated DLEQ proofs
- Add DLEQ test vectors for proof verification
2024-12-21 01:04:44 +01:00
Sebastian Falbesoner
dab5571c37 bugfix: respect message m in DLEQ proof generation/verification 2024-12-21 01:04:00 +01:00
Sebastian Falbesoner
7d921e3314 BIP-340: fix lift_x calls in test vector generation script
The `lift_x` function in the BIP and the reference implementation
expect an integer to be passed rather than a byte array.

Can be tested with:
```
$ python3 test-vectors.py > expected.csv
$ diff test-vectors.csv expected.csv
```
2024-12-20 15:21:41 +01:00
Jeremy Rubin
b02d2db586
[BIP0-0349] OP_INTERNALKEY add credit section 2024-12-19 23:52:11 -05:00
Mark "Murch" Erhardt
2caa8e27b8
Merge pull request #1697 from bigspider/bip388-musig
388: Add support for `musig` in descriptor templates
2024-12-19 10:34:00 -05:00
Salvatore Ingala
2faf09d395
Move changelog to standalone section 2024-12-19 12:33:11 +01:00
Salvatore Ingala
c2026e1de6
Apply suggestions from code review
Co-authored-by: Jon Atack <jon@atack.com>
2024-12-19 12:33:11 +01:00
Salvatore Ingala
a4d9938ed2
Explicitly forbid repeated key indexes in musig() 2024-12-19 12:32:19 +01:00
Salvatore Ingala
e103ddeb1e
Consistency of multisig/multisignature/threshold wording 2024-12-19 12:26:37 +01:00
Salvatore Ingala
662f4c73d7
Add support for musig key placeholders 2024-12-19 12:25:59 +01:00
epysqyli
9815147ab6
BIP158: fix btcutil gcs broken link.
https://github.com/btcsuite/btcutil/blob/master/gcs leads to a broken link. I'm assuming the correct replacement is at https://github.com/btcsuite/btcd/tree/master/btcutil/gcs since `btcutil` is a sub-package in `btcd`, as stated in https://github.com/btcsuite/btcutil/tree/master?tab=readme-ov-file
2024-12-19 00:11:42 +01:00
Jon Atack
8e59f7414b
Merge pull request #1724 from savvar9991/fix-typo
BIP39: replace incorrect word in Italian wordlist special considerations
2024-12-18 07:25:07 -08:00
savvasmoke
e2cf352da4
Update bip-0039-wordlists.md 2024-12-18 21:19:47 +11:00
Jon Atack
671c4628e5
Merge pull request #1717 from kdmukai/patch-3
[BIP-373] Slight rewrite of evenness byte footnote for clarity
2024-12-17 13:07:42 -08:00
kdmukai
45e626feab Slight rewrite of evenness byte explanation for clarity 2024-12-17 08:01:26 -06:00
Maks
4c7d1292dd
Fix typos in BIP-0370 and BIP-0373 (#1718)
* Update bip-0370.mediawiki

* Update bip-0373.mediawiki
2024-12-17 05:18:20 -08:00
youyyytrok
f88f1e4392
Fix typos in BIPs 87/88/98 (#1716)
* typo bip-0087.mediawiki

* typos bip-0088.mediawiki

* typo bip-0098.mediawiki
2024-12-16 12:24:50 -08:00
Danbo
45fbec92cd
BIPs 348 and 379: spelling fixups (#1715)
* Update bip-0348.md

* Update bip-0379.md
2024-12-16 12:23:08 -08:00
Jon Atack
7150ef5f6d
Merge pull request #1714 from Gudnessuche/patch-5
BIP125: Update description of BIPs 68 and 112
2024-12-16 12:18:06 -08:00
Jesus Christ
192f2aca2f
Update for BIP 68 & 112
Given that both BIPs are now final, calling them drafts, seem very stale.
2024-12-14 23:05:00 +00:00
Jon Atack
6521dfdd2c
BIP348: trivial text correction (#1713)
BIP348: trivial text correction
2024-12-13 13:56:25 -08:00
Jesus Christ
7420c04e84
BIP157 grammar fixup: add missing word (#1711) 2024-12-10 19:04:22 -08:00
kdmukai
f799ea1fa0
Trivial text correction 2024-12-10 20:37:01 -06:00
Andrew Toth
b838696c97
Remove cbytes wrapper from m' 2024-12-10 19:20:50 -05:00
Andrew Toth
e4f1d7bb8e
Remove cbytes wrapper from m'
Co-authored-by: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
2024-12-10 19:18:16 -05:00
Andrew Toth
597004acef
Lowercase secp
Co-authored-by: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
2024-12-10 19:17:46 -05:00
Andrew Toth
b5d47dfef9
add theStack as co-author 2024-12-09 16:26:10 -05:00
Andrew Toth
ed98dc7b02
Add some more commentary 2024-12-09 14:00:22 -05:00
Andrew Toth
cc7bb12b24
Add optional message to DLEQ 2024-12-09 13:19:57 -05:00
Sebastian Falbesoner
0c7e54d780
BIP-DLEQ: add reference implementation for secp256k1 2024-12-09 11:40:40 -05:00
Jon Atack
45f2934c0c
Merge pull request #1705 from theStack/bip373_improve_pubkey_clarity
BIP-373: denote different public key types/purposes consistently
2024-12-08 19:19:36 -08:00
Mark "Murch" Erhardt
eb3bf03542
Merge pull request #1709 from jonatack/2024-12-bip125-status
BIP125: update status to Final
2024-12-06 13:36:10 -05:00
Mark "Murch" Erhardt
c7abd91cc9
Merge pull request #1535 from reardencode/csfs
BIP 348: OP_CHECKSIGFROMSTACK
2024-12-06 13:29:19 -05:00
Sebastian Falbesoner
50e820836d BIP-373: denote different public key types consistently
Improve the clarity of the BIP w.r.t. pubkeys in the following ways:
- be specific about the purpose of pubkey types in PSBT fields
  ("plain pubkey" alone doesn't say a lot, especially if it's used
   repeatedly within a field)
- replace all uses of "plain pubkey" by "compressed pubkey"
  (the only category that should matter is whether the pubkey type
   is "x-only" or "plain")
- use consistent word order, e.g. prefer
  "compressed aggregate public key" over "aggregate compressed public key"
2024-12-06 00:44:38 +01:00
Jon Atack
749c606281 BIP125: update status to Final 2024-12-05 14:23:32 -06:00
Jon Atack
410a7bc007
BIP340: minor grammar edits (#1706)
BIP340: minor grammar edits
2024-12-04 10:23:33 -08:00
Anurag Lint
81231dad91
Fix link in BIP-84 (#1708)
Fix link to considerations section in BIP-84
2024-12-04 09:57:43 -08:00
Jesus Christ
868c34527f
Update on Alternative Signing
In order for this section to fully be grasped by readers, minor grammatical errors need to be fixed, especially when explaining the "Nonce exfiltration protection"
2024-11-30 16:00:20 +00:00
Brandon Black
d2932bd00d
Add BIP 0348 - CHECKSGIFROMSTACK 2024-11-26 11:23:59 -08:00
Mark "Murch" Erhardt
532c4c10f2
BIP 119: Fix Typo
an template address ↦ a template address
2024-11-25 17:18:04 -05:00
Mark "Murch" Erhardt
66fceff5bb
Merge pull request #1534 from reardencode/internalkey
Add BIP 349: OP_INTERNALKEY
2024-11-25 10:48:08 -05:00
Jesus Christ
7460ad5508
Updated grammatical error relating to Forwarding Addresses
Second sentence in the second paragraph of the Forwarding Addresses section, had a slight grammatical error that needed correcting. 

Helpful for the flurry of interested people keen on reviewing the BIP (i.e. Institutions, non-English nation-states)
2024-11-24 14:31:17 +00:00
Jon Atack
f269890255
Merge pull request #1701 from ajtowns/202411-bip345-coauthor 2024-11-22 16:11:28 -08:00
Murch
217ae0dfa8
BIP349: Set Created header to number assignment 2024-11-14 16:36:54 -05:00
Murch
669d3b3570
BIP349: Fix preamble for CI issues 2024-11-14 16:36:45 -05:00
moonsettler
329b0d3db5
BIP-349 2024-11-14 16:30:28 -05:00
moonsettler
b35383b68f
Fixes and clarifications to address PR comments 2024-11-14 16:30:27 -05:00
Brandon Black
75351f2587
Add bip-internalkey 2024-11-14 16:30:24 -05:00
Jon Atack
16a23b777b
Merge pull request #1691 from akarve/bip85-details
BIP-85: formatting and changelog updates, and add word cases for application 39'
2024-11-13 18:24:11 -08:00
Anthony Towns
65b312fe4a Remove ajtowns from bip-345 coauthor. 2024-11-14 10:21:30 +10:00
Aneesh Karve
b398219e9c BIP-85: Move new reference to be near HMAC code 2024-11-09 14:30:02 -07:00
Aneesh Karve
88f4fc0ece BIP-85: Reorder sections to be more standard, convert HMAC discussion to footnote 2024-11-09 14:24:50 -07:00
Mark "Murch" Erhardt
c58a428fb6
Merge pull request #1677 from scgbckbone/bip39_final
BIP39: update status from Proposed to Final
2024-11-08 12:22:47 -05:00
Jon Atack
bffde65da1
Merge pull request #1695 from achow101/373-clarify-plain-pub
BIP373: Clarify where keys in MuSig fields may appear in the Taproot output
2024-11-08 09:02:58 -08:00
Jon Atack
711802c064
Merge pull request #1696 from bigspider/bip390-nit
BIP390: Clarify that musig cannot be used in top-level pk() or pkh()
2024-11-08 08:57:31 -08:00
Ava Chow
0ff32bd4c2 373: Clarify where keys in MuSig fields may appear in the Taproot output
- The aggregate pubkey in `PSBT_{IN,OUT}_MUSIG2_PARTICIPANT_PUBKEYS` does not have to
  appear anywhere in the Taproot output.
- The plain pubkeys in `PSBT_IN_MUSIG2_PUB_NONCE` and
  `PSBT_IN_MUSIG2_PARTIAL_SIG` must be either the output pubkey, or
  appears in a script, and not the internal key.
2024-11-08 11:43:15 -05:00
scgbckbone
829afccd1a change BIP39 status to Final 2024-11-08 11:32:40 +01:00
Salvatore Ingala
2e8f6ba5e7
Clarify that musig cannot be used in top-level pk() or pkh() 2024-11-08 10:11:47 +00:00
Jon Atack
a12ce760c6
Merge pull request #1694 from pad01g/bip-388-test-vectors-valid-policies
Fix wrong test vector in BIP-388. Sometimes /<0;1>/* is missing. Sometimes it is incorrectly written as <0,1>.
2024-11-07 11:26:30 -08:00
pad01g
dcb140a865 fix wrong test vector. sometimes /<0;1>/* is missing. sometimes incorrectly written as <0,1>. 2024-11-05 09:20:47 +00:00
Andrew Toth
4f5d87adc8
Bip Draft: DLEQ 2024-11-02 23:23:57 -04:00
Jon Atack
40e91fdb94
Merge pull request #1692 from jonatack/2024-10-update-bip125-status
BIP125: update status of Opt-in Full RBF Signaling to Obsolete
2024-10-30 17:51:52 -07:00
Jon Atack
3d86d94fa4 BIP125: update status from Proposed to Obsolete 2024-10-29 11:41:33 -06:00
Aneesh Karve
9133ab2451 BIP-85: Add 15 and 21 word entries to application 39' table 2024-10-25 12:05:56 -07:00
Aneesh Karve
e0cc4f0e3d BIP-85: Rename to 'changelog' and move above Reference implementation(s) 2024-10-25 12:03:06 -07:00
Jon Atack
17c04f9fa1
Merge pull request #1676 from scgbckbone/bip85_final
BIP85: update status to Final
2024-10-25 08:13:16 -07:00
Aneesh Karve
8eac367dae
BIP-85: Add co-author, language code & dice app, TPRV guidance, warn on BIP-32 divergence, grammar & clarity (#1679)
* BIP-85: Add language code, add dice app, warn on BIP-32 divergence, grammar clarity

* BIP-85: Add definite article

Co-authored-by: Jon Atack <jon@atack.com>

* BIP-85: PR suggestions on grammar, clarity

* BIP-85: Add change log

* BIP-85: Proper <references />, semver reference implementations, date on changelog, clarify warning language

* BIP-85: PR suggestion on range formatting

Co-authored-by: Jon Atack <jon@atack.com>

* BIP-85: wordsmith BIP-32 warning

Co-authored-by: Jon Atack <jon@atack.com>

* BIP-85: PR feedback on format, language, order of text

* BIP-85: PR grammar improvements

* BIP-85: Add dice app code to changelog

* BIP-85: Grammar and clarity from PR review

Co-authored-by: Jon Atack <jon@atack.com>

* BIP-85: Improve changelog and bump semvers accordingly; add alphanum password example to dice

* BIP-85: Rectify changelog dates and contents

* BIP-85: Correct 1.3.0 semver in changelog

* BIP-85: Remove fancy warning syntax b/c GH doesn't render it, wordsmith BIP32 warning

* BIP-85: Add and correct semvers in Reference Implementation section

---------

Co-authored-by: Jon Atack <jon@atack.com>
2024-10-25 08:11:00 -07:00
Jon Atack
52894e1aa7
Merge pull request #1681 from jonatack/2024-10-BIP2-update-URLs-to-https
BIP2: replace legacy http links with https
2024-10-22 14:51:39 -07:00
Jon Atack
385ac876d3
Merge pull request #1688 from jlopp/bip99
Fix BIP-99 Formatting
2024-10-20 08:45:33 -07:00
Jameson Lopp
b6ea55291f
fix formatting 2024-10-20 09:00:08 -04:00
Jon Atack
5284427971
Merge pull request #1683 from akarve/bip85-base64-vec-alone
BIP-85: Correct bad test vector for Base64
2024-10-15 09:45:25 -07:00
Jon Atack
0495fad99a
Merge pull request #1686 from psztorc/patch-1
BIP300: fix up markup in comment header
2024-10-15 07:58:43 -07:00
Paul Sztorc
b7bd93fed7
heading typo
this section is (rightly) commented out, but it still (wrongly) shows up at the table of contents in the beginning, this should fix it
2024-10-15 01:09:16 -04:00
Jon Atack
71aafb2a7f
Merge pull request #1685 from bskrksyp9/patch-1
BIP158: fix up code comment typo in gentestvectors.go
2024-10-14 13:01:01 -07:00
Bhaskar Kashyap
c4264ae980
fix typo
Corrected wording in comments
2024-10-14 22:35:43 +05:30
Aneesh Karve
2e98c7115c BIP-85: Correct bad test vector for Base64 2024-10-13 17:02:11 -07:00
Jon Atack
caf8f78f75
Merge pull request #1682 from jonatack/2024-10-update-BIP327-status 2024-10-12 13:15:11 -07:00
Jon Atack
2eb22b8ec6 BIP327: update status 2024-10-11 11:19:56 -06:00
Jon Atack
ca280b9762 BIP2: replace legacy http links with https 2024-10-08 11:03:37 -06:00
Jon Atack
541b6c4db4 BIP39: add license and copyright section
These are required per BIP-2, and they avoid user confusion as seen in

https://github.com/bitcoin/bips/pull/1395#issuecomment-2393915807
2024-10-08 10:54:43 -06:00
Jon Atack
83a1afd985
Merge pull request #1678 from JeremyRubin/patch-9
BIP119: remove James O'Beirne as co-author
2024-10-07 20:46:24 -06:00
Jeremy Rubin
80f8011e9c
Remove j amesob from README.mediawiki from bip-0119 2024-10-06 14:55:31 -04:00
scgbckbone
b0125501f8 change BIP85 status to Final 2024-10-05 16:07:40 +02:00
Jeremy Rubin
a34cb4f769
Remove j amesob from bip-0119.mediawiki coauthor. 2024-10-05 10:01:53 -04:00
Jon Atack
9f588247d8
Merge pull request #1674 from bitcoin/revert-1600-master
Revert "BIP85: Clarify spec, correct test vectors, add Portuguese language code, add dice application"
2024-10-04 16:43:54 -07:00
Jon Atack
3f4a0a17bc
Revert "BIP85: Update/clarify spec, add change log, Portuguese language code,…"
This reverts commit a1be309f91.
2024-10-04 16:18:52 -07:00
Jon Atack
758dfc9f55
Merge pull request #1672 from TheBlueMatt/2024-10-payment-expiry
Explicitly mention care around payment instruction expiry in 353
2024-10-02 11:09:20 -07:00
Matt Corallo
e1aab46c63 Explicitly mention care around payment instruction expiry in 353
If someone puts a lightning BOLT 12 offer in a BIP 353 entry with
the offer expiring before the DNS entry's TTL (plus now), they may
get stuck being unpayable, so its worth explicitly mentioning that
people should take care here.
2024-10-02 16:46:57 +00:00
Aneesh Karve
a1be309f91
BIP85: Update/clarify spec, add change log, Portuguese language code, dice application (#1600)
* BIP-85:

    * Add new maintainer (author unreachable)
    * Swap chain code and private key bytes in application 32' for consistentcy with BIP-32 (major change)
    * Correct derived entropy for application 128169' test vector (major change)
    * Clarify big endian serialization
    * Add the Portuguese language (9') to application 39'
    * Add dice application 89101'
    * Clarify Testnet support for XPRV application 32'
    * Minor grammar, format, clarity improvements
2024-09-25 08:00:54 -07:00
Paul Sztorc
34db0e99fa
Link to latest code -- also shorter/better explanations (#1666)
* Update to CUSF activation client +shorter +clearer

* remove superfluous images

* link to CUSF client, shorter and clearer BIP text
2024-09-23 16:02:34 -07:00
Jon Atack
22660ad307
Merge pull request #1665 from EthanHeilman/patch-1
Uses consistent source for "CAT and Schnorr Tricks"
2024-09-08 17:43:15 -07:00
Ethan Heilman
3350d941a8
Uses consistent source for "CAT and Schnorr Tricks"
For "CAT and Schnorr Tricks I" we used https://medium.com/blockstream/cat-and-schnorr-tricks-i-faf1b59bd298

but for "CAT and Schnorr Tricks II"
https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-ii.html

This commit changes this so that the original source wpsoftware is used for both links.
2024-09-08 14:34:30 -04:00
Mark "Murch" Erhardt
69d8eeb169
Merge pull request #1657 from TheBlueMatt/2024-07-psbt-dns
Add a PSBT per-output field for BIP 353 DNSSEC Proofs
2024-08-29 16:15:19 -04:00
Matt Corallo
b0d5a07943 Add a PSBT per-output field for BIP 353 DNSSEC Proofs
When using BIP 353 for on-chain addresses (incl silent payments),
it is useful to be able to include DNSSEC proof information in
outputs of a PSBT, which we enable here by defining a standard
field for it.
2024-08-29 19:30:59 +00:00
Mark "Murch" Erhardt
97012a8206
Merge pull request #1644 from bigspider/bip388-updates
388 - Add more motivation, and links to miniscript BIP
2024-08-21 12:43:00 -04:00
Jon Atack
acb195f82e
Merge pull request #1660 from fjahr/bip94-rollback
Revert "Change BIP 94 timewarp delta to 7200 seconds"
2024-08-17 14:19:43 +00:00
Fabian Jahr
2c259b85fd
Revert "Change BIP 94 timewarp delta to 7200 seconds"
This reverts commit 0c2a2172f7.
2024-08-15 11:06:37 +02:00
Jon Atack
34f345335c
Merge pull request #1631 from azuchi/fix-bip386-test-vector
BIP-0386: Fix uncompressed private key test vector
2024-08-14 16:43:59 +00:00
Salvatore Ingala
1811613e07
Further improvements from PR review 2024-08-14 15:07:55 +02:00
Jon Atack
7c62ebea4c
Merge pull request #1654 from storopoli/master
Check typos in CI
2024-08-13 01:12:13 +00:00
Jose Storopoli
52fdb00b6d
ci: add typo checking
typos is a powerful source code spell checker.

Adds a CI job that runs on every PR and
push to master (but can also be run manually with
workflow_dispatch) that checks for typos.

Adds a config file .typos.toml that deals with
false positives and only checks for top-level/one-level
.mediawiki and .md files.
2024-08-12 14:31:41 -03:00
Jon Atack
a626ad6e2a
Merge pull request #1659 from azuchi/bix-bip94-typo
BIP-0094: Fix typo
2024-08-11 18:50:21 +00:00
azuchi
af9557b589 BIP-0094: fix block hex 2024-08-10 10:19:39 +09:00
Jose Storopoli
b87b21e7c1
bip-352: fix typo 2024-08-07 19:02:52 -03:00
Jose Storopoli
498668026e
bip-152: fix typo 2024-08-07 19:02:49 -03:00
Jose Storopoli
da1e3ad545
bip-119: fix typo 2024-08-07 19:02:47 -03:00
Jose Storopoli
c25032a3ff
bip-75: fix typo 2024-08-07 19:02:43 -03:00
Jose Storopoli
b6bf97ba9e
bip-46: fix typo 2024-08-07 19:02:39 -03:00
Mark "Murch" Erhardt
76550880d3
Merge pull request #1658 from fjahr/bip94-timewarp-delta
BIP94: Change timewarp delta to 7200 seconds
2024-08-07 11:31:40 -04:00
Fabian Jahr
0c2a2172f7
Change BIP 94 timewarp delta to 7200 seconds 2024-08-05 23:34:11 +02:00
Salvatore Ingala
00fbea5dcd
Nit from PR review
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-08-03 17:05:46 +02:00
Mark "Murch" Erhardt
5e87c919a7
Merge pull request #1601 from fjahr/testnet4
Add BIP94: Testnet 4
2024-08-02 14:01:32 -04:00
Fabian Jahr
a35650e14e
Add BIP 94 - Testnet 4 2024-07-31 16:43:31 -04:00
Matt Corallo
eeaf21d882 Consistently refer to them as "human-readable names", not addresses
It seems confusing to call BIP 353 names "addresses", and most of
the BIP refers to them as "names", but a few "human-readable
addresses" snuck in in a recent change, which are fixed here.
2024-07-31 13:45:09 +00:00
Salvatore Ingala
c2655e0ab9
More adjustments from PR review 2024-07-27 19:36:08 +02:00
Jon Atack
90312d2d67
Merge pull request #1655 from Crypt-iQ/bip324_aad
BIP 324: fix python aad in complete_handshake
2024-07-27 14:03:35 +00:00
Eugene Siegel
0963e43860
BIP 324: fix python aad in complete_handshake 2024-07-26 11:51:52 -04:00
Jon Atack
0f40dd7554
Merge pull request #1653 from OrfeasLitos/trailing-whitespace
Remove trailing whitespace from all BIPs
2024-07-26 15:33:53 +00:00
Orfeas Stefanos Thyfronitis Litos
f085cc2922
Make link title more specific (#1652) 2024-07-25 11:50:08 -07:00
Orfeas Stefanos Thyfronitis Litos
9a56d3544e Remove trailing whitespace from all BIPs 2024-07-25 18:35:39 +03:00
Mark "Murch" Erhardt
ad1d3bc2a7
Merge pull request #1647 from siv2r/minor-fixes
bip327: minor fixes
2024-07-23 13:26:21 -04:00
Jonas Nick
26bb1d8ea3 bip-0327: 1.0.1 -> 1.0.2
(cherry picked from commit 4f2e6e7ffbd2fdc095ab8d59827be9da18b790be)
2024-07-23 13:09:44 +05:30
Mark "Murch" Erhardt
511e670637
Merge pull request #1651 from michael1011/46-fix-pubkey
BIP46 clarify witness
2024-07-22 11:04:59 -04:00
Mark "Murch" Erhardt
3b72a7f129
Fix typos in BIP 388 and BIP 390
Fix typos
2024-07-22 09:37:07 -04:00
michael1011
f1a5c71094
BIP46 clarify witness 2024-07-21 18:32:51 +02:00
omahs
f61bdadafb
fix typo 2024-07-21 09:31:28 +02:00
omahs
bc1c18a289
fix typo 2024-07-21 09:26:16 +02:00
siv2r
0d79b5eeb5 remove P = None check as cpoint never returns None 2024-07-19 23:52:53 +05:30
siv2r
1c6ac0c4cf bip327: minor fixes
- An error test vector doesn’t specify the InvalidContributionError type
- In *DeterministicSign*, use GetXonlyPubkey instead of GetPubkey
- The key_agg_and_tweak fn doesn’t specify the return type
- In partial_sig_verify_internal, the pubkey arg should be PlainPk
- Remove unused enumerate() fn calls
- In test_sign_verify, add an additional assert statement
2024-07-19 23:52:41 +05:30
Mark "Murch" Erhardt
812907c2b0
Merge pull request #1649 from jonasschnelli/bip_159_update
159: Mark as final
2024-07-17 16:41:44 -04:00
Jonas Schnelli
dfacb8de6a
159: Mark as final 2024-07-17 22:09:22 +02:00
Mark "Murch" Erhardt
99cf00cb85
Merge pull request #1648 from jonasschnelli/bip_150_update
BIP150: Deferred

More robust and private protocols have been drafted and need to be formalized into a BIP
2024-07-17 16:08:17 -04:00
Jonas Schnelli
29312fbe91
BIP150: Deferred 2024-07-17 21:56:18 +02:00
Mark "Murch" Erhardt
cd44ec8739
Merge pull request #1646 from pinheadmz/353-cat-txt
bip353: concatenate strings in TXT record
2024-07-17 08:56:22 -04:00
Salvatore Ingala
0b3c79c257
Apply suggestions from code review
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-07-17 10:18:53 +02:00
Matthew Zipkin
8ba081f472
bip353: concatenate strings in TXT 2024-07-15 20:37:10 -04:00
Jon Atack
af8f9e470b
Merge pull request #1633 from josibake/update-bip352-appendix
BIP352: Update appendix
2024-07-12 13:29:05 +00:00
Jon Atack
ee56747677
Merge pull request #1645 from Sjors/2024/07/bip353
bip353: improve ₿-prefix instructions
2024-07-12 13:19:27 +00:00
Mark "Murch" Erhardt
891bfc4095
Merge pull request #1599 from theborakompanioni/bip-46
bip-0046: Address Scheme for Timelocked Fidelity Bonds
2024-07-12 08:15:48 -04:00
Sjors Provoost
ceb4f332a4
bip353: improve ₿-prefix instructions 2024-07-12 09:11:17 +02:00
josibake
7a8bc14b80
bip352: update appendix
Numbers from the appendix were slightly innaccurate and out of date. Update to mention non-dust UTXOs
and update the numbers to reflect current usage.

Considering the appendix is purely informational and the corrections here are minor, Ive left of
adding a changelong entry.
2024-07-12 09:05:35 +02:00
Jon Atack
bcc892c646
Merge pull request #1641 from achow101/finalize-370
370: Mark as final
2024-07-11 19:00:57 +00:00
Ava Chow
968c4ee200 370: Mark as final 2024-07-11 14:25:43 -04:00
Ava Chow
e7286a5356 370: Set reference implementation to Bitcoin Core PR. 2024-07-11 14:25:19 -04:00
Jon Atack
bee19da78a
Merge pull request #1642 from achow101/finalize-371
371: Mark as final
2024-07-11 17:41:50 +00:00
Jon Atack
db5e548c8b
Merge pull request #1640 from achow101/finalize-86
86: Mark as final
2024-07-11 17:36:37 +00:00
Salvatore Ingala
0adf7c36e1
Nit: it's not 'two' descriptors if one uses the multipath expressions per BIP-389 2024-07-11 10:33:13 +02:00
Salvatore Ingala
8c2f54d33b
Add references to the miniscript BIP-379 2024-07-11 10:31:01 +02:00
Jon Atack
dd08b3eb95
Merge pull request #1643 from achow101/finalize-descriptors
380-387: Mark basic descriptor BIPs as final
2024-07-10 23:12:02 +00:00
Ava Chow
d71428ade5 380-387: Mark basic descriptor BIPs as final 2024-07-10 19:06:05 -04:00
Ava Chow
516fae6726 86: Mark as final 2024-07-10 19:05:02 -04:00
Ava Chow
6b4a03bb5d 371: Mark as final 2024-07-10 19:04:46 -04:00
Mark "Murch" Erhardt
e766df42d3
Merge pull request #1636 from sdaftuar/patch-1
Move BIP 339 to Final
2024-07-10 15:49:10 -04:00
Suhas Daftuar
79e2d28efb Move BIP 339 to Final 2024-07-10 15:48:05 -04:00
Mark "Murch" Erhardt
96ddea3987
Merge pull request #1638 from sdaftuar/bip130-final
Move BIP 130 to Final
2024-07-10 15:44:34 -04:00
Mark "Murch" Erhardt
1dd09509df
Merge pull request #1637 from sipa/202407_bip324_final
Mark BIP324 as final
2024-07-10 15:43:03 -04:00
Mark "Murch" Erhardt
031e10f69e
Merge pull request #1639 from sdaftuar/bip338-withdrawn
Move BIP 338 to Withdrawn
2024-07-10 15:42:45 -04:00
Suhas Daftuar
56f7e70991 Move BIP 338 to Withdrawn
The PR implementing this BIP was never merged into Bitcoin Core,
in favor of an alternative approach.
2024-07-10 15:36:54 -04:00
Suhas Daftuar
729c44c4ea Move BIP 130 to Final 2024-07-10 15:19:47 -04:00
Jon Atack
0c0ae07b81
Merge pull request #1634 from achow101/389-no-dupes
389: Explicitly disallow duplicate multipath
2024-07-10 19:03:56 +00:00
Pieter Wuille
f3bd1eba67 Mark BIP324 as final 2024-07-10 14:59:46 -04:00
Salvatore Ingala
3fd971455a
Add paragraph on key reuse 2024-07-10 17:58:48 +02:00
Ava Chow
c88c3970ed 389: Explicitly disallow duplicate multipath 2024-07-09 15:15:13 -04:00
DanGould
bd01a269e5
BIP78: Doc amount parameter not required
It's an optional parameter in BIP 21 Bitcoin URIs, but it doesn't hurt
to make it explicit.

Co-authored-by: Martin Habovstiak <martin.habovstiak@gmail.com>
2024-07-08 13:57:30 -04:00
DanGould
72d8bb04b8
BIP78: Clarify output substitution
The original text is ambiguous to allowing transaction cut-through
or not. Transaction cut-through enables savings by posting multiple
transaction intents through a single 2-party payjoin and is used
in practice in payjoins today. Let's explicitly allow it in the text.

Co-authored-by: Martin Habovstiak <martin.habovstiak@gmail.com>
2024-07-08 13:57:30 -04:00
DanGould
539fd85498
BIP78: Allow mixed inputs
Disallowing mixed inputs was based on incorrect assumption that no
wallet supports mixed inputs and thus mixed inputs imply PayJoin.
However there are at least three wallets supporting mixed inputs.
(Confirmed: Bitcoin Core, LND, Coinomi) Thus it makes sense to enable
mixed inputs to avoid a payjoin-specific fingerptint. To avoid
compatibility issues a grace period is suggested.

Co-authored-by: Martin Habovstiak <martin.habovstiak@gmail.com>
2024-07-08 13:57:30 -04:00
Mark "Murch" Erhardt
0a78fc10bd
Merge pull request #1632 from douglaz/patch-1
Fix typo in bip-0065
2024-07-08 12:02:31 -04:00
theborakompanioni
4f788d69f5
docs(bip-0046): add endpoint signing example 2024-07-08 12:25:37 +02:00
theborakompanioni
b916adebae
docs(bip-0046): add cert format and clarify expiry param 2024-07-08 11:01:26 +02:00
theborakompanioni
0cdb745ee0
docs(bip-0046): apply minor wording improvement suggestions
by @AdamISZ
2024-07-08 10:48:53 +02:00
douglaz
d3ff66e984
Fix typo in bip-0065 2024-07-07 01:01:03 +00:00
azuchi
7acfe207e0 BIP-0386: Fix uncompressed private key test vector 2024-07-06 21:49:37 +09:00
Jon Atack
5a4b5ad67a
Merge pull request #1623 from satsie/satsie-bip78
BIP78: spelling and grammar updates
2024-07-04 01:14:39 +00:00
Stacie
5700a230dc BIP78: spelling and grammar updates
Co-authored-by: Dan Gould <d@ngould.dev>
Co-authored-by: Jon Atack <jon@atack.com>
2024-07-03 21:00:05 -04:00
Jon Atack
4f5a081d82
Merge pull request #1619 from real-or-random/patch-20
bip-0327: Remove obsolete paragraph
2024-07-01 18:52:43 +00:00
Jon Atack
2218f69829
BIP352: Improve input_hash wording (#1629)
BIP352: Improve `input_hash` wording
2024-06-29 15:15:35 +00:00
Sebastian Falbesoner
2a99b8f925
BIP-352: use own ripemd160 for reference implementation (#1616)
On some operating systems, Python doesn't provide the expected ripemd160
implementation anymore, so the reference implementation fails to start.
E.g. in Ubuntu 22.04:

----------------------------------------------------------------------------------------------
$ ./reference.py send_and_receive_test_vectors.json
Simple send: two inputs
Traceback (most recent call last):
  File "/usr/lib/python3.10/hashlib.py", line 160, in __hash_new
    return _hashlib.new(name, data, **kwargs)
ValueError: [digital envelope routines] unsupported

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/thestack/bips/bip-0352/./reference.py", line 228, in <module>
    pubkey = get_pubkey_from_input(vin)
  File "/home/thestack/bips/bip-0352/./reference.py", line 46, in get_pubkey_from_input
    pubkey_hash = hash160(pubkey_bytes)
  File "/home/thestack/bips/bip-0352/bitcoin_utils.py", line 130, in hash160
    return hashlib.new("ripemd160", hashlib.sha256(s).digest()).digest()
  File "/usr/lib/python3.10/hashlib.py", line 166, in __hash_new
    return __get_builtin_constructor(name)(data)
  File "/usr/lib/python3.10/hashlib.py", line 123, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type ripemd160
----------------------------------------------------------------------------------------------

Fix this by providing a manual implementation, taken from the functional test framework
of Bitcoin Core. See corresponding issue https://github.com/bitcoin/bitcoin/issues/23710 and
PR https://github.com/bitcoin/bitcoin/pull/23716
2024-06-29 07:08:49 -07:00
josibake
8ac84bd344
BIP352: improve input_hash wording
Since https://github.com/bitcoin/bips/pull/1622, it makes more sense
to define input_hash inline, vs having its own section.
2024-06-29 14:31:32 +02:00
Ava Chow
3b99594660 BIP 379: Specify Miniscript
Co-Authored-By: Antoine Poinsot <darosior@protonmail.com>
2024-06-27 11:08:49 -06:00
Mark "Murch" Erhardt
5d77440479
Merge pull request #1540 from achow101/musig2
328, 390, 373: BIPs for MuSig2 derivation, descriptors, and PSBT fields
2024-06-25 17:36:09 -04:00
Elias Rad
3d299b4eb0
BIP39: fix grammar in wordlists doc (#1626) 2024-06-25 10:26:19 -07:00
Jon Atack
62161fb705
Merge pull request #1625 from OrfeasLitos/typo
BIP143: fix typo
2024-06-25 16:28:48 +00:00
Orfeas Stefanos Thyfronitis Litos
a1590ca121 Fix typo 2024-06-25 17:24:41 +01:00
Jon Atack
e8664b28fb
Merge pull request #1620 from theStack/bip352-mention-input_pubkey_sum-infinity-case
BIP-352: handle invalid privkey / pubkey sums for sending / scanning, add changelog
2024-06-22 20:02:56 +00:00
Sebastian Falbesoner
496e4295e7 BIP-352: add change log (SemVer format)
The first paragraph is taken from BIP-327, with the sentence
about MAJOR version zero removed, as it's not relevant here
(we don't track the pre-merge history).
2024-06-22 20:30:50 +02:00
Sebastian Falbesoner
59cc43d727 BIP-352: scanning: add step to skip tx if input pubkeys sum A is point at infinity
The input data for the test vector is taken from the signet transaction
fe788cf6578d547819def43d79e6c8f0153d4885f5a343d12bd03f34507aabd6
which spends two P2WPKH inputs with negated pubkeys (x, y) and (x, -y)
from the funding transaction 3a286147b25e16ae80aff406f2673c6e565418c40f45c071245cdebc8a94174e
(see also https://github.com/bitcoin-core/secp256k1/pull/1519#issuecomment-2143167510
and the output from the script in the previous commit message).

Co-authored-by: josibake <josibake@protonmail.com>
2024-06-22 01:48:44 +02:00
Sebastian Falbesoner
47033c62dc BIP-352: sending: add step to fail if input privkeys sum a is zero
The test vector data was generated with a Python script
(see bc15ea8d0f/contrib/silentpayments/submit_input_pubkeys_infinity_tx.py),
leading to the following output:

---------------------------------------------------------------------------------------------------------
     Privkey 1: a6df6a0bb448992a301df4258e06a89fe7cf7146f59ac3bd5ff26083acb22ceb
     Privkey 2: 592095f44bb766d5cfe20bda71f9575ed2df6b9fb9addc7e5fdffe0923841456
      Pubkey 1: 02557ef3e55b0a52489b4454c1169e06bdea43687a69c1f190eb50781644ab6975
      Pubkey 2: 03557ef3e55b0a52489b4454c1169e06bdea43687a69c1f190eb50781644ab6975
scriptPubKey 1: 00149d9e24f9fab4e35bf1a6df4b46cb533296ac0792
scriptPubKey 2: 00149860538b5575962776ed0814ae222c7d60c72d7b
     Address 1: tb1qnk0zf706kn34hudxma95dj6nx2t2cpujz7j5t5
     Address 2: tb1qnps98z64wktzwahdpq22ug3v04svwttm7gs8wn
-> Funding tx submitted: 3a286147b25e16ae80aff406f2673c6e565418c40f45c071245cdebc8a94174e

Taproot output address for spending tx: tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkgkkf5
-> Spending tx submitted: fe788cf6578d547819def43d79e6c8f0153d4885f5a343d12bd03f34507aabd6
---------------------------------------------------------------------------------------------------------
2024-06-22 01:40:19 +02:00
Jon Atack
70a714372f
Merge pull request #1622 from theStack/bip352-simplify_input-hash_flow
BIP-352: generate `input_hash` after summing up keys (simplification)
2024-06-21 14:03:39 +00:00
theborakompanioni
0f1eba2a60
docs(bip-0046): add test certificate for the 960th timelocked address 2024-06-20 17:29:37 +02:00
Sebastian Falbesoner
fe0f83531e BIP-352: generate input_hash after summing up keys (simplification)
For both sender and receiver, generating the input hash is currently
listed as the first step. This already involves summing up the public
keys, even though summing up key material (private keys for sender,
public keys of inputs for receiver) is then again listed explicitly
in later steps.

It seems to be more obvious and less redundant (and also hopefully less
confusing for readers) to reorder the instructions to calculate the
input_hash _after_ the key aggregation is done to reuse the result. In
case of the sender, the private key sum has to be multiplicated with G
in order to the get to the corresponding input pubkey sum.

This also corresponds to the current BIP352 implementation in the
secp256k1 library (https://github.com/bitcoin-core/secp256k1/pull/1519).
The reference implementation in Python here is adapted for the sender
side, the receiver side has already generated the input_hash after
summing up the pubkeys.
2024-06-20 00:33:14 +02:00
theborakompanioni
b7a5f9ce60
docs(bip-0046): apply minor wording improvement suggestions
by @murchandamus
2024-06-19 14:06:41 +02:00
Ava Chow
806b8b886f BIP 373: add MuSig2 PSBT Fields BIP 2024-06-18 20:09:26 -04:00
Ava Chow
6b9138c1a1 BIP 390: Add MuSig2 descriptor BIP 2024-06-18 20:09:26 -04:00
Ava Chow
48ebcb2191 BIP 328: add MuSig2 derivation BIP 2024-06-18 20:09:26 -04:00
Tim Ruffing
6a7af366a5
bip-0327: Remove obsolete paragraph 2024-06-13 20:54:57 +02:00
Glen Cooper
85cda4e225
BIP 15: Remove broken hyperlink to Vanitygen (#1618) 2024-06-11 14:23:48 -04:00
Jon Atack
e21bf40e0c
Merge pull request #1617 from 1440000bytes/bip301
Fix bip number in specification
2024-06-10 20:46:44 +00:00
/dev/fd0
14af3d6fe9
fix bip number 2024-06-10 20:05:49 +00:00
Mark "Murch" Erhardt
1f8ce57410
Merge pull request #1615 from satsie/satsie-more-repeat-words
BIP340: remove repeat words
2024-06-10 13:31:04 -04:00
Dan Gould
e4267374fb
Keep input utxo data through input finalization
The reference sender implementation and \`payjoin proposal\` test vectors
are adjusted accordingly.

According to the psbt Input Finalizer spec "All other data except the
UTXO and unknown fields in the input key-value map should be cleared from
the PSBT. The UTXO should be kept to allow Transaction Extractors to
verify the final network serialized transaction."

I ran into a problem where an LND acting as sender FinalizePsbt gRPC
fails when sender utxo information is missing. I see no good reason to
remove utxo information from the PSBT.
2024-06-10 13:11:38 -04:00
Mark "Murch" Erhardt
9cfe3a4a90
Merge pull request #1551 from TheBlueMatt/2024-02-dns-payment-instructions
Add BIP 353: DNS Payment Instructions
2024-06-10 11:04:20 -04:00
Stacie
44984acde9 BIP340: remove repeat words 2024-06-09 21:56:51 -04:00
Jon Atack
bc520fade5
Merge pull request #1614 from satsie/satsie-bip79-edit
BIP79: remove repeat word
2024-06-09 03:23:04 +00:00
Stacie
b33c948f00 BIP79: remove repeat word 2024-06-08 23:00:17 -04:00
Murch
1957127894
Merge remote-tracking branch 'upstream/master' into bip-46
To fix the merge conflict caused by BIP 47 getting updated to final.
2024-06-07 11:16:51 -04:00
theborakompanioni
8f0962a1ba
chore(bip-0046): remove superfluous newline 2024-06-07 12:05:20 +02:00
theborakompanioni
821fb900f8
chore(bip-0046): less ambiguous message prefix style
by @AdamISZ
2024-06-07 12:04:30 +02:00
theborakompanioni
0a12bf8572
docs(bip-0046): apply minor wording improvement suggestions
by @AdamISZ
2024-06-06 14:20:22 +02:00
theborakompanioni
87bbc4aeb6
docs(bip-0046): add bip-0046 to readme 2024-06-06 12:51:44 +02:00
Matt Corallo
4f75edb2b8 Add a BIP which resolves human readable names into payment info
User behavior has clearly indicated a strong demand for the
resolution of human-readable names into payment instructions. This
BIP defines a protocol to do so using only the DNS, providing for
the ability to query such resolutions privately, while utilizing
DNSSEC to provide compact and simple to verify proofs of mappings.
2024-06-04 20:40:24 +00:00
Luke Dashjr
70d9b07ab8
Merge pull request #1598 from ChrisCho-H/master
bip-0322: add another valid sig vector not to confuse
2024-05-31 13:47:31 -04:00
Jon Atack
9636d9c683
Merge pull request #1603 from cocoyeal/remove_duplicated_words
Remove duplicated words
2024-05-31 04:15:59 +00:00
cocoyeal
46a2440718 remove duplicated words 2024-05-29 16:18:11 +08:00
Jon Atack
758a58ab54
Merge pull request #1602 from Sajjon/cyon_fix_typos
Fix typos on 17 files.
2024-05-28 20:04:43 -07:00
Jon Atack
10650becef
Merge pull request #1541 from glozow/2024-01-v3-prio
BIP431: Opt In Topologically Restricted Until Confirmation Transactions For More Robust Fee-bumping
2024-05-28 19:50:57 -07:00
Mark "Murch" Erhardt
79be0f9c52
Merge pull request #1556 from TomBriar/bip-tombriar-compressed-transactions
BIP 337: Compressed Transactions
2024-05-28 14:49:08 -04:00
Murch
f240c40284
BIP-0337: Add table entry, move to numbered file 2024-05-28 14:45:04 -04:00
Murch
73cfb05b94
BIP-0337: Fix Comments-URI 2024-05-28 14:44:29 -04:00
Tom Briar
996e31fa16
bip-tombriar-compressed-transactions 2024-05-28 14:44:27 -04:00
Alexander Cyon
1eefea0456 Fix typos on 17 files. 2024-05-28 19:25:46 +02:00
theborakompanioni
2bc326e6af
docs(bip-0046): add Rationale section 2024-05-27 10:33:48 +02:00
theborakompanioni
25361d28ed
chore(bip-0046): add tbk to Author header 2024-05-27 10:33:17 +02:00
theborakompanioni
a6f1cf3e0d
chore(bip-0046): improve timelock point in time explanation 2024-05-27 10:25:14 +02:00
theborakompanioni
722a388ae3
chore(bip-0046): fix date format in Post-History header 2024-05-27 10:13:28 +02:00
theborakompanioni
0b353bc7db
docs(bip-0046): add Backwards Compatibility section 2024-05-27 10:10:22 +02:00
glozow
04d3a0609b Define BIP431: TRUCs 2024-05-23 16:33:00 +01:00
theborakompanioni
f9d370d3da
chore(bip-0046): scriptPubKey -> witness programm 2024-05-23 15:52:46 +02:00
theborakompanioni
00c7d0b815
fix(bip-0046): change license from Public Domain to CC0-1.0 2024-05-23 15:48:23 +02:00
theborakompanioni
164412d08b
docs(bip-0046): add Copyright section 2024-05-23 14:30:48 +02:00
theborakompanioni
5209a28c1a
docs(bip-0046): add Comments-URI header 2024-05-23 14:27:20 +02:00
theborakompanioni
57f1fe3f4b
chore(bip-0046): remove (optional) Comments-Summary header 2024-05-23 14:24:42 +02:00
theborakompanioni
03a679958a
docs(bip-0046): change title to 'Address Scheme for Timelocked Fidelity Bonds' 2024-05-23 14:23:44 +02:00
theborakompanioni
64f93a239d
chore(bip-0046): fix typos and grammar 2024-05-23 14:23:07 +02:00
theborakompanioni
8e109f98de
docs(bip-0046): add bip number to header section 2024-05-23 14:18:08 +02:00
theborakompanioni
05e2c0c12f
chore(bip-0046): rename bip-fidelity-bonds to bip-0046 2024-05-23 14:16:38 +02:00
Jon Atack
e2f7481a13
Merge pull request #1445 from MarnixCroes/bip38-fix-links
BIP38: remove broken links
2024-05-22 05:06:25 -07:00
Marnix
4c08e2c0bf BIP38: remove dead links 2024-05-22 11:30:43 +02:00
Jon Atack
740e826c19
Merge pull request #1579 from achow101/stop-link-spam-38
38: Remove other implementation section and dead reference implementation link
2024-05-16 11:22:58 -07:00
Jon Atack
e3ef9a5646
Merge pull request #1580 from achow101/stop-link-spam-85
85: Remove other implementation sections
2024-05-16 07:05:48 -07:00
Chris Hyunhum Cho
2f311cc629
bip-0322: add another valid sig vector not to confuse 2024-05-15 11:51:28 +09:00
Jon Atack
96161aeaf5
Merge pull request #1591 from siv2r/bip327-fix-verify-fail-vector
Fix the first two test vectors of verify fail test
2024-05-14 01:59:40 -07:00
siv2r
508e3a6a40 Fix the four test vectors
- first two vectors of verify_fail_test
- first two vectors of verify_error_test
2024-05-14 07:39:38 +05:30
Mark "Murch" Erhardt
911e710cbb
Merge pull request #1595 from threewebcode/patch-1
bip-0114: fix typo
2024-05-13 13:03:49 -04:00
Mark "Murch" Erhardt
bc87508a0c
Merge pull request #1594 from jonatack/2024-05-bip352-coredev-link-fixup
BIP352: fix link to coredev discussion
2024-05-13 12:57:50 -04:00
Mark "Murch" Erhardt
77f081789f
Merge pull request #1593 from jonatack/2024-05-bip388-fixups
BIP388 fixups
2024-05-13 12:53:58 -04:00
Afanti
2157872faa
bip-0114: fix typo 2024-05-13 10:25:31 +08:00
Jon Atack
f4693dc0fd bip352: fix link to coredev discussion 2024-05-12 11:22:56 -06:00
Jon Atack
4c689f7cf9 bip-0388: make reference implementation executable 2024-05-12 11:08:30 -06:00
Jon Atack
e7fef46177 bip-0388: fix 3 links 2024-05-12 11:08:30 -06:00
Jon Atack
10e5f62a38
Merge pull request #1592 from bigspider/bip-388-proposed
BIP-388: change status to 'Proposed'
2024-05-12 09:31:45 -07:00
Salvatore Ingala
1d7f12d36a
Update BIP-388 status to 'Proposed' 2024-05-12 11:56:08 +02:00
Salvatore Ingala
3865057e2d
Improve formatting 2024-05-12 11:47:48 +02:00
Jon Atack
8256ea0134
Merge pull request #1590 from RandyMcMillan/patch-5
bip-0388:proof of registration - use wikimedia bold syntax
2024-05-10 14:00:22 -07:00
Jon Atack
85ccf2379b
Merge pull request #1469 from theborakompanioni/patch-1
fix(bip85): rectify pwd_length in PWD BASE85 table
2024-05-10 09:48:10 -07:00
@RandyMcMillan
99435fa0b5
bip-0388.mediawiki:proof of registration 2024-05-10 09:39:56 -04:00
Mark "Murch" Erhardt
cc2a9c71a0
Merge pull request #1589 from real-or-random/202405-0324-unusedcsv
BIP324: Remove obsolete test vector file
2024-05-09 14:07:50 -04:00
Tim Ruffing
3b77bc07fd BIP324: Remove obsolete test vector file 2024-05-09 10:12:42 +02:00
Olaoluwa Osuntokun
18956f177a
Merge pull request #1411 from john-moffett/patch-1
BIP-158: Fix description of M parameter
2024-05-08 16:49:25 -07:00
Mark "Murch" Erhardt
d2300bed33
Merge pull request #1458 from josibake/silent-payments-bip
BIP 352: Silent Payments
2024-05-08 13:22:03 -04:00
josibake
17e1d168e8
Minor fixups
- Fix link
- Add explanation for scalar multiplication
- Spelling error in test section
2024-05-08 18:34:39 +02:00
josibake
9929215dcf
Change status to Proposed 2024-05-08 18:34:34 +02:00
josibake
ef108e0e77
Add post-history 2024-05-08 18:14:56 +02:00
josie
0ccf42c869
Apply suggestions from code review
Punctuation and wording improvements.

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-05-08 18:14:56 +02:00
josibake
c2b27a0ce5
Update README 2024-05-08 18:14:55 +02:00
josibake
33a99a1a17
Add reference.py with test vectors
* reference.py contains the silent payment specific code
* secp256k1.py for doing the EC operations
* bech32m.py contains code for encoding/decoding bech32(m) addresses
* bitcoin_utils.py contains some helper code, not specific to silent
  payments
* send_and_receive_test_vectors.json contains the wallet unit test
  vectors

Co-Authored-By: S3RK <1466284+S3RK@users.noreply.github.com>
Co-Authored-By: Oghenovo Usiwoma <37949128+Eunovo@users.noreply.github.com>
Co-authored-by: S.Blagogee <34041358+setavenger@users.noreply.github.com>
2024-05-08 18:14:55 +02:00
josibake
96f4e5a4c4
Add BIP for Silent Payments
Co-Authored-By: Ruben Somsen <rsomsen@gmail.com>
2024-05-08 18:14:55 +02:00
Mark "Murch" Erhardt
56575ff533
Merge pull request #1389 from bigspider/bip-wallet-policies
BIP 388: Wallet Policies for Descriptor Wallets
2024-05-08 08:54:42 -04:00
Mark "Murch" Erhardt
690f70ce44
Merge pull request #1586 from katesalazar/20240504
BIP38, help GitHub intermediate syntax highlighter
2024-05-08 08:49:51 -04:00
Salvatore Ingala
7d0c08e38a
More nits from PR review 2024-05-07 22:24:23 +02:00
Salvatore Ingala
cf2250e27c
Apply suggestions from code review
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-05-07 22:10:44 +02:00
katesalazar
c88a018409 Update bip-0038.mediawiki
Separating the bold and the italic markup helps inconsistent parsing
(see screenshots in PR #1586).
2024-05-07 15:44:50 +00:00
katesalazar
4ddb0cc893 Update bip-0038.mediawiki
Add missing closing double single quote. The italicized paragraph gets
cautiously closed.
2024-05-07 15:34:37 +00:00
Salvatore Ingala
a0c8501f96
Added BIP-388 to README 2024-05-07 11:00:23 +02:00
Salvatore Ingala
95cf539161
Improvements from PR review.
- Removed large example of taproot policy; replaced with the textual description
- Added an example of a taproot wallet policy containing miniscript
2024-05-07 10:58:02 +02:00
Salvatore Ingala
40c7760d78
Apply suggestions from code review
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-05-07 10:58:02 +02:00
Salvatore Ingala
25657cbee6
Update assigned BIP number; change type to "Standards Track" 2024-05-07 10:58:01 +02:00
Salvatore Ingala
44798a2a9e
New BIP: Wallet Policies 2024-05-07 10:58:01 +02:00
Jon Atack
c4c5c69bdf
Merge pull request #1567 from achow101/multi_a
BIP 387: multi_a() descriptor
2024-05-06 17:00:58 -07:00
Ava Chow
945b281155 BIP 387: multi_a() descriptor 2024-05-06 18:26:11 -04:00
Mark "Murch" Erhardt
feacf8f2ed
Merge pull request #1525 from EthanHeilman/cat
BIP 347: OP_CAT in Tapscript
2024-05-06 14:02:38 -04:00
Ethan Heilman
7ad0f821dd
Adds stable URL for Liar, Liar, Coins on Fire! 2024-05-06 13:12:47 -04:00
Mark "Murch" Erhardt
8808e78883
Merge pull request #1583 from yannickseurin/BIP-340
Update BIP 340 with fresher info on multi-, threshold, and blind signatures
2024-05-06 12:05:32 -04:00
Yannick Seurin
5d10163efc
more precise wording
Co-authored-by: Tim Ruffing <crypto@timruffing.de>
2024-05-06 11:40:02 +02:00
Yannick Seurin
1f1f24f0ef
spelling out FROST
Co-authored-by: Tim Ruffing <crypto@timruffing.de>
2024-05-06 11:39:15 +02:00
Ethan Heilman
cda34eef1c
Improved accuracy of paragraph on OP_CAT's removal in 2010 2024-05-05 17:57:27 -04:00
Yannick Seurin
4dcdadee67 update changelog 2024-05-03 10:32:42 +02:00
Yannick Seurin
1ed7d03393 more precise wording for key-prefixing justification 2024-05-03 10:31:27 +02:00
Mark "Murch" Erhardt
f05e1627f9
Merge branch 'master' into cat 2024-05-02 22:00:03 -04:00
Murch
31f51927f1
Add BIP-347 OP_CAT to table 2024-05-02 21:57:31 -04:00
Ethan Heilman
6ea9fda9ac
Fixes link to liar liar 2024-05-02 18:39:58 -04:00
Jon Atack
24a15a6ae3 Merge branch 'ysangkok-final-bip-0133'
* ysangkok-final-bip-0133:
  Final BIP-0133
2024-05-01 16:56:11 -06:00
Janus
e2547df1cd Final BIP-0133 2024-05-01 16:55:55 -06:00
Jon Atack
fa24446df4
Merge pull request #1585 from achow101/fix-link-checks
ci: Fix link checks
2024-05-01 15:41:34 -07:00
Ava Chow
3a2031380d ci: Run link format check on all mediawiki documents 2024-05-01 18:04:35 -04:00
Ava Chow
3bd457c595 310: Fix incorrectly formatted link 2024-05-01 18:00:38 -04:00
Ava Chow
e155b58f13 197: Fix incorrectly formatted links 2024-05-01 17:59:53 -04:00
Jon Atack
253dd0999e
Merge pull request #1578 from achow101/fix-ci
ci: Update diff checks so that the task actually works
2024-05-01 14:22:37 -07:00
Ava Chow
602cd676cd
buildtable.pl: Also check .md files (#1577) 2024-05-01 17:02:36 -04:00
Ava Chow
09439bb662 ci: Clarify that diffchecks fails until a number is assigned 2024-05-01 17:02:06 -04:00
Ava Chow
94ca14f34e ci: Use actions/checkout@v4
v3 is deprecated
2024-05-01 17:02:06 -04:00
Ava Chow
98f000a6fb diffchecks.sh: Make success clear and exit with failure on error 2024-05-01 17:02:06 -04:00
Ethan Heilman
6815c39f93
Adds commas
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-05-01 16:32:28 -04:00
Ethan Heilman
e9e7636f7e
Increases commas and capital letters
This improves readability, thanks!

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-05-01 16:31:49 -04:00
Ethan Heilman
d670035b0c
Adds sentence suggested by murchandamus to quantum paragraph
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-05-01 16:30:38 -04:00
Ali Sherief
6fc75b1b21
[BIP322] remove empty message requirement for full (proof-of-funds) proofs (#1352)
* add bip-notatether-signedmessage

* minor heading correction

* minor formatting correction

* minor formatting correction

* minor formatting correction

* minor formatting correction

* minor formatting correction

* minor formatting correction

* fix some consistency errors

* Remove empty message for UTXO proofs

* Delete bip-notatether-signedmessage.mediawiki
2024-05-01 06:44:03 -07:00
Ethan Heilman
696cc1713b
Adds post history, fixes created date 2024-04-30 21:13:43 -04:00
MMGen
f1c296bb32 Base58chk-encoded extended keys are always 111 characters long. Amend wording of BIP accordingly.
-This results in a Base58-encoded string of up to 112 characters.
+This results in a Base58-encoded string of exactly 111 characters.

Version bytes: 0x0488b21e (“xpub”), 0x0488ade4 (“xprv”), 0x043587cf (“tpub”), 0x04358394 (“tprv”)

Largest “possible” key:
   kL = 0x0488b21effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (78 bytes)
   b58chk(kL) = xpubEPi3iGSX9RiyuXPTijevUmMctBDQs2TWCMgUd3qKp6qCgUc8RUsPdPBrRC6whFeWTg37DcmnJJiKFL73DH4sjdApJkXBD3vFcBP4xHq3fPY (111 chars)

Smallest “possible” key:
   kS = 0x043583940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (78 bytes)
   b58chk(kS) = tprv8ZgxMBicQKsPcsbCVeqqF1KVdH7gwDJbxbzpCxDUsoXHdb6SnTPYxdwSAKDC6KKJzv7khnNWRAJQsRA8BBQyiSfYnRt6zuu4vZQGKjeW4YF (111 chars)
2024-04-30 15:53:17 -06:00
Jon Atack
51b2d131be
Merge pull request #1184 from katesalazar/20210917
BIP 0009: Remove transparent background from figure.
2024-04-30 14:14:58 -07:00
John Bampton
f61885edcf
docs: fix spelling (#1117)
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-04-30 16:54:05 -04:00
Varunram Ganesh
2d9e431fbe
[trivial]: Correct spellings across bips (#675)
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-04-30 14:51:39 -04:00
Yannick Seurin
2c017b0c0b link to BIP327 2024-04-30 11:42:38 +02:00
Yannick Seurin
f75184b8d8 updating info on multi-, threshold, and blind signatures 2024-04-30 11:34:30 +02:00
Ethan Heilman
3d78cc0886
Fixes typos
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-04-29 21:04:15 -04:00
Ethan Heilman
1d5530443d
OP_CAT in Tapscript
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2024-04-29 19:36:26 -04:00
Ethan Heilman
a05543cc58
Changes title of BIP to "Enable OP_CAT in Tapscript" 2024-04-29 18:44:24 -04:00
Jon Atack
8b28941b9c
Merge pull request #1390 from scgbckbone/update_bip129
update bip-0129.mediawiki
2024-04-27 06:39:42 -07:00
Jon Atack
584f4a732b
Merge pull request #1487 from theStack/bip158_remove_data_pushes_definition
bip-0158: remove unused and unrelated "data pushes" definition
2024-04-26 18:26:47 -07:00
Jon Atack
49ec00afae
Merge pull request #1238 from prusnak/bip155-yggdrasil
BIP 155: add Yggdrasil
2024-04-26 15:09:01 -07:00
Jon Atack
b151555daa
Merge pull request #823 from kanzure/bip-112-fix-typo
bip112: fix trivial typo
2024-04-26 14:52:21 -07:00
Jon Atack
998c426e15
Merge pull request #786 from lukechilds/patch-1
[bip38] Consistent hyphenation usage
2024-04-26 14:48:07 -07:00
Mark "Murch" Erhardt
d3576b9ddb
Merge pull request #1537 from sipa/202401_clarify_segwit_direct_push
Clarify exactly which scripts are witness outputs
2024-04-26 17:25:58 -04:00
Mark "Murch" Erhardt
156f066ac6
Merge pull request #1321 from katesalazar/202205132020
BIP 0174: bring back transparent background to figures
2024-04-26 17:22:19 -04:00
Mark "Murch" Erhardt
e641025e74
Merge pull request #1471 from theStack/fix_bip324_test_sage_decoding_git_instrs
bip-0324: fix git instruction order in test_sage_decoding.py
2024-04-26 17:17:46 -04:00
Mark "Murch" Erhardt
fb65481b45
Merge pull request #1507 from RealCocoArdo/master
BIP42: Update spelling of bitcoin
2024-04-26 16:42:53 -04:00
Ethan Heilman
dbc612edfa
Consistent formatting for Section Headings
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-04-26 14:02:13 -04:00
Ethan Heilman
5413e18fd9
Consistent formatting for Section Headings
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-04-26 14:01:59 -04:00
Ethan Heilman
c10870a390
Adds comma
Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
2024-04-26 13:59:28 -04:00
Pieter Wuille
50e750a882 Clarify exactly which scripts are witness outputs 2024-04-26 08:26:34 -04:00
Ethan Heilman
852502b9cf
Specifies exact tree signature limit (suggested by Ali Sherief) 2024-04-25 20:32:52 -04:00
Mark "Murch" Erhardt
d402abb797
Merge pull request #1582 from murchandamus/2024-04-reduce-bip173-to-v0
Reduce scope of BIP173 to native segwit v0
2024-04-25 14:21:46 -04:00
Murch
7a10449186
Mention that BIP350 reduces scope of bech32 to v0 2024-04-25 14:15:22 -04:00
Mark "Murch" Erhardt
5552e485bd
Merge pull request #1581 from achow101/stop-link-spam-21
21: Remove other libraries from reference implementations
2024-04-25 13:55:54 -04:00
Ethan Heilman
7ed8f6f38c
Better quantum resistant section based Tim's comments
Adds additional acks
2024-04-25 13:42:24 -04:00
Ethan Heilman
0a3869d102
Fixes comment URI 2024-04-25 13:16:55 -04:00
Ethan Heilman
6c729c4b41 Renamed to use BIP-0347 2024-04-25 13:03:00 -04:00
Jon Atack
d20d1f9e61
Merge pull request #1546 from 5atoshiNakamoto/patch-1
Update bip-0039-wordlists.md
2024-04-25 08:40:09 -07:00
Jon Atack
ee9de3d076
Merge pull request #1576 from achow101/stop-link-spam
39: Remove other implementation sections
2024-04-25 08:03:56 -07:00
Ava Chow
448de3cafd 21: Remove other libraries from reference implementations 2024-04-25 10:23:28 -04:00
Ava Chow
e3f7a26062 85: Remove other implementation sections 2024-04-25 10:19:40 -04:00
Ava Chow
a26656133b 38: Remove dead reference implementation link 2024-04-25 10:17:35 -04:00
Ava Chow
05b626debf 38: Remove other implementation sections 2024-04-25 10:17:31 -04:00
Ava Chow
fd5d424f55 39: Remove other implementation sections 2024-04-25 10:14:29 -04:00
Luke Dashjr
dd88f24eeb Fix README 2024-04-24 23:20:48 +00:00
Ava Chow
eb9007c869 diffchecks.sh: Build table first 2024-04-24 19:14:03 -04:00
Ava Chow
7be25f9fb2 ci: Fetch depth 2 for diffchecks 2024-04-24 19:13:38 -04:00
Bryan Bishop
7bd6c2c500
Merge pull request #596 from luke-jr/editors_typo_fix
BIP 2: Allow editors to fix typos
2024-04-24 13:47:51 -05:00
Jon Atack
e43c18ba40
Merge pull request #1382 from glozow/2022-10-package-relay
BIP 331: Ancestor Package Relay
2024-04-24 11:08:46 -07:00
Mark "Murch" Erhardt
fd8d58edb1
Merge pull request #1068 from OpenBitcoinPrivacyProject/bip47
Finalize BIP-47
2024-04-24 14:05:18 -04:00
glozow
632f143fad specify BIP331 Ancestor Package Relay 2024-04-24 17:03:54 +01:00
Jon Atack
1b87fc5c26
Merge pull request #984 from Enegnei/patch-1
BIP-32: Minor grammar fixes
2024-04-24 08:25:04 -07:00
Jon Atack
9600cefc3c
Merge pull request #746 from riordant/patch-2
BIP47: Missing word
2024-04-24 07:41:14 -07:00
Jon Atack
c60f6b6588
Merge pull request #748 from BankoWallet/patch
Typo of test data in bip 143
2024-04-24 07:29:12 -07:00
Jon Atack
ea6e905d61
Merge pull request #743 from riordant/patch-1
Fix typo in BIP47
2024-04-23 14:42:01 -07:00
Olaoluwa Osuntokun
11ceb96849
Merge pull request #733 from tuxcanfly/bip158-update-tests
bip158: update test vectors
2024-04-23 14:25:47 -07:00
Lucas Cullen
979ee894b8 Fix grammar 2024-04-23 15:18:37 -06:00
Jon Atack
c9d6e2aca2
Merge pull request #679 from nopara73/patch-3
Fix typos in BIP 126
2024-04-23 13:30:46 -07:00
Mark "Murch" Erhardt
0e60da79cf
Merge pull request #1522 from fakefraud/patch-2
BIP-60: typo fix
2024-04-23 16:17:20 -04:00
Mark "Murch" Erhardt
fc67948278
Merge pull request #1575 from murchandamus/2024-04-bip141-fix-typos
Fix typos in BIP141
2024-04-23 16:14:44 -04:00
Jon Atack
3deaeef958
Merge pull request #1486 from wangchun/master
Fix typo in bip-0087.mediawiki
2024-04-23 13:14:36 -07:00
Jon Atack
05072ac3f4
Merge pull request #1505 from GoodDaisy/master
Fix typos
2024-04-23 13:11:15 -07:00
Murch
6ced7dbb5a
Fix typos in BIP141
Co-authored-by: Greg Laun
2024-04-23 15:32:33 -04:00
Mark "Murch" Erhardt
4731fc407f
Merge pull request #487 from Christewart/patch-2
Specify which 1 byte push op codes are valid
2024-04-23 15:25:33 -04:00
Mark "Murch" Erhardt
eb7a787de0
Merge pull request #496 from azuchi/bip143-unify-coin-unit
BIP 143: Unify coin unit
2024-04-23 15:19:53 -04:00
Mark "Murch" Erhardt
f450bee7a4
Merge pull request #1573 from jonatack/2024-04-update-bip-editors
BIP2: update BIP editors
2024-04-23 14:07:23 -04:00
Jon Atack
fa95e34388 BIP2: update BIP editors 2024-04-23 11:45:02 -06:00
Mark "Murch" Erhardt
d06521f432
Merge pull request #1484 from git-sgmoore/master-1
added colon at end of if statement - bip-0119.mediawiki
2024-04-23 13:38:13 -04:00
Olaoluwa Osuntokun
43ce3a461d
Merge pull request #1530 from nau/patch-1
Remove duplicate word in bip-0085.mediawiki
2024-04-22 17:54:16 -07:00
Olaoluwa Osuntokun
749ce1f54e
Merge pull request #1564 from bitjson/patch-1
feat: add TypeScript BIP39 implementation
2024-04-22 17:52:49 -07:00
Mark "Murch" Erhardt
ac062dc76d
Merge pull request #1560 from Christewart/2024-04-01-bip380-fix
Fix Descriptor BIP typos
2024-04-22 17:40:47 -04:00
Mark "Murch" Erhardt
9ad691a1d3
Merge pull request #1558 from prusnak/account-bips
BIP-00{43,49,84}: move to Standards Track + BIP-0044: mark as Final
2024-04-22 16:11:48 -04:00
Jon Atack
57c3d4a0d7
Merge pull request #1554 from bitcoin/gg
Update Bitcoin dev mailing list to Google Groups
2024-04-22 10:11:03 -07:00
Jon Atack
109886ad5e
Merge pull request #1393 from dplusplus1024/patch-2
BIP21: Update Anchor Link
2024-04-22 10:05:58 -07:00
Jon Atack
c66583158b
Merge pull request #1510 from momodaka/bip0380
Update BIP-380: fix typo
2024-04-22 09:38:16 -07:00
Jon Atack
d1cde72f9d
Merge pull request #1549 from siv2r/bip327-fix-link
BIP327: Fix Broken Links
2024-04-22 09:27:25 -07:00
Jon Atack
078b72eefe
Merge pull request #1562 from murchandamus/2024-04-markdown-clarification
Clarify permitted status of markdown
2024-04-22 09:17:53 -07:00
Jon Atack
785077d57b
Merge pull request #1521 from fakefraud/patch-1
BIP-10: typo fix
2024-04-22 09:15:44 -07:00
Jon Atack
b59384d868
Merge pull request #608 from philsmd/patch-1
bip38 typo: specifid -> specified
2024-04-22 09:15:03 -07:00
Jason Dreyzehner
ee0a17ef08
feat: add TypeScript BIP39 implementation 2024-04-15 17:12:02 -04:00
Ethan Heilman
f8ad6ede57
Changes OP_CAT BIP based on feedback given by Bob Summerwill
Bob Summerwill proposed a number of changes to the OP_CAT BIP to better follow BIP-2. This commit makes these changes:

* Using the section order specified in BIP-2
* Adding a Rationale section
* Expand the specification section by moving details from the abstract into the specification

Additionally this commit as rewords some confusing language.

Thanks Bob
2024-04-12 08:48:54 -04:00
Chris Stewart
4a937e1887 Fix typo in BIP384 expected descriptors 2024-04-06 09:26:59 -05:00
Murch
0092a4318f
Clarify permitted status of markdown
Originally BIP-2 disallowed markdown, but markdown formatting was
permitted via #1504.
2024-04-04 16:27:56 -04:00
Chris Stewart
8a9e574414 Fix unsatisfiable test vector in BIP381 2024-04-03 15:00:42 -05:00
Chris Stewart
8795003831 Fix unsatisfiable test vector in BIP382 2024-04-03 10:02:10 -05:00
Chris Stewart
109811e4b9 Fix BIP380 typos 2024-04-01 13:33:48 -05:00
Ethan Heilman
c235aa4939
Adds more acknowledgements 2024-03-26 20:36:19 -04:00
Ethan Heilman
ac231a17c2
Fixes broken mediawiki link 2024-03-20 23:53:53 -04:00
Ethan Heilman
35641a87d7
Merge pull request #3 from 0xBEEFCAF3/cat
Update OP_CAT implementation code
2024-03-20 23:39:53 -04:00
Armin Sabouri
b3493746b1
update OP_CAT implementation 2024-03-20 18:33:02 -04:00
Pavol Rusnak
0278bf3d71
BIP-0044: mark as Final 2024-03-18 23:48:44 +01:00
Pavol Rusnak
5658236e6c
BIP-00{43,49,84}: move to Standards Track 2024-03-18 23:48:22 +01:00
siv2r
ddf5b25fc7 bip327: fix broken links 2024-02-26 17:14:18 +05:30
Luke Dashjr
79c1ec02a7 README: Update for Google Groups ML
Some checks failed
GitHub Actions Check / Build-Table-Checks (push) Has been cancelled
GitHub Actions Check / Diff-Checks (push) Has been cancelled
GitHub Actions Check / Link-Format-Checks (push) Has been cancelled
2024-02-23 23:04:31 +00:00
Luke Dashjr
55ec890fca Update for Google Groups ML 2024-02-23 23:03:27 +00:00
Luke Dashjr
b3701faef2 README: Update table 2024-02-23 20:21:08 +00:00
Luke Dashjr
95ad106286
Merge pull request #1421 from jamesob/jamesob-23-02-opvault
Add OP_VAULT (BIP 345)
2024-02-23 15:17:53 -05:00
James O'Beirne
eccf3db139 BIP-0345: add copyright 2024-02-23 15:15:32 -05:00
2014
1818752171
Update bip-0039-wordlists.md
typos, grammar, clarity
2024-01-29 23:45:16 +02:00
Ethan Heilman
2b5ab3b1fd
Merge pull request #2 from 0xBEEFCAF3/patch-1
add clarifying note about the current opcode
2024-01-07 18:36:10 -05:00
Armin Sabouri
5dde7ea5cf
revert changes to abstract 2024-01-07 18:18:46 -05:00
Armin Sabouri
2cec73a5b4
rm comment on disabled CAT opcode 2024-01-07 18:18:09 -05:00
Armin Sabouri
799dc0c96d
Merge branch 'cat' into patch-1 2024-01-07 17:18:59 -05:00
Ethan Heilman
f9e100e9de
Notes that the opcode used is the same as the original cat opcode 2024-01-07 16:34:23 -05:00
Armin Sabouri
ae68ef11cb
add clarifying note about the current opcode
And some grammar + spelling cleanup
2024-01-07 13:24:04 -05:00
James O'Beirne
de9ef59307 fixup! remove unused diagram 2024-01-03 16:12:29 -05:00
James O'Beirne
327025b369 fixup! misc. feedback from AJ and twhit223 2024-01-03 16:11:50 -05:00
James O'Beirne
c2cec65937 fixup! rename n-pushes -> push-count 2024-01-03 15:33:50 -05:00
Ethan Heilman
82fe9fc3db
specify the hex value of the opcode 2023-12-29 18:29:00 -05:00
Ethan Heilman
e91621efce
Merge pull request #1 from 0xBEEFCAF3/patch-1
Add backwards compatibility section
2023-12-29 12:23:39 -05:00
Armin Sabouri
785b11e861
Add backwards compatibility section 2023-12-29 12:14:45 -05:00
momodaka
3671465ce6 Update BIP-380: fix typo
revert: fix
2023-12-27 09:38:41 +08:00
Luke Dashjr
deae64bfd3
Merge pull request #1523 from vehorny/patch-3
BIP-12: typo fix
2023-12-26 14:35:32 -05:00
Luke Dashjr
7526e2b531
Merge pull request #1532 from yannickseurin/BIP-380
BIP-380: correct fingerprint for invalid hardened indicators examples
2023-12-26 14:23:40 -05:00
Ethan Heilman
e492a90fec
Better reference for OP_CAT removal 2023-12-18 20:28:22 -05:00
kallewoof
9c57fac1a7
Merge pull request #1504 from achow101/allow-markdown
bip 2: allow markdown
2023-12-18 15:14:09 +09:00
Ethan Heilman
e3dc3ba361
Italicize variables
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-17 12:53:07 -05:00
Ethan Heilman
97635f5c09
Lowercase the signatures 2023-12-17 12:49:46 -05:00
Ethan Heilman
4f39e4b9d5
Avoids designing or discussing how to add post-quantum commitments to Bitcoin 2023-12-16 16:23:49 -05:00
Ethan Heilman
77509f6c23
Period to colon
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 15:57:08 -05:00
Ethan Heilman
0b8a7e4b64
Code formatting
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 15:56:12 -05:00
Ethan Heilman
82198302cd
Code formatting
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 15:52:05 -05:00
Ethan Heilman
0a143d3969
Use BSD-3 license 2023-12-15 15:46:49 -05:00
Ethan Heilman
beb5802cc6
Adds subsection header
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 15:27:22 -05:00
Ethan Heilman
d4f85b1146
Lowercase bytes
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 14:44:07 -05:00
Ethan Heilman
6f5a74d83e
Increases conciseness and clarity
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 10:04:36 -05:00
Ethan Heilman
7180c1cf8c
Prefer bytes to Bytes
Co-authored-by: Vojtěch Strnad <43024885+vostrnad@users.noreply.github.com>
2023-12-15 09:54:50 -05:00
Alexander Nemish
b434f1813c
Update bip-0085.mediawiki
Fix doublicated word
2023-12-15 11:00:10 +01:00
Ethan Heilman
945e2a3742
Typos
TIL that it is "a one" rather than "an one"

Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:48:46 -05:00
Ethan Heilman
01db3acab0
Removes space in ref
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:47:58 -05:00
Ethan Heilman
6a790ec526
Removes space in ref
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:47:50 -05:00
Ethan Heilman
a2b0100671
Typo
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:47:36 -05:00
Ethan Heilman
848352f408
Phrasing
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:45:04 -05:00
Ethan Heilman
c5d66d6706
Better phrasing
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:44:44 -05:00
Ethan Heilman
9779dc9920
Keeps past tense consistant
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:44:14 -05:00
Ethan Heilman
bb725e6523
Wording
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-14 23:43:42 -05:00
kallewoof
9692c70ead
Merge pull request #1527 from achow101/update-contact-info
Update contact info for achow101
2023-12-14 12:41:30 +09:00
Ava Chow
a28b021b99 Update contact info for achow101 2023-12-13 11:12:08 -05:00
Ethan Heilman
3d31e5c894
Adds brackets
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-12 08:59:03 -05:00
Ethan Heilman
0335c9d188
Grammar fix
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-12 08:27:35 -05:00
Ethan Heilman
26e8e5f7fc
Better fits bitcoin style guide
"If an if only has a single-statement then-clause, it can appear on the same line as the if, without braces. In every other case, braces are required, and the then and else clauses must appear correctly indented on a new line."

Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-12 08:26:36 -05:00
Ethan Heilman
f1169dd1fc
Fixes typo
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-12-12 08:24:39 -05:00
Ethan Heilman
83ca57f222
Create bip-???-cat.mediawiki 2023-12-11 18:11:22 -05:00
Yannick Seurin
c595d7c517 correct fingerprint for invalid hardened indicators 2023-12-08 15:34:36 +01:00
Vehorny
6f288f0f68
Update bip-0012.mediawiki 2023-12-07 02:17:00 +01:00
Vehorny
682fd8bc58
Update bip-0060.mediawiki 2023-12-07 02:13:58 +01:00
Vehorny
3732ac478b
Update bip-0010.mediawiki 2023-12-07 02:12:27 +01:00
Coco_Ardo
44794188ec
Update bip-0042.mediawiki spelling
Bitcoin the network is written with a capital B. The unit is writting with small b.
2023-10-20 20:51:06 +02:00
GoodDaisy
6fd7de46b7 Fix typos 2023-10-13 09:05:19 +08:00
Andrew Chow
1a629a4961 bip 2: allow markdown 2023-10-10 21:59:08 -04:00
James O'Beirne
eb3fb727c3 BIP-0345: restrict trigger output to v1 witness
Co-authored-by: Antoine Poinsot <darosior@protonmail.com>
2023-10-09 14:09:01 -04:00
James O'Beirne
014b832e07 BIP-345: add sigops cost of 60 2023-09-29 09:19:15 -04:00
kallewoof
e918b50731
Merge pull request #1498 from real-or-random/202309-0324-garbauth
bip324: Remove garbage authentication packet (breaking change)
2023-09-29 16:19:23 +09:00
Tim Ruffing
75dc363d20 bip324: Remove garbage authentication packet (breaking change)
by merging it with the version packet. Or more accurately, by merging
it with the first packet sent after garbage termination, which may be
a decoy packet or the version packet.

The new protocol simplifies implementations:
 - A protocol state machine won't need separate states for garbage
   authentication and version phases.
 - The special case of "ignoring the ignore bit" is removed.
 - The freedom to choose the contents of the garbage authentication
   packet is removed. This simplifies testing.

The reason for having a separate garbage authentication packet was
to materialize the separation of the key exchange phase and version
negotiation phase even in the bytestream on the wire. However, this
is not necessary, and arguably, these phases are still properly
separated: Since the AEAD will ensure that AAD (=garbage) is checked
before looking at the contents (=version), the peers won't interpret
version data before having authenticated the garbage.
2023-09-28 10:19:53 +02:00
kallewoof
7004ad1a82
Merge pull request #1496 from sipa/bip324
bip324: small improvements
2023-09-21 10:31:25 +09:00
Pieter Wuille
cdcb6801a1 For now, remove BIP330 messages before being adopted 2023-09-11 13:43:29 -04:00
Pieter Wuille
397016ebdf Allow detecting/disconnecting wrong-network v1 peers 2023-09-11 13:43:23 -04:00
Pieter Wuille
175c5c06e0 Use 16-byte prefix to distinguish v1 from v2 2023-09-11 12:00:53 -04:00
James O'Beirne
4aae726be9 fixup! fix off-by-one and revault-idx malleability
Co-authored-by: sanket1729 <sanket1729@gmail.com>
2023-09-01 10:12:38 -04:00
Sebastian Falbesoner
496b6c9ecc bip-0158: remove unused and unrelated "data pushes" definition
This BIP is not in any way connected to the rules of Bitcoin script,
i.e. the "data pushes" term is also not used anywhere and its definition
can hence be removed.
2023-08-29 23:39:04 +02:00
Chun
91bbe3307c
Update bip-0087.mediawiki
typo fix
2023-08-20 07:59:19 +00:00
Luke Dashjr
e643d247c8
Merge pull request #1485 from luke-jr/bip300_adj20230726
BIP 300: Various improvements
2023-08-17 21:25:39 -04:00
Luke Dashjr
fa21bdec66
Merge pull request #1482 from JeremyRubin/patch-8
Add James O'Beirne to 119 Author List
2023-08-16 09:49:21 -04:00
sgmoore
2f1e2bc4d8
added colon at end of if statement - bip-0119.mediawiki
Python requires a colon at the end of an if statement to denote the beginning of the block of code that will be executed if the condition is True. If the colon is omitted, a syntax error will occur, and the code will not run. Since the syntax error will prevent the code from running, it won't introduce any vulnerabilities by itself. However, it will cause the application to fail at the point where the code is parsed, which might expose other issues if error handling is not implemented properly.
2023-08-15 12:54:34 -07:00
Jeremy Rubin
0033fd876f
Add James O'Beirne to 119 Author List 2023-07-28 17:34:38 -04:00
Luke Dashjr
c2f4825550 bip-0300: Add some guesstimate weight adjustments 2023-07-26 20:39:45 +00:00
Luke Dashjr
796c80eb9d bip-0300: Ensure tx fee commitment itself has zero value so sidechain coins can't get burned 2023-07-26 20:07:54 +00:00
Luke Dashjr
badaf01360 bip-0300: Forbid extraneous OP_DRIVECHAIN outputs in M5/M6 2023-07-26 19:59:59 +00:00
Luke Dashjr
accaee0f33 bip-0300: Define endianness of upvote vector 2023-07-26 19:59:11 +00:00
Luke Dashjr
9d4ec80215 bip-0300: Reorder upvote vector version numbers to leave 1/2 bytes as version 1,2 respectively 2023-07-26 19:54:18 +00:00
Luke Dashjr
69d872461b bip-0300: Fix upvote vector example 2023-07-26 19:53:36 +00:00
Luke Dashjr
2cccaf650f bip-0300: Add OP_DRIVECHAIN 2023-07-26 19:45:54 +00:00
Luke Dashjr
55566a73f9
Merge pull request #1477 from psztorc/patch-1
clearer, more failure details, + use OP_TRUE
2023-07-17 20:35:16 -04:00
Paul Sztorc
e7eba11645
clearer, more failure details, + use OP_TRUE 2023-07-13 16:45:08 -04:00
Sebastian Falbesoner
9f25645be5 bip-0324: fix git instruction order in test_sage_decoding.py
Tiny fix correcting the order of commands, for `git checkout` one has
to change into the repository directory first.
2023-07-06 16:38:38 +02:00
Luke Dashjr
66a1a81510
Merge pull request #1410 from anquii/bip-0039-patch
Add link to anquii/BIP39 (Swift)
2023-07-02 18:42:24 -04:00
Luke Dashjr
bbb7aafad3
Merge pull request #1384 from weareseba/feature/bip127_BDK_proof
Added the BDK implementation for bip-0127 proof of reserves
2023-07-02 18:41:55 -04:00
Luke Dashjr
d16e96ae9c
Merge pull request #1414 from coolaj86/patch-2
feat: add DashPhrase.js to JS implementations
2023-07-02 18:41:26 -04:00
anquii
9e6fd72314 Add anquii/BIP39 (Swift) 2023-07-02 17:25:01 +01:00
Thebora Kompanioni
265d64cae5
fix(bip85): rectify pwd_length in PWD BASE85 table 2023-06-30 10:19:55 +02:00
kallewoof
8b41d49d33
Merge pull request #1459 from ktecho/patch-1
Typos in bip-0119
2023-06-30 14:25:57 +09:00
kallewoof
16707080a5
Merge pull request #1444 from satsie/satsie-bip-137-edits
BIP-137: Fix typo
2023-06-30 10:37:26 +09:00
kallewoof
c95f655be6
Merge pull request #1468 from achow101/descriptor-tests
descriptors: add test vectors
2023-06-30 10:37:11 +09:00
kallewoof
0c9e826870
Merge pull request #1450 from yahiheb/patch-1
[Trivial] Fix text format (BIP 39)
2023-06-30 10:36:16 +09:00
Andrew Chow
bb562aa8e9 descriptors: add test vectors 2023-06-29 16:30:36 -04:00
Luke Dashjr
648eb37f1a
Merge pull request #1344 from scgbckbone/passwords
bip85 passwords
2023-06-29 14:04:23 -04:00
Luke Dashjr
04a9656810
Merge pull request #1406 from real-or-random/patch-18
BIP341: Fix definition of NUMS point
2023-06-29 13:48:49 -04:00
Luke Dashjr
fbd92f2495
Merge pull request #1436 from theStack/bip324_handsake_remove_initiating_param
bip-0324: remove `initiating` parameter from `ellswift_create` calls
2023-06-29 13:48:11 -04:00
Luke Dashjr
6e82728e6b
Merge pull request #1354 from achow101/bip-multipath-descs
[New BIP 389] Multipath descriptors
2023-06-29 13:25:27 -04:00
James O'Beirne
e2ff23b3f0 fiuxp! allow larger trigger/recovery output amounts
Allow trigger/recovery output nValues to exceed the amounts supplied by
constituent vault inputs. This allows future compatibility for e.g.
trigger collateral.
2023-06-28 12:06:35 -04:00
James O'Beirne
cb50446a65 fixup! add <revault-amount> and clarify deferred checks
This change makes the amount being revaulted (if any) explicit to avoid
issues surfaced by AJ Towns (e.g. multiple compatible vault inputs
duplicating triggers and revaults to confuse the old deferred check
logic).

Pseudocode is also provided for the deferred checks, and their inline
validation description has been changed to be more faithful to the
implementation - we make mention of queueing deferred checks, and then
later describe the algorithm used to aggregate and perform them.
2023-06-28 12:03:58 -04:00
kallewoof
1d15f3e0f4
Merge pull request #1452 from sethforprivacy/patch-1
BIP 329: Add `spendable` state to outputs
2023-06-27 11:01:53 +09:00
Luis Miguel
8f506d8e27
Typos in bip-0119 2023-06-06 15:47:37 +02:00
kallewoof
b4ea0a93aa
Merge pull request #1454 from uncomputable/bech32m-final
Mark bech32m as final
2023-06-05 23:21:13 +09:00
Seth For Privacy
fc0950e07e
Properly handle spendable state and JSON edge cases 2023-05-30 09:42:26 -04:00
kallewoof
0ea6005488
Merge pull request #1446 from sipa/bip-taproot
BIP340 updates: clarifications, variable-length messages, expand domain separation
2023-05-29 17:11:24 +09:00
Seth For Privacy
d20444a3ae
Add motivation for spendable tag 2023-05-24 09:39:16 -04:00
Seth For Privacy
1684344515
Add spendable state 2023-05-24 09:39:13 -04:00
Christian Lewe
9b03e64c93 Mark bech32m as final 2023-05-18 18:08:00 +02:00
kallewoof
80d44743dc
Merge pull request #1412 from craigraw/wallet-labels-origin
BIP329: Add optional key origin property and expand truncation note
2023-05-16 11:56:18 +09:00
kallewoof
9c34b24ecb
Merge pull request #1448 from stratospher/patch-1
bip324: fix link to chacha20
2023-04-28 17:14:37 +09:00
yahiheb
5f3e216d3f
Fix text format 2023-04-27 08:19:38 +01:00
stratospher
da6f9ed17c
bip324: fix link to chacha20 2023-04-26 21:41:17 +05:30
Tim Ruffing
d80e437ab1 bip340: Add subsection on Domain Separation 2023-04-20 16:01:00 -04:00
Tim Ruffing
200f9b26fe bip340: Allow variable-length messages 2023-04-20 16:01:00 -04:00
Pieter Wuille
6163d36d0b bip340: clarify that tags are byte arrays 2023-04-20 15:56:28 -04:00
James O'Beirne
7112f308b3 minor wording updates 2023-04-17 09:40:57 -04:00
kallewoof
3db736243c
Merge pull request #1443 from vostrnad/bip84-final
Mark BIP84 as Final
2023-04-11 09:47:03 +09:00
Stacie
3ffc3573d9 BIP-137: Fix typo 2023-04-10 15:13:32 -04:00
Vojtěch Strnad
24204e1d3c Mark BIP84 as Final 2023-04-10 16:22:24 +02:00
kallewoof
156e8aabe2
Merge pull request #1439 from apoelstra/2023-03--bip93-cleanup
bip93: minor cleanups
2023-03-30 12:32:07 +09:00
Andrew Poelstra
c02efd1456
add myself as a BIPs author 2023-03-30 03:11:11 +00:00
Andrew Poelstra
c3b330fdec
bip93: typo fixes, and fix URL format 2023-03-29 14:15:14 +00:00
Andrew Poelstra
eb62f6ea71
bip93: make bech32 capitalization consistently lowercase 2023-03-29 14:07:59 +00:00
Russell O'Connor
838fd93219
bip93: More invalid test vectors
These examples are valid BIP-173 and BIP-350 strings (but not valid BIP-93 strings).
2023-03-29 14:07:55 +00:00
kallewoof
b3144df7ad
Merge pull request #1438 from ajtowns/202303-tests
Cleanup README table
2023-03-29 18:18:35 +09:00
Anthony Towns
9e4c055a74 Use BIP-326 title from PR#1314 in README 2023-03-29 15:10:42 +10:00
Anthony Towns
cbfdce0430 BIP157 was replaced in PR#1378 2023-03-29 15:10:42 +10:00
Anthony Towns
469ccc9617 README markup fixes 2023-03-29 15:10:42 +10:00
Anthony Towns
0e5b18c0ff BIP327: fixups for buildtable.pl 2023-03-29 15:10:15 +10:00
Greg Sanders
0b0674c546 few fixups 2023-03-28 15:08:03 -04:00
Greg Sanders
29345a10f0 Be explicit about tapleaf version forwarding 2023-03-28 12:42:48 -04:00
Greg Sanders
8bf5b869e5 remove vestigial reference in applications section 2023-03-28 12:39:03 -04:00
Greg Sanders
8bad703ed8 why n-pushes 2023-03-28 12:33:37 -04:00
Greg Sanders
e08f6ad4df few word changes 2023-03-28 12:13:45 -04:00
James O'Beirne
a6452eaf1a fixup! add TLUV references 2023-03-27 09:57:13 -04:00
James O'Beirne
a0b433471d fixup! rename vaults BIP 2023-03-27 09:57:13 -04:00
James O'Beirne
47a25d1540 fixup! FLUification
Adds AJ and Greg as co-authors
2023-03-27 09:56:57 -04:00
kallewoof
67a42fe828
Merge pull request #1372 from jonasnick/musig2-squashed
Add BIP MuSig2
2023-03-27 18:40:32 +09:00
Jonas Nick
87394eaeb4 Add BIP327: MuSig2 for BIP340-compatible Multi-Signatures 2023-03-27 11:48:22 +09:00
kallewoof
a8a0191978
Merge pull request #1433 from raphjaph/patch-1
Improve BIP-341 wording
2023-03-24 12:45:47 +09:00
James O'Beirne
915ede327a fixup! add Kalle reference 2023-03-23 13:24:17 -04:00
James O'Beirne
997e4f4f0e Update bip-vaults.mediawiki
Co-authored-by: kallewoof <kalle.alm@gmail.com>
2023-03-23 13:24:17 -04:00
Jameson Lopp
f30fb52bbb date fix
copypasta FTW
2023-03-23 13:24:17 -04:00
James O'Beirne
6dc766d937 vaults: add Corey Haddad reference 2023-03-23 13:24:17 -04:00
James O'Beirne
4f03aaea2c vaults: add backwards compatibility 2023-03-23 13:24:17 -04:00
Sebastian Falbesoner
59915dfc71 bip-0324: remove initiating parameter from ellswift_create calls 2023-03-19 19:18:07 +01:00
kallewoof
99ae9d9373
Merge pull request #1428 from dhruv/bip324-update-feb-2023
BIP324: Fixed length message type IDs
2023-03-17 11:44:57 +09:00
Andrew Poelstra
e761066fbc
new BIP: codex32 (#1425)
new BIP: codex32

---------

Co-authored-by: Russell O'Connor <roconnor@blockstream.io>
2023-03-17 11:39:01 +09:00
raphjaph
c0148c872d
Improve BIP-341 wording
Reading the spec closely the different language used for serialization of input outpoints and input amounts was
confusing on first read. This change uses the same language
for both, which makes it easier to read.
2023-03-10 22:19:31 +01:00
kallewoof
ebea569f19
replace travis with Github Actions (#1432)
replace travis with Github Actions
2023-03-09 11:57:21 +09:00
kallewoof
4e4db8ba12
Merge pull request #1430 from bigspider/psbtv0-fix-signing-algo
PSBTv0: Update Simple Signer Algorithm for SegWitv0 inputs
2023-03-08 12:57:13 +09:00
kallewoof
e98121e531
Merge pull request #1431 from bigspider/psbtv2-fix-txversion
PSBTv2: Relax transaction version requirement
2023-03-08 12:55:23 +09:00
Salvatore Ingala
5cf651155d
Relax transaction version requirement when the Creator is also a Constructor. 2023-03-04 11:24:05 +00:00
Salvatore Ingala
e538fa8562
Update Simple Signer Algorithm for SegWitv0 inputs
It is no longer expected that SegWitV0 inputs have no witness-utxo field.
Reverting the order of checks avoids this assumption (while still relying on the mandatory lack of witness-utxo for legacy inputs).
2023-03-04 11:13:16 +00:00
dhruv
ee8a4a3bc5 Updates to BIP324 since January 11 2023 2023-02-28 09:53:19 -08:00
kallewoof
aa5b0a1009
Merge pull request #1427 from cmdruid/patch-1
Update bip-0370.mediawiki
2023-02-27 09:38:19 +09:00
kallewoof
2ef2b1658f
Merge pull request #1423 from uncomputable/taproot-final
Mark Taproot BIPs as Final
2023-02-27 07:17:04 +09:00
cmd
be78b633e3
Update bip-0370.mediawiki
Small typo. Changed 'gemeric' to 'generic'.
2023-02-23 09:11:04 -06:00
Jameson Lopp
24241ee26b
typos / gramma cleanup 2023-02-22 07:27:03 -06:00
James O'Beirne
6ff8efd3d1 vaults: blank deployment 2023-02-21 16:08:23 -05:00
Christian Lewe
f4a05c1ced Mark BIP 343 as Final 2023-02-21 22:05:30 +01:00
James O'Beirne
0204c9a1f9 vaults: make recovery output structure a matter of policy
Since constraints on unauthorized recovery transaction structure exist
only to avoid pinning, make them a matter of policy and not consensus.
2023-02-21 11:59:36 -05:00
James O'Beirne
58cbc4e9b1 vaults: various feedback
Thanks to Vojtěch Strnad for most of this.
2023-02-21 11:59:31 -05:00
kallewoof
de6b3ffeb8
Merge pull request #1157 from tcharding/list-render
Remove newline to fix list rendering
2023-02-21 10:46:18 +09:00
kallewoof
3de3c768ed
Merge pull request #1418 from jeepkd/patch-1
Add BIP-329 to the index table
2023-02-21 10:45:27 +09:00
kallewoof
7e2f317a44
Merge pull request #1417 from achow101/380-clarify-optional-checksum
380: Clarify optionality of descriptor checksum
2023-02-21 09:50:28 +09:00
kallewoof
e47ee83b65
Merge pull request #1422 from instagibbs/patch-18
Update PSBT_IN_TAP_BIP32_DERIVATION key desc
2023-02-20 11:18:04 +09:00
Christian Lewe
43fa7cf13d Mark Taproot BIPs as Final 2023-02-19 16:16:13 +01:00
James O'Beirne
c589490f98 vaults: make recovery transaction explicit
Instead of implicitly detecting whether or not an OP_VAULT/OP_UNVAULT
spend is a recovery spend by scanning outputs for matching
scriptPubKeys, explicitly indicate recoveries by requiring a witness
stack element that is either -1 in the case of no recovery OR
corresponds to an output index that is the recovery output.
2023-02-15 13:56:22 -05:00
Gregory Sanders
4ab7faad74 Update PSBT_IN_TAP_BIP32_DERIVATION key desc
Clarify intended usage of PSBT_IN_TAP_BIP32_DERIVATION for key-spends.
2023-02-15 13:17:22 -05:00
James O'Beirne
9124f2940e fixup! image clarifications 2023-02-14 13:10:03 -05:00
James O'Beirne
476aea3107 fixup! typos and clarification
from feedback by Gleb and Joost.
2023-02-14 12:50:05 -05:00
James O'Beirne
b30e37c8a2 Add OP_VAULT BIP 2023-02-13 18:58:59 -05:00
Nutthawut (Jeep) Kiddee
ab87f494cd
Add BIP-329 to the index table 2023-02-11 12:38:58 +07:00
Andrew Chow
272e1f5efc 380: Clarify optionality of descriptor checksum
Parsers must handle checksum optionality, but applications can choose to
reject descriptors that don't have a checksum.
2023-02-10 13:01:53 -05:00
kallewoof
30c88a4bec
Merge pull request #1416 from Shadouts/master
BIP0174 and BIP0370 PSBT_GLOBAL_TX_VERSION <valuedata> type correction
2023-02-10 07:18:45 +09:00
Andrew Chow
a3ad2547bc Specify 389: Multipath descriptors 2023-02-09 15:16:19 -05:00
Jack
1c5572b617 Fix valuedata type to match description. 2023-02-08 08:52:22 -09:00
Craig Raw
96a9adedde change origin attribute to reflect an abbreviated output descriptor containing key origin information 2023-02-07 11:05:53 +02:00
AJ ONeal
5cafddccca
feat: add DashPhrase.js to JS implementations 2023-02-03 16:11:11 -07:00
Craig Raw
0a5e3b0101 add optional key origin property and expand truncation note 2023-02-03 10:21:55 +02:00
kallewoof
1a632a3875
Merge pull request #1405 from sipa/202301_bip324_update
BIP324 reference code / test vector improvements
2023-02-03 12:59:37 +09:00
John Moffett
fa4eeeef38
Fix description of M parameter
The M parameter is used as the inverse of the false probability rate, so change its incorrect usage in two places.
2023-01-31 13:12:53 -05:00
kallewoof
f277d42e0d
Merge pull request #1407 from instagibbs/patch-17
BIP174: s/uiht/uint/s
2023-01-18 10:48:23 +09:00
Gregory Sanders
7e0c47e1f6
uiht 2023-01-17 14:14:54 -05:00
craigraw
41490b74f7
Wallet Labels Export Format (#1383)
* initial commit

* fix formatting

* add importing section

* clarify csv preference

* tabs to spaces

* add rationale and references, require that rfc4180 is followed

* fix reference links

* show reference links as list

* use self describing json lines format instead of csv

* add bip number and accommodate 65 byte pubkeys

* fix comments uri
2023-01-17 08:40:46 +09:00
Tim Ruffing
6e7e5a2523 BIP341: Use the term "NUMS" 2023-01-12 13:50:46 +01:00
Tim Ruffing
996dd77b10
BIP341: Fix definition of NUMS point 2023-01-12 13:41:06 +01:00
Pieter Wuille
cc177ab7bc BIP324 updates
Includes:
* Simpler (but equivalent) ElligatorSwift encoding function & spec
* Improved test vectors
* Test vector generation code
* Code for converting test vectors for libsecp256k1 code.
* Code for running test vectors against SwiftEC paper authors' code.
* Miscellaneous reference code improvements (style, comments).
2023-01-11 17:39:56 -05:00
kallewoof
2361582f0b
Merge pull request #1378 from dhruv/bip324
Add BIP324: v2 P2P Transport Protocol
2023-01-05 08:44:56 +09:00
kallewoof
00902d17d9
Merge pull request #1350 from jonasnick/bip-0341-signingfix
BIP 341: allow taproot_sign_key with no script tree
2023-01-05 08:43:37 +09:00
dhruv
32af2c9dc2 Add BIP324 2023-01-04 08:46:46 -08:00
Jonas Nick
3d243d8a49
BIP 341: allow taproot_sign_key with no script tree
In contrast to taproot_output_script, taproot_sign_key was not able to deal with
a script_tree that is None. This commit fixes taproot_sign_key such that it can
sign for such outputs.

This commit avoids changing the behavior of the functions except
taproot_sign_key at the cost of having some code duplication. Alternatively, one
could let taproot_tree_helper deal with a None script_tree directly.
2023-01-04 14:31:44 +00:00
kallewoof
79bb53dde5
Merge pull request #1379 from DariusParvin/bip341-aux_rand
BIP341: add aux_rand argument to taproot_sign_key
2023-01-04 10:55:06 +09:00
kallewoof
c6725580c5
Merge pull request #1386 from jonasnick/fix-taproot-tweak-pubkey
BIP 341: Fix taproot_tweak_pubkey
2023-01-04 10:33:15 +09:00
D++
3e10085c09
Update Anchor Link
Fixed the link to the #simpler-syntax portion of the BIP.
2022-12-18 21:49:26 -06:00
scgbckbone
7aaaa01a9c
BIP-85 Passwords 2022-12-05 02:50:34 +01:00
scgbckbone
9df0b19c24
update bip-0129.mediawiki 2022-11-22 01:47:46 +01:00
Darius Parvin
e24f685971 BIP341: add bip340_aux_rand argument to taproot_sign_key 2022-11-03 21:25:39 -07:00
Luke Dashjr
15c8203eb3
Merge pull request #1376 from vasild/bip330_sendtxrcncl_smplfctn
BIP330: drop redundant booleans from the sendtxrcncl message
2022-10-28 13:04:33 +00:00
Jonas Nick
be340277fc
BIP 341: Fix taproot_tweak_pubkey
`lift_x` returns `None` if the input integer is not an X coordinate on the curve
to indicate failure. `point_add`, on the other hand, interprets `None` as the
point at infinity. Therefore, without this commit, if the internal `pubkey` is
not a valid X coordinate, the function will not fail, which contradicts the
specification in the "Script validation rules section". Instead, it sets `Q` to
`t*G`.
2022-10-24 20:33:05 +00:00
Richard Ulrich
76d561fb2c
Added the BDK implementation for bip-0127 proof of reserves 2022-10-17 17:55:17 +02:00
Vasil Dimov
8b107a0af6
BIP330: drop redundant booleans from the sendtxrcncl message
The reconciliation protocol assumes using one role consistently. Since
it is irrelevant which one is which, we can imply that the initiator of
the P2P connection will assume the role of reconciliation initiator.

This protocol simplification will seep into the implementation.
2022-10-06 13:56:53 +02:00
Luke Dashjr
6545b81022
Merge pull request #1351 from russeree/bip12-Implementation-url-fix
bip-0011/12 - fixed broken implementation url
2022-09-30 23:56:57 +00:00
Luke Dashjr
9d1f7954d8
Merge pull request #724 from jeffrade/BIP70_url_fix
[Trivial] BIP-70 Fixing sipa's gist proposal url
2022-09-30 23:56:15 +00:00
russeree
61d6631e5b Update BIP 11/12 OP_EVAL implementation commit url 2022-09-29 16:57:40 -07:00
Luke Dashjr
e76137c32d
Merge pull request #1370 from naumenkogs/bip_0330_updates
Changes/clarifications to bip-330.
2022-09-29 22:58:21 +00:00
Luke Dashjr
194ee7320b
Merge pull request #1369 from DariusParvin/bip341
BIP 341: add missing conversions between bytes and int
2022-09-29 22:57:27 +00:00
Luke Dashjr
40aef27767
Merge pull request #1367 from ajtowns/202209-sighash-vs-342
BIP118: simplify explanation of signature message
2022-09-29 22:41:13 +00:00
Luke Dashjr
cf420089a4
Merge pull request #1349 from alfred-hodler/bip-alfredhodler-private-payments
New BIP 351: Private Payments
2022-09-29 22:39:41 +00:00
Luke Dashjr
be59b4fe75
Merge pull request #1293 from BP-WG/bip/p2c
BIP 372: Pay-to-contract tweak fields for PSBT
2022-09-29 22:34:07 +00:00
Luke Dashjr
0eb216caa5
Merge pull request #1364 from psztorc/master
Update BIPs 300/301
2022-09-29 22:31:22 +00:00
Luke Dashjr
af15873715
Merge pull request #1363 from achow101/370-git-conflict
370: Fix merge conflict and typo
2022-09-29 22:30:01 +00:00
Luke Dashjr
783d73c0c0
Merge pull request #1361 from joemphilips/fix_typo_bip0370
nit: fix typo in bip-0370 test vectors.
2022-09-29 22:29:28 +00:00
Luke Dashjr
d9700e7e4e
Merge pull request #640 from randolf/patch-1
Minor improvements
2022-09-29 22:11:18 +00:00
Gleb Naumenko
2f98abd9ea Changes/clarifications to bip-330. 2022-09-29 14:43:19 +03:00
Darius Parvin
3cdfe1bd16 BIP 341: add missing conversions between bytes and int
Convert seckey0 to bytes at the start of the function.
Return the output as bytes for consistency with the rest of the code.
2022-09-28 15:45:02 -07:00
Anthony Towns
8bbf2a1424 BIP118: simplify explanation of signature message 2022-09-20 06:15:54 +10:00
Alfred Hodler
2cabfe167e
Update BIP351 reference implementation link 2022-09-15 15:01:30 +00:00
Dr. Maxim Orlovsky
d7888e53aa
BIP-372: Moving Andrew Poelstra from author to ACK section
Basing on https://github.com/bitcoin/bips/pull/1293#issuecomment-1242438684
2022-09-11 11:02:19 +02:00
Alfred Hodler
aa4f030041
Update authors 2022-09-10 09:54:36 +00:00
Paul Sztorc
f46b898999
make idential to bip301 2022-09-02 13:20:46 -04:00
Paul Sztorc
16fba9650a
link to new code + remove outdated references 2022-09-02 13:19:46 -04:00
Paul Sztorc
80b33be54d
header typo 2022-09-02 13:15:29 -04:00
Paul Sztorc
3176623da9
Update Bip300 2022-09-02 13:14:51 -04:00
Paul Sztorc
8447ec666a
replace files 2022-09-02 11:50:48 -04:00
Paul Sztorc
de6c9a6fcf
Update Bip300 for consistency with latest code 2022-09-02 11:39:50 -04:00
Andrew Chow
e6c08f3fac 370: Fix merge conflict and typo 2022-09-01 13:04:00 -04:00
Alfred Hodler
bffc84f63a
Add a refernce to BIP351 2022-08-30 10:45:40 +00:00
joemphilips
a924d03298
nit: fix another typo in bip-0370 test vectors 2022-08-28 14:04:22 +09:00
joemphilips
15a888dabe
nit: fix typo in bip-0370 test vectors. 2022-08-28 13:10:05 +09:00
kallewoof
52f68fecd8
Merge pull request #1355 from jonasnick/fix-missing-int
BIP 340 & 341: use consistent definition of lift_x
2022-08-25 16:05:58 +09:00
Jonas Nick
3998dbbc8a BIP 340: fix function signature of lift_x in reference code
bip-0340.mediawiki defines lift_x as taking an integer argument. This commit
changes the argument of lift_x in the reference code to be identical to the
specification. Previously it took a byte array.
2022-08-23 10:07:32 +00:00
Alfred Hodler
ac7b6c1f50
Add Comments-URI; fix author list 2022-08-22 10:03:54 +00:00
Alfred Hodler
1385d65187
Add reference implementation 2022-08-22 09:49:32 +00:00
Alfred Hodler
e56fb64292
Update the index page 2022-08-22 09:17:11 +00:00
Alfred Hodler
75a6f21e3a
Update BIP number and test vectors 2022-08-22 08:53:42 +00:00
Dr. Maxim Orlovsky
d2b4d5d099
BIP-372: add entry to the README 2022-08-21 21:55:44 +02:00
Dr. Maxim Orlovsky
697de96475
Assign Comments-URI for BIP-372 2022-08-21 21:45:47 +02:00
Dr Maxim Orlovsky
2f57890cbe
CI: Allow dashes in author e-mail domain names
Signed-off-by: Dr. Maxim Orlovsky <orlovsky@pandoraprime.ch>
2022-08-21 21:43:18 +02:00
Dr. Maxim Orlovsky
cdaccbedb5
Fix CI failure in BIP-372
Signed-off-by: Dr. Maxim Orlovsky <orlovsky@pandoraprime.ch>
2022-08-21 21:43:18 +02:00
Dr. Maxim Orlovsky
ad46e586d1
Syntaxic proofs for BIP-372
Signed-off-by: Dr. Maxim Orlovsky <orlovsky@pandoraprime.ch>
2022-08-21 21:43:18 +02:00
Dr. Maxim Orlovsky
0337a6c64d
Assign BIP-372 number to P2C BIP as per @kallewoof decision
Signed-off-by: Dr. Maxim Orlovsky <orlovsky@pandoraprime.ch>
2022-08-21 21:43:17 +02:00
Dr Maxim Orlovsky
5716f2878f
BIP P2C proposal initial version
Signed-off-by: Dr. Maxim Orlovsky <orlovsky@pandoraprime.ch>
2022-08-21 21:43:17 +02:00
Alfred Hodler
187135c4f6
Updates to the BIP
- fix out of range indexing
- add a note about compressed keys
- add a note about of-of-band notifications
- add a backward compatibility section
2022-08-19 10:14:32 +00:00
Jonas Nick
2119931f01 BIP 341: add missing conversion from bytes to int 2022-08-16 15:09:14 +00:00
kallewoof
64aba767e2
Merge pull request #1353 from ishaanam/bip174-143
BIP 174: fix incorrect reference to BIP 173
2022-08-16 10:37:00 +09:00
ishaanam
555c1d8c89 BIP 174: fix incorrect reference to BIP 173 2022-08-15 12:38:08 -04:00
russeree
df9c3fa977 fixed bip-0011/12 broken url - implementation
fixed bip-0012 broken url - implementation

fixed bip-0011 broken url - implementation
2022-08-12 17:38:29 -07:00
pox
c053962759 added reference to BIP 47 2022-08-01 15:11:33 +02:00
Alfred Hodler
50e707bd8c
Leaner notifications 2022-08-01 12:15:46 +00:00
Alfred Hodler
7330484680
Incorporate feedback 2022-08-01 11:00:01 +00:00
Alfred Hodler
063d70219a
Improve wording 2022-07-30 08:45:48 +00:00
Clark Moody
df9830a855 Update authors list 2022-07-30 10:25:04 +02:00
Clark Moody
9caa27ccd4 Two potential third-party services 2022-07-30 10:25:04 +02:00
Luke Dashjr
43da5dec5e
Merge pull request #1333 from 54627384/patch-1
Update bip-0300.mediawiki with consistent use of "ACK-counter" term
2022-07-28 21:04:46 +00:00
Alfred Hodler
947916e5ba
Update wording 2022-07-26 17:51:09 +00:00
Clark Moody
fb18d17106 Italic symbol notation instead of <code> 2022-07-26 19:32:52 +02:00
Luke Dashjr
bcb66af5c3
Merge pull request #1340 from hujiulong/patch-1
Add BIP39 implementation reference
2022-07-25 22:49:46 +00:00
Luke Dashjr
b7aebcd5e6
Merge pull request #1346 from evanlinjin/bip141-improve-wording
bip-141: improve `witness` field wording
2022-07-25 22:47:46 +00:00
Luke Dashjr
20b460b6d2
Merge pull request #1331 from ShenghaiWang/master
Add one Swift implementation
2022-07-25 22:46:53 +00:00
Luke Dashjr
809a8d3229
Merge pull request #1318 from SunitRoy2703/bip-39-dart
bip-39 dart implementation added
2022-07-25 22:46:41 +00:00
Luke Dashjr
bf657ddcac Merge remote-tracking branch 'origin-pull/1345/head' 2022-07-25 21:24:26 +00:00
Luke Dashjr
dc8d688d7b
Merge pull request #1342 from achow101/psbt2-tests
370: Add test vectors
2022-07-25 21:21:33 +00:00
Luke Dashjr
43a48ec0bf
Merge pull request #1319 from JeremyRubin/119-syntax
[BIP-119] Use mediawiki syntax highlighting, add comment to spec
2022-07-25 21:15:16 +00:00
Luke Dashjr
7d309564f9
Merge pull request #1326 from alexbosworth/patch-2
typo: correct mispelling
2022-07-25 21:13:40 +00:00
Luke Dashjr
c2d6f63439
Merge pull request #1334 from jonasnick/liftx
bip-0340: clarify that lift_x fails with out-of-range inputs
2022-07-25 21:13:21 +00:00
Luke Dashjr
c7a380e1a2
Merge pull request #1328 from achow101/370-fix-locktime
370: Clarifications of locktimes and tx modification flags
2022-07-25 21:12:51 +00:00
Luke Dashjr
d1b1ec476b
Merge pull request #1320 from JeremyRubin/delete-motivations-119
[BIP-119] Slim down motivation, add more references
2022-07-25 21:11:42 +00:00
Luke Dashjr
03785d323b
Merge pull request #1325 from alexbosworth/patch-1
BIP 0371: Make hex example consistent with base64
2022-07-25 21:06:21 +00:00
Alfred Hodler
134120166c
Improve notifications 2022-07-23 08:57:30 +00:00
Clark Moody
9c57035d5b Address type flags in a table 2022-07-23 09:47:41 +02:00
Clark Moody
ab90b8e787 Rework Motivation section 2022-07-23 09:47:41 +02:00
Alfred Hodler
ae247aa6cf
Private payments BIP 2022-07-22 08:57:37 +00:00
志宇
ac80e11298
bip-141: witness field wording improvement
When describing the `witness` field, reword "witness data" to "witness
field" as "witness data" refers also to the `marker` and `flag` fields.
2022-07-14 18:40:59 +08:00
Andrew Chow
7cd8ecd111 psbt: Unify formatting of key-value data to specify data type and name 2022-07-13 20:20:39 -04:00
MacroFake
b505101a2d
179: Remove my email due to spam (#1337)
179: Remove my email due to spam
2022-07-12 12:38:41 +09:00
Andrew Chow
62e305bf28 370: Add test vectors 2022-07-05 17:58:23 -04:00
chris-belcher
bf2eb4f680 Specify BIP-fidelity-bonds
For storing fidelity bonds in HD wallets
2022-07-04 20:10:21 +01:00
hujiulong
d448bf667c
Add BIP39 implementation reference
Add a reference to the JS implementation
2022-07-02 18:13:59 +08:00
Jonas Nick
0144413e91 bip-0340: clarify that lift_x fails with out-of-range inputs
Without this commit, it's not defined what happens if x is not in range 0..p-1.
However, lift_x may easily be called with out of range values. The reference
implementation of lift_x correctly returns failure in such cases.
2022-06-20 13:43:56 +00:00
54627384
858b6beb79
Update bip-0300.mediawiki
I've assumed that all mentions of ACK value and ACK counter are synonymous and therefore have updated all instances of this within the BIP to be "ACK-counter". I've noticed that M4 shows the different terms on two different lines (Line 256 and Line 257), which has made me think that potentially these terms aren't synonymous. 

Updates made to align with term used through out the BIP:
Line 213 - adding explicit mention of "ACK-counter"
Line 229 - adding explicit mention of "ACK-counter"
Line 257 - replaced "ACK-value" with "ACK-counter"
Line 288 - replaced "ACK value" with "ACK-counter"
2022-06-19 10:05:04 +10:00
Andrew Chow
02ab2bfd79 370: Clarify that modifiable flags are bits 2022-06-13 12:21:42 -04:00
Tim Wang
0a169e5d0d Add one Swift implementation featured with full native syntax, exception handling & fully unit tested with all supported language wordlists 2022-06-12 08:33:38 +10:00
kallewoof
df443f8db3
Merge pull request #1323 from LegReq/master
Fix incorrect signature test vectors in BIP322
2022-06-07 15:42:43 +09:00
Wip
8ed2af0784 Fix incorrect signature test vectors in BIP322 2022-06-06 15:13:24 +01:00
Andrew Chow
5861862f59 370: clarify inputs/outputs modifiable
Clarify that these flags only mean whether inputs/outputs can be
removed, not whether fields can be added or removed for each
input/output.
2022-06-02 22:37:39 -04:00
Andrew Chow
aa807d5a13 370: height lock must be greater than 0 2022-06-01 21:14:25 -04:00
Andrew Chow
1c8afe6ea4 370: Describe locktime type tiebreaker 2022-06-01 21:13:53 -04:00
Alex Bosworth
96bcfef050
typo: correct mispelling 2022-05-26 09:26:54 -07:00
Jeremy Rubin
cde2bd31a2 [BIP-119] Minor wording fixups
Co-authored-by: /dev/fd0 <94559964+1440000bytes@users.noreply.github.com>
2022-05-23 09:47:28 -07:00
Jeremy Rubin
c05f4042f4 [BIP-119] Reword section on fungibility in motivation 2022-05-23 09:35:04 -07:00
Jeremy Rubin
b29a3d27bf [BIP-119] No double space after period, no trailing whitespaces 2022-05-23 09:28:01 -07:00
katesalazar
3248581928 Bring back transparent background to figures
Black arrows are visible only in light theme (unless white background
for dark theme). Two-color arrows are visible in light theme and in
dark theme.
2022-05-22 10:38:46 +02:00
Alex Bosworth
424498ae2b
BIP 0371: Make hex example consistent with base64 2022-05-20 17:19:06 -07:00
Jeremy Rubin
de0ff362fc [BIP-119] Slim down motivation, add more references 2022-05-10 09:09:44 -07:00
Jeremy Rubin
aa1871b149 [BIP-119] Make serialization specification complete, defining all functions fully 2022-05-10 08:51:05 -07:00
Jeremy Rubin
ec3688a610 [BIP-119] Clarify Endianness of serializations 2022-05-10 08:38:37 -07:00
Jeremy Rubin
c8c8e27c2c [BIP-119] Use mediawiki syntax highlighting, add comment to spec 2022-05-10 08:33:05 -07:00
Sunit Roy
a14a5dbcba
bip-39 dart implementation added 2022-05-10 01:05:11 +05:30
kallewoof
b1791c24aa
Merge pull request #1314 from luke-jr/fix_bip326
Bugfix: BIP 326: Correct Author/Title headings
2022-05-06 20:42:22 +09:00
kallewoof
0d77c5ae9c
Merge pull request #1276 from katesalazar/patch-3
[0112] fix broken link
2022-05-06 19:06:20 +09:00
kallewoof
d7a5665c0a
Merge pull request #1300 from dplusplus1024/patch-1
Grammar update
2022-05-06 15:26:12 +09:00
Luke Dashjr
01c07e8c5b
Merge pull request #1193 from katesalazar/202109261239
BIP 0174: Remove transparent background from figures
2022-05-05 16:28:24 +00:00
Luke Dashjr
6452b8b7b5
Merge pull request #1290 from allenpiscitello/patch-1
Fixing incorrect allowing of unsigned transaction
2022-05-05 16:27:23 +00:00
Luke Dashjr
5085c7547b
Merge pull request #1275 from meshcollider/202201_fix_broken_link
BIP340: fix broken link to Schnorr's blind signature attack
2022-05-05 16:25:30 +00:00
Luke Dashjr
77a7213e15
Merge pull request #1309 from JeremyRubin/anti-dos-119
[BIP-119] Clean Up Spec of Opcode
2022-05-05 15:35:48 +00:00
Luke Dashjr
9b120a1036
Merge pull request #1294 from JeremyRubin/patch-7
Update BIP-119 to include python reference hash / link BIP-341
2022-05-05 15:23:20 +00:00
Luke Dashjr
3f6fc801e3 Merge remote-tracking branch 'origin-pull/1267/head' 2022-05-05 15:22:29 +00:00
Luke Dashjr
909f8e8b0c
Merge pull request #1296 from brandonblack/bip-0371-vectors-fixes
BIP-0371 vector fix + nits
2022-05-05 15:09:34 +00:00
Luke Dashjr
66aed73043 Bugfix: BIP 326: Correct Author/Title headings 2022-05-05 15:07:26 +00:00
Luke Dashjr
31a496fc24
Merge pull request #1299 from ajtowns/202204-longtitle
bip-326: avoid errors from scripts/buildtable.pl
2022-05-05 15:03:29 +00:00
Luke Dashjr
3d70fafaab
Merge pull request #1287 from sdaftuar/2021-02-bip338-fixups
BIP338: Add further restrictions on disabletx
2022-05-05 14:58:43 +00:00
Luke Dashjr
54ee25ee93
Merge pull request #840 from graingert/patch-1
Add .NET standard bip39 implementation
2022-05-05 14:48:42 +00:00
Jeremy Rubin
78fc9f2ceb [BIP-119]: Make IsPayToBareDefaultCheckTemplateVerifyHash Pythonic 2022-04-28 09:48:47 -07:00
Jeremy Rubin
cad2b3ee77 [BIP-119] Remove C++ Spec from BIP-119 entirely. 2022-04-28 09:48:38 -07:00
Jeremy Rubin
fa09f7f857 [BIP-119] Reimplement CTV in higher level pythonic pseduocode and clarify DoS Caching requirements. 2022-04-28 09:48:23 -07:00
D++
a200aed81d
Grammar update 2022-04-11 04:32:12 -04:00
Anthony Towns
234bb915f4 bip-326: avoid errors from scripts/buildtable.pl 2022-04-07 10:42:55 +10:00
Suhas Daftuar
955715284b Add restriction on feefilter messages 2022-04-05 09:09:41 -04:00
Brandon Black
1b67c8835f
Correct pubkey type for TAP_INTERNAL_KEY 2022-04-04 07:44:44 -07:00
Brandon Black
ad6e587232
Fix data type for TAP_MERKLE_ROOT 2022-04-04 07:37:41 -07:00
Brandon Black
c876d7e20e
Remove repeated clause 2022-04-04 07:37:28 -07:00
Brandon Black
b05fc882d8
Fix TAP_SCRIPT_SIG signature too short vector
* The specified length of the value did not match the encoded data.
Probably a manual modification error from the prior vector.
2022-04-01 15:25:10 -07:00
Brandon Black
b83419102b
Remove stray '<' 2022-04-01 15:24:25 -07:00
Jeremy Rubin
ba648bc4aa
Update BIP-119 to include python reference hash / link BIP-341 2022-03-29 14:51:43 -07:00
allenpiscitello
33f8f62906
Fixing incorrect allowing of unsigned transaction
V2 does not allow Global Key Type of 0 (Unsigned Transaction), but not listed as excluded in the spec.
2022-03-24 13:19:16 -05:00
Luke Dashjr
274fa400d6
Merge pull request #1278 from JeremyRubin/patch-6
[BIP-119] Clarify that policy is not validity + what a covenant is.
2022-03-23 21:43:29 +00:00
kallewoof
34d211aa93
Merge pull request #1269 from chris-belcher/bip-nsequence-anti-fee-snipe
BIP 326: Anti-fee-sniping protection with nSequence in taproot transactions to improve privacy for off-chain protocols
2022-03-08 12:23:57 +09:00
chris-belcher
4d5e1cc162
Specify BIP 326: Anti-fee-sniping protection with nSequence in taproot
To improve privacy for off-chain protocols
2022-03-04 21:36:24 +00:00
kallewoof
97e02b2223
Merge pull request #1279 from kallewoof/202201-bip322-testvecs
clarify message serialization and add test vectors to BIP-322
2022-02-07 15:12:01 +09:00
Karl-Johan Alm
f52e047d09
clarify that SIMPLE format requires version/locktime/sequence=0 for to_sign transaction 2022-02-03 12:10:47 +09:00
Karl-Johan Alm
aa92d9cd6e
add test vectors to BIP-322 2022-01-31 19:06:52 +09:00
Karl-Johan Alm
1b6c85b0b4
bip-322: clarify how the message is serialized 2022-01-31 19:06:52 +09:00
Jeremy Rubin
5901e7079b
[BIP-119] Make it abundantly clear that policy and standard are recommendations. 2022-01-26 15:31:34 -08:00
Jeremy Rubin
9eb17cd296
[BIP-119] Clarify that policy is not validity + what a covenant is. 2022-01-26 01:44:39 -08:00
katesalazar
729a2e388b
[0112] fix broken link 2022-01-24 13:24:09 +01:00
Samuel Dobson
d58f2b29f7 BIP340: fix broken link to Schnorr's blind signature attack 2022-01-21 21:59:30 +13:00
Luke Dashjr
02de475efc
Merge pull request #1253 from callebtc/patch-1
Update bip-0052.mediawiki
2022-01-16 18:58:12 +00:00
Luke Dashjr
7db0e1a554
Merge pull request #1270 from JeremyRubin/patch-2
[BIP-174] Clarify that partial_sig should be a valid.
2022-01-16 01:56:59 +00:00
Luke Dashjr
8530c16c3b
Merge pull request #1273 from JeremyRubin/patch-5
[BIP-119] Rename Channel Factories / Clarify Malleability
2022-01-15 23:28:31 +00:00
Luke Dashjr
5847bddd7f
Merge pull request #1115 from Sjors/2021/04/compact_size
bip174: link to 'compact size' definition, document version 0 handling of > 0xFD
2022-01-15 23:27:41 +00:00
Luke Dashjr
abc9e84e73
Merge pull request #1272 from JeremyRubin/patch-4
[BIP-119] Add notes and warnings about DoS during validation of CTV.
2022-01-15 23:27:16 +00:00
Luke Dashjr
0737622713
Merge pull request #1271 from JeremyRubin/patch-3
[BIP-119] Link Reference implementation to current PR in Bitcoin Core
2022-01-15 23:15:35 +00:00
Luke Dashjr
f59f235d91
Merge pull request #1268 from JeremyRubin/patch-1
Fix BIP-119 Typo + Clarify the reasons for 32 bit lengths
2022-01-15 23:14:23 +00:00
Luke Dashjr
01fe8b4615
Merge pull request #1260 from JeremyRubin/ctv-test-vectors
[BIP-0119] Include test vectors for CTV in BIP's subdirectory
2022-01-15 23:14:05 +00:00
Luke Dashjr
738bd8535c
Merge pull request #1257 from JeremyRubin/ctv-updates2
Update CTV Motivations & Speedy Trial Information
2022-01-15 23:12:37 +00:00
Luke Dashjr
0d8ea5b45b
Merge pull request #1232 from Olf0/patch-1
[Nit] Add full stop to conclude sentence
2022-01-15 23:10:47 +00:00
Jeremy Rubin
099694efd3
[BIP-119] Rename Channel Factories / Clarify Malleability 2022-01-12 10:54:03 -08:00
Jeremy Rubin
526e9797a7
[BIP-119] Complete fragmented sentence
Co-authored-by: flack <flack@contentcontrol-berlin.de>
2022-01-12 09:53:55 -08:00
Sjors Provoost
6366f8ebcb
bip174: document PSBT 0 handling of type > 0xFD 2022-01-12 16:39:21 +01:00
Sjors Provoost
dc034af961
bip174: link to 'compact size' definition 2022-01-12 16:27:31 +01:00
Jeremy Rubin
9f642244b9
[BIP-119] Add notes and warnings about DoS during validation of CTV. 2022-01-10 20:23:07 -08:00
Jeremy Rubin
7845a2a799
[BIP-119] Link Reference implementation to current PR in Bitcoin Core 2022-01-10 19:55:26 -08:00
Jeremy Rubin
469d62ce2b
[BIP-174] Clarify that partial_sig should be a valid. 2022-01-08 15:12:33 -08:00
kallewoof
3693cdfd19
Merge pull request #1241 from dr-orlovsky/patch-11
BIP-174: Removing PSBT_OUT_TAP_LEAF_SCRIPT
2022-01-07 11:16:09 +09:00
kallewoof
13bd88f50c
Merge pull request #1230 from dr-orlovsky/patch-9
BIP-341: explicitly allow softforks with future leaf versions
2022-01-07 11:14:58 +09:00
Dr Maxim Orlovsky
d16522949d
BIP-174: Remove PSBT_GLOBAL_SIGHASH_SINGLE_INPUT 2022-01-06 12:54:49 +01:00
Jeremy Rubin
b96b1712fc
Fix BIP-119 Typo + Clarify the reasons for 32 bit lengths
when drafting the BIP I attempted to triangulate what the width of the fields for number of inputs/outputs should be from various sources in the codebase, and made an error in looking at the signing and encoding logic, and not the _decoding_ logic which restricts vectors (vin, vout) to MAX_SIZE which is 33554432. This fully justifies not using a wider type (uint64_t).

Also clarified arguments for not using a narrower type (uint16_t) which would be possible just for the vIn based on block size, because it's a leaky abstraction (you can still encode and decode such a transaction,  just not mine it).


thanks to @roconnor-blockstream for pointing this out
2022-01-04 16:11:30 -08:00
pox
b705c60a09
typo - letter case 2022-01-03 03:57:51 +02:00
kallewoof
a3a397c823
Merge pull request #1245 from Mironenko/patch-1
Fix typo in BIP-32
2022-01-03 10:11:03 +09:00
Jeremy Rubin
ae747e2b90 [BIP-0119] Include test vectors for CTV in BIP's subdirectory 2021-12-25 11:07:33 -08:00
Jeremy Rubin
ea6008eeb1 BIP-119: Clarify that Speedy Trial may or may not be implemented for BIP-119 2021-12-22 19:32:05 -08:00
Jeremy Rubin
4479187baf BIP-119: Update Motivations and describe vaults alternatives better 2021-12-22 19:32:05 -08:00
calle
f42f47696c
Update bip-0052.mediawiki
Typos
2021-12-17 23:17:25 +00:00
Luke Dashjr
4c6389f843
Merge pull request #1126 from PoWx-Org/master
BIP 52: Durable, Low Energy Bitcoin PoW
2021-12-17 20:19:27 +00:00
PoWx Team
fecbe1f8a8 BIP 52: Fix syntax 2021-12-16 19:50:57 +01:00
PoWx Team
c689a92e35 BIP 52: Add misssing layer information; remove private email from Discussions-To 2021-12-16 09:52:27 +01:00
Luke Dashjr
03e10fa3bc
Merge pull request #1229 from junderw/fix/bip38
Clearer language in BIP38
2021-12-16 01:19:56 +00:00
PoWx Team
3a287681a4 BIP 52: Trying to fix CI errors 2021-12-15 23:40:19 +01:00
PoWx Team
abd62086df BIP 52: Trying to fix CI errors 2021-12-15 23:36:35 +01:00
PoWx Team
9292e959d0 BIP 52: Update Comments-URI 2021-12-15 23:27:58 +01:00
PoWx Team
cc636e6f83 Fix Malformed Author line 2021-12-15 23:25:01 +01:00
PoWx Team
da4eb2fb20 Update README 2021-12-15 23:16:50 +01:00
PoWx Team
67a6c4dabb BIP 52 assigned 2021-12-15 23:06:15 +01:00
Luke Dashjr
20da800edb
Merge pull request #1202 from katesalazar/patch-1
BIP 0067: Fix a broken link
2021-12-15 22:01:21 +00:00
Luke Dashjr
480cf342ec
Merge pull request #1179 from jaonoctus/typo/descriptors
typo: BIP [380-385]
2021-12-15 21:59:42 +00:00
Luke Dashjr
63c2a61775
Merge pull request #1227 from psztorc/master
Update BIPs 300/301
2021-12-15 21:56:14 +00:00
Luke Dashjr
bb8dc57da9
Merge pull request #1228 from yanmaani/patch-1
Fix typo in BIP 32
2021-12-15 21:36:13 +00:00
Luke Dashjr
1904334276
Merge pull request #1226 from OrfeasLitos/define-check-119
Define BIP-119 CheckDefaultCheckTemplateVerifyHash
2021-12-15 21:36:04 +00:00
Luke Dashjr
d36ee99961
Merge pull request #1250 from katesalazar/patch-2
BIP 0016: Fix broken link
2021-12-15 21:23:46 +00:00
katesalazar
0d77964a6b
BIP 0016: Fix broken link 2021-12-12 20:59:23 +01:00
Mironenko
d07e499d3f
Fix typo in BIP-32 2021-12-07 19:55:07 +03:00
PoWx Team
ff47e7ef14 Update reverse-compatibility statement 2021-11-25 18:29:10 +01:00
kallewoof
edffe52905
Merge pull request #1242 from benthecarman/patch-3
Allow Taproot outputs in BIP 322
2021-11-24 12:57:12 +09:00
benthecarman
6b9646e159
Allow Taproot outputs in BIP 322 2021-11-23 14:45:38 -06:00
Dr. Maxim Orlovsky
457e3545ba
BIP-174: Removing PSBT_OUT_TAP_LEAF_SCRIPT
`PSBT_OUT_TAP_LEAF_SCRIPT` seemed to appear in output key sections by copy-paste from input section. First, it shares the same byte no as `PSBT_OUT_TAP_TREE`, second its description talks about "witness"
2021-11-23 18:43:34 +01:00
Pavol Rusnak
4fb3cf55eb
BIP 155: add Yggdrasil 2021-11-18 23:55:55 +01:00
kallewoof
d7cc209927
Merge pull request #1236 from achow101/fix-371-formatting
371: Fix test formatting
2021-11-18 07:34:07 +09:00
Paul Sztorc
336136546a tweak formatting 2021-11-17 14:41:13 -05:00
Paul Sztorc
13bbb01bb6 small typo 2021-11-17 14:33:18 -05:00
Andrew Chow
2efad74b02 371: Remove extra character in test 2021-11-16 18:19:51 -05:00
Andrew Chow
61c6a91af8 371: Fix test vector formatting
Missing `<` for some test vectors causing the rendered output to be
incorrect.
2021-11-16 18:19:46 -05:00
kallewoof
fb5bd37d0c
Merge pull request #1235 from MarcoFalke/patch-3
Mention activation heights in BIP 341 🥕
2021-11-17 07:28:03 +09:00
katesalazar
497ad1c81a Remove transparent background from figure.
Before this change, the figure presented black text on transparent
background, which might be unconvenient when using a browser able to
pass a dark theme preference to some environments where this document
is published, currently notably GitHub. A white background could help
a better visualization compromise. White background on the figure is
the single purpose of this revision.

This PNG was compiled using:

    dot -Tpng states.gv -o states.png
2021-11-16 10:00:09 +01:00
kallewoof
bfc4a72742
Merge pull request #1234 from benthecarman/patch-2
Clarify BIP 322 seralization requires a signed transaction
2021-11-14 19:38:57 +09:00
MarcoFalke
9fe72607ce
Mention activation heights in BIP 341 2021-11-13 17:04:02 +01:00
benthecarman
aadfafa770
Clarify BIP 322 seralization requires a signed transaction 2021-11-12 18:14:19 -06:00
kallewoof
93adfba79a
Merge pull request #1225 from sipa/202110_bip341_vectors
BIP341 test vectors
2021-11-13 09:02:48 +09:00
Pieter Wuille
e35a46ecf3 BIP341 test vectors 2021-11-12 12:08:19 -05:00
Orfeas Litos
3ff4a4ce9d
Convert inside CheckDefaultCheckTemplateVerifyHash 2021-11-12 01:08:46 +01:00
olf
fc661ac943
[Nit] Add full stop to conclude sentence
... because in a normative document, it shall be obvious that this sentence was not accidentally truncated.
(Concerns final sentence of footnote / cite-reference 20, https://github.com/bitcoin/bips/edit/master/bip-0341.mediawiki#cite_ref-20-0)
2021-11-12 00:56:35 +01:00
Orfeas Litos
1839f43779
Fix typo 2021-11-11 23:27:52 +01:00
kallewoof
b15514325e
Merge pull request #1224 from brandonblack/master
BIP341/342: Implementation clarifications
2021-11-11 23:31:17 +09:00
kallewoof
1625074e42
Merge pull request #1231 from GambolingPangolin/bip341-link-fix
Fixes a link in BIP 341
2021-11-11 23:26:44 +09:00
Orfeas Litos
897e6458ce
Cast 8-vector of u32 to u256 2021-11-10 23:40:20 +01:00
Ian Shipman
da78942ddd Fixes a link in BIP 341 2021-11-10 14:26:56 -06:00
Dr. Maxim Orlovsky
592cb6fa0c
BIP-341: allow future softforks for leaf version signature verification
Currently the BIP-341 and BIP-342 leave the question of how to verify signature for non-`0xC0` leaf version scripts undefined. I haven't checked the Bitcoin Core code for that matter yet, but (1) I think we need to cover signature validation of non-`0xC0` leaf version scripts in this standard and (2) the only way of doing that is "always succeed" rule for the future leaf version values (otherwise we will need a hard fork to introduce them).
2021-11-08 22:07:28 +01:00
Paul Sztorc
a557ac187e re-add abstract, revise slightly 2021-11-05 08:10:13 -04:00
junderw
4d7a77202b
Clearer language in BIP38 2021-11-05 09:30:20 +09:00
Luke Dashjr
f0cb046b11
Merge pull request #1206 from katesalazar/20211010
BIP 0069: Fix broken link
2021-11-04 23:20:26 +00:00
Luke Dashjr
689757e093
Merge pull request #1182 from tcharding/missing-words
[BIP 157] Add missing words to sentence
2021-11-04 23:19:03 +00:00
Luke Dashjr
915aa02762
Merge pull request #1215 from JeremyRubin/ctv-updates
Minor Updates to BIP-119
2021-11-04 23:05:30 +00:00
Luke Dashjr
d459bb9851
Merge pull request #1221 from kallerosenbaum/bip174in_final
BIP 0174: Clarify use of PSBT_IN_FINAL_* when data is empty
2021-11-04 23:03:05 +00:00
yanmaani
33cc41d497
Fix typo in BIP 32 2021-11-04 17:24:03 +00:00
Brandon Black
6222dc45a3
BIP341: Clarify tweaking of secret keys 2021-11-03 15:05:51 -07:00
Brandon Black
d690408080
BIP341/342: Clarify SigHash extensions
* Pull the definition of the extension in BIP342 to its own section
* Add a section to BIP341 on validating script path signatures
* Clarify that SigMsg does not produce the message being signed, but
a common portion of it
2021-11-03 15:05:49 -07:00
Paul Sztorc
bb6bc39ca7 Update BIP 301
BIPs 300/301 were 2 years old! I have updated, shortened, and clarified them.
2021-11-02 17:48:01 -04:00
Paul Sztorc
5734713d6b Update BIP 300
BIPs 300/301 were 2 years old! I have updated, shortened, and clarified them.
2021-11-02 17:47:47 -04:00
Orfeas Litos
1cab3e87f3
Define BIP-119 CheckDefaultCheckTemplateVerifyHash 2021-11-02 22:36:05 +01:00
Brandon Black
736e79c938
BIP341: SigHash: Clarify encoding of script pub keys 2021-11-01 07:29:05 -07:00
Brandon Black
5b9b44cc79
BIP341: SigHash: Clarify SIGHASH_DEFAULT 2021-11-01 07:20:40 -07:00
Kalle Rosenbaum
a5fd6c8f60 BIP 0174: Clarify use of PSBT_IN_FINAL_* when data is empty 2021-10-27 20:43:34 +02:00
kallewoof
708ce10bbc
Merge pull request #1203 from katesalazar/20211004
Make Wikitext linguist-detectable
2021-10-23 00:01:48 +09:00
Jeremy Rubin
6058f2f669 [BIP-119] Whitspace Consistency 2021-10-16 09:00:48 -07:00
Jeremy Rubin
b305d56352 [BIP-119] Explain Hash Function Choices 2021-10-15 12:47:42 -07:00
Jeremy Rubin
afc605f8e2 [BIP-119] Describe Synergies with future soft fork proposals 2021-10-15 12:47:42 -07:00
Jeremy Rubin
27466fa815 [BIP-119] Better Explain AnyPrevout v.s. CTV 2021-10-15 12:47:42 -07:00
Jeremy Rubin
8364e25ebc [BIP-119] Clarify Draft Deployment Params 2021-10-15 12:47:42 -07:00
PoWx Team
e8363a11bf Add reverse-compatibility statement 2021-10-11 21:41:05 +02:00
katesalazar
7378791235 BIP 0069: Fix broken link 2021-10-10 20:14:52 +02:00
katesalazar
d03bbedb9c BIP 0067: haskell => Haskell 2021-10-10 16:24:57 +02:00
katesalazar
ea11a0ec3a Make Wikitext linguist-detectable
Before this change, repository gets detected as:

Python 66.4%
Go 12.9%
Perl 11.0%
TeX 8.1%
Shell 1.6%

After this change, repository gets detected as:

Wikitext 97.2%
Python 1.9%
Other 0.9%

This change was added for a cosmetic effect on GitHub, and the line
this change adds can go away in any of these cases:

* Conflict with other tool used for reading these documents.

* GitHub ceases to use the line.

* GitHub ceases to be used as a reading medium for these documents.

* GitHub ceases to exist.
2021-10-04 12:11:35 +02:00
katesalazar
26a7824e6b
BIP 0067: Fix a broken link 2021-10-03 22:14:14 +02:00
kallewoof
a79eb556f3
Merge pull request #1200 from kallerosenbaum/patch-4
BIP 370: Use PSBT_GLOBAL_FALLBACK_LOCKTIME in text
2021-10-02 11:43:48 +09:00
Kalle Rosenbaum
c81ed9dab3
BIP 370: Use PSBT_GLOBAL_FALLBACK_LOCKTIME in text
Replacing occurences of PSBT_GLOBAL_PREFERRED_LOCKTIME with PSBT_GLOBAL_FALLBACK_LOCKTIME to match the name in the global map table.
2021-10-01 09:23:22 +02:00
kallewoof
e032df5720
Merge pull request #1198 from kallerosenbaum/patch-2
BIP 0174: Fix typo in PSBT_OUT_BIP32_DERIVATION
2021-09-30 08:10:19 +09:00
kallewoof
c798c9c54b
Merge pull request #1197 from kallerosenbaum/patch-1
BIP 0174: Correct format of PSBT_GLOBAL_TX_MODIFIABLE
2021-09-30 08:09:37 +09:00
Kalle Rosenbaum
8918753df9
Fix typo in PSBT_OUT_BIP32_DERIVATION 2021-09-29 11:40:11 +02:00
Kalle Rosenbaum
33efbb2125
Correct format of PSBT_GLOBAL_TX_MODIFIABLE
The descriptions for this field differ between bip370 and bip174. I suppose the correct format of PSBT_GLOBAL_TX_MODIFIABLE is the one in BIP370.
2021-09-29 11:37:48 +02:00
katesalazar
9f87a75141 Remove transparent background from figures
This increases contrast when reading on GitHub, if GitHub is switched
to dark theme.
2021-09-26 14:46:24 +02:00
Tobin Harding
b7ff66843e [BIP 157] Add missing words to sentence
This sentence does not quite make sense

... the size of a cfcheckpt message is not drastically from a cfheaders
between two checkpoints. ...

Change it to be

... the size of a cfcheckpt message is not drastically different from a
cfheaders message between two checkpoints. ...
2021-09-16 08:12:32 +10:00
jaonoctus
7007dbac00
typo: BIP [380-385] 2021-09-15 09:21:09 -03:00
kallewoof
bd943663d6
Merge pull request #1156 from rage-proof/patch-2
typo in bip-0078
2021-08-31 21:21:57 +09:00
kallewoof
1c7fd9a85c
Merge pull request #1158 from tcharding/gramar-fix-bip-158
[BIP 158] Fix grammar - remove 'was chosen as'
2021-08-31 21:19:46 +09:00
kallewoof
407d1178f3
Merge pull request #1171 from NicolasDorier/woieuq
[BIP78] Fix client implementation when there is output substitution
2021-08-31 19:50:37 +09:00
nicolas.dorier
d8db3d7608
[BIP78] Fix client implementation when there is output substitution 2021-08-31 15:48:16 +09:00
Luke Dashjr
eff059d634
Merge pull request #1118 from JeremyRubin/ctv-name-shedding
Update BIP-119 Variable Names
2021-08-30 18:55:17 +00:00
Jeremy Rubin
c788bd9d08 Update BIP-119 Variable Names 2021-08-30 10:48:33 -07:00
Luke Dashjr
3e68fe48dc
Merge pull request #921 from fametrano/patch-4
added test vector #5 for invalid extended keys
2021-08-30 17:16:21 +00:00
Luke Dashjr
1cafbd1289
Merge pull request #1143 from achow101/descriptors
[BIPs 380-386] Output Script Descriptors
2021-08-30 14:43:54 +00:00
Andrew Chow
761ef12782 Specify BIP 386: Taproot descriptors 2021-08-29 20:12:58 -04:00
Andrew Chow
5403ff90d6 Specify BIP 385: Raw and addr descriptors 2021-08-29 20:12:57 -04:00
Andrew Chow
f52f1e82e5 Specify BIP 384: Combo descriptors 2021-08-29 20:11:10 -04:00
Andrew Chow
608f40b498 Specify BIP 383: Multisig descriptors 2021-08-29 20:10:55 -04:00
Andrew Chow
fb56a18c89 Specify BIP 382: Segwit descriptors 2021-08-29 20:10:53 -04:00
Andrew Chow
bd12ea7e9d Specify BIP 381: Non-segwit descriptors 2021-08-29 20:10:11 -04:00
Andrew Chow
71f435e76b Specify BIP 380: Descriptors general operation 2021-08-29 19:57:30 -04:00
Luke Dashjr
8a050eccbb
Merge pull request #523 from luke-jr/bip43-purposecodes
BIP 43: Reserve purpose codes 10001-19999 for SLIPs
2021-08-29 21:34:50 +00:00
Luke Dashjr
cb8956396e BIP 43: Reserve purpose codes 10001-19999 for SLIPs 2021-08-29 21:33:54 +00:00
Luke Dashjr
949f0e66d3
Merge pull request #1152 from NicolasDorier/patch-14
[BIP78] Recommended fee rate estimation for P2TR
2021-08-29 21:32:03 +00:00
Luke Dashjr
d4923d2269
Merge pull request #1147 from achow101/371-tests
BIP 371: Tests vectors and reference implementation
2021-08-29 21:30:23 +00:00
Luke Dashjr
0298941929
Merge pull request #1146 from kdmukai/patch-1
BIP-48: Trivial errant apostrophe fix
2021-08-29 21:29:49 +00:00
Ferdinando M. Ametrano
f9a81b7791
Merge branch 'master' into patch-4 2021-08-25 22:45:12 +02:00
Tobin Harding
724a688cf9
Fix grammar - remove 'was chosen as'
This sentence grammatically incorrect

 Empirical analysis also shows that was chosen as these parameters ...

Elect to fix the sentence to be:

 Empirical analysis also shows that these parameters ...
2021-08-17 18:41:50 +10:00
Tobin Harding
aa206adf59
Remove newline to fix list rendering
Currently the newline in list items is causing the text on the new line
to be rendered as a code section. I am unsure why but I'm guessing
putting all the text for each list item on a single line will fix it.
2021-08-17 18:35:36 +10:00
rage-proof
ec52492034
typo in bip-0078
This is a transaction with inputs P2SH-P2WPKH 
1. P2SH-P2WPKH is defined as type in this doc and the other type not
2. the RedeemScript(0 c78a45725355828d5658074dd5260d5fcb698530) consists of 0 + <20 bytes> and indicates therefore P2WPKH-Type. https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#P2WPKH_nested_in_BIP16_P2SH
2021-08-17 01:08:10 +02:00
kallewoof
61ccc84930
Merge pull request #1155 from azuchi/fix-psbt2-link
[BIP174] Fix broken link to psbt2
2021-08-16 16:00:35 +09:00
azuchi
5943de4fa4 [BIP174] Fix broken link to psbt2 2021-08-15 15:49:43 +09:00
Nicolas Dorier
1945eda0c2
[BIP78] Recommended fee rate estimation for P2TR
Non-Witness: 

Outpoint size = 32+4
Sequence size = 4
ScriptSig VarInt Size= 1

Witness: 

WitScript VarInt Size= 1
Then script itself: 65 signature size + 1 byte of push opcode

`(32 + 4 + 4 + 1) + (65+1+1)/4=57.75`, rounded up `58`.

We assume 65 of signature size rather than 64, since we can't assume the sighash to be `Default`.
2021-08-05 15:49:41 +09:00
Andrew Chow
deb1c06e5c 371: Add reference implementation 2021-07-23 21:26:49 -04:00
Andrew Chow
6327923e71 371: Add test vectors 2021-07-23 21:26:49 -04:00
kdmukai
99ca1c8876
Trivial errant apostrophe fix
Plural "wallets", not possessive "wallet's".
2021-07-21 08:06:55 -05:00
Luke Dashjr
ed35a418ca
Merge pull request #1072 from Fonta1n3/master
HD Multisig derivation standard
2021-07-20 19:36:44 +00:00
Luke Dashjr
d58d605c0e
Merge pull request #1139 from achow101/taproot-psbt
BIP 371: Taproot Fields for PSBT
2021-07-20 19:36:18 +00:00
Luke Dashjr
03f2d744d3 Fix BIP 48 headers and add to README 2021-07-20 19:31:25 +00:00
Andrew Chow
c583f4dcbe Specify BIP 371 Taproot Fields for PSBT
Add bip-0371.mediawiki, update readme, and update BIP 174 with
new field types.
2021-07-20 15:03:38 -04:00
Luke Dashjr
9b861c2e05
Merge pull request #1142 from RCasatta/lift_x
remove int_from_bytes in lift_x call since it is done internally
2021-07-20 18:40:26 +00:00
Fontan3
84e14b68a6
Update bip-0048.mediawiki
Add code snippets.
2021-07-20 12:30:54 +08:00
Fontan3
90cb1c8906
Update bip-0048.mediawiki 2021-07-20 12:23:59 +08:00
Fontan3
20c5af58f1
Update bip-0048.mediawiki 2021-07-20 10:00:59 +08:00
Fonta1n3
bc05931332
Delete .DS_Store 2021-07-20 09:58:04 +08:00
Fonta1n3
c3c0abd44d
Update bip-0048.mediawiki 2021-07-20 09:45:59 +08:00
Fonta1n3
1eb8a3ca4d
Update bip-0048.mediawiki
- Replace BIP number with ?
- Reduce title to less then 44 characters
- Add MIT Licence and copyright section
- Add specification section
- Add backwards compatibility section
2021-07-20 09:43:55 +08:00
Riccardo Casatta
9cf5c72b56
remove int_from_bytes in lift_x call since it is done internally 2021-07-14 16:42:39 +02:00
kallewoof
99701f68a8
Merge pull request #1141 from sanket1729/patch-3
BIP118: Key version should be 0x01
2021-07-12 21:23:26 +09:00
Sanket Kanjalkar
f62639ab52
BIP118: key version should be 0x01 2021-07-09 01:28:07 -07:00
Luke Dashjr
150ab6f5c3
Merge pull request #943 from ajtowns/bip-anyprevout
Update BIP 118 for taproot, rename to ANYPREVOUT
2021-07-08 17:24:52 +00:00
Luke Dashjr
ad745f2f01
Merge pull request #1127 from chirag64/patch-1
Updated URL of the JavaScript reference implementation
2021-07-02 21:26:17 +00:00
Luke Dashjr
07228b6801
Merge pull request #1137 from achow101/taproot-bip44
BIP 86: Key Derivation for Single Key P2TR Outputs
2021-07-02 20:54:46 +00:00
Luke Dashjr
8659829de1
Merge pull request #1136 from tcharding/bip-32
Remove typo: plural
2021-07-02 20:53:43 +00:00
Andrew Chow
330b56b358 Specify BIP 86: Key Derivation for Single Key P2TR Outputs 2021-07-02 16:53:32 -04:00
Luke Dashjr
cdd8dfd62d
Merge pull request #1133 from Raulo/bip341bech32mfix
Replaces Bech32 by Bech32m in BIP341
2021-07-02 20:42:24 +00:00
Luke Dashjr
ee0f1c3c85
Merge pull request #1134 from vasild/bip155_clarify_sendaddrv2
BIP155: extra-clarify the semantic of sendaddrv2
2021-07-02 20:02:52 +00:00
Luke Dashjr
3cc3c96219
Merge pull request #1135 from achow101/psbt2-fieldnum-typo
psbt2: Fix field number counting
2021-07-02 19:50:23 +00:00
Anthony Towns
d616d5492b BIP118: tweak wording around 1-byte pubkey 2021-07-02 14:47:16 +10:00
Anthony Towns
420dc42f0e BIP118: remove subliminal advertising of Simplicity 2021-07-02 14:47:16 +10:00
Anthony Towns
0cbc8674dd BIP118: refer to bech32m instead of bech32 for segwit v1 outputs
Thanks to Ben Carman for spotting.
2021-07-02 14:47:16 +10:00
Anthony Towns
a8787c51ff Update README 2021-07-02 14:47:16 +10:00
Anthony Towns
5e052176ef Update BIP 118 for taproot, rename to ANYPREVOUT 2021-07-02 14:47:10 +10:00
Tobin Harding
c8d0e63fee
Remove typo: plural
This sentence should use a singular 'key' instead of 'keys'. Change
'knowing an extended public keys allows' to be 'knowing an extended
public key allows'
2021-06-22 10:52:18 +10:00
Andrew Chow
70e37e025d psbt2: Fix field number counting
PSBT_OUT_SCRIPT should be 0x04, not 0x03.
2021-06-21 17:09:14 -04:00
Vasil Dimov
337114b06e
BIP155: extra-clarify the semantic of sendaddrv2 2021-06-16 13:58:53 +02:00
kallewoof
65529b12bb
Merge pull request #1082 from molnard/patch-1
Fix word duplication
2021-06-15 15:49:20 +09:00
kallewoof
127cdc3cda
Merge pull request #1027 from rage-proof/patch-1
BIP-0078: fix typo
2021-06-15 15:49:06 +09:00
kallewoof
f8b9710d20
Merge pull request #1022 from AdamISZ/update-jm-bip78
update Joinmarket BIP78 status
2021-06-15 15:48:47 +09:00
Raulo
5919ade31c
Replaces Bech32 by Bech32m in BIP341
Segwit version 1 is encoded by Bech32m given by BIP350
2021-06-14 09:27:50 +00:00
kallewoof
c142b518d6
Merge pull request #1132 from AndreasGassmann/patch-1
BIP85: Add AirGap Vault implementation
2021-06-14 11:00:40 +09:00
Andreas Gassmann
88e1514f08
BIP85: Add AirGap Vault implementation 2021-06-14 03:16:46 +02:00
kallewoof
36a0855546
Merge pull request #1095 from eMaringolo/patch-2
[BIP 39] Add reference implementation
2021-06-13 12:43:09 +09:00
kallewoof
d8599f9b6b
Merge pull request #1051 from pinheadmz/bip173-witnessversion1
BIP173: segwit address witness version is one 5-bit char not one byte
2021-06-13 12:38:43 +09:00
kallewoof
fb6930cc1d
Merge pull request #1109 from Crypt-iQ/tuple_fix_04232021
BIP 341: fix tuple index in taproot_tweak_pubkey
2021-06-13 12:38:32 +09:00
kallewoof
928cbe9a5a
Merge pull request #1123 from dgpv/BIP88-edits
BIP88: add Acknowledgements section
2021-06-13 12:38:16 +09:00
kallewoof
dd68abc524
Merge pull request #1120 from t-bast/bip-174
BIP 174: clarify key uniqueness
2021-06-13 12:38:05 +09:00
kallewoof
7e16a94948
Merge pull request #1125 from dgpv/BIP88-edit-example-h0
BIP88: fix description of the "*h/0" example
2021-06-13 12:37:53 +09:00
Luke Dashjr
4493524f72
Merge pull request #1130 from tcharding/add-bip-links
Minor fixes to BIP-0009
2021-06-12 01:44:51 +00:00
kallewoof
d2766d043f
Merge pull request #1030 from silencer-Tsai/test-vectors
BIP32: Modified test vectors for hardened derivation with leading zeros
2021-06-12 09:01:48 +09:00
kallewoof
d7477a28ac
Merge pull request #1077 from dr-orlovsky/patch-6
Removing size param (not used anymore)
2021-06-12 09:00:36 +09:00
kallewoof
252bee9295
Merge pull request #1116 from jnewbery/2021-05-bip-editors
Add Kalle Alm as BIP editor
2021-06-11 19:48:35 +09:00
John Newbery
4e53b6e6c4 Add Kalle Alm as BIP editor
Update language to clarify that there are multiple editors.
2021-06-11 10:19:15 +01:00
Tobin Harding
f59b209b91
Fix typo, remove 'in'
Phrase 'based on in BIP 43' should probably read 'based on BIP 34'.
2021-06-09 10:33:59 +10:00
Tobin Harding
9ee9717310
Use hyperlinks when mentioning bips
When mentioning a bip we use a hyperlink to the bip file to assist
readers. There are two mentions of bips in BIP-0009 that do not use
links, probably because links where provided above in the text, however,
its a bit easier on the reader if we provide links again to save
scrolling through the document.

Use hyperlinks when mentioning BIP 34 and 141 in isolation.
2021-06-09 10:31:42 +10:00
Chirag Bhatia
cdbe675223
Updated URL of the JavaScript reference implementation
Old repo is archived and links to the new repo are found in the old one's README file. This change updates the old repo's link to the new one.
2021-06-06 17:34:30 +05:30
Esteban A. Maringolo
135f95ffb7
Update bip-0039.mediawiki
Fixes syntax error.

Co-authored-by: Pavol Rusnak <pavol@rusnak.io>
2021-05-28 20:20:47 -03:00
PoWx Team
250cf54409 [DRAFT] Durable, Low Energy Bitcoin PoW 2021-05-26 19:57:34 +02:00
Dmitry Petukhov
240de39b23
BIP88: fix description of the "*h/0" example 2021-05-26 17:45:01 +05:00
Dmitry Petukhov
de829ac445
BIP88: add Acknowledgements section 2021-05-19 13:08:14 +05:00
Luke Dashjr
6a5c99fcc9 Merge branch 'master' of github.com:bitcoin/bips 2021-05-18 00:09:26 +00:00
Luke Dashjr
2349ee46f0 Merge remote-tracking branch 'origin-pull/935/head' 2021-05-18 00:09:16 +00:00
Luke Dashjr
8b352218bf
Merge pull request #1121 from danpape/bip-0136-bech32m
BIP-0136: updates data encoding/decoding examples due to bech32m/bech32
2021-05-17 23:35:03 +00:00
Luke Dashjr
40b68284eb
Merge pull request #1122 from jonasnick/bip340-remove-graph
BIP340: remove batch speedup graph and link to it instead
2021-05-17 23:34:19 +00:00
Luke Dashjr
a099f43ce2 Merge BIP 343 2021-05-17 23:33:33 +00:00
Luke Dashjr
e7ee4fe6d5 Fix formatting for BIP 343 2021-05-17 23:33:22 +00:00
Luke Dashjr
3893c2d3bd Merge BIP 87 2021-05-17 23:28:48 +00:00
Luke Dashjr
eb7ab7ab41 README: Fix colours for BIPs 87 & 90 2021-05-17 23:28:17 +00:00
Luke Dashjr
868c4f8ada
Merge pull request #1025 from dgpv/bip-path-templates
BIP 88: Templates for Hierarchical Deterministic derivation paths
2021-05-17 23:20:21 +00:00
Jonas Nick
255b5b67c0 BIP340: remove batch speedup graph and link to it instead
This avoids having to update the BIP with a fresh graph every time there's a
change to libsecp and suggests that the expected speedup depends on the specific
implementation.
2021-05-17 14:55:13 +00:00
Dmitry Petukhov
abc113edd4
BIP88: Add definition for "length of the template", "length of the path" 2021-05-17 15:03:02 +05:00
Michael Folkson
7bf9c1b84d Update README 2021-05-17 10:18:40 +01:00
Michael Folkson
14f731e3d2 BIP 343 assigned 2021-05-17 10:09:34 +01:00
Dmitry Petukhov
b628a13e21
BIP88: use <code> tags more, instead of double quotes 2021-05-16 12:53:18 +05:00
Dmitry Petukhov
01679c8f29
BIP88: clarifications, mistype fixes 2021-05-16 12:38:37 +05:00
Dmitry Petukhov
3d9a359d1d
BIP88: number assigned, rename file and update README 2021-05-15 11:37:02 +05:00
Dmitry Petukhov
25f8c3e694
bip-path-templates: Add Compatibility section 2021-05-15 11:24:37 +05:00
Dmitry Petukhov
c90c76bc1b
bip-path-templates: describe Wildcard index range 2021-05-15 11:24:37 +05:00
Dmitry Petukhov
6ffc3542f8
bip-path-templates: Change chars for ranges from "[]" to "{}" 2021-05-15 11:24:37 +05:00
Dmitry Petukhov
2305c5bda6
Add BIP draft for BIP32 path templates 2021-05-15 11:24:36 +05:00
Robert Spigler
2371906f02
Minor edit 2021-05-15 01:22:45 -04:00
Robert Spigler
d502f681b8
Minor edits and links 2021-05-15 01:15:09 -04:00
Robert Spigler
7663693310
Change name for CI 2021-05-15 00:57:54 -04:00
Robert Spigler
9c40c18dbe
Link to merged BSMS, update examples 2021-05-15 00:55:41 -04:00
Robert Spigler
42d7ae8c09 Merge branch 'bitcoin:master' into v2_Multisig_deriv 2021-05-15 00:46:03 -04:00
Luke Dashjr
5bbfab9c56
Merge pull request #1097 from hugohn/bip-hugonguyen-bsms
BIP 129: Bitcoin Secure Multisig Setup (BSMS)
2021-05-15 04:29:03 +00:00
Robert Spigler
7e10290920
Rename BIP 87: Modern Hierarchy for Deterministic Multisignature Wallets.mediawiki to bip-0087.mediawiki 2021-05-14 23:55:43 -04:00
Robert Spigler
10e4bc6668
Update README.mediawiki 2021-05-14 23:49:08 -04:00
Robert Spigler
cd223ea64a
BIP 87 assigned 2021-05-14 23:36:00 -04:00
Hugo Nguyen
c9249b230b
update URI 2021-05-14 18:43:50 -07:00
Hugo Nguyen
76c103a0ef
Fix email format 2021-05-14 18:38:11 -07:00
Hugo Nguyen
0e9aef5d9e
Correct BIP number 2021-05-14 18:37:07 -07:00
Hugo Nguyen
73e581ca06
BIP 129: Bitcoin Secure Multisig Setup (BSMS) 2021-05-14 18:29:58 -07:00
Hugo Nguyen
b644e2933e
update BIP number and rename file 2021-05-14 18:14:08 -07:00
Daniel X. Pape
349d2ee295
updates data encoding/decoding examples due to bech32m/bech32 2021-05-14 14:54:24 -07:00
t-bast
4a1077d40e
BIP 174: clarify key uniqueness
The description of keytype incorrectly said it had to be unique: it's the
whole key that must be unique, not the keytype (since we can for instance
have multiple xpubs in the global map).
2021-05-11 16:17:40 +02:00
Hugo Nguyen
47847fe874
minor edit 2021-05-11 03:36:32 -07:00
Michael Folkson
37b55d2fde BIP: Mandatory activation of taproot deployment 2021-05-09 10:42:33 +01:00
Hugo Nguyen
229a60bf8e
update Compatibility section 2021-05-07 19:42:44 -07:00
Hugo Nguyen
f13cd8dde9
update Compatibility section 2021-05-05 20:05:08 -07:00
Hugo Nguyen
0408b412f9
minor edit 2021-05-04 21:58:10 -07:00
Hugo Nguyen
83aa04776d
update Compatibility section 2021-05-04 21:35:05 -07:00
Hugo Nguyen
83e9b39eb9
fix test vector 2021-04-28 08:44:25 -07:00
Hugo Nguyen
3f050db64e
add Compatibility section 2021-04-28 08:25:43 -07:00
eugene
b1dbe62a21 BIP 341: fix tuple index 2021-04-26 17:43:41 -04:00
Dr. Maxim Orlovsky
dd39e2234c
BIP-21 remove of all "size" mentions 2021-04-26 22:55:25 +02:00
Robert Spigler
653b965f15
Add BSMS reference and key origin info 2021-04-26 14:55:39 -04:00
Robert Spigler
4794d70c5e
Merge pull request #3 from bitcoin/master
Update local
2021-04-25 23:57:34 -04:00
Robert Spigler
7ae9e025e8
Minor edits, + backwards compatibility 2021-04-25 23:52:46 -04:00
Luke Dashjr
40b10c83db
Merge pull request #1104 from ajtowns/202103-bip341-speedy-trial-mtp
BIP341: speedy trial activation parameters
2021-04-25 21:54:10 +00:00
Hugo Nguyen
cf00b45679
upgrade EXTENDED mode to 128-bit 2021-04-24 22:00:03 -07:00
Hugo Nguyen
e82de1d3bb
minor edit 2021-04-24 21:02:18 -07:00
Hugo Nguyen
75bb056596
minor edit 2021-04-24 20:57:24 -07:00
Hugo Nguyen
de79a73b49
add a test vector for public keys 2021-04-24 20:32:36 -07:00
Hugo Nguyen
45bc31d83d
minor edit 2021-04-24 20:24:30 -07:00
Hugo Nguyen
3ecad81bea
update test vectors 2021-04-24 01:21:19 -07:00
Hugo Nguyen
abbb76e987
Minor edit 2021-04-24 00:46:24 -07:00
Luke Dashjr
b966bd3ebd
Merge pull request #1093 from MarcoFalke/patch-2
BIP 325: Remove empty section "Acknowledgement"
2021-04-23 02:11:27 +00:00
Luke Dashjr
d4ed08fd7c
Merge pull request #1102 from fresheneesz/fresheneesz-minor-patch-1
Minor: linking BIPs in BIP9
2021-04-22 23:11:30 +00:00
Luke Dashjr
b233501d0c
Merge pull request #1103 from jonasnick/bip341-testvectors
BIP 341/342: Add link to Bitcoin Core test vectors
2021-04-22 22:52:12 +00:00
Luke Dashjr
375f11a30c
Merge pull request #1099 from achow101/more-psbt-tests
BIP 174: Add test vectors for additional unsigned tx serialization
2021-04-22 22:51:05 +00:00
Luke Dashjr
5935963e77
Merge pull request #1094 from kiminuo/patch-3
Update bip-0174.mediawiki
2021-04-22 22:45:04 +00:00
Luke Dashjr
48cc3ae3b2
Merge pull request #1086 from 8go/patch-2
BIP-85: Added Ian Coleman's Mnemonic Code Converter
2021-04-22 22:35:28 +00:00
Luke Dashjr
833040dabf
Merge pull request #1074 from sanket1729/patch-1
Change `witness` to signature
2021-04-22 22:29:34 +00:00
Robert Spigler
ccc8af43b0
Address Discovery Fixes 2021-04-21 15:13:23 -04:00
Robert Spigler
f18ddfbfa5
Update Modern Hierarchy for Deterministic Multisignature Wallets.mediawiki
Formatting
2021-04-19 18:09:59 -04:00
Robert Spigler
25bacdc21d
Update Modern Hierarchy for Deterministic Multisignature Wallets.mediawiki
Fix formatting
2021-04-19 18:08:52 -04:00
Robert Spigler
d95aa3329d
Update Modern Hierarchy for Deterministic Multisignature Wallets.mediawiki
Some minor fixes, address gap fixes, backup clarification
2021-04-19 18:03:24 -04:00
Hugo Nguyen
3eb481c551
minor edit 2021-04-19 09:48:59 -07:00
Hugo Nguyen
9771c5e2a8
replace XPUBs with keys to be more generic 2021-04-19 09:19:28 -07:00
Hugo Nguyen
17a5a858e2
introduce descriptor template 2021-04-19 09:03:42 -07:00
Hugo Nguyen
01e9ce9373
update test vectors 2021-04-16 20:19:33 -07:00
Hugo Nguyen
633dab3952
move descriptor to the second line in the descriptor record 2021-04-16 19:28:04 -07:00
Hugo Nguyen
f2e81c8c50
include and verify the wallet's first address in round 2 2021-04-16 02:38:58 -07:00
Hugo Nguyen
f31fa9c1e4
clarify Signer definition and add reference links 2021-04-15 21:13:53 -07:00
fresheneesz
593324754f
Changing BIP links in BIP9 to relative urls. 2021-04-14 08:53:21 -10:00
Anthony Towns
93d1b15285 BIP341: add brackets to avoid ambiguity due to precendence rules around bipwise ops 2021-04-14 02:45:56 +10:00
Jonas Nick
43b5f171dc BIP 341/342: Add link to Bitcoin Core test vectors
Also remove mention of non-existing examples.
2021-04-13 15:04:17 +00:00
fresheneesz
cda85c75c1
Minor: linking BIPs in BIP9 2021-04-12 08:26:18 -10:00
Anthony Towns
ce5f89fe0d BIP341: add testnet3 parameters 2021-04-13 01:35:07 +10:00
Andrew Chow
754b77a915 BIP 174: Add test vectors for additional unsigned tx serialization
There are some edge cases with unsigned tx serialization, so this adds
test vectors for them. Specifically, an unsigned tx with witness
serialization is invalid, a transaction with 0 inputs and 0 outputs is
valid, and a transaction with 0 inputs and non-0 outputs is valid.
2021-04-08 13:34:18 -04:00
Anthony Towns
d582d0bd31 BIP341: document simplified bip9 states 2021-04-08 21:25:10 +10:00
Anthony Towns
0f95720639 BIP341: bip9 speedy trial parameters 2021-04-08 21:24:13 +10:00
Hugo Nguyen
89c7529650
BIP: Bitcoin Secure Multisig Setup (BSMS) 2021-04-04 23:46:06 -07:00
Esteban A. Maringolo
1550323225
Add reference implementation 2021-03-31 17:01:51 -03:00
kiminuo
f45d7c5784
Update bip-0174.mediawiki
I, personally, find this easier to read.
2021-03-31 10:22:39 +02:00
Luke Dashjr
1f0b563738
Merge pull request #1087 from jonasnick/bip8-nit
BIP8: remove redundant and conflicting sentence from param selection and fix typo
2021-03-29 22:38:50 +00:00
MarcoFalke
1145b99735
BIP 325: Remove empty section "Acknowledgement" 2021-03-29 13:52:28 +02:00
Anthony Towns
a516c135ab BIP341/342: document current deployment status 2021-03-26 06:33:05 +10:00
Robert Spigler
c7cd5e990b
Formatting 2021-03-22 15:34:18 -04:00
Robert Spigler
b1c2b5c671
Fix errors 2021-03-22 15:27:20 -04:00
Jonas Nick
e1def09d6d BIP8: fix typo: 2 retarget intervals are 4032 blocks. 2021-03-22 12:57:36 +00:00
Jonas Nick
f5a3140f21 BIP8: remove redundant and conflicting sentence from param selection
At the end of the param selection section it's explicitly stated that
startheight _must_ be a multiple of 2016.
2021-03-22 12:56:59 +00:00
Robert Spigler
453d328265
Grammar/formatting 2021-03-22 01:27:52 -04:00
Robert Spigler
1361af2f73
Merge pull request #1 from Rspigler/Sane_Mulitisg_deriv
[DRAFT] Modern Hierarchy for Deterministic Multisignature Wallets
2021-03-22 01:10:40 -04:00
Robert Spigler
5161601435
Merge pull request #2 from bitcoin/master
Update local
2021-03-22 01:07:54 -04:00
Robert Spigler
ba9f775ef6
Formatting 2021-03-22 01:01:55 -04:00
Robert Spigler
73dce7aafc
BIP2 compliance. Add rationale, addresss discovery, etc. 2021-03-22 00:59:46 -04:00
Luke Dashjr
dacd6a2fc2
Merge pull request #1080 from achow101/bip8-more-params
BIP 8: Add minimum activation height
2021-03-20 19:44:52 +00:00
Andrew Chow
54fe11608c Add minimum activation height to BIP 8 2021-03-20 15:03:49 -04:00
Robert Spigler
f4cea61a4e
Clarifications 2021-03-18 18:00:39 -04:00
Robert Spigler
b4af07c8a7
Add PSBT and ML reference 2021-03-18 17:16:15 -04:00
Robert Spigler
8c346ca3ba
Revert to multisig only 2021-03-18 17:15:07 -04:00
8go
4817829dc8
BIP-85: Added Ian Coleman's Mnemonic Code Converter
- Added Ian Coleman's Mnemonic Code Converter to the "Other Implementations" section
- https://iancoleman.io/bip39/ is a nice tool to play around with and to derive test data for BIP-85

PS: Sorry that I did not include this in the previous PR #1083. I just found this this very moment, but I think it is worth while to include because it gives the user/reader an instant tool to play with and to see results of BIP-85.
2021-03-15 21:28:48 +00:00
Luke Dashjr
cd3885c0fb
Merge pull request #1078 from dr-orlovsky/patch-5
Fixing Simple Signer Algorithm
2021-03-15 20:17:23 +00:00
Luke Dashjr
d7cc27613e Merge BIP 370 2021-03-15 20:16:33 +00:00
Luke Dashjr
4edd978046 Fix Comments-URI for BIP 370 2021-03-15 20:16:20 +00:00
Luke Dashjr
36981bccc6
Merge pull request #1083 from 8go/patch-1
BIP 85: fixed some typos and minor English mistakes
2021-03-15 20:13:38 +00:00
Luke Dashjr
9bad9b5aca
Merge pull request #1085 from ethankosakovsky/patch-1
BIP85: fixed test vector.
2021-03-15 20:13:17 +00:00
Luke Dashjr
43b268c1c5
Merge pull request #1079 from Matthiti/patch-1
Fix typos in BIP 2
2021-03-15 20:10:53 +00:00
Robert Spigler
deba2a75be
Clarify testnets 2021-03-14 16:02:45 -04:00
ethankosakovsky
07d208ed09
BIP85: fixed test vector. 2021-03-13 14:38:27 +08:00
Robert Spigler
c747ee9880
Update Modern Derivation Standard.mediawiki
minor edit
2021-03-12 17:32:50 -05:00
Robert Spigler
ef3a16eeec
Update and rename Multisig Derivation Standard.mediawiki to Modern Derivation Standard.mediawiki
Multisig and singlesig support
2021-03-12 16:57:55 -05:00
Robert Spigler
a067f9ca08 Formatting 2021-03-11 16:17:51 -05:00
Robert Spigler
675c3a8703
Create Multisig Derivation Standard.mediawiki
Draft
2021-03-11 03:11:51 -05:00
Suhas Daftuar
f2d5867bc7 Add further restrictions on disabletx
Clarify that peers must set fRelay=false in order to send disabletx,
and that notfound messages may not be sent.
2021-03-09 14:25:38 -05:00
8go
3635e0ec66
fixed some typos and minor English mistakes 2021-03-09 17:12:08 +00:00
Dávid Molnár
38d2454210
Fix word duplication 2021-03-09 09:09:52 +01:00
Matthijs Roelink
726cbf100c
Fix typos in BIP 2 2021-03-06 20:24:56 +01:00
Dr. Maxim Orlovsky
a29c14f664
Removing size param (not used anymore) 2021-03-06 02:13:08 +01:00
Andrew Chow
eaaf376099 174: Change PSBT unknown fields test to use higher numbers
Previously these tests were using 0x0f as the unknown field number. As
these have now been defined, change them to use 0xf0 instead as it is
unlikely we will use those anything soon.
2021-03-04 16:14:45 -05:00
Luke Dashjr
333fc69ab9
Merge pull request #1004 from prayank23/bip125-backwardscompatibility
BIP 125: Change 'Client support' to 'Backwards compatibility'
2021-03-03 06:02:51 +00:00
Dr. Maxim Orlovsky
6db1e16486
Fixing Simple Signer Algorithm
Simple Signer Algorithm was lacking an index argument (last one) on all function calls
2021-03-02 20:26:59 +01:00
Sanket Kanjalkar
c3f7e6fe56
Change witness to signature
As per my understanding, the value is committed in the signature(sighash msg) and is not being supplied as an additional witness
2021-03-01 23:01:26 -08:00
Fonta1n3
0b667770d8
fix: typo 2021-02-28 09:48:29 +08:00
Fonta1n3
8a3a8bd042
fix: update to provide for future extensibility 2021-02-28 09:24:59 +08:00
Fonta1n3
dd3033f0dd
fix: this is specific to an existing standard only 2021-02-27 11:29:31 +08:00
Luke Dashjr
48b3896e6e Merge branch 'bip8_threshold' 2021-02-26 19:49:50 +00:00
Luke Dashjr
82000f65c1 Merge remote-tracking branch 'origin-pull/1073/head' 2021-02-26 19:47:43 +00:00
Luke Dashjr
5c6f02343e
Merge pull request #1070 from luke-jr/bip8_elaborate
BIP 8: Elaborate and clarify parameter selection
2021-02-26 19:45:00 +00:00
Antoine Poinsot
a118ef42a6
bip8: mention in intro the forced activation is optional
Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
2021-02-26 14:18:35 +01:00
Antoine Poinsot
ca77342417
bip8: remove recommendation to force activation after a year
Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
2021-02-26 13:33:36 +01:00
Fonta1n3
787ed87ff3
Merge remote-tracking branch 'upstream/master' 2021-02-24 22:15:55 +08:00
Fonta1n3
32d6ee217a
fix: bip number not actually assigned 2021-02-24 21:38:46 +08:00
Fonta1n3
bf8c208da5
fix: define motivation, remove account creation blurb. 2021-02-24 21:36:10 +08:00
Fonta1n3
86e77903ba
fix: remove legacy references 2021-02-24 21:27:15 +08:00
Luke Dashjr
72bf969a17 BIP 8: Avoid speculating precisely on how soon the economic majority might be upgraded 2021-02-17 21:07:56 +00:00
Luke Dashjr
1e25eb98f6 BIP 8: Advise not choosing a bit being used for other things 2021-02-17 21:02:51 +00:00
Luke Dashjr
663efa52d4 BIP 8: Move recommendation for "name" to "Selection guidelines" 2021-02-17 21:01:03 +00:00
Luke Dashjr
6ea5857b62 BIP 8: Reduce threshold recommendation to 90% 2021-02-17 20:58:33 +00:00
Luke Dashjr
febdf1312a BIP 8: Make threshold a parameter 2021-02-17 20:58:22 +00:00
Justus Ranvier
bc069fa050 Finalize BIP-47 2021-02-15 06:22:42 -09:00
Justus Ranvier
5ec9df085e BIP-0047: Adjust text to match test vectors
The original implementation of BIP-47 in Samourai Wallet reversed
the parameters in the calculation of the HMAC-SHA512 step of
notification transaction blinding.

This change adjusts the text to match the as-implementend behavior
in deployed BIP-47 wallets and the test vectors.
2021-02-15 06:09:04 -09:00
Luke Dashjr
3a7585365f
Merge pull request #1045 from koushiro/koushiro/add-bip0039-rs
Add another Rust implmentation of BIP-0039
2021-02-12 21:29:20 +00:00
Luke Dashjr
fbef072a91
Merge pull request #1029 from meherett/patch-1
BIP-0039: Add Python-HDWallet package
2021-02-12 21:28:59 +00:00
Andrew Chow
b3d224f384 Specify BIP 370 PSBTv2 2021-02-12 16:09:35 -05:00
Luke Dashjr
19c429ee28 Merge BIP 338 2021-02-12 21:04:39 +00:00
Luke Dashjr
bb9af2ac04 README: Fix colour for BIP 79 2021-02-12 21:04:33 +00:00
Luke Dashjr
d2853bcc51 Assign BIP 338 for Disable transaction relay message 2021-02-12 21:03:39 +00:00
Suhas Daftuar
31f61e7175 Mention compatibility with bip 37 2021-02-12 08:49:44 -05:00
Suhas Daftuar
332b9a4854 Note that tx messages are never allowed on disabletx links 2021-02-12 08:20:07 -05:00
Suhas Daftuar
55a31eb8ee Add more language in hope of BIP number assignment 2021-02-11 13:45:26 -05:00
Wladimir J. van der Laan
4504be9cf1
Merge #1044: BIP155: Remove external link
cd1f225a0b BIP 155: Remove bitcoin.org link. (kiminuo)

Pull request description:

  Fix link.

ACKs for top commit:
  laanwj:
    Thanks you, ACK cd1f225a0b

Tree-SHA512: f798246ddffc2564385a2e071da02e47457ced15e502a8b500a10c2a4f5134cea750042e916bbfac39966e85efd554ad333a908be602a4cfcf09fa058840a527
2021-02-10 09:06:21 +01:00
kiminuo
cd1f225a0b BIP 155: Remove bitcoin.org link. 2021-02-10 08:07:09 +01:00
Luke Dashjr
faeb2ccd24
Merge pull request #1066 from SomberNight/202002_bip350_fix_links
bip-0350: fix links for reference implementations
2021-02-09 22:04:33 +00:00
Luke Dashjr
1174b26c85
Merge pull request #1062 from sipa/202102_bip350_lost_improvements
A few lost improvements to BIP350
2021-02-09 22:04:16 +00:00
Luke Dashjr
ec213e18c9
Merge pull request #1063 from ajtowns/202102-bip8-simplify-mustsignal-check
bip 8: simplify MUST_SIGNAL check
2021-02-08 18:46:11 +00:00
SomberNight
b58dd7bc1a
bip-0350: fix links for reference implementations 2021-02-05 18:38:42 +01:00
Anthony Towns
63d2800fab bip 8: simplify MUST_SIGNAL check 2021-02-04 12:51:11 +10:00
Luke Dashjr
518fd3fe07 Merge remote-tracking branch 'origin-pull/1036/head' 2021-02-04 00:56:42 +00:00
Luke Dashjr
30900e63f8
Merge pull request #1039 from Greg-Griffith/bip34-encoding-clarification
BIP34 encoding clarification
2021-02-04 00:52:31 +00:00
Pieter Wuille
c5b392cce1 Add back a few lost improvements 2021-02-03 16:22:46 -08:00
Luke Dashjr
53b79a6f78 Merge remote-tracking branch 'origin-pull/1048/head' 2021-02-03 23:01:07 +00:00
Luke Dashjr
ab14d17218
Merge pull request #1056 from sipa/bip-bech32m
Add BIP 350 (bech32m)
2021-02-03 22:58:30 +00:00
Luke Dashjr
9288ad7c3a Merge branch 'master' of github.com:bitcoin/bips 2021-02-03 22:57:01 +00:00
Luke Dashjr
942ef07e72 Merge remote-tracking branch 'origin-pull/1058/head' 2021-02-03 22:48:26 +00:00
Luke Dashjr
cf13cfa250
Merge pull request #988 from dr-orlovsky/patch-1
BIP 174: require creator to initialize empty output fields
2021-02-03 22:47:20 +00:00
Luke Dashjr
f70132e58b BIP 174: Revert title change to fit length limit
This partially reverts c0991047e2.
2021-02-03 22:33:18 +00:00
Luke Dashjr
bc50a299a6
Merge pull request #1054 from darosior/bip141_multisig_sigops
bip-0141: clarify the sigop count calculation for CHECKMULTISIG
2021-02-03 22:27:44 +00:00
Luke Dashjr
ee523cd9a9
Merge pull request #1055 from achow101/reorganize-psbt
BIP 174: Reformat, reorganize, and mark final
2021-02-03 22:26:59 +00:00
Luke Dashjr
707dea4307 Merge remote-tracking branch 'origin-pull/1040/head' 2021-02-03 22:25:27 +00:00
Luke Dashjr
3b0662a622
Merge pull request #1047 from prusnak/bip39-wordlist-warning
bip39: discourage from using localized wordlists
2021-02-03 22:19:52 +00:00
Luke Dashjr
ef89ae83eb
Merge pull request #1046 from luke-jr/readme_link_bip2
README: Link BIP 2 for submissions
2021-02-03 22:15:24 +00:00
Luke Dashjr
f15b0d0b0a
Merge pull request #1035 from multisignature/patch-1
Update bip-0079.mediawiki
2021-02-03 22:15:14 +00:00
Luke Dashjr
bcbc83f0c8
Merge pull request #1026 from rikitau/bip85-fix-typo
BIP-0085: fix typo
2021-02-03 22:14:07 +00:00
Luke Dashjr
c0be0307fc
Merge pull request #1042 from OrfeasLitos/clarify-nonce
Mention that public nonce is ''R'' and private nonce is ''s''
2021-02-03 22:11:19 +00:00
Luke Dashjr
e78a64fc97
Merge pull request #1028 from kallewoof/202010-signmsg2
BIP-322: minor clarification
2021-02-03 22:04:31 +00:00
Luke Dashjr
2fb8635054
Merge pull request #1018 from hoganri/patch-2
BIP 0085: Add link to JavaScript library implementation
2021-02-03 21:56:44 +00:00
Luke Dashjr
0aa8c3ae02
Merge pull request #1021 from ajtowns/202010-bip8-mustsignal-to-threshold
BIP8: allow some MUST_SIGNAL blocks to not signal
2021-02-02 20:30:41 +00:00
Luke Dashjr
79cd91ec98
Merge pull request #1020 from ajtowns/202010-bip8-lockedin-rec
BIP8: Make signalling during LOCKED_IN recommended rather than mandatory
2021-02-02 19:52:33 +00:00
omar shibli
e2cfb55f2f reject BIP175 2021-01-31 21:38:39 +02:00
Pieter Wuille
6446f2af0a Update bip-0350.mediawiki
Co-authored-by: andrewtoth <andrewstoth@gmail.com>
2021-01-29 13:41:08 -08:00
Pieter Wuille
d3874ff3ec Update bip-0350.mediawiki
Co-authored-by: andrewtoth <andrewstoth@gmail.com>
2021-01-29 13:41:08 -08:00
Pieter Wuille
e192983f5b Update bip-0350.mediawiki
Co-authored-by: andrewtoth <andrewstoth@gmail.com>
2021-01-29 13:41:08 -08:00
Pieter Wuille
6128a7bcb6 Add BIP 350 (bech32m) 2021-01-29 13:41:08 -08:00
Suhas Daftuar
794f20a131 Add link to implementation
Also change the phrasing to more clearly indicate when block-relay-only peering
was deployed.
2021-01-26 11:46:35 -05:00
Andrew Chow
88fb205264 Combine Appendix with field listing tables 2021-01-25 17:13:57 -05:00
Andrew Chow
c27d5e8b96 Mark BIP 174 as final 2021-01-25 17:13:57 -05:00
Andrew Chow
80df41818e Include PSBT versions that can or must include field 2021-01-15 13:01:24 -05:00
Andrew Chow
a4fb1b9de0 Specify procedure for new fields and versions 2021-01-15 13:01:24 -05:00
Andrew Chow
c0991047e2 Explicitly specify PSBTv0 2021-01-15 13:01:19 -05:00
Andrew Chow
50fdf5435e Reformat BIP 174 2021-01-14 12:50:27 -05:00
Rusty Russell
6057fede05 BIP 174: clarify format of proprietary extensions.
"Variable length string identifier" is not defined anywhere, and the suggestion
to use "0x00" is also deeply unclear.  I assumed it meant a nul-terminated
string!

Be explicit: you mean it must be a compact siz1\e unsigned int length, followed
by that many identifier bytes, followed by a compact size unsigned int subtype,
followed by optional keydata.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2021-01-13 16:55:42 -05:00
Antoine Poinsot
644610f7b8
bip-0141: clarify the sigop count calculation for CHECKMULTISIG
Since the sigOpCount calculation was copied from P2SH, and P2SH
restricts the use of CHECKMULTISIG with pushed integers the reference
implementation would not take into account the number of public keys for
17 to 20 keys (not representable with an OP_N) even for P2WSH.
Therefore it fallbacks to accounting for 20 sigops in this case, which
this sentence seemed to mismatch with.

Btcd and Libbitcoin use the same calculation as in Bitcoin Core.

Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
2021-01-11 10:53:59 +01:00
Suhas Daftuar
5f18700477 p2p: Add disabletx message
This message, valid between version/verack for peers with version >= 70017,
would allow establishing at the time of connection that no transactions will be
announced/requested between those peers.
2021-01-06 11:41:06 -05:00
Matthew Zipkin
e1e7b77c02
BIP173: segwit address witness version is one 5-bit char not one byte 2021-01-05 10:10:50 -05:00
Andrew Poelstra
c624414119 bip-0322: remove the 'to_spend' transaction from serialization 2020-12-23 15:48:08 +00:00
Andrew Poelstra
9e1beef6ac bip-0322: overhaul/rewrite verification rules 2020-12-23 15:47:27 +00:00
Andrew Poelstra
dbb81b3652 bip-0322: move "legacy" section up, separate "proof of funds", summarize the signature types 2020-12-23 15:45:59 +00:00
Andrew Poelstra
f778098deb bip-0322: replace motivation, add myself to the "thanks to" list 2020-12-23 15:39:45 +00:00
Pavol Rusnak
a78b211d23 bip39: discourage from using localized wordlists 2020-12-22 00:08:33 +01:00
Luke Dashjr
cf0b529e78
Merge pull request #998 from sabotag3x/master
Add Portuguese wordlist to BIP39
2020-12-20 19:01:59 +00:00
Luke Dashjr
518bb8bf4f README: Link BIP 2 for submissions 2020-12-18 03:53:37 +00:00
koushiro
e963414eee Add a link of another Rust implmentation of BIP-0039
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
2020-12-17 22:20:40 +08:00
Fonta1n3
38096cedd9
remove bip44 stuff 2020-12-16 23:12:19 +08:00
Fontaine
3664283eb4
Merge pull request #1 from ben-kaufman/patch-1
Mention BIP 44 as the Multi-Account standard
2020-12-16 23:10:27 +08:00
Fonta1n3
eae5288ffd
Update bip-0048.mediawiki 2020-12-16 22:59:10 +08:00
benk10
9ec6bf64b7
Fix the table 2020-12-16 16:55:38 +02:00
Fonta1n3
4e81e16224
Update bip-0048.mediawiki 2020-12-16 22:54:41 +08:00
benk10
bfebc4b047
Mention BIP 44 as the Multi-Account standard 2020-12-16 16:43:21 +02:00
Fonta1n3
ff04f6cea4
Update bip-0048.mediawiki 2020-12-16 22:36:43 +08:00
Fonta1n3
42b9148cea
minor 2020-12-16 22:35:09 +08:00
Fonta1n3
23d57cb9ad
typo 2020-12-16 22:31:24 +08:00
Fonta1n3
c9517ecf87
fixes 2020-12-16 22:05:54 +08:00
Fonta1n3
e6b9822142
Create bip-0048.mediawiki 2020-12-16 19:22:20 +08:00
Wladimir J. van der Laan
7e13d23d43
Merge #1043: BIP155: change when sendaddrv2 is to be sent
e549ed36e8 BIP155: change when sendaddrv2 is to be sent (Vasil Dimov)

Pull request description:

  Mandate to send `sendaddrv2` to the peer before sending our `verack`
  to them.

  This way we know that the peer does not support `addrv2` if we did not
  receive `sendaddrv2` from them before receiving their `verack`.

ACKs for top commit:
  MarcoFalke:
    ACK e549ed36e8
  harding:
    ACK e549ed36e8
  jnewbery:
    ACK e549ed36e8
  laanwj:
    re-ACK e549ed36e8
  jonatack:
    ACK e549ed3
  hebasto:
    ACK e549ed36e8, I believe that the establishing of connection invariants in a such manner--in response to the `version` and prior to sending the `verack`--is the right way both for new `addrv2` message and for other future features.

Tree-SHA512: ec8c40a7f857cc8b7df10812cb34d526299b6908b06049dfea24e25d830fc2d01bf4c052e9e4cd575ce4a1b93032cbe27323a390fe7fb90803a5975dd363d150
2020-12-09 12:27:50 +01:00
Vasil Dimov
e549ed36e8
BIP155: change when sendaddrv2 is to be sent
Mandate to send `sendaddrv2` to the peer before sending our `verack`
to them.

This way we know that the peer does not support `addrv2` if we did not
receive `sendaddrv2` from them before receiving their `verack`.
2020-12-08 10:35:24 +01:00
Orfeas Litos
23782b8693
Remove the term "secret nonce", only refer to s 2020-11-30 14:30:47 +00:00
Orfeas Litos
cf32b7bd39
Say that public nonce is R and private nonce is s 2020-11-30 12:31:10 +00:00
Ethan Kosakovsky
6fb34f2a51
Add BIP85-DRNG and other key derivations 2020-11-19 11:57:57 +00:00
Greg-Griffith
08844fd6ef BIP34 specifies it requires minimal encoding.
Non minimal encodings are rejected by the bitcoin-core client because it 
only checks against a specific encoding
2020-11-18 12:17:04 -08:00
Ferdinando M. Ametrano
ee2e059820 added invalid extended keys vectors
The BIP32 specification lacks test vectors for invalid extended keys that should not be parsed as valid. Such test vectors are proposed here.
2020-11-17 07:16:08 +01:00
Ferdinando M. Ametrano
456c8c5088
fixed input test case description as per output test case description 2020-11-16 21:58:41 +01:00
fametrano
c12af49c17
fixed typos 2020-11-15 09:53:06 +01:00
Karl-Johan Alm
1a7eaa9c7f
BIP-322: minor clarification 2020-11-09 12:11:26 +09:00
PandaBread2
fcd5c5d4ca
Update bip-0079.mediawiki 2020-11-07 22:52:14 +00:00
silencer-Tsai
b0521f076c BIP32: Added new test vectors for hardened derivation with leading zeros 2020-11-04 17:58:54 +08:00
Meheret Tesfaye
dfbbe04ddf
Update bip-0039.mediawiki
Add Python-HDWallet on Other Implementation.
2020-11-03 11:31:20 +03:00
rage-proof
55d37134cf
Update bip-0078.mediawiki
the payjoin proposal has more inputs
2020-10-29 23:58:50 +01:00
Rita Kitic
8744a4dd11 fix typo 2020-10-27 19:15:49 +01:00
Luke Dashjr
7e3284dafd
Merge pull request #1003 from kallewoof/202010-signmsg
BIP-322: switch to using tx based approach
2020-10-24 13:18:20 +00:00
Karl-Johan Alm
75ec9631ef
BIP-322: switch to tx based approach
Co-authored-by: Stepan Snigirev <stepan.snigirev@mpq.mpg.de>
Co-authored-by: Luke Dashjr <luke_github1@dashjr.org>
2020-10-24 16:09:15 +09:00
richard
d771818c9e
Update formatting 2020-10-21 21:41:59 -04:00
richard
77ed66afd5
Update bip-0085.mediawiki 2020-10-21 20:31:29 -04:00
Luke Dashjr
f7ea92c02b
Merge pull request #1019 from ajtowns/202010-bip8-trivial
BIP8: clarify timeoutheight behaviour and requirements
2020-10-19 14:33:03 +00:00
Adam Gibson
1fbcd28584
update Joinmarket BIP78 status 2020-10-18 13:37:50 +01:00
Anthony Towns
afe97b2eee BIP8: allow some MUST_SIGNAL blocks to not signal
Using the same threshold for MUST_SIGNAL as STARTED means that any chain
that would have resulted in activation with lockinontimeout=false will
also result in activation with lockinontimeout=true (and vice-versa).
This reduces the ways in which a consensus split can occur, and avoids
a way in which miners could attempt to discourage users from setting
lockinontimeout=true.
2020-10-17 18:18:30 +10:00
Anthony Towns
9a119ce46a BIP8: Make signalling during LOCKED_IN recommended rather than mandatory 2020-10-17 17:47:19 +10:00
Anthony Towns
b6b5b92337 BIP8: clarify timeoutheight behaviour and requirements
When lockinontimeout is true, we don't transition directly from STARTED
to LOCKED_IN, so don't imply that we do.

If startheight or timeoutheight are not on a retarget boundary, they
behave as if they had been rounded up to the next retarget boundary,
so to keep things simple, require them to be at a boundary.

If timeoutheight is less than two retarget periods later than startheight,
behaviour when lockinontimeout is true (one retarget period of STARTED,
one of MUST_SIGNAL, one of LOCKED_IN, then ACTIVE) will not match
behaviour when lockinontimeout is false (one retarget period of STARTED,
then either LOCKED_IN or FAILED), so disallow that as well.
2020-10-17 17:24:15 +10:00
richard
dfa5042dc5
Update bip-0085.mediawiki 2020-10-16 21:18:20 -04:00
Anthony Towns
0f683f71f5 BIP8: add note about keeping lockinontimeout=true peers connected to each other 2020-10-15 15:56:19 +00:00
Anthony Towns
da9cdd6759 BIP8: replace FAILING with MUST_SIGNAL
This removes the FAILING state and adds compulsory signalling during a
new MUST_SIGNAL phase during the last retarget period prior to the
timeout height.

This ensures that if a deployment occurs using bip8 with
lockinontimeout=false and timeoutheight=N, that a later deployment using
bip8 with lockinontimeout=true and timeoutheight=K, where K<N that any
chain where LOCKED_IN is reached prior to height K, will be accepted as
valid by nodes using either set of deployment parameters.

It also ensures that the soft-fork's changed rules are only enforced
on chain a retarget period after signalling indicates enforcement is
expected (which was not previously the case if the FAILING to ACTIVE
transition took place).
2020-10-15 15:54:08 +00:00
Anthony Towns
3c63846fc2 BIP8: add dot file for generating states diagram 2020-10-15 15:39:04 +00:00
Luke Dashjr
903d7a3a91
Merge pull request #1013 from kallewoof/202010-signet-author-fix
bip-325: add Anthony Towns to authors and change status to Proposed
2020-10-14 13:58:29 +00:00
Karl-Johan Alm
acacbaa2fa
bip-325: add Anthony Towns to authors 2020-10-14 13:24:13 +09:00
Karl-Johan Alm
20b6874407
bip-325: status -> proposed 2020-10-14 13:21:20 +09:00
Luke Dashjr
7e70cd62e1
Merge pull request #991 from n1rna/bip49/fix-typo
Fix typo in BIP 49
2020-10-08 12:00:27 +00:00
Luke Dashjr
dcc6a6a200
Merge pull request #1005 from kallewoof/202010-signet-sigscript
bip-325: correct placement of challenge
2020-10-08 04:33:01 +00:00
Wladimir J. van der Laan
ebeb28ee0e
Merge #1002: BIP155: Mention SHA3-256 explicitly
6ef71b344c BIP155: Small text improvements (Hennadii Stepanov)
562f1d7188 BIP155: Mention SHA3-256 explicitly (Hennadii Stepanov)

Pull request description:

  It seems better to clarify that `CHECKSUM` in Tor onion v3 address uses SHA3-256 hash function.

ACKs for top commit:
  vasild:
    ACK 6ef71b344
  laanwj:
    ACK 6ef71b344c

Tree-SHA512: b88c7dfeeda2a99cfe1042c9f4e7cbeb6047882bf97ce9c1dd5e1f4a30203a9a03702638cc4b6c3b573f6c0a05b73a5ca43a77352a5ca24a32d19be129f8b317
2020-10-06 15:51:27 +02:00
Karl-Johan Alm
bb989a69e0
bip-325: correct placement of challenge 2020-10-06 15:34:34 +09:00
Prayank
eb57dc00dd
Change 'Client support' to 'Backwards compatibility'
+ Change 'Client support' section to 'Backwards compatibility'
+ Reasons: avoid confusion and according to the format mentioned in the below link:
https://github.com/bitcoin/bips/blob/master/bip-0002.mediawiki#specification
+ Discussed changes in https://github.com/bitcoin/bips/pull/994
2020-10-06 02:37:02 +05:30
Luke Dashjr
cca9b983a1
Merge pull request #992 from Lucienest/patch-1
Update bip-0039.mediawiki
2020-10-05 19:58:29 +00:00
Luke Dashjr
53a10c98be
Merge pull request #987 from sipa/bip-taproot
Minor clarifications and fixes
2020-10-05 19:44:15 +00:00
Luke Dashjr
471ec4a8f4 Merge remote-tracking branch 'origin-pull/976/head' 2020-10-05 19:42:54 +00:00
Luke Dashjr
d70179499a
Merge pull request #979 from dgenr8/patch-1
Update bip-0119.mediawiki
2020-10-05 19:36:49 +00:00
Luke Dashjr
7f75cc0cdc
Merge pull request #997 from dergigi/patch-1
[Trivial] Fix typos
2020-10-05 18:38:45 +00:00
Luke Dashjr
9429ed2e4d
Merge pull request #1000 from ajtowns/202009-signet-genesis
BIP 325: update signet genesis block
2020-10-05 17:26:08 +00:00
Luke Dashjr
1b7bf8e6aa
Merge pull request #981 from apoelstra/2020-08-rename-hash-preimages
BIP174: add `_IN_` to names of new hash preimage fields
2020-10-05 16:31:18 +00:00
Luke Dashjr
602f4971ee
Merge pull request #990 from dr-orlovsky/patch-3
BIp 174: fixing typo in rationale reference with closed tag
2020-10-05 16:19:38 +00:00
Luke Dashjr
c4c4077105
Merge pull request #978 from MarcoFalke/patch-1
BIP 325: Clarify that scriptWitness is a stack, not a byte string
2020-10-05 16:18:24 +00:00
Luke Dashjr
80d4cb82bb
Merge pull request #989 from dr-orlovsky/patch-2
BIP 174: rename responsibilities->roles to match Bitcoin Core
2020-10-05 16:15:57 +00:00
Luke Dashjr
47daca4c6f
Merge pull request #971 from yahiheb/bip79-status
Update bip79 status
2020-10-05 16:14:18 +00:00
Luke Dashjr
2a92499f7f
Merge pull request #839 from pengpengliu/master
BIP39: Add swift implementation
2020-10-05 16:12:35 +00:00
Luke Dashjr
60c95f7a20
Merge pull request #985 from joshklop/patch-1
Fixing spelling in BIP 9
2020-10-05 16:12:25 +00:00
Luke Dashjr
20b06003ce
Merge pull request #969 from pacu/patch-1
Added MnemonicSwift as Swift impl for BIP-39
2020-10-05 16:05:11 +00:00
Luke Dashjr
621f4d9a4a
Merge pull request #975 from ysangkok/expire-bip-0124
Reject 124 (expired)
2020-10-05 16:04:57 +00:00
Luke Dashjr
330f3f3c9d
Merge pull request #974 from ysangkok/expire-bip-0135
Reject 135 (expired)
2020-10-05 16:04:15 +00:00
Luke Dashjr
2853268a2d
Merge pull request #973 from ysangkok/expire-bip-0114
Reject 114 (expired)
2020-10-05 16:03:40 +00:00
Luke Dashjr
94073deb66
Merge pull request #967 from vasild/bip155_time_and_varint
BIP155: clarify variable integer format and change time to fixed 32 bit
2020-10-01 14:07:41 +00:00
Vasil Dimov
87ef5aaa7c
BIP155: clarify that "services" uses CompactSize
The Bitcoin Core source code has `VARINT` type which is different than
the "variable integer" format used all over the P2P protocol and also
for the "services" field in this BIP. The latter is called `CompactSize`
in some BIPs and also in the Bitcoin Core source code, thus use the word
`CompactSize` to refer to it and link to its documentation.
2020-09-29 11:12:43 +02:00
sabotag3x
d353c54154 Create portuguese.txt
Co-authored-by: Breno Rodrigues Brito <brenorb@gmail.com>
Co-authored-by: ninjastic <ninjasticdev@protonmail.com>
Co-authored-by: sabotag3x <sabotage.sta@gmail.com>
Co-authored-by: bitmover <67111541+bitmover-studio@users.noreply.github.com>
Co-authored-by: alegotardo <40860228+alegotardo@users.noreply.github.com>
Co-authored-by: kuthullu <kuthullu@gmail.com>
Co-authored-by: Trimegistus <trimegisto@rocketmail.com>
2020-09-28 09:32:14 -03:00
Hennadii Stepanov
6ef71b344c
BIP155: Small text improvements 2020-09-27 14:07:57 +03:00
Hennadii Stepanov
562f1d7188
BIP155: Mention SHA3-256 explicitly 2020-09-27 14:06:19 +03:00
Luke Dashjr
60bfc4bb53
Merge pull request #907 from vasild/bip155_clarifications
BIP155: include changes from followup discussions
2020-09-23 12:49:25 +00:00
Anthony Towns
9b0c3d0e6a bip-0325: update signet genesis block 2020-09-21 15:27:18 +10:00
Gigi
f040ea4ae6
[Trivial] Fix typos
werbs -> verbs
geografical -> geographical
2020-09-17 10:39:28 +02:00
Lucien Nocelli
9b7840a513
Update bip-0039.mediawiki
Fixed some syntax,
2020-09-09 15:46:31 +00:00
Gregory Sanders
6d7d3011e8
bip141 commitment is required for signet blocks
Co-authored-by: MarcoFalke <falkemarco@gmail.com>
2020-09-09 09:38:35 -04:00
Nima Yazdanmehr
de74be2515
Fix typo in BIP 49 2020-09-08 21:45:59 +04:30
Gregory Sanders
c8b47a8d48 Slight cleanup of signet commitment description 2020-09-08 11:38:44 -04:00
Dr. Maxim Orlovsky
6b3b636490
BIp 174: fixing typo in rationale reference with closed tag 2020-09-08 15:00:07 +02:00
Luke Dashjr
68bb026c56
Merge pull request #986 from kallewoof/202009-bip325-1-5-bytes
BIP 325: correct byte count for compact size
2020-09-08 05:03:36 +00:00
Dr. Maxim Orlovsky
d509aa2110
BIP 174: removing extra "fields" word 2020-09-07 18:38:23 +02:00
Dr. Maxim Orlovsky
a159cca11f
BIP 174: rename responsibilities->roles to match Bitcoin Core
[Bitcoin Core uses "roles" instead of "responsibilities"](https://github.com/bitcoin/bitcoin/blob/master/src/psbt.h#L559) and it makes semantical sense (plus less verbose).
2020-09-07 13:17:44 +02:00
Dr. Maxim Orlovsky
3d297861eb
Require creator to initialize empty output fields
The current version of the spec requires creator role to initialize empty input fields, but says nothing about output field initialization. At the same time, the following role, updater, "should also add redeemScripts, witnessScripts, and BIP 32 derivation paths to the input and output data if it knows them.", which does not make any sense if the fields were uninitialized. The [current Bitcoin Core implementation does this](a24806c25d/src/psbt.cpp (L12)), and [other PSBT implementations, like rust-bitcoin, follow this practice](https://github.com/rust-bitcoin/rust-bitcoin/blob/master/src/util/psbt/mod.rs#L59)
2020-09-07 13:06:43 +02:00
Pieter Wuille
3b1fb9600b Clarify that R=infinity is invalid in BIP340
Also rename is_infinity to is_infinite is reference implementation,
to match the wording in BIP340.
2020-09-03 14:38:22 -07:00
MarcoFalke
d8531483f5 bip 341/342: Replace CCompactSize with CompactSize 2020-09-03 14:37:50 -07:00
Karl-Johan Alm
8aaefbe8ea
bip-0325: correct byte count for compact size, and tweak to header name 2020-09-03 16:54:17 +09:00
Josh Klopfenstein
0c3af69468
Fixing spelling in BIP 9
course grained => coarse-grained
2020-09-02 15:57:56 -05:00
Liu Pengpeng
7e8b5dfc30
Merge branch 'master' into master 2020-09-03 01:55:14 +08:00
Luke Dashjr
bdb297a7c8
Merge pull request #983 from kallewoof/202008-signet-empty-commitment
bip-0325: clarify the OP_TRUE challenge special case
2020-09-01 04:32:23 +00:00
Enegnei
688b0dabab
A few more minor grammar fixes / improvements 2020-08-30 22:41:52 +02:00
Enegnei
a0481edf92
Minor grammar fix 2020-08-30 22:01:46 +02:00
Karl-Johan Alm
dfe1d77ca2
bip-0325: clarify the OP_TRUE challenge special case 2020-08-29 22:31:21 +09:00
Luke Dashjr
36225e4b4d
Merge pull request #980 from peterizzoo/patch-2
Update bip-0001.mediawiki
2020-08-27 20:14:53 +00:00
Andrew Poelstra
983b9840b3 bip 174: add new hash preimage fields to Appendix A 2020-08-27 15:02:44 +00:00
Luke Dashjr
336f948d37
Merge pull request #982 from sipa/bip-taproot
BIP340 updates: even R, new tags, small fixups, clarifications
2020-08-27 02:10:55 +00:00
Pieter Wuille
5f4d3b45c6
Merge pull request #212 from sipa/202008_evenr_clarify
Clarify that Jacobian coordinates are the optimization
2020-08-26 17:39:01 -07:00
Pieter Wuille
b6b0715c28 Clarify that Jacobian coordinates are the optimization, not the Legendre symbol 2020-08-26 15:56:23 -07:00
Pieter Wuille
bf106b05ca
Merge pull request #210 from sipa/202008_even_r_tiebreaker
Switch BIP340 to even R tiebreaker
2020-08-26 15:47:38 -07:00
Andrew Poelstra
e30d465a6a bip174: add _IN_ to new hash preimage fields 2020-08-26 13:49:42 +00:00
peterizzoo
ffa6783a85
Update bip-0001.mediawiki
It seems the date is wrong for when this BIP was created. I see here (https://sourceforge.net/p/bitcoin/mailman/message/28106734/) it was created on 9/19/11. I don't see any earlier entries on the mailing list that would suggest the 8/19 date is accurate
2020-08-26 07:04:35 -04:00
Tom Harding
4a4f593c8c
Update bip-0119.mediawiki
"susceptibility", but meaning is clear without this word
2020-08-25 09:34:33 -07:00
MarcoFalke
ff2833e6d6 Update bip-0325.mediawiki
It just happens that an empty byte vector is serialized identical to an empty vector of any other type, but it takes the reader an extra step. Thus, the minor fixup suggestion.
2020-08-22 19:23:27 +02:00
Janus
630bbe314d Reject 135 (expired) 2020-08-21 08:12:58 +02:00
Janus
a4a427ac8c Reject 124 (expired) 2020-08-21 08:10:08 +02:00
Janus
3711a828af Reject 114 (expired) 2020-08-21 08:08:17 +02:00
Yahia Chiheb
997282703a Update bip79 status 2020-08-21 00:15:39 +01:00
Luke Dashjr
9d44e594b0
Merge pull request #970 from instagibbs/patch-12
BIP 342: be slightly more explicit about codesep_pos
2020-08-20 22:22:06 +00:00
Luke Dashjr
76c3ced4b0
Merge pull request #964 from sanket1729/master
BIP 174: Fix formatting changes
2020-08-20 22:17:04 +00:00
Luke Dashjr
f6e11640e7
Merge pull request #955 from apoelstra/2020-07-hash-preimages-to-174
BIP174: add hash preimage fields to inputs
2020-08-20 22:16:52 +00:00
Luke Dashjr
a2cd496af1
Merge pull request #966 from sdaftuar/2020-08-wtxid-relay-fixes
BIP 339 clarifications
2020-08-20 22:16:12 +00:00
Luke Dashjr
cc46fba821
Merge pull request #965 from yahiheb/bip79
Update bip79 status
2020-08-20 22:14:00 +00:00
Luke Dashjr
f75161ccbf
Merge pull request #962 from darosior/bip32_python_implem
bip-0032: remove the 'Implementations' section
2020-08-20 22:13:10 +00:00
Luke Dashjr
2efffd3745
Merge pull request #959 from ysangkok/expire-bip-0180
Reject 180 (expired)
2020-08-20 22:08:58 +00:00
Luke Dashjr
f11adeaf62
Merge pull request #958 from ysangkok/expire-bip-0171
Reject 171 (expired)
2020-08-20 22:08:21 +00:00
Luke Dashjr
185527510c
Merge pull request #957 from ysangkok/expire-bip-0134
Reject 134 (expired)
2020-08-20 22:07:58 +00:00
Luke Dashjr
ee43d1c64b
Merge pull request #956 from ysangkok/expire-bip-0131
Reject 131 (expired)
2020-08-20 22:07:34 +00:00
Pieter Wuille
afa13249ed Update test vectors and generation script 2020-08-20 13:24:20 -07:00
Pieter Wuille
8a3db73a84 Rename lift_x_even_y to lift_x 2020-08-20 13:24:20 -07:00
Pieter Wuille
5dadeb3e1c Change tags to avoid collisions with earlier draft 2020-08-20 13:24:20 -07:00
Pieter Wuille
968096c451 Switch to even tiebreaker for R 2020-08-20 13:24:16 -07:00
Gregory Sanders
25fe598828
be slightly more explicit about codesep_pos
Felt this could be under-defined, and if this is wrong, would be nice to have correct text in its place
2020-08-16 23:32:38 -04:00
Francisco Gindre
1e3e178fb8
Added MnemonicSwift as Swift impl for BIP-39 2020-08-15 17:43:14 -03:00
Vasil Dimov
2c7630ec61
BIP155: change "time" to fixed 32 bit unsigned
32 bit unsigned can represent time up to year 2106
(32 bit signed is limited to just 2038).

So, we don't need to have "time" encoded as variable integer which would
take 5 bytes instead of 4.
2020-08-13 11:53:30 +02:00
Andrew Poelstra
277be22357 BIP174: add hash preimage fields to inputs 2020-08-11 17:31:16 +00:00
Suhas Daftuar
f319663c04 BIP339: clarify fetching
A node may always fetch a transactions using the txid.
2020-08-07 15:37:03 -04:00
John Newbery
5909b91b93 BIP339: clarify handshake 2020-08-07 15:33:28 -04:00
John Newbery
6014c8289e BIP339: consistent capitalization
Use lowercase for message types.
2020-08-07 15:33:28 -04:00
Yahia Chiheb
30e70e4974 Update bip 79 status 2020-08-05 20:20:11 +01:00
Sanket Kanjalkar
8d3b41936f
Fix formatting changes 2020-08-04 13:27:31 -05:00
Pieter Wuille
05a03f2d61
Merge pull request #209 from real-or-random/patch-17
BIP340: Fix typo
2020-08-04 10:05:35 -07:00
Tim Ruffing
e98888322f
BIP340: Fix typo 2020-08-04 18:57:16 +02:00
Antoine Poinsot
4bc05ff903
bip-0032: remove the 'Implementations' section
Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
2020-08-04 12:17:25 +02:00
Luke Dashjr
b4dddbcf75
Merge pull request #946 from kiminuo/patch-1
Update bip-0078.mediawiki
2020-08-03 09:55:17 +00:00
Janus
03a8486bb7 Reject 180 (expired) 2020-08-01 17:37:26 -05:00
Janus
cdf7934885 Reject 171 (expired) 2020-08-01 17:34:53 -05:00
Janus
1c6cdff42c Reject 134 (expired) 2020-08-01 17:18:43 -05:00
Janus
4bfd643dec Reject 131 (expired) 2020-08-01 17:17:43 -05:00
Luke Dashjr
c134a853a9
Merge pull request #949 from jrawsthorne/bip8-pseudocode-fix
BIP8: Fix pseudocode starting 1 block early
2020-08-01 02:28:38 +00:00
Luke Dashjr
d1eec05739
Merge pull request #954 from sipa/202007_tapsighash_capitalization
Use consistent capitalization of tag TapSighash
2020-08-01 02:26:14 +00:00
Luke Dashjr
10ddcd6846
Merge pull request #948 from achow101/bip174-dual-utxos
BIP174: Clarify that both UTXO types are allowed
2020-08-01 02:24:08 +00:00
Luke Dashjr
b096ae3bd3
Merge pull request #934 from scgbckbone/fix_bip85
Fix bip85
2020-08-01 00:13:38 +00:00
Luke Dashjr
0e460e7f1e
Merge pull request #932 from azuchi/fix-bip85-testvector
BIP85: Fix wrong test vector
2020-08-01 00:12:39 +00:00
Luke Dashjr
e4c606a742
Merge pull request #939 from ysangkok/expired-bip-0156
Reject 156 (expired)
2020-08-01 00:06:33 +00:00
Luke Dashjr
8feba22367
Merge pull request #936 from ysangkok/expired-bip-0140
Reject 140 (expired)
2020-08-01 00:05:42 +00:00
Luke Dashjr
7660d60151
Merge pull request #947 from ajtowns/202007-signet-tx
bip-325: change signature scheme to be tx-based
2020-07-30 02:34:15 +00:00
Pieter Wuille
b9ea863727 Use consistent capitalization of tag TapSighash 2020-07-28 13:50:50 -07:00
Jake Rawsthorne
d6267eddb4 Fix pseudocode starting 1 block early 2020-07-22 20:56:09 +01:00
Anthony Towns
3cf239eef3 bip-325: change signature scheme to be tx-based 2020-07-22 14:41:19 +10:00
Pieter Wuille
e331aadf92
Merge pull request #206 from jonasnick/some-fixups
BIP-0340: Miscellaneous fixups
2020-07-21 19:38:23 -07:00
Pieter Wuille
1e2d05609f
Merge pull request #208 from sipa/202007_nobitloss
Clarify security argument of x-only pubkeys
2020-07-21 19:36:23 -07:00
Andrew Chow
5ac2cb5b93 BIP174: Clarify that both UTXO types are allowed 2020-07-21 18:27:20 -04:00
Jonas Nick
7e9b4dd620 BIP-0340: note that adapting the spec to other curves is insecure 2020-07-21 18:44:46 +00:00
Pieter Wuille
005586d2fd Clarify security argument of x-only pubkeys better 2020-07-20 14:39:28 -07:00
kiminuo
a4fd5cc8ad
Update bip-0078.mediawiki
Fix a few links.
2020-07-19 22:51:06 +02:00
Jonas Nick
2611302d83 BIP-0340: Remove last remaining mention of Jacobi symbol
Jacobi symbol can be confusing because it may suggest that the modulus is
composite.

Thanks to Alan Szepieniec for pointing out this issue.
2020-07-18 20:14:51 +00:00
Jonas Nick
804538f141 BIP-0340: small fixups
- key prefixing means prefixing the message
- array indexing starts with 0
- 'Gennaro' is spelled with two n's
- has_even_y definition takes P as argument

Thanks to Alan Szepieniec for pointing out these issues.
2020-07-18 20:14:36 +00:00
Vasil Dimov
350189ad48
BIP155: use a dedicated message for signalling
Change signaling of support for the new `addrv2` messages to be done via
a dedicated message `sendaddrv2` instead of protocol bump.

The drawback of using a protocol bump is that the protocol version is
not a bitmask and if a node wants to announce support for `addrv2` this
would imply support for all prior features included in that protocol
version.
2020-07-16 20:38:02 +02:00
Vasil Dimov
42ee3f5c15
BIP155: include changes from followup discussions
* Increase the maximum length of an address from 32 to 512 bytes and
  clarify that the entire message should be rejected if it contains
  a longer address.
  (from https://github.com/bitcoin/bips/pull/766#issuecomment-519248699)

* Remove a contradiction about unknown address types - "MUST ignore" VS
  "MAY store and gossip".

* Recommend gossiping addresses for networks to which the node is not
  currently connected to.
  (from https://github.com/bitcoin/bips/pull/766#issuecomment-545067608)

* Clarify that the entire message should be rejected if it contains an
  address with unexpected size (e.g. IPv4 address with length 5).
2020-07-16 20:37:20 +02:00
Luke Dashjr
5cc0c6fb49
Merge pull request #938 from ysangkok/expired-bip-0115
Reject 115 (expired)
2020-07-13 03:24:02 +00:00
Luke Dashjr
1515e3ddc9
Merge pull request #925 from ysangkok/final-bip-0090
Final BIP-0090 (Buried Deployments)
2020-07-06 22:04:00 +00:00
Luke Dashjr
eda06164d3 BIP 8: Add new reference implementation 2020-06-26 20:17:22 +00:00
Luke Dashjr
c0d698ae77 BIP 8: Note LOCKED_IN bit requirement in GBT section 2020-06-26 20:07:17 +00:00
Luke Dashjr
ef04aeca51 BIP 8: Fix timeout logic 2020-06-26 17:37:50 +00:00
Luke Dashjr
8e906f14af BIP 8: Remove impossible direct path from DEFINED to FAILING 2020-06-26 15:25:22 +00:00
Luke Dashjr
a59aaceffc
Merge pull request #795 from ysangkok/bip-0083
Reject BIP-0083 (three years inactivity)
2020-06-26 12:33:49 +00:00
Janus
7fecce0751 Final BIP-0090 2020-06-25 23:00:59 -05:00
Janus
f50152b3df Reject 156 (expired) 2020-06-25 22:55:32 -05:00
Janus
a2346e5a54 Reject 115 (expired) 2020-06-25 22:47:11 -05:00
Janus
6c87829b7b Reject 140 (expired) 2020-06-25 22:42:52 -05:00
avirgovi
41efd1361e added 'btc_hd_wallet' amongst implementations in bip32, bip39, bip85 2020-06-25 14:07:01 +02:00
avirgovi
f6b935f308 moved duplicate segments to footnotes 2020-06-25 13:42:03 +02:00
avirgovi
a5beb39040 fixed bip32 algo to copy master key creation instead of private2private; added same warning to XPRV part 2020-06-25 13:30:36 +02:00
Luke Dashjr
f4c9fd3ef7 BIP 8: Fix misspellings 2020-06-25 05:25:06 +00:00
Luke Dashjr
00aa4c6b43 BIP 8: Drop unmaintained reference implementation 2020-06-25 05:23:24 +00:00
Luke Dashjr
a85f32e50f Merge BIP 339: WTXID-based transaction relay 2020-06-25 05:20:05 +00:00
Luke Dashjr
b8fefbf576 Assign BIP 339: WTXID-based transaction relay 2020-06-25 05:19:50 +00:00
Luke Dashjr
d066544576 Merge commit 'd168a75' 2020-06-25 05:15:05 +00:00
Luke Dashjr
d168a754f1 Fix README for BIP 78 2020-06-25 05:14:58 +00:00
Luke Dashjr
fd02fa4bb7 Mark BIP 146 as Withdrawn
Per https://github.com/bitcoin/bips/pull/927#issuecomment-643403936
2020-06-25 05:11:46 +00:00
Luke Dashjr
8f4595b29b De-reject BIP-0008 due to progress being made (restore to Draft)
This reverts commit cb064ccdeb.
2020-06-25 05:01:43 +00:00
Luke Dashjr
a004e03d0f Merge remote-tracking branch 'origin-pull/550/head' 2020-06-25 05:01:15 +00:00
Suhas Daftuar
3c5aef89d6 Add BIP-wtxid-relay 2020-06-23 14:52:25 -04:00
nicolas.dorier
a76f5e4335
Clarify test vector 2020-06-23 17:46:18 +09:00
nicolas.dorier
b0be77f99e
Removing non-sense paragraph 2020-06-22 11:06:57 +09:00
nicolas.dorier
e6418e5a76
Fix missing word 2020-06-22 10:58:40 +09:00
nicolas.dorier
5e4cc6d812
Fix grammar, additional note on ability to increase output of the receiver 2020-06-22 10:56:22 +09:00
nicolas.dorier
feac3d0035
Update special thanks 2020-06-19 16:12:29 +09:00
nicolas.dorier
c449c019f6
Do not allow decrease in absolute fee 2020-06-19 16:06:19 +09:00
nicolas.dorier
549107933c
Allow outputs to be increased 2020-06-19 15:19:22 +09:00
nicolas.dorier
bd97400743
Introduce pjos=0 2020-06-19 15:00:19 +09:00
nicolas.dorier
e2778babfb
additional comments 2020-06-19 14:31:19 +09:00
nicolas.dorier
6d4b491b31
Simplify sender's implementation, fix typos 2020-06-19 14:26:51 +09:00
nicolas.dorier
93c655a149
Fix typo 2020-06-19 13:24:59 +09:00
nicolas.dorier
3a16c24f5e
Additional note for HW 2020-06-19 13:23:37 +09:00
nicolas.dorier
7803bf8335
Reformat the check list for sender 2020-06-19 13:17:34 +09:00
nicolas.dorier
a3fbc6c620
Do not crash reference implementation if there is no address in the bip21 2020-06-18 11:04:59 +09:00
nicolas.dorier
a2a085cdb4
Add disableoutputsubstitution= optional parameter 2020-06-18 10:11:20 +09:00
nicolas.dorier
63aa576fac
Update from RHavar remarks 2020-06-18 09:59:44 +09:00
nicolas.dorier
3485af708c
Add reference implementation 2020-06-18 00:12:29 +09:00
nicolas.dorier
ea7562fc90
Fix old error code 2020-06-17 21:51:09 +09:00
nicolas.dorier
3fc7032ec3
Fix some formatting 2020-06-17 16:20:38 +09:00
nicolas.dorier
f36ca8f43d
Update recommendation for receiver and sender 2020-06-17 16:15:53 +09:00
nicolas.dorier
a07fef5797
Add fee output section 2020-06-17 16:09:35 +09:00
nicolas.dorier
d72e27535e
[MoveOnly] Move optional parameters at the beginning 2020-06-17 15:06:28 +09:00
nicolas.dorier
801cc71114
Update PSBT invariants 2020-06-16 14:27:09 +09:00
nicolas.dorier
287e3c2346
Fix README 2020-06-16 14:18:19 +09:00
nicolas.dorier
631d8e65cd
Simplifies sender recommendation 2020-06-16 14:17:36 +09:00
nicolas.dorier
d13c784671
Remove parts refering to RBF, add recommendations for maxadditionalfeecontribution 2020-06-16 13:39:27 +09:00
nicolas.dorier
73a4d7c4ba
Rename to BIP78 2020-06-16 12:38:11 +09:00
azuchi
6130f17ded BIP85: Fix wrong test vector 2020-06-15 16:47:36 +09:00
Luke Dashjr
7e680f9f6b
Merge pull request #931 from bitschmidty/2020-06-bip325-pr-update
bip-325: update PR link
2020-06-12 03:57:59 +00:00
Luke Dashjr
d0d2bc9979
Merge pull request #910 from ethankosakovsky/entropy_bip
BIP 85: Deterministic Entropy From BIP32 Keychains
2020-06-12 00:32:29 +00:00
Luke Dashjr
d2b795f3f0
Merge pull request #771 from bitschmidty/master
BIP174: Input Finalizer finalized fields clarifications
2020-06-12 00:16:49 +00:00
Ethan Kosakovsky
96927344e7 Initial commit of entropy BIP 2020-06-11 12:11:06 +00:00
Mike Schmidt
3dbd4866b7 bip-0174: Input Finalizer finalized fields clarifications 2020-06-09 14:40:19 -05:00
Mike Schmidt
4cc1c31cc3 bip-325: update PR link 2020-06-09 14:26:37 -05:00
Luke Dashjr
d8a56c9f2b scripts/buildtable.pl: Fix for Obsolete status 2020-06-02 08:53:55 +00:00
Luke Dashjr
dac31c7829
Merge pull request #913 from ysangkok/reject-bip-0064
Obsolete BIP-0064
2020-06-02 08:26:28 +00:00
Janus
3d2f68c359 Obsolete BIP-0064
It was implemented at one point according to luke-jr
in https://github.com/bitcoin/bips/pull/913#issuecomment-621894761
2020-06-02 01:52:33 -05:00
nicolas.dorier
8ce6086517
Add Backward compatibility section 2020-06-02 11:46:22 +09:00
nicolas.dorier
3bede60b70
Update Javascript sender implementation link 2020-06-02 11:46:22 +09:00
Luke Dashjr
530c4fb089
Merge pull request #924 from Coding-Enthusiast/patch-3
[BIP-0137] Correct small mistakes
2020-06-01 19:46:32 +00:00
Luke Dashjr
357419ae84
Merge pull request #917 from milczarekIT/bip0039-add-Java-reference
Added reference to Java implementation for BIP-39
2020-06-01 19:46:14 +00:00
Luke Dashjr
52bd714fb3
Merge pull request #920 from jonasnick/spk-commit-all
bip-341: Commit to all scriptPubKeys in SigMsg
2020-06-01 19:31:53 +00:00
Luke Dashjr
bad7029ae1
Merge pull request #922 from SGeetansh/BIP-0011_typo
bip-0011.mediawiki: Fix trivial typo
2020-06-01 19:26:11 +00:00
Luke Dashjr
2a6386bbf9
Merge pull request #672 from skywinder/patch-1
BIP 39: Аdd swift library with multi lang support
2020-06-01 19:12:53 +00:00
Luke Dashjr
3a483f675c
Merge pull request #915 from ysangkok/reject-expired-block-size-bips
Reject expired block size BIPs
2020-06-01 19:09:56 +00:00
Luke Dashjr
c8832eabe3
Merge pull request #914 from ysangkok/reject-bip-0099
Reject BIP-0099 (expired)
2020-06-01 19:08:35 +00:00
Nicolas Dorier
5db1b99504
Update bip-xxxx.mediawiki
Co-authored-by: yahiheb <52379387+yahiheb@users.noreply.github.com>
2020-05-28 13:45:21 +09:00
Nicolas Dorier
434e8c279d
Update bip-xxxx.mediawiki
Co-authored-by: yahiheb <52379387+yahiheb@users.noreply.github.com>
2020-05-28 13:45:08 +09:00
nicolas.dorier
f62ceee781
Remove uneeded error message, add more details on the original/proposal PSBT requirements 2020-05-28 13:30:34 +09:00
nicolas.dorier
633f94d005
This BIP replace 79 2020-05-28 08:39:49 +09:00
nicolas.dorier
387d5e1b12
Reformulate 2020-05-24 02:37:26 +09:00
nicolas.dorier
900d221a85
Fix typo 2020-05-24 02:35:19 +09:00
nicolas.dorier
1251d29854
Discourage unsecured endpoint 2020-05-20 06:11:58 +09:00
nicolas.dorier
3659671a22
Relaxing authenticated endpoint 2020-05-19 19:14:51 +09:00
nicolas.dorier
5a337c6fc6
Make sure the receiver is not free riding on sender's back 2020-05-19 18:59:57 +09:00
nicolas.dorier
dd9193fd1d
Remove out-of-utxo 2020-05-19 04:52:43 +09:00
nicolas.dorier
3836ef6534
Reword sentence 2020-05-18 18:43:32 +09:00
Coding Enthusiast
9bb9824cab
[BIP-0137] Correct small mistakes
RecId indicates address/script types not key types (technically there is no key type).  
Value for P2WPKH is 39 not 35.  
Turned ranges to a bulleted list.
2020-05-18 11:05:21 +04:30
nicolas.dorier
233c094667
Add minFeeRate optional parameter 2020-05-17 21:57:37 +09:00
nicolas.dorier
088cf9bf91
Clarify fake rounded amount added by the receiver 2020-05-17 20:16:32 +09:00
nicolas.dorier
24dd275445
Rename to additionalfeeoutputindex and maxadditionalfeecontribution 2020-05-17 19:58:17 +09:00
nicolas.dorier
c33f0759d6
Clarify sender's payjoin proposal checklist 2020-05-17 19:55:45 +09:00
nicolas.dorier
3faf6e7540
Add payjoin proposal 2020-05-17 05:59:23 +09:00
SGeetansh
336a83b8bd Minor grammar typo. Added a comma. 2020-05-16 15:51:04 +05:30
Jonas Nick
15fba98cf4 bip-341: add missing Post-History 2020-05-15 12:57:49 +00:00
Jonas Nick
dde165749e bip-341: Commit to all scriptPubKeys in SigMsg 2020-05-15 12:33:01 +00:00
Petr Korolev
91a835887d remove duplicate line 2020-05-03 11:03:42 +07:00
Petr Korolev
25b6d576b4 Update link directly to the bip39 file 2020-05-03 11:01:17 +07:00
Bartosz Milczarek
f572ebe9f2 Added reference to Java implementation for BIP-39 2020-05-02 14:23:01 +02:00
Luke Dashjr
4fb2c5290e
Merge pull request #911 from fametrano/patch-3
fixed obvious typo
2020-05-01 12:55:53 +00:00
Luke Dashjr
1464888d49
Merge pull request #916 from ysangkok/final-bip-0043
Mark BIP-0043 as final
2020-04-30 15:13:57 +00:00
Janus
6a30b6faae Mark BIP-0043 as final
Widely in use and used by BIPs 44, 45, 47, 49, 80, 81, 84, and 175.
2020-04-30 09:43:09 -05:00
Luke Dashjr
3ac2c60e61
Merge pull request #902 from Kevingislason/patch-1
BIP 39: Update Rust implementation
2020-04-30 14:42:36 +00:00
Janus
2d293b7307 Reject expired block size BIPs 2020-04-30 09:37:22 -05:00
Janus
f4eecb1ea3 Reject BIP-0099 (expired) 2020-04-30 09:29:35 -05:00
Luke Dashjr
187fabb1de
Merge pull request #893 from sipa/bip-taproot
BIP 340 improvements
2020-04-30 14:19:29 +00:00
Luke Dashjr
ba1d582507
Merge pull request #906 from JeremyRubin/bip-0119-sim-fixes
BIP-0119 Simulation Fixes
2020-04-30 14:16:18 +00:00
Luke Dashjr
c768b96f40
Merge pull request #903 from kallewoof/2003-bip322-simplified
bip-322: simplify proposal to single proof case
2020-04-30 14:13:04 +00:00
Luke Dashjr
eb34cf40e1
Merge pull request #900 from kallewoof/2003-signet-static-genesis
bip-325: genesis block/message start
2020-04-30 14:12:39 +00:00
Luke Dashjr
daf1c94086
Merge pull request #901 from ysangkok/reject-bip-0036
Reject BIP-0036
2020-04-30 14:11:58 +00:00
Luke Dashjr
3c968038b1
Merge pull request #898 from ysangkok/final-bip-0152
Mark BIP-0152 as Final
2020-04-30 14:09:45 +00:00
Luke Dashjr
1c2c852bad
Merge pull request #897 from ysangkok/reject-bip-0033
Reject BIP-0033 (expired)
2020-04-30 14:09:14 +00:00
Ferdinando M. Ametrano
b7090922b5
fixed obvious typo
it must be OP_CHECKMULTISIG, not OP_CHECKSIG
2020-04-29 01:43:50 +02:00
Pieter Wuille
cf2937c811
Merge pull request #202 from ysangkok/bip-0340-typing
Typing annotations for BIP-0340
2020-04-10 13:44:55 -07:00
Jeremy Rubin
c03a8f0bb9 Update images for BIP-0119 2020-04-08 12:44:50 -07:00
Jeremy Rubin
58d1b1994c BIP-0119: Use the same random seed across simulation runs; fix issue where a poisson was used in place of an exponential 2020-04-08 12:44:34 -07:00
Janus
756129cccf BIP-0340: Add typing annotations to reference.py
Passes mypy's strict-mode with mypy 0.770.
2020-04-06 21:45:23 -05:00
Pieter Wuille
1d999cf678
Merge pull request #203 from jonasnick/remove-is-negated
BIP-0341: Replace notion of is_negated with parity bit
2020-04-06 19:25:18 -07:00
Pieter Wuille
038615b7c7
Merge pull request #200 from real-or-random/prints
Add debug print for intermediate values
2020-04-02 16:34:24 -07:00
Jonas Nick
0916da6594 BIP-0341: Replace notion of is_negated with parity bit 2020-03-27 15:14:43 +00:00
Karl-Johan Alm
f9e95849f3
bip-322: simplify proposal to single proof case 2020-03-25 15:28:56 +09:00
Kevin Gislason
2e1fb61db6
Update Rust BIP 39 implementation
The currently listed Rust implementation of BIP 39 doesn't pass the reference implementation's test vectors.

See --> https://github.com/infincia/bip39-rs/issues/21
2020-03-17 20:18:43 -04:00
Tim Ruffing
72657270d8 When checking test vectors, handle RuntimeException in signing
This is better for playing around with the code. Now these
these exceptions can really be raised when the verification
during signing fails.
2020-03-17 02:30:39 +01:00
Tim Ruffing
07d938a214 fixup! Optionally print intermediate values in reference code 2020-03-17 02:13:26 +01:00
Janus
29fcdcac13 Reject BIP-0036
According to expiration rules, this does not need consent,
since it has expired.
2020-03-13 17:10:23 -06:00
Tim Ruffing
003d38cedb Fix typo 2020-03-12 21:16:18 +01:00
Tim Ruffing
8c5be91975 Make code and output a little bit more readable 2020-03-12 21:16:18 +01:00
Tim Ruffing
a6301c5af0 Optionally print intermediate values in reference code
and make reference code and pseudocode more consistent with each other
2020-03-12 21:15:52 +01:00
Pieter Wuille
39ba507e01
Merge pull request #201 from jonasnick/tweak-bytes-only
BIP-0341: Avoid decompressing the output public key in script spends
2020-03-10 06:30:31 -07:00
Pieter Wuille
f71b5cbb5c
Merge pull request #196 from jonasnick/update-ref
Update reference code and test vectors
2020-03-10 06:28:20 -07:00
Jonas Nick
4ea021f28c BIP-0341: Avoid decompressing the output public key in script spends 2020-03-06 14:20:08 +00:00
Karl-Johan Alm
8381ca0e14
bip-325: genesis block/message start
The genesis block is made static, and the message start is made dynamic based on the sha256d of the block script.
2020-03-05 16:40:57 +09:00
Pieter Wuille
9abbfa53c9
Merge pull request #199 from real-or-random/patch-16
Fix a few minor issues
2020-03-04 15:49:20 -08:00
Jonas Nick
9bfa53e9fb BIP 340: Verify sig before returning it 2020-03-04 16:34:24 +00:00
Jonas Nick
b6b5f58e6e BIP 340: Use synthetic nonces in reference code and test vectors 2020-03-04 16:34:24 +00:00
Jonas Nick
d41e778ca1 BIP 340: Update reference code and test vectors as follows:
- use evenness as tiebreaker
 - using different tags for nonce- and challenge hashing
 - add pubkey to nonce function.
2020-03-04 16:34:17 +00:00
Janus
61cd31c864 Mark BIP-0152 as Final 2020-02-29 18:29:02 -06:00
Tim Ruffing
cd19095fb0 Switch to only 32 bytes aux 2020-02-29 11:21:24 +01:00
Janus
70d4c09e58 Reject BIP-0033 (expired) 2020-02-28 12:01:16 -06:00
Luke Dashjr
cb071df902
Merge pull request #895 from ysangkok/reject-bip0019
Reject BIP-0019 (expired)
2020-02-28 17:11:55 +00:00
Luke Dashjr
ea93d2b1d2
Merge pull request #894 from ysangkok/reject-bip-0008
BIP-0008 rejected (expired)
2020-02-28 17:11:23 +00:00
Luke Dashjr
ce4da9e3ee
Merge pull request #892 from CaptJakk/master
Typo in BIP340
2020-02-28 17:08:51 +00:00
Luke Dashjr
995a500032
Merge pull request #891 from aerosol/replace-elixir-bip39-implementation
Replace elixir bip39 implementation
2020-02-28 17:08:39 +00:00
Luke Dashjr
ed3b209307
Merge pull request #890 from visvirial/patch-1
Fix "Using a single OP_CHECKSIGADD-based script"
2020-02-28 17:08:01 +00:00
Petr Korolev
31ebc32e6f update repo url 2020-02-28 22:05:00 +07:00
Janus
a676338b2b Reject BIP-0019 (expired) 2020-02-26 12:23:13 -06:00
Janus
cb064ccdeb BIP-0008 rejected (expired) 2020-02-26 11:54:45 -06:00
Tim Ruffing
4f482a6748
Fix a few minor issues
* Recommend a byte length for aux random data
 * Clarify that with signature verification by default at the end of the signing algorithm, using public keys from untrusted sources is not an issue.  
 *  A few editorial nits
2020-02-24 21:59:13 +01:00
Pieter Wuille
88d30c704f Address comments 2020-02-23 19:45:10 -08:00
Pieter Wuille
806b46fde1 Switch to new synth nonce scheme and make it default 2020-02-23 19:43:20 -08:00
Anthony Towns
453947f43a give bip32 conversion its own section 2020-02-23 19:40:21 -08:00
Anthony Towns
455504b3af Include d in nonce rather than d' 2020-02-23 19:40:19 -08:00
Anthony Towns
8a009b90d8 notes about precomputed pubkey data 2020-02-23 19:39:00 -08:00
Pieter Wuille
d11cf65b6c Change tags to prevent inconsistent breakage with earlier draft 2020-02-23 19:35:22 -08:00
Pieter Wuille
6581a87ff2 Switch to even-y tiebreaker for pubkeys 2020-02-23 19:33:35 -08:00
Jonas Nick
ddc31eb6f6 BIP-340: Improve wording of recommendation for fresh secret keys 2020-02-23 19:33:13 -08:00
Jonas Nick
8b4f79b6f6 BIP-340: Stress that secret key should be fresh and if not then RFC6979 shouldn't be used 2020-02-23 19:33:13 -08:00
Anthony Towns
2a122f20c5 missing space 2020-02-23 19:33:13 -08:00
Keagan McClelland
4b18c45e74
Update bip-0340.mediawiki 2020-02-23 13:43:25 -08:00
Adam Rutkowski
1a42bb3450 Update BIP39 Elixir implementation 2020-02-21 11:57:13 +01:00
Vis Virial (a.k.a. びりある)
9329af381f
Fix "Using a single OP_CHECKSIGADD-based script"
1. CHECKSIG / CHECKSIGADD is confused

Only the first OP-code for the first public key should be "CHECKSIG" and the following (second to n-th) OP-codes should be "CHECKSIGADD".
It is confusing because it is only specified the first and last OP-codes, so I specified the second OP-code clearly.
(I recommend to describe why only the first OP-code should be "CHECKSIG", not "CHECKSIGADD".)

2. Order of the signatures in witness

In the original sentence, the stack status after the all witness elements are pushed will be
| w_n  |
|    :    |
| w_1 |

and then, the first element of the script, "<pubkey_1>" will be pushed to the stack
| pubkey_1 |
| w_n  |
|    :    |
| w_1 |

so the "pubkey_1" and "w_n" won't match.

The order of either "pubkey_i"s or "w_i"s should be inverted.
2020-02-20 16:24:06 +09:00
Luke Dashjr
b38171d14e
Merge pull request #882 from MarcoFalke/patch-2
Fix links in bip-0119.mediawiki
2020-02-20 01:44:51 +00:00
Luke Dashjr
cd2c4069a7
Merge pull request #887 from richardkiss/patch-1
Update bip-0119.mediawiki
2020-02-19 23:55:31 +00:00
Luke Dashjr
5dba54b5f1
Merge pull request #889 from JeremyRubin/fix-color-of-change-ctv
Fix Colorings in BIP-0119 states.svg
2020-02-19 22:48:02 +00:00
Luke Dashjr
99d4de01cd
Merge pull request #884 from RandyMcMillan/patch-2
bip-0340: typo change intent to intend
2020-02-19 22:47:00 +00:00
Luke Dashjr
85f512b8df
Merge pull request #706 from Varunram/patch-3
[trivial] remove duplicate of
2020-02-19 22:45:57 +00:00
Luke Dashjr
fcce0e7656
Merge pull request #886 from jonasnick/synth-nonce
BIP 340: Recommend synthetic nonces and verifying signing output
2020-02-19 22:44:04 +00:00
Luke Dashjr
6fdf2eda61
Merge pull request #880 from NicolasDorier/patch-12
Fix broken link
2020-02-19 22:43:05 +00:00
Jeremy Rubin
bef6dc91c4 Fix Colorings in BIP-0119 states.svg 2020-02-06 13:54:05 -08:00
Richard Kiss
3e85c85044
Update bip-0119.mediawiki
Fix typo.
2020-02-01 12:25:27 -08:00
Jonas Nick
b4255dc83b BIP 340: Recommend verifying the signing output 2020-01-28 22:04:39 +00:00
Jonas Nick
2874f1ffe7 BIP 340: Recommend synthetic nonces 2020-01-28 22:04:34 +00:00
@RandyMcMillan
66ab3565ef
change intent to intend 2020-01-26 16:44:37 -05:00
Nicolas Dorier
983955ffc5
Fix broken link 2020-01-26 14:23:23 +09:00
MarcoFalke
a7597ec2c3
Update bip-0119.mediawiki
fix links
2020-01-25 12:10:07 -05:00
Luke Dashjr
0042dec548
Merge pull request #875 from JeremyRubin/ctv
BIP 119: CHECKTEMPLATEVERIFY
2020-01-24 01:43:06 +00:00
Jeremy Rubin
117f4186e7 Fix Links to images in BIP-119 2020-01-23 16:56:03 -08:00
Jeremy Rubin
1db62a07c5 Assign CTV BIP #119 2020-01-23 16:51:50 -08:00
Luke Dashjr
33308e75f8 Merge BIPs 340-342 2020-01-24 00:01:16 +00:00
Luke Dashjr
97ef6783df Merge remote-tracking branch 'origin-pull/876/head' into HEAD 2020-01-24 00:00:01 +00:00
Luke Dashjr
802520e05a Merge commit 'origin-pull/876/head^^^^^^' into HEAD 2020-01-23 23:59:43 +00:00
Luke Dashjr
d81cf9da5e Merge branch 'master' into HEAD 2020-01-23 23:59:10 +00:00
Jeremy Rubin
c36e492f05 Add Backwards Compatibility section to OP_CHECKTEMPLATEVERIFY BIP and change 'Implementations' header to 'Reference Implementation' 2020-01-20 20:17:28 -08:00
Jeremy Rubin
1a42897287 Add BIP for CheckTemplateVerify 2020-01-20 20:17:28 -08:00
Pieter Wuille
9cf4038f17 fix BIP links 2020-01-20 07:35:26 -08:00
Luke Dashjr
6a802329e4
Merge pull request #877 from kallewoof/linter-http-only
linter: avoid false positives such as C++ lambda exprs by only detect…
2020-01-20 05:14:50 +00:00
Karl-Johan Alm
1d20ad8a42
linter: avoid false positives such as C++ lambda exprs by only detecting links starting with 'http' 2020-01-20 14:07:27 +09:00
Pieter Wuille
9de7dfccfa Add to README 2020-01-19 14:48:58 -08:00
Pieter Wuille
c3b91dcc22 Fixes to headers 2020-01-19 14:48:58 -08:00
Pieter Wuille
fa305e5abd Make buildtable.pl support Requires: field 2020-01-19 14:48:58 -08:00
Pieter Wuille
e1914b8173 fixes 2020-01-19 14:48:58 -08:00
Pieter Wuille
eb641cbdb5 Address jonas' comments 2020-01-19 14:47:33 -08:00
Pieter Wuille
1faa4b19bc Rename BIPs 2020-01-19 14:47:33 -08:00
Pieter Wuille
57ed6cb342 Abstract out common signature message calculation 2020-01-19 14:47:33 -08:00
Pieter Wuille
d9ec5f43da Update acknowledgements, remove authors 2020-01-19 14:47:33 -08:00
Pieter Wuille
cd8ea88987 Delete precompiled file 2020-01-19 14:47:33 -08:00
Anthony Towns
1e99e205a8 go back to leaf_version but different rationale 2020-01-19 14:47:33 -08:00
Pieter Wuille
ff8a36200b Redefine leaf versions to be incrementally increasing from 0 2020-01-19 14:47:33 -08:00
Tim Ruffing
41f8993a4b Clarify nonce generation
- Separate nonce generation into getting a random byte string and converting it to a suitable scalar ...
 - ... to make clear that the byte string can be generated differently.
 - Make the warning a little bit more prominent and improve writing
2020-01-19 14:47:33 -08:00
Pieter Wuille
92e3d6ca87 Update Post-History field for taproot/tapscript 2020-01-19 14:47:33 -08:00
Pieter Wuille
f429750036 Update authors 2020-01-19 14:47:33 -08:00
stefanwouldgo
32c0f50d7b more precise wording on limits
there are no tx or block size limits (post-Segwit), just block weight limit

better wording
2020-01-19 14:47:33 -08:00
Pieter Wuille
460163ee0b Add rationale on security assumptions 2020-01-19 14:47:33 -08:00
Pieter Wuille
94e9c0925a Add an informal summary of the design 2020-01-19 14:47:33 -08:00
Pieter Wuille
84161e187d Improve and restructure motivation and design 2020-01-19 14:47:33 -08:00
Matthew Zipkin
734a859b27 bip-taproot: example from diagram 2020-01-19 14:47:33 -08:00
Pieter Wuille
2c8feb1cbb Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <crypto@timruffing.de>
2020-01-19 14:47:33 -08:00
Pieter Wuille
9c76bb457f Linearity makes sign-for-sum-of-keys easier, not possible entirely.
I'm sure it's possible to construct a complex MPC that can sign for the
sum of keys under ECDSA as well.
2020-01-19 14:47:33 -08:00
Tim Ruffing
0dd7489dfd Update bip-schnorr.mediawiki 2020-01-19 14:47:33 -08:00
Tim Ruffing
3cc2d8ed6d Mention that we don't change the hash function 2020-01-19 14:47:33 -08:00
Pieter Wuille
3c1f466372 Completely specified 2020-01-19 14:47:33 -08:00
Pieter Wuille
687ec4ba8e Low-S ECDSA is non-malleable under nonstandard assumptions 2020-01-19 14:47:33 -08:00
Jonas Nick
d199b6dff6 Replace private key with secret key 2020-01-19 14:47:33 -08:00
Tim Ruffing
ad6bb6c1ff Clarify why we don't want short hashes
This is supposed to supersede https://github.com/sipa/bips/pull/158.
I tried to say this carefully. I don't think that multiparty signing is in general broken with short hashes. For example the attack in #158 could be avoided by letting everybody not only commit to the nonce but also to the message. It's just that using a collision-resistant hash just eliminates the problem entirely...
2020-01-19 14:47:33 -08:00
Hennadii Stepanov
966eadca3a Fix reference formatting 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
773133fb4a Typo: script signature max bytes unhashed are 247 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
da3837639f Typo: max bytes hashed for sig is 210 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
37bf225ea4 Replace BIP66 link with BIP146
BIP66 does not mention the inherent ECDSA malleability, but BIP146 does
2020-01-19 14:47:33 -08:00
stefanwouldgo
8baf6f5952 fix singular/plural ambiguity 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
a65101ff6d Replace signing with signature before validation 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
79738f2410 Link to proof sketch of security of implicit Y
Thanks to @ajtowns for providing the link
2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
ca472ed663 Mention that miners could malleate signatures 2020-01-19 14:47:33 -08:00
Orfeas Litos
5918b4666c Mention hash_type malleability would change wtxid 2020-01-19 14:47:33 -08:00
Jonas Nick
66e2931de2 Clarify bip-taproot digest difference to bip143 regarding sub-hashes 2020-01-19 14:47:33 -08:00
Jonas Nick
1f5bdb304e Improve clarity of footnotes for lift_x 2020-01-19 14:47:33 -08:00
Jonas Nick
708aeadf85 Replace references to Euler's criterion with Legendre symbol in bip-schnorr 2020-01-19 14:47:33 -08:00
Jonas Nick
5a25adc490 Fix bip-schnorr footnote 7 by specifying that we're referring to P's y coordinate and not some undefined 'x' 2020-01-19 14:47:33 -08:00
Kalle Rosenbaum
98983e177f Fix @jonasnick's comment 2020-01-19 14:47:33 -08:00
Kalle Rosenbaum
18d1774d81 Nits 2020-01-19 14:47:33 -08:00
Orfeas Litos
2aa865c33e Replace "both are not" with "neither is" 2020-01-19 14:47:33 -08:00
andrewtoth
c7175e8005 Update bip-tapscript.mediawiki 2020-01-19 14:47:33 -08:00
andrewtoth
5235781ea5 Add missing closing parenthesis and comma 2020-01-19 14:47:33 -08:00
Hennadii Stepanov
fe03882a72 Fix paragraph naming and typo 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
55a31518b9 Rephrase "previous design choice" to "list above" 2020-01-19 14:47:33 -08:00
stefanwouldgo
79c515eb9e grammar typo fix: inserted "be" 2020-01-19 14:47:33 -08:00
Jonas Nick
3e5a79af88 Rename is_y_square to is_negated in taproot signing 2020-01-19 14:47:33 -08:00
Dmitry Petukhov
7a434d4d76 Add missing dots that denote multiplication
Throughout the document, elliptic curve multiplication is denoted with dots,
as in `d'⋅G` as opposed to `d'G`.
This is not the case in one place in the 'Default Signing' section,
and one place in 'Adaptor Signatures' section

Missing dots are added for consistency.
2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
1661efc999 Add missing quote 2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
e72fffa028 Fix typo in schnorr, footnote 2 2020-01-19 14:47:33 -08:00
Max Hillebrand
54384a5710 make clear it's script branch
In this context we are talking about the script branch, not the Merkle tree branch, right? If so, then this should clear things up a little.
2020-01-19 14:47:33 -08:00
Thomas Kerin
769a17b3b9 tapscript: fix minor typo 2020-01-19 14:47:33 -08:00
Jon Atack
28f67764ec bip-taproot: clarify bip-schnorr reference code
- update the paragraph in question to more clearly convey that the helper
  functions, and not the Python3 example code, are from the bip-schnorr
  reference code

- add a link to the reference code in
  https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr/reference.py
2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
daff462f9d Add links to unlinked BIPs
Only first mention of each BIP is made into a link
2020-01-19 14:47:33 -08:00
Adam Gibson
4f67ed25c7 Add clarification of semantics of 0x00 hash type 2020-01-19 14:47:33 -08:00
Hennadii Stepanov
ba7dd57697 G refers to secp256k1 base point rather generator 2020-01-19 14:47:33 -08:00
Anthony
b2aed3e3fe FIX: BIPs should be specified as lowercase to match filenames 2020-01-19 14:47:33 -08:00
Anthony
662361cc44 ADD: Require Schnorr and Taproot BIPs for Tapscript
https://github.com/sipa/bips/pull/135#issuecomment-552754867
2020-01-19 14:47:33 -08:00
Anthony
4bc42d0f00 ADD: Require Schnorr BIP for Taproot
Per https://github.com/bitcoin/bips/blob/master/bip-0001.mediawiki:

"BIPs may have a Requires header, indicating the BIP numbers that this BIP depends on"
2020-01-19 14:47:33 -08:00
Dev Random
ac33640bf5 tweak 211 bytes text 2020-01-19 14:47:33 -08:00
Devrandom
b80ebbf287 clarify 211 hash bytes and non-reuse of keys 2020-01-19 14:47:33 -08:00
Gregory Sanders
758be14a2b remind reader where [:] is defined
in addition to `point`. This caused confusion for one reader who expected inclusive at end of range.
2020-01-19 14:47:33 -08:00
Orfeas Stefanos Thyfronitis Litos
4e88d4fae7 Replace R with P in taproot_tweak_seckey 2020-01-19 14:47:33 -08:00
Gregory Sanders
43fbb03235 BIP16 has no relation to bip-taproot/tapscript
Previously did.
2020-01-19 14:47:33 -08:00
Agis Anastasopoulos
b5eb53451f Fix typo 2020-01-19 14:47:33 -08:00
LaurentMT
32f364c85c Fxied typo in taproot_sign_script() 2020-01-19 14:47:33 -08:00
codeShark149
e9e23e474f Internal pubkey calculation fixed in taproot_tweak_pubkey() 2020-01-19 14:47:33 -08:00
Fabian Jahr
4774e4d1e8 Link design section of BIP Schnorr in Specification 2020-01-19 14:47:33 -08:00
Max Hillebrand
3d97967b97 fix: script spend, not key spend
For the key spend the script tree depth is not revealed, it is only done for script spends. This sentence makes sense only for the script spend.
2020-01-19 14:47:33 -08:00
Jonas Nick
fe74ab65db Update test-vectors.csv 2020-01-19 14:47:33 -08:00
Jonas Nick
c8281deec6 Fix point_from_bytes accepting out-of-range pubkeys and add test vector 2020-01-19 14:47:33 -08:00
Tim Ruffing
9b5ba158c1 improve rationale for key prefixing 2020-01-19 14:47:33 -08:00
Jonas Nick
c9196eeef4 Fix typo in reference code comment 2020-01-19 14:47:33 -08:00
Jonas Nick
301fef36de Make more clear that signing function in test vectors generation code isn't intended to be used anywhere else 2020-01-19 14:47:33 -08:00
Jonas Nick
a6d2d42aa2 Check infinity in is_positive 2020-01-19 14:47:33 -08:00
Jonas Nick
82129e720d Adjust test vector generation code to latest terminology 2020-01-19 14:47:33 -08:00
Jonas Nick
fdf6e897d9 Fix test vector generation code after changing schnorrsig_sign api 2020-01-19 14:47:33 -08:00
Pieter Wuille
ae7122822a Settle on notation: is_square(y), has_square_y(P) 2020-01-19 14:47:33 -08:00
Dmitry Petukhov
0f9ab0cec9 fix docstring in taproot_output_script
the final "-None" line in the docstring of `taproot_output_script` example function was actually outside of the docstring
2020-01-19 14:47:33 -08:00
Dmitry Petukhov
d87c5c8801 use bytes() instead of b'' - avoid markdown issue
Currently github markdown renders `b''` inside `<source>` tags incorrectly. This makes `h = b''` show as `h = b` and creates some confusion.
The issue can be avoided by using bytes() to create empty byte array
2020-01-19 14:47:33 -08:00
Tim Ruffing
7c00346cf2 typos 2020-01-19 14:47:33 -08:00
Pieter Wuille
dbbe690c8a Consistently mention resource limits in bip-tapscript 2020-01-19 14:47:33 -08:00
Pieter Wuille
9c1670f345 Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2020-01-19 14:47:33 -08:00
Pieter Wuille
83cebb5326 Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2020-01-19 14:47:33 -08:00
Pieter Wuille
1695f073d3 Elaborate on default and alternative signing 2020-01-19 14:47:33 -08:00
Pieter Wuille
fc0a4ef542 Explain why CMS is not turned into SUCCESSx 2020-01-19 14:47:33 -08:00
Pieter Wuille
2059b9e35a Address aj comments 2020-01-19 14:47:33 -08:00
Pieter Wuille
3595c30acd Improve section on alternatives to OP_CHECKMULTISIG 2020-01-19 14:47:33 -08:00
Tim Ruffing
09e3f637b5 Change reference for ECDSA proofs
Refer to Manuel Fersch's dissertation for provable security of ECDSA. It's freely accessible and multiple results put well in context.
2020-01-19 14:47:33 -08:00
Anthony Towns
feffc4e34d annex is bit 0 of spend_type 2020-01-19 14:47:33 -08:00
Pieter Wuille
23c1c3ed8b More on key generation 2020-01-19 14:47:33 -08:00
Pieter Wuille
7a7ab111c9 Clarify interaction x-only keys with verification 2020-01-19 14:47:33 -08:00
Pieter Wuille
20f9901809 Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2020-01-19 14:47:33 -08:00
Pieter Wuille
aef148ffc6 Explain that MuSig needs key prefixing 2020-01-19 14:47:33 -08:00
Tim Ruffing
a7ee6c30fa bip-schnorr: more on (e,s) 2020-01-19 14:47:33 -08:00
Tim Ruffing
bc4e8f28b8 bip-schnorr: more on provable security
I'll try to get a link to the CCS paper that does not have a paywall...
2020-01-19 14:47:33 -08:00
Pieter Wuille
565ac4f717 Typo 2020-01-19 14:47:33 -08:00
Pieter Wuille
96a199ac8c Drop other curve comment 2020-01-19 14:47:33 -08:00
Pieter Wuille
281df660b9 Prefix infinite with is_ 2020-01-19 14:47:33 -08:00
Pieter Wuille
e29d82dc88 Apply suggestions from code review
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2020-01-19 14:47:33 -08:00
Pieter Wuille
0d4191bae5 Formulate claims about BatchVerify more accurately 2020-01-19 14:47:33 -08:00
Pieter Wuille
7f5926703a Use is_square/is_positive and introduce algorithm names 2020-01-19 14:47:33 -08:00
Pieter Wuille
9b9fab9a03 HTTPS links where possible 2020-01-19 14:47:33 -08:00
Pieter Wuille
406bc17c16 Small fixes from review with real-or-random 2020-01-19 14:47:33 -08:00
Pieter Wuille
276d9d338b Small fix: 0xc1 is possible as first control block byte 2020-01-19 14:47:33 -08:00
Pieter Wuille
c93e298518 Increase max Merkle path length 2020-01-19 14:47:33 -08:00
Pieter Wuille
fb486d7e13 Fix formula 2020-01-19 14:47:33 -08:00
Pieter Wuille
79f9fc4cc8 Extend input_index from 16 to 32 bits 2020-01-19 14:47:33 -08:00
Pieter Wuille
d9a30c954f Extend codeseparator_position from 16 to 32 bits 2020-01-19 14:47:33 -08:00
Jonas Nick
78bb31c3bf Accept seckey in the form of bytes and not int in the reference BIP-schnorr code to match the spec. 2020-01-19 14:47:33 -08:00
Tim Ruffing
e0e422a5ca Link to Schnorr's paper instead of Wikipedia 2020-01-19 14:47:33 -08:00
Jonas Nick
d112f5b035 Replace taproot_tweak_pubkey assertion with exception and add it to taproot_tweak_seckey too 2020-01-19 14:47:33 -08:00
Jonas Nick
afa5519ade Add taproot_tweak_pubkey and taproot_tweak_privkey functions to bip-taproot wallet section 2020-01-19 14:47:33 -08:00
Jonas Nick
e1d7da3796 Add is_quad function to bip-schnorr reference code 2020-01-19 14:47:33 -08:00
Jonas Nick
fe8f5f68ca Standardize on secret key in bip-schnorr 2020-01-19 14:47:33 -08:00
Jonas Nick
05cc92b9ad Add x() and y() functions for points to bip-schnorr 2020-01-19 14:47:33 -08:00
Jonas Nick
1c8bdd75a5 Remove 0xc1 2020-01-19 14:47:33 -08:00
Anthony Towns
cf8233d39e separate p2sh wrapped security rationale 2020-01-19 14:47:33 -08:00
Anthony Towns
7c6ee49c03 typo 2020-01-19 14:47:33 -08:00
Pieter Wuille
2202615b7c Fixups 2020-01-19 14:47:33 -08:00
Pieter Wuille
4087834c73 Move/reword tagged hashes motivation 2020-01-19 14:47:33 -08:00
Pieter Wuille
499106c57b Rework resource limits section 2020-01-19 14:47:33 -08:00
Pieter Wuille
972136beb6 Remove P2SH support 2020-01-19 14:47:33 -08:00
Elichai Turkel
8ea6798a9d Euler's Criterion prime only nit 2020-01-19 14:47:33 -08:00
JamesC
f5c728ff82 Removed reference to 0xc1 leaf version.
No longer necessary with 32B pubkeys.
2020-01-19 14:47:33 -08:00
Bryan Bishop
b78b6de4fd bip-taproot: fix small typo (is does not) 2020-01-19 14:47:33 -08:00
Jonas Nick
65a4f1deb8 Mention SHA256 block size
Rebased by Pieter Wuille
2020-01-19 14:47:33 -08:00
Pieter Wuille
8886eb4071 Address some nits 2020-01-19 14:47:33 -08:00
Jonas Nick
a5112f9f01 Move plain public key in output rationale to design section
Rebased by Pieter Wuille
2020-01-19 14:47:33 -08:00
Tim Ruffing
2b987b5711 Rework Applications section 2020-01-19 14:47:33 -08:00
Jonas Nick
204b7f13a0 Prescribe that a taproot output key should always have a taproot commitment 2020-01-19 14:47:33 -08:00
Tim Ruffing
29037bd123 Add a footnote about 32-byte security 2020-01-19 14:47:33 -08:00
Anthony Towns
4491902569 note about pubkey collision 2020-01-19 14:47:33 -08:00
Anthony Towns
0d04e41e2f key gen, verify, sign in intro 2020-01-19 14:47:33 -08:00
Anthony Towns
8ffea86023 use p for taproot internal key 2020-01-19 14:47:33 -08:00
Anthony Towns
4e13ec7301 make secret key a 32-byte array called sk, introduce pubkey() 2020-01-19 14:47:33 -08:00
Anthony Towns
a3f74a204e pk not p 2020-01-19 14:47:33 -08:00
Anthony Towns
efa556aa06 public keys aren't identical 2020-01-19 14:47:33 -08:00
Jonas Nick
8fd629c3f9 Fix privkey negation in taproot_sign_key 2020-01-19 14:47:33 -08:00
Jonas Nick
cc962bf84f Address sipa's comments 2020-01-19 14:47:33 -08:00
Jonas Nick
c33c7d0a0c Tag signature hashes, improve rationale and update test vectors 2020-01-19 14:47:33 -08:00
Jonas Nick
7f3611d239 Use a tagged hash in bip-schnorr nonce derivation 2020-01-19 14:47:33 -08:00
Jonas Nick
ba748dcd93 Use key path spend terminology more consistently in taproot/tapscript 2020-01-19 14:47:33 -08:00
John Newbery
680af7db4c Return a point from lift_x() 2020-01-19 14:47:33 -08:00
John Newbery
bba0bad5e8 Define c in lift_x(x) 2020-01-19 14:47:33 -08:00
John Newbery
1c6b104597 Replace 'quadratic residue of...' 2020-01-19 14:47:33 -08:00
Jonas Nick
16073d0c20 Clarify how to disable key path spending 2020-01-19 14:47:33 -08:00
Jonas Nick
f3bef4f459 Address sipa's feedback 2020-01-19 14:47:33 -08:00
Jonas Nick
a67e5e323c Update bip-schnorr/test-vectors.py
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2020-01-19 14:47:33 -08:00
Jonas Nick
5da30bd568 Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2020-01-19 14:47:33 -08:00
Jonas Nick
303ff5fb26 Address Tim's comments 2020-01-19 14:47:33 -08:00
Jonas Nick
08e1b3da74 Use short public keys for taproot output keys 2020-01-19 14:47:33 -08:00
Jonas Nick
e084aafb8b Switch to 32 byte public keys in bip-schnorr 2020-01-19 14:47:33 -08:00
Jonas Nick
1a4b08ab72 Fix point_from_bytes in bip-schnorr reference implementation 2020-01-19 14:47:33 -08:00
Jonas Nick
b2e6d11a6e Clarify diagram 2020-01-19 14:47:33 -08:00
Dmitry Petukhov
953dd23665 taproot_output_script: first returned byte should be OP_1 (0x51)
If we look at

  def IsPayToTaproot(script):
      return len(script) == 35 and script[0] == OP_1 and script[1] == 33 and script[2] >= 0 and script[2] <= 1

First byte is is checked for OP_1. OP_1 is 0x51

But the example code in this BIP returns  

`bytes([0x01, 0x21, output_pubkey[0] & 1]) + output_pubkey[1:]`

First byte 0x01, but it should be 0x51
2020-01-19 14:47:33 -08:00
Mark B Lundeberg
b65cd69467 remove duplicate warning
Though perhaps, the emphasis is warranted given its importance. :-)
2020-01-19 14:47:33 -08:00
Jonas Nick
eb96be7a9d Clarify what 'reduced' means in tests and use word 'message' instead of 'message hash' 2020-01-19 14:47:33 -08:00
Pieter Wuille
c7d7034b16 Add taproot/tapscript bips drafts 2020-01-19 14:47:33 -08:00
Pieter Wuille
6e77233b57 Add draft for Schnorr BIP
Includes squashed contributions by GitHub users jonasnick,
real-or-random, AustinWilliams, JustinTArthur, ysangkok,
RCassatta, Sjors, tnakagawa, and guggero.
2020-01-19 14:47:33 -08:00
Pieter Wuille
ffa91573d2
Merge pull request #186 from sipa/202001_commonsighash
Abstract out common signature message calculation
2020-01-16 13:04:36 -05:00
Pieter Wuille
0e3b6c595c Address jonas' comments 2020-01-14 10:28:49 -08:00
Pieter Wuille
86eea8adb4
Merge pull request #187 from sipa/202001_acks
Update acknowledgements, remove authors
2020-01-14 10:01:09 -05:00
Pieter Wuille
7497bdeceb Update acknowledgements, remove authors 2020-01-13 14:39:32 -08:00
Pieter Wuille
c0d2f93f3c Abstract out common signature message calculation 2020-01-13 14:10:26 -08:00
Pieter Wuille
138c62c8b0 Delete precompiled file 2020-01-13 07:27:18 -08:00
Pieter Wuille
bdef41ab58
Merge pull request #185 from sipa/202001_shifted_leaf_v
Rewrite leaf versions rationale
2020-01-13 10:26:14 -05:00
Anthony Towns
f978178d6b go back to leaf_version but different rationale 2020-01-11 06:28:24 +10:00
Pieter Wuille
39a18f4b18 Redefine leaf versions to be incrementally increasing from 0 2020-01-08 07:39:30 -08:00
Pieter Wuille
6a36adea8d
Merge pull request #184 from real-or-random/patch-15
clarify nonce generation
2020-01-05 06:06:47 -05:00
Tim Ruffing
63a19990fd Clarify nonce generation
- Separate nonce generation into getting a random byte string and converting it to a suitable scalar ...
 - ... to make clear that the byte string can be generated differently.
 - Make the warning a little bit more prominent and improve writing
2020-01-03 12:36:25 +01:00
Luke Dashjr
24eddbb48a
Merge pull request #869 from benthecarman/patch-2
BIP 174: Specify that separator only appears at end of the map
2020-01-03 04:31:58 +00:00
Luke Dashjr
ed3b31c136
Merge pull request #870 from dgpv/patch-10
BIP-174: add missing types to Appendix A; fix proprietary type names
2020-01-03 04:31:45 +00:00
Pieter Wuille
1d2166edc9
Merge pull request #183 from sipa/201912_authors
Update authors
2019-12-19 12:41:43 -05:00
Pieter Wuille
ded38826ce
Merge pull request #167 from stefanwouldgo/patch-4
more precise wording: limits on tx+block size -> block weight limit
2019-12-19 12:41:25 -05:00
stefanwouldgo
3318d707e1 more precise wording on limits
there are no tx or block size limits (post-Segwit), just block weight limit

better wording
2019-12-19 12:10:56 +01:00
Pieter Wuille
17b3f9e01a Update Post-History field for taproot/tapscript 2019-12-17 17:27:36 -08:00
Pieter Wuille
b90b53cd17 Update authors 2019-12-17 17:27:22 -08:00
Pieter Wuille
cb187012b6
Merge pull request #181 from sipa/201912_reorder_motivation
Restructure motivation/design and add informal summary
2019-12-17 14:31:28 -05:00
Pieter Wuille
b979c47893
Merge pull request #182 from pinheadmz/example1
bip-taproot: Explain example from script-tree diagram
2019-12-17 14:30:56 -05:00
Pieter Wuille
882e46350d Add rationale on security assumptions 2019-12-16 10:52:43 -08:00
Matthew Zipkin
6b42461f8e
bip-taproot: example from diagram 2019-12-16 11:26:54 -05:00
Pieter Wuille
1c163188ee Add an informal summary of the design 2019-12-15 22:37:22 -08:00
Pieter Wuille
01e5bfbf19 Improve and restructure motivation and design 2019-12-15 13:28:58 -08:00
Pieter Wuille
cb1cec770b
Merge pull request #176 from sipa/201912_linear_is_easy
Linearity makes sign-for-sum-of-keys easier, not possible entirely.
2019-12-14 16:25:11 -05:00
Pieter Wuille
7c7aead1c1
Merge pull request #179 from real-or-random/patch-14
Mention that we don't change the hash function
2019-12-14 16:24:52 -05:00
Pieter Wuille
6b50893798
Merge pull request #178 from sipa/201912_schnorr_consensus_exact
Consistent validity
2019-12-14 16:24:32 -05:00
Tim Ruffing
ad1eba008c Update bip-schnorr.mediawiki 2019-12-14 22:11:47 +01:00
Dmitry Petukhov
8faf97e720
BIP-174: add missing types to Appendix A; fix proprietary type names
PSBT_INPUT_PROPRIETARY -> PSBT_IN_PROPRIETARY

PSBT_OUTPUT_PROPRIETARY -> PSBT_OUT_PROPRIETARY

to be consistent with other in/out type names that use shortened `IN` and `OUT`
2019-12-14 20:39:40 +05:00
Pieter Wuille
83adab4af9 Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <crypto@timruffing.de>
2019-12-13 15:38:15 -08:00
Pieter Wuille
a8ebb65eb1 Linearity makes sign-for-sum-of-keys easier, not possible entirely.
I'm sure it's possible to construct a complex MPC that can sign for the
sum of keys under ECDSA as well.
2019-12-13 15:37:50 -08:00
Pieter Wuille
431ebd2f44
Merge pull request #177 from sipa/201912_lows_ecdsa_nonmalleable
Low-S ECDSA is non-malleable under nonstandard assumptions
2019-12-13 18:34:31 -05:00
Pieter Wuille
f1380bdc11 Completely specified 2019-12-13 15:31:18 -08:00
Pieter Wuille
40eccd5d3c
Merge pull request #180 from jonasnick/secret-key
Replace private key with secret key
2019-12-13 17:09:18 -05:00
Luke Dashjr
0a388fac46
Merge pull request #860 from azuchi/fix-wrong-description-bip174
BIP174: Fix wrong description about Proprietary Use Type
2019-12-13 16:07:25 +00:00
Luke Dashjr
56fe789358
Merge pull request #866 from dgpv/patch-6
BIP174: remove 'first byte is the type' comment for key data
2019-12-13 16:06:41 +00:00
Luke Dashjr
feb5395fe0
Merge pull request #867 from dgpv/patch-7
BIP-174: test data: fix value length
2019-12-13 16:06:26 +00:00
Luke Dashjr
675a14b23c
Merge pull request #865 from benthecarman/patch-1
BIP 174: Specifiy that the 32 bit ints are unsigned
2019-12-13 16:05:26 +00:00
Jonas Nick
633cca9b1c Replace private key with secret key 2019-12-13 13:25:16 +00:00
Tim Ruffing
ff2b53737c
Mention that we don't change the hash function 2019-12-13 12:11:50 +01:00
Pieter Wuille
aa18fdb07e Low-S ECDSA is non-malleable under nonstandard assumptions 2019-12-12 16:26:50 -08:00
Pieter Wuille
993a1ccdf1
Merge pull request #175 from real-or-random/patch-13
Clarify why we don't want short hashes
2019-12-12 17:34:53 -05:00
Tim Ruffing
92582c2a33
Clarify why we don't want short hashes
This is supposed to supersede https://github.com/sipa/bips/pull/158.
I tried to say this carefully. I don't think that multiparty signing is in general broken with short hashes. For example the attack in #158 could be avoided by letting everybody not only commit to the nonce but also to the message. It's just that using a collision-resistant hash just eliminates the problem entirely...
2019-12-12 22:49:21 +01:00
Pieter Wuille
b1d93cdd2c
Merge pull request #174 from hebasto/patch-1
Fix reference formatting
2019-12-11 20:25:49 -05:00
Pieter Wuille
2d68aea170
Merge pull request #161 from OrfeasLitos/max-sig-unhashed-bytes
Typo: max bytes hashed for sig is 210
2019-12-11 20:00:02 -05:00
Pieter Wuille
2a2d4231ff
Merge pull request #154 from OrfeasLitos/replace-66-with-146
Replace BIP66 link with BIP146
2019-12-11 19:59:33 -05:00
Pieter Wuille
16d34fafa1
Merge pull request #166 from stefanwouldgo/patch-3
fix singular/plural ambiguity
2019-12-11 19:59:06 -05:00
Pieter Wuille
4b4c656790
Merge pull request #162 from OrfeasLitos/signing-validation
Replace signing with signature before validation
2019-12-11 19:58:52 -05:00
Ben Carman
e097b1d38a
BIP 174: Specify that separator only appears at end of the map 2019-12-11 15:53:06 -06:00
Hennadii Stepanov
2e0c9435a8
Fix reference formatting 2019-12-11 15:33:39 +02:00
stefanwouldgo
cc6fa25c79 fix singular/plural ambiguity 2019-12-11 10:30:01 +01:00
Pieter Wuille
4b25ff7b92
Merge pull request #148 from OrfeasLitos/link-implicit-y-proof-sketch
Link to proof sketch of security of implicit Y
2019-12-10 18:58:28 -05:00
Pieter Wuille
2a738c6956
Merge pull request #165 from OrfeasLitos/wtxid-malleability
Mention hash_type malleability would change wtxid
2019-12-10 18:54:17 -05:00
Pieter Wuille
9194a7b582
Merge pull request #171 from jonasnick/footnote16
Clarify bip-taproot digest difference to bip143 regarding sub-hashes
2019-12-10 18:46:51 -05:00
Pieter Wuille
a9190ff92b
Merge pull request #172 from jonasnick/footnote9
Improve clarity of footnotes for lift_x
2019-12-10 18:45:19 -05:00
Pieter Wuille
034e97bd6e
Merge pull request #170 from jonasnick/footnote7
Fix footnote 7 and remove references to Euler's criterion
2019-12-10 17:20:22 -05:00
Pieter Wuille
017ca0c69b
Merge pull request #173 from kallerosenbaum/bip-schnorr
Nits
2019-12-10 17:11:53 -05:00
Kalle Rosenbaum
fd898f118a Fix @jonasnick's comment 2019-12-10 22:01:43 +01:00
Kalle Rosenbaum
adf4d78e6c Nits 2019-12-09 21:20:40 +01:00
Dmitry Petukhov
65f0b3dd62
BIP-174: test data: fix value length
In the test case "Case: PSBT With invalid output witnessScript typed key", after PSBT_OUT_WITNESS_SCRIPT key with garbage data (which ends with `...478ef51309d`, follows value `2b` which would denote the length of the data value of the key. But the length of actual remaining data is only 7 bytes. Thus, an implementation that reads key-value pairs and checks for validity of the key data after it has read the current key-value pair, will not be able to hit the exact condition intended for this test case: extra data within the key itself. This is because such implementation will hit serialization error when it will try to read the data of the value and will get the short read.

Reading full key-value pair and then checking key format afterwards is fairly normal thing to do, as the format of the keys with all their meaning is an abstraction of higher level than just the simple key-value serialization format.

The proposed change is to replace byte `2b` after the key data to `06` and thus make the value length in the key-value pair valid (not going beyond the end of the data).

base64 encoding has been changed accordingly.
2019-12-09 17:30:47 +05:00
Ben Carman
c7191c935e
Specify 32 bit itns as unsigned and their endianess 2019-12-09 01:44:43 -06:00
Dmitry Petukhov
267c02a4b5
BIP174: remove 'first byte is the type' comment for key data
As the key type is now defined as compact size integer, `At the beginning of each key is a compact size unsigned integer representing the type`, the comment in the first table in the document, about first byte of the key being the key type is no longer accurate.

As the structure of the key data is described further in the text after the table, and the comment that it starts with the compact size integer seems a bit long to be in that table, I think it is better to just remove the comment about the key data structure from the table, and leave the explanation to the text after the table.
2019-12-09 12:21:09 +05:00
Jonas Nick
93e1921d83 Improve clarity of footnotes for lift_x 2019-12-04 20:21:52 +00:00
Jonas Nick
2c6b472e9c Clarify bip-taproot digest difference to bip143 regarding sub-hashes 2019-11-29 16:32:44 +00:00
Pieter Wuille
4c638b3843
Merge pull request #164 from OrfeasLitos/neither-instead-of-both
Replace "both are not" with "neither is"
2019-11-29 11:03:54 -05:00
Jonas Nick
382a1d19a0 Replace references to Euler's criterion with Legendre symbol in bip-schnorr 2019-11-29 15:48:22 +00:00
Jonas Nick
3acb150829 Fix bip-schnorr footnote 7 by specifying that we're referring to P's y coordinate and not some undefined 'x' 2019-11-29 15:48:02 +00:00
Pieter Wuille
075823bdd5
Merge pull request #169 from andrewtoth/patch-1
Add missing closing parenthesis and comma
2019-11-28 23:37:51 -05:00
andrewtoth
6a72458bf9
Update bip-tapscript.mediawiki 2019-11-29 04:01:53 +00:00
andrewtoth
83e886ce07
Add missing closing parenthesis and comma 2019-11-29 03:57:00 +00:00
Orfeas Stefanos Thyfronitis Litos
2e79be9f72
Mention that miners could malleate signatures 2019-11-26 15:30:12 +00:00
Pieter Wuille
1650cacac0
Merge pull request #156 from hebasto/20191123-grammar-and-reference
Fix paragraph naming and typo
2019-11-26 07:07:20 -08:00
Pieter Wuille
3d3bd7660c
Merge pull request #160 from OrfeasLitos/clarify-choices
Rephrase "previous design choice" to "list above"
2019-11-26 06:54:21 -08:00
Pieter Wuille
9648889b4f
Merge pull request #150 from stefanwouldgo/patch-1
grammar typo fix: inserted "be"
2019-11-26 06:42:10 -08:00
Orfeas Litos
b44d5c9531
Mention hash_type malleability would change wtxid 2019-11-26 12:43:34 +00:00
Orfeas Litos
7ec4ce9a8d
Replace "both are not" with "neither is" 2019-11-26 12:39:34 +00:00
Pieter Wuille
88778d77e8
Merge pull request #155 from jonasnick/negate
Rename is_y_square to is_negated in taproot signing
2019-11-25 13:41:48 -08:00
Orfeas Stefanos Thyfronitis Litos
633b52fbc0
Typo: script signature max bytes unhashed are 247 2019-11-25 16:50:11 +00:00
Orfeas Stefanos Thyfronitis Litos
1e1795de46
Replace signing with signature before validation 2019-11-25 16:43:05 +00:00
Orfeas Stefanos Thyfronitis Litos
75d753868c
Typo: max bytes hashed for sig is 210 2019-11-25 16:25:24 +00:00
Orfeas Stefanos Thyfronitis Litos
8ca122e8fe
Rephrase "previous design choice" to "list above" 2019-11-25 12:25:19 +00:00
Hennadii Stepanov
4fa7cba641
Fix paragraph naming and typo 2019-11-23 21:27:44 +02:00
Jonas Nick
9208857b92 Rename is_y_square to is_negated in taproot signing 2019-11-22 20:40:20 +00:00
Orfeas Stefanos Thyfronitis Litos
fbd304575f
Replace BIP66 link with BIP146
BIP66 does not mention the inherent ECDSA malleability, but BIP146 does
2019-11-22 11:41:36 +00:00
Pieter Wuille
51c2c12158
Merge pull request #151 from dgpv/patch-5
Nit: bip-schnorr: Add missing dots that denote multiplication
2019-11-21 11:33:09 -08:00
Dmitry Petukhov
75b464ad76
Add missing dots that denote multiplication
Throughout the document, elliptic curve multiplication is denoted with dots,
as in `d'⋅G` as opposed to `d'G`.
This is not the case in one place in the 'Default Signing' section,
and one place in 'Adaptor Signatures' section

Missing dots are added for consistency.
2019-11-22 00:21:05 +05:00
stefanwouldgo
09c12e4052
grammar typo fix: inserted "be" 2019-11-19 10:10:34 +01:00
Pieter Wuille
34a37231e7
Merge pull request #149 from OrfeasLitos/add-missing-quote
Add missing quote
2019-11-18 11:05:13 -08:00
Orfeas Stefanos Thyfronitis Litos
314e9fd904
Add missing quote 2019-11-18 17:00:39 +00:00
Orfeas Stefanos Thyfronitis Litos
e544fc66ba
Link to proof sketch of security of implicit Y
Thanks to @ajtowns for providing the link
2019-11-18 16:50:01 +00:00
Pieter Wuille
6b906253b1
Merge pull request #147 from OrfeasLitos/fix-typo-sig
Fix typo in schnorr, footnote 2
2019-11-18 08:30:07 -08:00
Pieter Wuille
b9d12f79fb
Merge pull request #146 from MaxHillebrand/patch-1
make clear it's script branch
2019-11-18 07:41:49 -08:00
Orfeas Stefanos Thyfronitis Litos
cacb82fc6d
Fix typo in schnorr, footnote 2 2019-11-18 14:47:27 +00:00
Max Hillebrand
de14bad4dc
make clear it's script branch
In this context we are talking about the script branch, not the Merkle tree branch, right? If so, then this should clear things up a little.
2019-11-18 14:56:29 +08:00
Pieter Wuille
c5a7332ea3
Merge pull request #131 from afk11/fix-typo-bip-tapscript
tapscript: fix minor typo
2019-11-16 12:54:19 -08:00
Pieter Wuille
3e3ac64b53
Merge pull request #140 from jonatack/clarify-and-link-to-bip-schnorr-reference-code
bip-taproot: clarify bip-schnorr reference code
2019-11-16 12:53:10 -08:00
Pieter Wuille
a00c4a3dc9
Merge pull request #143 from OrfeasLitos/link-to-other-bips
Add links to unlinked BIPs
2019-11-16 12:50:17 -08:00
Pieter Wuille
a6d7059ce0
Merge pull request #137 from AdamISZ/hash-0-meaning
Add clarification of semantics of 0x00 hash type
2019-11-16 12:49:35 -08:00
Pieter Wuille
aa337b9fbb
Merge pull request #134 from hebasto/20191111-base-point
G refers to the secp256k1 base point rather generator
2019-11-16 12:49:11 -08:00
Pieter Wuille
5dab10b0b6
Merge pull request #135 from pyskell/patch-1
ADD: Require BIPs for Taproot and Tapscript
2019-11-16 12:48:23 -08:00
Pieter Wuille
bc0c57e1fd
Merge pull request #144 from devrandom/wording
Clarify 211 hash bytes and non-reuse of keys
2019-11-15 19:43:39 -08:00
Pieter Wuille
e5d6ee25e9
Merge pull request #145 from instagibbs/patch-11
remind reader where [:] is defined
2019-11-15 14:24:24 -08:00
Gregory Sanders
8861bd503a
remind reader where [:] is defined
in addition to `point`. This caused confusion for one reader who expected inclusive at end of range.
2019-11-15 13:46:35 -05:00
Dev Random
b8cbd419e6
tweak 211 bytes text 2019-11-14 10:55:32 -08:00
azuchi
87a85402ae BIP174: Fix wrong description about Proprietary Use Type 2019-11-14 11:53:05 +09:00
Devrandom
1a9c7f948a clarify 211 hash bytes and non-reuse of keys 2019-11-13 18:46:05 +01:00
Orfeas Stefanos Thyfronitis Litos
b417bb3c50
Add links to unlinked BIPs
Only first mention of each BIP is made into a link
2019-11-13 17:20:09 +00:00
Pieter Wuille
1e27c4e307
Merge pull request #142 from OrfeasLitos/python-typo
Replace R with P in taproot_tweak_seckey
2019-11-13 08:50:18 -08:00
Orfeas Stefanos Thyfronitis Litos
7bce5a0930
Replace R with P in taproot_tweak_seckey 2019-11-13 14:00:03 +00:00
Jon Atack
8b92d05be9
bip-taproot: clarify bip-schnorr reference code
- update the paragraph in question to more clearly convey that the helper
  functions, and not the Python3 example code, are from the bip-schnorr
  reference code

- add a link to the reference code in
  https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr/reference.py
2019-11-12 23:07:44 +01:00
Anthony
f620c87eb7 FIX: BIPs should be specified as lowercase to match filenames 2019-11-12 15:47:39 -05:00
Anthony
0af4a35295
ADD: Require Schnorr and Taproot BIPs for Tapscript
https://github.com/sipa/bips/pull/135#issuecomment-552754867
2019-11-12 14:08:09 -05:00
Adam Gibson
e5918b3b29
Add clarification of semantics of 0x00 hash type 2019-11-12 11:41:27 +00:00
Pieter Wuille
b79935a883
Merge pull request #136 from instagibbs/patch-10
BIP16 has no relation to bip-taproot/tapscript
2019-11-11 16:04:47 -08:00
Gregory Sanders
c98970085d
BIP16 has no relation to bip-taproot/tapscript
Previously did.
2019-11-11 15:32:57 -05:00
Anthony
5abcbca343
ADD: Require Schnorr BIP for Taproot
Per https://github.com/bitcoin/bips/blob/master/bip-0001.mediawiki:

"BIPs may have a Requires header, indicating the BIP numbers that this BIP depends on"
2019-11-11 13:40:42 -05:00
Hennadii Stepanov
7e98e2fd84
G refers to secp256k1 base point rather generator 2019-11-11 20:09:55 +02:00
Pieter Wuille
c936a9bc4b
Merge pull request #132 from agis/patch-2
Fix typo
2019-11-11 08:03:40 -08:00
Agis Anastasopoulos
af1638ce18
Fix typo 2019-11-11 12:39:53 +02:00
Pieter Wuille
c9931d156c
Merge pull request #130 from LaurentMT/patch-1
Fxied typo in taproot_sign_script()
2019-11-11 00:54:22 -08:00
Thomas Kerin
5ceb42b48b
tapscript: fix minor typo 2019-11-11 02:41:15 +00:00
LaurentMT
ad4156a394
Fxied typo in taproot_sign_script() 2019-11-11 01:20:28 +01:00
Luke Dashjr
8431b22b2d
Merge pull request #856 from emilengler/emilengler-redefinition-of-the-term-address
BIP 179: Name for payment recipient identifiers
2019-11-08 16:10:12 +00:00
Emil Engler
d3ff4b1e9e
Add BIP 179: Name for payment recipient identifiers 2019-11-07 14:58:29 +01:00
Pieter Wuille
3700e18055
Merge pull request #128 from codeShark149/tweak_pubkey_change
Internal pubkey calculation fixed in taproot_tweak_pubkey()
2019-11-06 12:48:56 -08:00
codeShark149
de82b3ad26 Internal pubkey calculation fixed in taproot_tweak_pubkey() 2019-11-06 23:48:29 +05:30
Luke Dashjr
580e719221
Merge pull request #803 from kallewoof/bip-signet
BIP 325: Signet
2019-11-06 15:55:08 +00:00
Pieter Wuille
230f6cb734
Merge pull request #125 from fjahr/patch-1
Link design section of BIP Schnorr in Specification
2019-11-06 07:44:44 -08:00
Pieter Wuille
73ade2d61b
Merge pull request #126 from MaxHillebrand/patch-1
fix: script spend, not key spend reveals tree depth
2019-11-06 07:44:00 -08:00
Karl-Johan Alm
2a270d9419
BIP 325: Signet 2019-11-06 17:39:25 +09:00
Max Hillebrand
78eb015f63
fix: script spend, not key spend
For the key spend the script tree depth is not revealed, it is only done for script spends. This sentence makes sense only for the script spend.
2019-11-06 05:58:11 +01:00
Luke Dashjr
96382166b0
Merge pull request #851 from naumenkogs/master
BIP 330: Transaction announcements reconciliation
2019-11-05 18:02:48 +00:00
Pieter Wuille
3f62751809
Merge pull request #121 from jonasnick/add-test-vector
Fix point_from_bytes accepting out-of-range pubkeys and add test vector
2019-11-05 09:57:41 -08:00
User
544e883488 update readme 2019-11-05 12:38:51 -05:00
User
affe5cb881 Add comments links and created date. 2019-11-05 11:55:26 -05:00
Fabian Jahr
08622c9494
Link design section of BIP Schnorr in Specification 2019-11-05 14:53:16 +01:00
Jonas Nick
8a8a35bfc5 Update test-vectors.csv 2019-11-05 10:14:23 +00:00
Pieter Wuille
857dd625b5
Merge pull request #114 from real-or-random/patch-11
improve rationale for key prefixing
2019-11-04 16:06:29 -08:00
Jonas Nick
8e7aef083e Fix point_from_bytes accepting out-of-range pubkeys and add test vector 2019-11-05 00:05:07 +00:00
Pieter Wuille
1bb025aa22
Merge pull request #116 from jonasnick/test-vec-terminology
Adjust reference code and test vectors to latest bip
2019-11-04 16:00:42 -08:00
Jonas Nick
0ec01e9255 Fix typo in reference code comment 2019-11-04 23:35:55 +00:00
Jonas Nick
35f1fface5 Make more clear that signing function in test vectors generation code isn't intended to be used anywhere else 2019-11-04 23:35:31 +00:00
Jonas Nick
c0f0c8d43d Check infinity in is_positive 2019-11-04 23:35:24 +00:00
Jonas Nick
220df7da78 Adjust test vector generation code to latest terminology 2019-11-04 23:35:17 +00:00
Jonas Nick
854a33ab48 Fix test vector generation code after changing schnorrsig_sign api 2019-11-04 23:35:11 +00:00
Pieter Wuille
2f1c4d80ae
Merge pull request #124 from sipa/square_terminology
Settle on notation: is_square(y), has_square_y(P)
2019-11-04 13:59:59 -08:00
Pieter Wuille
0c6a9cffad Settle on notation: is_square(y), has_square_y(P) 2019-11-04 13:42:24 -08:00
Pieter Wuille
eacf0c6533
Merge pull request #120 from dgpv/patch-2
bip-taproot: fix docstring in taproot_output_script
2019-11-04 13:28:36 -08:00
Dmitry Petukhov
db8d6d426f
fix docstring in taproot_output_script
the final "-None" line in the docstring of `taproot_output_script` example function was actually outside of the docstring
2019-11-05 02:13:24 +05:00
Pieter Wuille
fda77055c7
Merge pull request #122 from dgpv/patch-3
bip-taproot: use bytes() instead of b'' - avoid markdown issue
2019-11-04 11:34:37 -08:00
User
7f9ad3ebe5 add trailing zero to the file name 2019-11-04 13:39:01 -05:00
User
2e7dab87ef added missing leading zero 2019-11-04 13:30:08 -05:00
User
161c482f12 Merge branch 'master' of https://github.com/naumenkogs/bips
* 'master' of https://github.com/naumenkogs/bips:
  Update bip-reconcil.mediawiki
2019-11-04 13:24:31 -05:00
User
aae7384c46 Assigned a number, separated lines for authors, added License-Code field. 2019-11-04 13:24:24 -05:00
Luke Dashjr
8677fd5786
Merge pull request #767 from bitcoinbrisbane/patch-1
Update the link to NBitcoin repo
2019-11-04 15:50:32 +00:00
Luke Dashjr
a758915592
Merge pull request #857 from Roasbeef/bip-157-filter-request-limit
BIP-0157: increase max getcfilters request to 1k blocks
2019-11-04 15:01:24 +00:00
Luke Dashjr
ba804c9d52
Merge pull request #844 from kallerosenbaum/master
BIP174: Remove misleading sentence
2019-11-04 15:00:38 +00:00
Dmitry Petukhov
12d8d5baa8
use bytes() instead of b'' - avoid markdown issue
Currently github markdown renders `b''` inside `<source>` tags incorrectly. This makes `h = b''` show as `h = b` and creates some confusion.
The issue can be avoided by using bytes() to create empty byte array
2019-11-04 19:15:12 +05:00
Luke Dashjr
daed7bfa8d
Merge pull request #849 from achow101/bip174-extensions
Bip174 extensions
2019-11-04 14:06:54 +00:00
Pieter Wuille
e174022b36
Merge pull request #115 from real-or-random/patch-12
typos
2019-10-30 01:28:41 -07:00
Tim Ruffing
db1973ffba improve rationale for key prefixing 2019-10-30 01:32:07 +01:00
Tim Ruffing
73b8e3aeeb
typos 2019-10-30 01:27:26 +01:00
Pieter Wuille
cf43d29fff
Merge pull request #112 from sipa/201910_success_above_all_else
Consistently mention resource limits in bip-tapscript
2019-10-28 13:38:58 -07:00
Pieter Wuille
89b32a095d
Merge pull request #113 from sipa/201910_altsigning
Elaborate on default and alternative signing
2019-10-27 14:31:45 -07:00
Pieter Wuille
da4721cdc6
Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2019-10-25 10:18:29 -07:00
Pieter Wuille
322ce53625
Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2019-10-25 10:18:17 -07:00
Luke Dashjr
fd89f0ad92
Merge pull request #845 from MarcoFalke/patch-1
BIP 158: Fix mediawiki syntax typo, Remove remnants of the second filter type
2019-10-25 14:00:37 +00:00
Olaoluwa Osuntokun
898559fd05
BIP-0157: increase max getcfilters request to 1k blocks
In this commit, we effectively revert #699 by allow clients to request
filter for up to 1k consecutive blocks. Testing in the field has shown
that applications are able to reduce perceived latency from syncing to
full functionality after an app has been offline for several days by
batching requests for filters. A value of 100 would mean each additional
day behind adds an additional round trip, resulting in 10s of
seconds of lag after just a few days of being offline. A value of ~1k
allows implementations to catch up with roughly a week's worth of
filters in a single round trip.
2019-10-24 19:51:37 -07:00
Pieter Wuille
f95ac70606 Elaborate on default and alternative signing 2019-10-24 16:03:33 -07:00
Pieter Wuille
6d6b9c6940 Consistently mention resource limits in bip-tapscript 2019-10-24 11:12:59 -07:00
Pieter Wuille
436f14d9d7
Merge pull request #111 from sipa/201910_whynocmssuccess
Explain why CMS is not turned into SUCCESSx
2019-10-24 09:31:31 -07:00
Pieter Wuille
852951276f
Merge pull request #109 from sipa/201910_multisig
Improve section on alternatives to OP_CHECKMULTISIG
2019-10-23 11:20:00 -07:00
Pieter Wuille
2973e09a88 Explain why CMS is not turned into SUCCESSx 2019-10-22 11:46:31 -07:00
Pieter Wuille
6ad79bcd46 Address aj comments 2019-10-22 11:15:36 -07:00
Pieter Wuille
474d214d03 Improve section on alternatives to OP_CHECKMULTISIG 2019-10-21 16:16:47 -07:00
Pieter Wuille
da1bc18ce9
Merge pull request #108 from real-or-random/patch-10
bip-schnorr: Change reference for ECDSA proofs
2019-10-21 08:12:01 -07:00
Tim Ruffing
0176ed1871 Change reference for ECDSA proofs
Refer to Manuel Fersch's dissertation for provable security of ECDSA. It's freely accessible and multiple results put well in context.
2019-10-21 13:27:59 +02:00
Pieter Wuille
87caa68a8f
Merge pull request #96 from ajtowns/201910-annexbit
annex is bit 0 of spend_type
2019-10-17 22:22:24 -07:00
Anthony Towns
01e0c43023 annex is bit 0 of spend_type 2019-10-18 13:43:31 +10:00
Pieter Wuille
ae32d243cd
Merge pull request #93 from sipa/201910_clarify_keygen
Clarify interaction x-only keys with verification
2019-10-15 18:05:59 -07:00
Pieter Wuille
2a9a70c92a More on key generation 2019-10-15 18:03:31 -07:00
Pieter Wuille
0c7bbf83c6
Merge pull request #92 from sipa/201910_musig_needs_keyprefix
Explain that MuSig needs key prefixing
2019-10-15 17:56:11 -07:00
Pieter Wuille
0a45ecbf04 Clarify interaction x-only keys with verification 2019-10-15 17:38:10 -07:00
Pieter Wuille
d434c18af8 Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2019-10-15 17:33:33 -07:00
Pieter Wuille
59ac6a9683 Explain that MuSig needs key prefixing 2019-10-15 17:31:15 -07:00
Pieter Wuille
80c6129cee
Merge pull request #94 from real-or-random/patch-9
bip-schnorr: incorporate results of Neven, Smart, Warinschi
2019-10-15 17:28:16 -07:00
Tim Ruffing
2d9877e6e1 bip-schnorr: more on (e,s) 2019-10-15 17:26:45 -07:00
Tim Ruffing
e139975eff
bip-schnorr: more on provable security
I'll try to get a link to the CCS paper that does not have a paywall...
2019-10-15 16:02:09 -07:00
Pieter Wuille
ad539ef432
Merge pull request #87 from sipa/201910_square_positive
Use is_square/is_positive and introduce algorithm names
2019-10-15 12:34:53 -07:00
Pieter Wuille
348110ec52 Typo 2019-10-15 12:29:52 -07:00
Pieter Wuille
cdf7dd8cca Drop other curve comment 2019-10-15 12:26:21 -07:00
Pieter Wuille
8c0b29cc94 Prefix infinite with is_ 2019-10-15 12:24:21 -07:00
Pieter Wuille
1e00d6ef6a
Apply suggestions from code review
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2019-10-15 12:22:31 -07:00
Pieter Wuille
1442d4dabc Formulate claims about BatchVerify more accurately 2019-10-15 12:11:17 -07:00
Pieter Wuille
0655cc3c64 Use is_square/is_positive and introduce algorithm names 2019-10-15 10:36:51 -07:00
Pieter Wuille
5ecd376cac
Merge pull request #86 from sipa/201910_simple_fixes
Small fixes from review with real-or-random
2019-10-15 09:33:16 -07:00
Pieter Wuille
3c7fd7a830 HTTPS links where possible 2019-10-15 09:30:06 -07:00
Pieter Wuille
69f1c93d92 Small fixes from review with real-or-random 2019-10-14 17:55:19 -07:00
Luke Dashjr
6bcb38f226
Merge pull request #837 from clarkmoody/bip-45-formatting
BIP-0045 - Formatting use <code> tags
2019-10-11 23:11:31 +00:00
Luke Dashjr
aca1510b92
Merge pull request #816 from kallewoof/2019-07-bip154-withdraw
BIP-154: change to withdrawn status
2019-10-11 23:06:03 +00:00
Luke Dashjr
67f7e52fc7
Merge pull request #852 from MarcoFalke/1909-103nono
BIP 103: Mark as withdrawn
2019-10-11 03:05:50 +00:00
MarcoFalke
09d3d83d7e BIP 103: Withdrawn 2019-10-10 18:15:24 -04:00
MarcoFalke
d2277115ce travis: Remove unused sudo:false
Builds in sudo-disabled docker containers are no longer available as of
last year and all builds happen on sudo enabled vms.

https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration#timeline---its-happening-fast
2019-10-10 18:15:12 -04:00
Pieter Wuille
c8e82957a2
Merge pull request #85 from sipa/201910_c1
Small fix: 0xc1 is possible as first control block byte
2019-10-09 13:41:06 -07:00
Pieter Wuille
9413cc1f07 Small fix: 0xc1 is possible as first control block byte 2019-10-09 12:12:55 -07:00
Pieter Wuille
e5888935ca
Merge pull request #83 from sipa/branch_limit
Increase max Merkle path length
2019-10-09 12:05:28 -07:00
Gleb Naumenko
394601bb3c
Merge pull request #2 from MarcoFalke/patch-2
Update bip-reconcil.mediawiki
2019-10-09 12:51:35 -04:00
Pieter Wuille
6b72dfff51 Increase max Merkle path length 2019-10-08 18:57:19 -07:00
Pieter Wuille
15d5aa2732 Fix formula 2019-10-07 14:37:41 -07:00
Pieter Wuille
4aa889e6ac
Merge pull request #77 from sipa/201909_bigger_opspos
Extend codeseparator_position and input_index from 16 to 32 bits
2019-10-07 10:45:24 -07:00
Pieter Wuille
00f941b8c7
Merge pull request #80 from jonasnick/bytes
Accept seckey in the form of bytes and not int in the reference BIP-schnorr code...
2019-10-07 10:44:57 -07:00
Pieter Wuille
90d9e21825
Merge pull request #82 from real-or-random/patch-8
Link to Schnorr's paper instead of Wikipedia
2019-10-07 10:44:10 -07:00
Pieter Wuille
730feed75a
Merge pull request #81 from jonasnick/tweaks
Improve readability of bip-taproot wallet section
2019-10-07 10:43:55 -07:00
Tim Ruffing
3f61b2b1e7
Link to Schnorr's paper instead of Wikipedia 2019-10-03 11:21:24 +02:00
Andrew Chow
bc3a81e698 Specify proprietary use type 2019-10-02 15:09:51 -04:00
Jonas Nick
a6e5c16821 Replace taproot_tweak_pubkey assertion with exception and add it to taproot_tweak_seckey too 2019-09-30 11:15:23 +00:00
Gleb Naumenko
32af098957 minor fixes
Co-authored-by: Rusty Russel <rusty@rustcorp.com.au>
2019-09-30 11:49:54 +03:00
Jonas Nick
398897cd29 Add taproot_tweak_pubkey and taproot_tweak_privkey functions to bip-taproot wallet section 2019-09-27 15:36:51 +00:00
Jonas Nick
1882aa7b8f Add is_quad function to bip-schnorr reference code 2019-09-27 15:36:51 +00:00
Jonas Nick
5c52872fe0 Standardize on secret key in bip-schnorr 2019-09-27 15:36:51 +00:00
Jonas Nick
7e273fbda6 Add x() and y() functions for points to bip-schnorr 2019-09-27 15:36:51 +00:00
Jonas Nick
472911379c Accept seckey in the form of bytes and not int in the reference BIP-schnorr code to match the spec. 2019-09-26 21:13:18 +00:00
Gleb Naumenko
0ee067c70e Acknowledge suhas' contributions 2019-09-26 07:59:06 +03:00
Pieter Wuille
8d893f9c06
Merge pull request #79 from jonasnick/0xc1
Remove 0xc1
2019-09-25 14:12:50 -07:00
Jonas Nick
479fe5f365 Remove 0xc1 2019-09-25 21:02:43 +00:00
MarcoFalke
630052355d
Update bip-reconcil.mediawiki
Fix mediawiki syntax for italic text
2019-09-25 15:47:11 -04:00
Pieter Wuille
9033e43001
Merge pull request #78 from ajtowns/201909-p2sh80b
minor wording fixes
2019-09-25 09:58:38 -07:00
Gleb Naumenko
63504d9f9c
Merge pull request #1 from MarcoFalke/patch-2
bip-reconcil: Switch PD "license" to CC0
2019-09-25 16:46:31 +03:00
MarcoFalke
be33606bfe
bip-reconcil: Switch PD "license" to CC0
See https://github.com/bitcoin/bips/blob/master/bip-0002.mediawiki#recommended-licenses
2019-09-25 08:33:20 -04:00
Gleb Naumenko
311c085cab bip for erlay messages 2019-09-25 14:11:03 +03:00
Anthony Towns
f831386103 separate p2sh wrapped security rationale 2019-09-25 14:38:13 +10:00
Anthony Towns
7ce33c01ec typo 2019-09-25 14:02:42 +10:00
Luke Dashjr
b1b248fc6a Update BIP 100 status Draft->Rejected 2019-09-24 19:33:03 +00:00
Luke Dashjr
3a5477c7cc Merge BIP 100 2019-09-24 19:31:38 +00:00
Luke Dashjr
773a7fe993 README: Fix BIP 100 fields 2019-09-24 19:31:13 +00:00
MarcoFalke
af134f361f
Update bip-0158.mediawiki
Fix:

* Render issue in `<ref>` tag (c.f. https://en.bitcoin.it/wiki/BIP_0158#Contents)
* Remove remnants of the second filter type
2019-09-24 15:05:03 -04:00
Pieter Wuille
0d5ac28f2c Extend input_index from 16 to 32 bits 2019-09-24 10:36:41 -07:00
Pieter Wuille
4c2eb9a600 Extend codeseparator_position from 16 to 32 bits 2019-09-23 22:48:12 -07:00
Pieter Wuille
d51109a03f
Merge pull request #76 from sipa/201909_tapscript_resource_fixups
Fixups
2019-09-23 15:00:34 -07:00
Pieter Wuille
05efb5de84
Merge pull request #71 from sipa/201909_fix_tag_rationale
Move/reword tagged hashes motivation
2019-09-23 13:32:51 -07:00
Pieter Wuille
079ae4b048 Fixups 2019-09-23 13:24:33 -07:00
Pieter Wuille
6aa933b178
Merge pull request #73 from sipa/201909_limits
Rework resource limits section
2019-09-23 12:19:26 -07:00
Pieter Wuille
2d2e268ee8
Merge pull request #72 from sipa/201909_no_p2sh
Remove P2SH support
2019-09-23 09:10:49 -07:00
Pieter Wuille
b9927356aa
Merge pull request #74 from elichai/patch-2
Euler's Criterion prime only nit
2019-09-23 09:10:24 -07:00
Elichai Turkel
aa463b8193
Euler's Criterion prime only nit 2019-09-23 02:06:14 +03:00
Pieter Wuille
1ee15f7dd9 Remove P2SH support 2019-09-20 19:44:03 -07:00
Pieter Wuille
f2899666f8 Rework resource limits section 2019-09-20 19:41:33 -07:00
Pieter Wuille
77dad346ec Move/reword tagged hashes motivation 2019-09-20 15:01:57 -07:00
Luke Dashjr
b5723035e2
Merge pull request #642 from psztorc/master
BIP 300: Hashrate Escrows (Consensus layer)
2019-09-20 17:59:18 +00:00
Luke Dashjr
34f0fe5b2a BIP 300: Fix preamble 2019-09-20 17:50:14 +00:00
Paul Sztorc
c78766c360 add number 300 and update README 2019-09-20 10:25:26 -07:00
Paul Sztorc
ecc00805c2 clarify + specific M4 example 2019-09-20 10:19:47 -07:00
Paul Sztorc
a9b0bc593a spellcheck 2019-09-20 10:19:46 -07:00
Paul Sztorc
c6da99018d typos 2019-09-20 10:19:46 -07:00
Paul Sztorc
99e57b086a compress
We were able to dramatically shorten the BIP, by deleting superfluous explanations/justifications. Instead it just focuses on what the messages are.
2019-09-20 10:19:46 -07:00
Paul Sztorc
3201b23119 typo 2019-09-20 10:19:46 -07:00
Paul Sztorc
dd02ff4c07 edit and shorten slightly 2019-09-20 10:19:46 -07:00
Kalle Rosenbaum
f1aff33f46 BIP174: Remove misleading sentence
The sentence seems to suggest that the "master key fingerprint" can be the fingerprint of any intermediate node on the derivation path, which isn't true.
2019-09-20 19:00:03 +02:00
Luke Dashjr
7e9fab150f
Merge pull request #810 from NicolasDorier/bips/global-xpub-test-vector
bip174: Add test vector for global xpub
2019-09-20 00:35:24 +00:00
Luke Dashjr
c7057971e1
Merge pull request #842 from darosior/174_typo
Remove a typo in bip-0174
2019-09-20 00:35:04 +00:00
Luke Dashjr
7d91fd1863
Merge pull request #775 from azuchi/fix-bip197-error
[BIP197] Fix description of Refund Period
2019-09-19 22:28:26 +00:00
Luke Dashjr
9e7d213e82
Merge pull request #796 from lukechilds/patch-2
[bip174] Fix typo in signer pseudo code
2019-09-19 22:18:45 +00:00
Luke Dashjr
df22d72c29
Merge pull request #811 from achow101/bip174-xpubs
BIP 174: global xpubs serialization test vector
2019-09-19 22:18:33 +00:00
Luke Dashjr
2eca4d32c8 Update BIP 102 status Draft->Rejected 2019-09-19 22:16:51 +00:00
Luke Dashjr
6a37a0d5e2
Merge pull request #820 from kallewoof/travis-link-format
travis: add a check for common mistake mediawiki links
2019-09-19 22:12:36 +00:00
Luke Dashjr
51a8d83122
Merge pull request #493 from zizelevak/master
Czech wordlist for BIP0039
2019-09-19 22:05:16 +00:00
Luke Dashjr
7bbe439509
Merge pull request #780 from dergigi/patch-1
[Trivial] BIP69: Fix word repetition
2019-09-19 22:03:50 +00:00
Luke Dashjr
990a5abf49
Merge pull request #838 from kallewoof/bip322-fix-testvectors
bip322: fix test-vectors
2019-09-19 22:01:47 +00:00
Luke Dashjr
fffeba18b3
Merge pull request #843 from vincenzopalazzo/master
Fixed hanging links and removed the number inside the name of the file base58.cpp
2019-09-19 21:34:46 +00:00
Vincenzo Palazzo
aeda6226dd
Update bip-0013.mediawiki 2019-09-18 11:23:47 +02:00
Vincenzo Palazzo
4d47fb24aa
Update bip-0013.mediawiki 2019-09-18 11:22:24 +02:00
Pieter Wuille
55beff3376
Merge pull request #69 from jachiang/2019-09-leaf-version
Removed reference to 0xc1 leaf version.
2019-09-17 12:25:16 -07:00
Pieter Wuille
849580166a
Merge pull request #70 from kanzure/bip-taproot-fix-typo
bip-taproot: Fix minor grammar issue
2019-09-16 16:57:58 -07:00
Bryan Bishop
1a8818a446
bip-taproot: fix small typo (is does not) 2019-09-16 18:47:54 -05:00
JamesC
d191359e75 Removed reference to 0xc1 leaf version.
No longer necessary with 32B pubkeys.
2019-09-16 21:59:54 +02:00
darosior
b4e6b0fac2
bip-0174: remove duplicated 'only' (typo) 2019-09-16 13:16:11 +02:00
Pieter Wuille
463a55935b
Merge pull request #67 from sipa/jonasnick_small-fixes
Mention SHA256 block size (rebase of #45)
2019-09-11 17:44:08 -07:00
Jonas Nick
87fa069b8f Mention SHA256 block size
Rebased by Pieter Wuille
2019-09-11 17:43:11 -07:00
Pieter Wuille
7c37e721de
Merge pull request #68 from sipa/nits_real-or-random_patch-6
Address some nits
2019-09-11 13:26:43 -07:00
Pieter Wuille
9424700d78
Merge pull request #66 from sipa/jonasnick_design
Move plain public key in output rationale to design section (rebase of #44)
2019-09-11 13:26:13 -07:00
Pieter Wuille
fa423aced9 Address some nits 2019-09-10 16:24:07 -07:00
Pieter Wuille
10073d1ca5
Merge pull request #65 from real-or-random/patch-6
Rework Applications section
2019-09-10 16:21:51 -07:00
Pieter Wuille
a02dbdc850
Merge pull request #49 from jonasnick/key-aggregation-security
Prescribe that an output key should always have a taproot commitment
2019-09-10 16:13:29 -07:00
Jonas Nick
0995c8a5b5 Move plain public key in output rationale to design section
Rebased by Pieter Wuille
2019-09-10 16:03:25 -07:00
Thomas Grainger
0f1a825246
Add .NET standard bip39 implementation 2019-09-09 00:34:07 +01:00
Pieter Wuille
eabf7c9a6d
Merge pull request #64 from real-or-random/patch-7
Add a footnote about 32-byte security
2019-09-08 13:29:40 -07:00
Tim Ruffing
4a383064fb Add a footnote about 32-byte security 2019-09-08 16:38:55 +02:00
Tim Ruffing
6d99e45126 Rework Applications section 2019-09-08 16:38:15 +02:00
Pieter Wuille
6653f9f883
Merge pull request #59 from ajtowns/201908-schnorr32-nits
32 byte pubkey nits
2019-09-02 08:55:52 -07:00
Liu Pengpeng
13dccfe663
Add swift implementation
Pure Swift implementation without any third-party dependencies。
2019-08-30 15:53:22 +08:00
Pieter Wuille
51a84fd407
Merge pull request #63 from jonasnick/fix-sign-key
Fix privkey negation in taproot_sign_key
2019-08-29 17:47:24 -07:00
Jonas Nick
02bdf88ef9 Fix privkey negation in taproot_sign_key 2019-08-29 20:46:47 +00:00
Anthony Towns
30bc716add note about pubkey collision 2019-08-29 02:35:00 +10:00
Anthony Towns
fc74ec6b35 key gen, verify, sign in intro 2019-08-29 02:35:00 +10:00
Anthony Towns
d3951f63f3 use p for taproot internal key 2019-08-29 02:35:00 +10:00
Anthony Towns
4643538d4f make secret key a 32-byte array called sk, introduce pubkey() 2019-08-29 02:35:00 +10:00
Anthony Towns
01e1f6e6b2 pk not p 2019-08-29 02:34:59 +10:00
Anthony Towns
e9600e6ed8 public keys aren't identical 2019-08-29 02:34:36 +10:00
Karl-Johan Alm
c28773f34e
bip322: fix test-vectors 2019-08-28 15:09:50 +09:00
Luke Dashjr
33e6283a68
Merge pull request #824 from kallewoof/2019-08-bip322-fix-abstract
BIP322: added background
2019-08-28 04:46:30 +00:00
Pieter Wuille
e1f199989b
Merge pull request #61 from jonasnick/tagged-derive
Use a tagged hash in bip-schnorr nonce derivation
2019-08-27 11:43:45 -07:00
Jonas Nick
dc6b91c1a9 Address sipa's comments 2019-08-27 15:13:08 +00:00
Clark Moody
71529345e8 Switch from Markdown-style code to Mediawiki 2019-08-26 17:24:57 -05:00
Jonas Nick
775cb2fd90 Tag signature hashes, improve rationale and update test vectors 2019-08-26 20:46:08 +00:00
Jonas Nick
7cd53f6eec Use a tagged hash in bip-schnorr nonce derivation 2019-08-26 11:32:04 +00:00
Pieter Wuille
de990a1128
Merge pull request #56 from jonasnick/keypath
Use key path spend terminology more consistently in taproot/tapscript
2019-08-22 13:09:58 -07:00
Jonas Nick
ed0bb5b0c2 Prescribe that a taproot output key should always have a taproot commitment 2019-08-22 15:49:09 +00:00
Jonas Nick
16bdfcf534 Use key path spend terminology more consistently in taproot/tapscript 2019-08-22 11:41:04 +00:00
Pieter Wuille
abe79d81e3
Merge pull request #58 from sipa/201908_computec
Clarify pseudocode of lift_x
2019-08-21 16:24:39 -07:00
Pieter Wuille
de9bc9c72c
Merge pull request #48 from jnewbery/2019-05-quadratic-residue
Reword 'quadratic residue of...'
2019-08-21 16:24:19 -07:00
John Newbery
8492968f34 Replace 'quadratic residue of...' 2019-08-21 18:40:40 -04:00
John Newbery
a462876b9a Return a point from lift_x() 2019-08-21 14:35:23 -07:00
John Newbery
ad91099b8f Define c in lift_x(x) 2019-08-21 14:22:57 -07:00
Pieter Wuille
4fef743de7
Merge pull request #43 from jonasnick/script-path-only
Clarify how to disable key path spending
2019-08-21 12:45:36 -07:00
Pieter Wuille
28dc94f36c
Merge pull request #55 from jonasnick/bip-schnorr32
Completely switch to 32-byte public keys in bip-schnorr/taproot/tapscript
2019-08-21 11:37:34 -07:00
Jonas Nick
0d28b3c37b Address sipa's feedback 2019-08-21 11:42:03 +00:00
Jonas Nick
ae96228913
Update bip-schnorr/test-vectors.py
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2019-08-20 10:53:58 +00:00
Jonas Nick
30fdc87599
Update bip-schnorr.mediawiki
Co-Authored-By: Tim Ruffing <tim@timruffing.de>
2019-08-20 10:53:51 +00:00
Jonas Nick
112d9c150a Address Tim's comments 2019-08-19 14:37:55 +00:00
Jonas Nick
9795b7081a Clarify how to disable key path spending 2019-08-18 15:52:46 +00:00
Jonas Nick
5793d3d735 Use short public keys for taproot output keys 2019-08-18 15:04:03 +00:00
Jonas Nick
ed01c1a776 Switch to 32 byte public keys in bip-schnorr 2019-08-18 15:04:03 +00:00
Jonas Nick
1faf705388 Fix point_from_bytes in bip-schnorr reference implementation 2019-08-18 15:04:03 +00:00
Karl-Johan Alm
b3cec02aa4
bip-322: clarify when to return ERROR in verify action 2019-08-08 01:08:12 +09:00
Karl-Johan Alm
f0784c6e92
BIP322: added background to explain why BIP322 exists, and what it changes 2019-08-06 17:09:25 +09:00
Karl-Johan Alm
6129830a33
travis: add a check for common mistake mediawiki links
Several BIPs have mistaken links in format [text](url) which this travis check will detect and complain about.
2019-08-06 16:46:20 +09:00
Luke Dashjr
a2645cdc42
Merge pull request #814 from kallewoof/2019-07-bip322-fixes2
BIP-322 major fixes (verification, etc)
2019-08-05 19:46:11 +00:00
Bryan Bishop
62c759eae6
bip112: fix trivial typo 2019-08-03 13:55:29 -05:00
Andrew Chow
20fdf77a2b Specify that types are compact size unsigned ints to allow for multi-byte types 2019-08-01 14:36:25 -04:00
Andrew Chow
503f35a9a0 Add Version type 2019-08-01 14:28:37 -04:00
Karl-Johan Alm
91ecdbeb26
BIP-322 updates to fix verification and other fixes 2019-08-01 16:54:47 +09:00
Luke Dashjr
32b496a65f
Merge pull request #798 from wigy-opensource-developer/patch-1
Updated BIP-0138 Comments-Summary
2019-07-30 12:13:27 +00:00
wigy
cfacb9d689
Applied standard terminology 2019-07-30 11:41:21 +02:00
Karl-Johan Alm
9e62a7a838
BIP-154: change to withdrawn status 2019-07-30 00:22:42 +09:00
Luke Dashjr
85671ef8d2
Merge pull request #808 from kallewoof/2019-07-bip322-fixes
BIP-322 updates
2019-07-29 14:35:03 +00:00
Karl-Johan Alm
e24e86b482
bip-322: add test vectors 2019-07-29 20:45:17 +09:00
Karl-Johan Alm
daa59903e2
BIP-322 update to remove ProveFunds purpose (with a note about extensibility) and to fix the serialization format 2019-07-29 17:19:44 +09:00
Luke Dashjr
213fb62cea Promote BIP 75 to Final 2019-07-26 16:29:02 +00:00
Luke Dashjr
ec6adac5f8 README: Minor spacing fix 2019-07-26 12:42:14 +00:00
Luke Dashjr
0b59032748 Merge BIP 301 2019-07-26 12:41:29 +00:00
Luke Dashjr
53e37a1dea Fix preamble in BIP 301 2019-07-26 12:41:03 +00:00
Luke Dashjr
1cc657ddda
Merge pull request #762 from clarkmoody/bip-49-version-bytes
BIP-49 - Add Version Bytes Section
2019-07-26 12:32:29 +00:00
Paul Sztorc
542c66e6dd
Add 301 Blind Merged Mining 2019-07-25 23:57:12 -07:00
Paul Sztorc
db117ef473
fix spacing 2019-07-25 23:51:05 -07:00
nicolas.dorier
d832c51e82
bip174: Add test vector for global xpub 2019-07-26 11:35:40 +09:00
Luke Dashjr
92e87c9ec3
Merge pull request #788 from nkohen/2019-06-13-fix-gcs-reference-link
BIP 158: Updated Golomb-Rice Coded sets Reference Implementation link
2019-07-26 02:35:07 +00:00
Luke Dashjr
372685f6bd
Merge pull request #787 from fjahr/master
BIP 158: remove old reference to extended filter type
2019-07-26 02:34:29 +00:00
Andrew Chow
6a36d8e1b4 BIP 174: global xpubs serialization test vector 2019-07-25 13:37:06 -04:00
Luke Dashjr
5ecba9af77
Merge pull request #809 from DanielWeigl/bip49_active
Set Status für BIP49 to 'Final'
2019-07-25 02:47:40 +00:00
Luke Dashjr
0dcffe6fc5
Merge pull request #781 from torkelrogstad/patch-2
Update bip-0049.mediawiki
2019-07-25 02:46:40 +00:00
Luke Dashjr
66e122a5b8
Merge pull request #804 from hebasto/patch-1
BIP 173: Remove duplicated 'the'
2019-07-25 02:35:55 +00:00
Luke Dashjr
efcfe8b670
Merge pull request #782 from MarcoFalke/patch-1
BIP 144: Old serialization format must be used on empty witness
2019-07-25 02:30:51 +00:00
Luke Dashjr
673feb8371
Merge pull request #793 from ysangkok/bip-0074
Reject BIP-0074 (three years inactivity)
2019-07-25 02:00:46 +00:00
DanielWeigl
fd4aab24a4 Set Status für BIP49 to 'Final'
it gets used by electrum, trezor and other wallets

- Reflect bip49 status change to active also in README.mediawiki
- Also fix email address (private one is more stable, old one isnt monitored anymore)
2019-07-24 14:54:29 +02:00
Paul Sztorc
4cd4e53752
cleanup 2 2019-07-23 09:26:54 -07:00
Paul Sztorc
69670c9da2
cleanup 1 2019-07-23 09:26:45 -07:00
Paul Sztorc
42e96858d5
move images 2019-07-23 09:26:15 -07:00
Paul Sztorc
1ff5d5d825
rename folder 2019-07-23 09:20:44 -07:00
Paul Sztorc
6ca33dc635
Rename bip-blind-merged-mining.mediawiki to bip-0301.mediawiki 2019-07-23 09:18:18 -07:00
Paul Sztorc
329df0b836
Update dates/links to merge 2019-07-23 09:14:33 -07:00
Clark Moody
5b74e93fcb Update test vectors with new version bytes 2019-07-23 11:13:15 -05:00
Clark Moody
75ae8418da Link to SLIP-0132 2019-07-23 10:30:10 -05:00
Clark Moody
4413bdc46f Add version bytes section 2019-07-23 10:30:10 -05:00
Luke Dashjr
ac75b1dcf5
Merge pull request #777 from dergigi/dergigi-patch-1-bip-typos
[Trivial] BIP2, BIP16: fix typos
2019-07-23 14:51:57 +00:00
Luke Dashjr
6a25c1478f
Merge pull request #800 from junderw/junderw-patch-1
BIP174: Include suggested sighash check
2019-07-23 14:51:01 +00:00
Luke Dashjr
095087bed0
Merge pull request #766 from laanwj/2019_02_addvr2
BIP 155: addrv2 BIP proposal
2019-07-23 14:43:59 +00:00
Luke Dashjr
15f7e19493
Merge pull request #805 from hebasto/patch-2
BIP 143: Remove duplicated 'the'
2019-07-23 14:37:32 +00:00
Hennadii Stepanov
42cc0c724d
BIP 143: Remove duplicated 'the' 2019-07-18 13:30:06 +03:00
Hennadii Stepanov
39a23b7cbe
BIP 173: Remove duplicated 'the' 2019-07-18 13:24:32 +03:00
Wladimir J. van der Laan
f5174192e2 bip155: Add table entry 2019-07-18 00:37:29 +02:00
Wladimir J. van der Laan
e993478060 bip155: Fix comments URL 2019-07-18 00:33:26 +02:00
Wladimir J. van der Laan
34534b5ee1 bip155: fill in BIP number 2019-07-18 00:17:55 +02:00
Luke Dashjr
bf057da6f7
Merge pull request #784 from achow101/bip174-xpubs
bip174: add global xpub field
2019-07-10 02:05:16 +00:00
Jonathan Underwood
97447f981f
BIP174: Include suggested sighash check 2019-07-10 08:30:23 +09:00
wigy
308594e098
Updated BIP-0138 Comments-Summary
That opinion was unnoticed for more than a month now, maybe this helps getting counter-arguments.
2019-07-01 17:07:12 +02:00
Luke Childs
7ab9ef95c6
[bip174] Fix typo in signer pseudo code 2019-06-26 16:47:04 +07:00
Janus
79c7b80c89 Reject BIP-0083 (three years inactivity) 2019-06-20 16:31:52 -05:00
Janus
71aeb97411 Reject BIP-0074 (three years inactivity) 2019-06-20 16:11:19 -05:00
Janus
3b6a92973e Reject BIP-0060 (three years inactivity) 2019-06-20 16:04:19 -05:00
nkohen
4fe45328c8 Updated Golomb-Rice Coded sets reference implementation link 2019-06-13 13:52:10 -05:00
Fabian Jahr
b65ca1c094 BIP 158: remove old reference to extended filter type 2019-06-13 12:19:57 -04:00
Luke Dashjr
8f9205760e
Merge pull request #555 from veleslavs/Bech32_Encoded_TxRef
BIP 136: Bech32 Encoded Tx Position References
2019-06-13 13:58:40 +00:00
Daniel X. Pape
4e2bb34d04 add examples for TxRefs with Outpoints; fix some typos and wording 2019-06-13 08:14:43 +02:00
Велеслав
a8bb0a4e39 Include Optional Encoded Outpoints
With thanks to Daniel Pape for the work behind this idea.

Please not that the test-vectors still need to be updated (again).
2019-06-13 08:14:41 +02:00
Велеслав
e78c384755 BIP-136: Bech32 Encoded Tx Position References 2019-06-13 08:14:39 +02:00
Andrew Chow
e1f770e236 bip174: add section describing change detection 2019-06-09 23:39:25 +02:00
Andrew Chow
19d3b9dc82 bip174: add global xpub field 2019-06-09 10:48:05 +02:00
Luke Childs
c7cc17f14e
[bip38] Consistent hyphenation usage 2019-06-07 14:26:45 +07:00
Luke Dashjr
58e737617c
Merge pull request #757 from moneyball/patch-1
fixed minor typo in BIP 79
2019-05-18 16:47:40 +00:00
MarcoFalke
d8dea4ef09
BIP 144: Old serialization format must be used on empty witness 2019-05-13 18:24:52 -04:00
Pieter Wuille
084dee847d
Merge pull request #42 from jonasnick/clarify-diagram
Clarify description of diagram
2019-05-10 09:52:25 -07:00
Jonas Nick
04b844540e Clarify diagram 2019-05-10 13:57:12 +00:00
Pieter Wuille
b55fed9f86
Merge pull request #41 from dgpv/patch-1
taproot_output_script: first returned byte should be OP_1 (0x51)
2019-05-09 15:19:04 -07:00
Dmitry Petukhov
0c49346c87
taproot_output_script: first returned byte should be OP_1 (0x51)
If we look at

  def IsPayToTaproot(script):
      return len(script) == 35 and script[0] == OP_1 and script[1] == 33 and script[2] >= 0 and script[2] <= 1

First byte is is checked for OP_1. OP_1 is 0x51

But the example code in this BIP returns  

`bytes([0x01, 0x21, output_pubkey[0] & 1]) + output_pubkey[1:]`

First byte 0x01, but it should be 0x51
2019-05-10 03:09:54 +05:00
Pieter Wuille
27e61d61e6
Merge pull request #40 from markblundeberg/patch-1
remove duplicate warning
2019-05-06 13:14:39 -07:00
Mark B Lundeberg
d194620af9
remove duplicate warning
Though perhaps, the emphasis is warranted given its importance. :-)
2019-05-06 13:13:20 -07:00
Pieter Wuille
271e5db6d7
Merge pull request #30 from jonasnick/clarify-reduce
Clarify what 'reduced' means in tests and use word 'message' instead of 'message hash'
2019-05-06 13:11:40 -07:00
Jonas Nick
e9ea1710ef Clarify what 'reduced' means in tests and use word 'message' instead of 'message hash' 2019-05-06 20:09:33 +00:00
Pieter Wuille
6733024595 Add taproot/tapscript bips drafts 2019-05-06 10:46:09 -07:00
Pieter Wuille
aeffa07527 Add draft for Schnorr BIP
Includes squashed contributions by GitHub users jonasnick,
real-or-random, AustinWilliams, JustinTArthur, ysangkok,
RCassatta, Sjors, tnakagawa, and guggero.
2019-05-06 10:40:58 -07:00
Torkel Rogstad
49d44b9b28
Update bip-0049.mediawiki
Fix broken internal link
2019-04-30 10:51:43 +02:00
Gigi
0cb0d361a5
[Trivial] Fix word repetition
* changes modifies -> modifies
* index of of -> index of
2019-04-21 19:17:41 -05:00
Paul Sztorc
d69e368ce3 typo
the critical txn should start with "03", as it has version number 3
2019-04-17 16:59:40 -07:00
Gigi
14834fa63c
is alive any working -> is alive and working 2019-04-09 22:41:52 -05:00
Gigi
18f43a6b2a
transaction -> transactions 2019-04-09 22:37:48 -05:00
Luke Dashjr
111e427d20
Merge pull request #770 from torkelrogstad/patch-1
[BIP 44] Remove 21 Machine Wallet
2019-04-09 12:04:09 +00:00
Torkel Rogstad
c6e8351583 [bip44] Remove "Compatible wallets" section 2019-04-09 09:20:44 +02:00
Paul Sztorc
2d7093ba76
spellcheck 2019-04-05 10:02:24 -07:00
Paul Sztorc
bbcab029ea
number, shorten, clarify, link to working code 2019-04-04 16:26:19 -07:00
Paul Sztorc
c90088ed81
improved image, with examples 2019-04-04 16:22:09 -07:00
Luke Dashjr
618a3e5ffc
Merge pull request #772 from jonasschnelli/2019/03/withdraw_BIP151
Withdraw BIP151
2019-04-04 10:11:33 +00:00
Luke Dashjr
e65e3fadc6
Merge pull request #756 from stevenroose/por
BIP 127: Simple Proof-of-Reserves Transactions
2019-04-04 02:50:14 +00:00
Steven Roose
7276e9ae7b
BIP 127: Simple proofs-of-reserves 2019-04-03 21:58:50 +02:00
azuchi
23590c0508 [BIP197] Fix description of Refund Period
Seizable Collateral script have condition that can be refund by the borrower after the Seizure Period.
2019-03-31 14:19:00 +09:00
Luke Dashjr
3b435b72f4
Merge pull request #764 from cgilliard/master
BIP 137: Signatures of Messages using Bitcoin Private Keys
2019-03-30 04:41:21 +00:00
cgilliard
c6456f1607
Update bip-0137.mediawiki 2019-03-29 20:17:48 -07:00
cgilliard
c823bb0638
Update bip-0137.mediawiki 2019-03-29 20:17:02 -07:00
cgilliard
bebffb6ac8
move to code tag 2019-03-29 20:11:51 -07:00
cgilliard
95db88b5e8
media wiki format 2019-03-29 20:10:30 -07:00
cgilliard
6a181756e4
Update bip-0137.mediawiki 2019-03-29 20:02:35 -07:00
cgilliard
e2e83ccdea
fix formatting 2019-03-29 19:59:22 -07:00
cgilliard
7f3c5e516b
Update README.mediawiki 2019-03-29 17:50:40 -07:00
cgilliard
09d4e8d7b9
Update README.mediawiki 2019-03-29 17:49:31 -07:00
cgilliard
6a947027e8
Update README.mediawiki 2019-03-29 17:25:03 -07:00
cgilliard
d550729677
Update README.mediawiki 2019-03-29 17:23:14 -07:00
cgilliard
2a4ed6546f
Update README.mediawiki 2019-03-29 17:20:51 -07:00
cgilliard
b6e43f2fb5
include background color 2019-03-29 17:18:00 -07:00
cgilliard
5416afeff6
add text to readme 2019-03-29 17:15:18 -07:00
Luke Dashjr
49e38e22ff
Merge pull request #773 from AtomicLoans/htlcc
BIP 197: Hashed Time-Locked Collateral Contract
2019-03-29 23:58:44 +00:00
Christopher Gilliard
f5ca2f2d5b Merge branch 'master' of https://github.com/bitcoin/bips 2019-03-29 16:57:51 -07:00
Matthew Black
26cff22dbb Fix readme for BIP-197 to match title 2019-03-29 17:54:23 -04:00
Matthew Black
c260fcb69a Remove team email from Author list 2019-03-29 17:53:27 -04:00
Jonas Schnelli
73d06b4a13
Withdraw BIP151 2019-03-29 20:50:26 +01:00
cgilliard
3140d5803c
status final 2019-03-29 10:44:16 -07:00
cgilliard
2d319e5798
Layer from Wallet -> Applications 2019-03-29 10:42:41 -07:00
cgilliard
01d1398c15
formating fix 2019-03-29 10:00:10 -07:00
cgilliard
0781e70e55
fix formatting 2019-03-29 09:55:19 -07:00
cgilliard
40cace6202
update first comment URI 2019-03-29 09:51:32 -07:00
Matthew Black
823f6ac0db New BIP (0197) - HLTCC transactions 2019-03-29 12:49:49 -04:00
cgilliard
a1cb694aa0
Shorten name to pass build tests 2019-03-29 09:47:53 -07:00
cgilliard
cd1cb8f754
update file name to bip 137 2019-03-29 09:04:27 -07:00
cgilliard
a7136d5ca8
use bip number 137 and use literal < and > 2019-03-29 09:03:01 -07:00
Luke Dashjr
810fed11bc
Merge pull request #758 from DavidBurkett/master
Updating libbitcoin link to mnemonic.hpp
2019-03-29 06:17:20 +00:00
Luke Dashjr
807618e677
Merge pull request #765 from kallerosenbaum/master
bip174: Fix invalid references to per-input types 0x07 and 0x08.
2019-03-29 06:14:31 +00:00
Lucas Cullen
4f73814175
Update the link to NBitcoin repo
NBitcoin official repo has changed.
2019-03-06 07:51:45 +10:00
cgilliard
99f4211dde
bold three key words and add in empty lines 2019-03-02 14:55:38 -08:00
cgilliard
5a53d13b1c
fix typo 2019-03-02 14:52:44 -08:00
cgilliard
fe6899a294
fix typo 2019-03-02 14:50:23 -08:00
Wladimir J. van der Laan
ec8b400259 addrv2 BIP proposal 2019-02-27 10:28:34 +01:00
Kalle Rosenbaum
d7ba77ced5 bip174: Fix invalid references to per-input types 0x07 and 0x08. 2019-02-26 21:32:44 +01:00
Luke Dashjr
b4853407a7 Revert "Merge pull request #744 from kallewoof/bip322-fixes"
This reverts commit 9101836b88, reversing
changes made to e2c91c81cc.
2019-02-20 09:19:04 +00:00
cgilliard
d4e0fc03f3
spelling fix 2019-02-19 18:58:47 -08:00
cgilliard
dbaaab3abf
grammer fix 2019-02-19 18:57:50 -08:00
cgilliard
f4a04d2bc6
Add P2PKH info, backwards compat, BIP 311 ref 2019-02-19 16:50:30 -08:00
cgilliard
6d42bc0c5b
create new bip proposal 2019-02-18 13:45:02 -08:00
Luke Dashjr
9380b0ba03
Merge pull request #763 from lanhaoxiang/patch-1
Update bip-0039.mediawiki, fix broken link
2019-02-18 20:56:42 +00:00
Luke Dashjr
9101836b88
Merge pull request #744 from kallewoof/bip322-fixes
[WIP] bip-322: strip out proof-of-funds related stuff and fix several issues
2019-02-15 15:05:57 +00:00
Luke Dashjr
e2c91c81cc Merge remote-tracking branch 'origin-pull/754/head' 2019-02-15 14:57:54 +00:00
Luke Dashjr
8fbc5aa780
Merge pull request #751 from JoinMarket-Org/bip79-typos
fix typos in bip79
2019-02-15 14:55:18 +00:00
Luke Dashjr
b0b28ccd80
Merge pull request #761 from clarkmoody/bip-84-version-bytes
BIP-84 - Add Version Bytes Section
2019-02-15 14:47:33 +00:00
Lan, Haoxiang
6e4397038e
Update bip-0039.mediawiki, fix broken link 2019-02-15 17:05:09 +08:00
Clark Moody
937b8716c3 Link to SLIP-0132 2019-02-14 17:35:51 -06:00
Clark Moody
afd7c775fb Add testnet version bytes 2019-02-14 12:27:14 -06:00
Clark Moody
499f5a7e88 Add version bytes section 2019-02-13 18:31:19 -06:00
Luke Dashjr
64f44eb620
Merge pull request #760 from Roasbeef/bip-158-test-vectors
BIP-0158: add test cases for OP_RETURN with op codes, empty filter
2019-02-13 13:53:56 +00:00
Javed Khan
9b03604c5b
bip158: update test vectors 2019-02-13 16:18:49 +05:30
Olaoluwa Osuntokun
5ab481ce53 fixup! BIP-0158: clarify OP_RETURN handling for filters 2019-02-12 21:14:29 -08:00
Olaoluwa Osuntokun
1330853c3e
BIP-0158: clarify OP_RETURN handling for filters
In this commit, we clarify how we handle `OP_RETURN` outputs for regular
filters. The prior language was a bit ambiguous, so we hope to make it
as explicit as possible.
2019-02-12 19:57:51 -08:00
Olaoluwa Osuntokun
dd3948b474
BIP-0158: add test cases for OP_RETURN with op codes, empty filter
In this commit, we add a new test case for a filter built from a block
that has a transaction with an OP_RETURN which isn't followed by only
push data items. The prior implementation for btcd (which was used to
generated these test vectors), had a stricter check which caused it to
add extra items to the filter. We also add a case of a block that has a
single coinbase transaction, with that transaction having only an
OP_RETURN output. As a result, that filter will be "empty", and is
signalled by by a single zero (0x00) byte.

In order to make building the code that makes the test vectors
reproducible, we've added go.mod and go.sum files as well.
2019-02-12 18:31:12 -08:00
Luke Dashjr
dc0379959b
Merge pull request #759 from ddustin/patch-1
Flipping the sentence order here for simplicity.
2019-02-11 01:56:26 +00:00
Dustin Dettmer
b6b19894c2
Flipping the sentence order here for simplicity.
Being new to the spec, I had to reread this multiple times to understand it. Ordering the setences according to scope seems to make it easier to grock.
2019-02-10 15:42:35 -08:00
David Burkett
e9aeb6854a Updating libbitcoin mnemonic.hpp link. 2019-02-02 15:55:14 -05:00
Steve Lee
cc122a76ef
fixed minor typo 2019-01-29 12:19:16 -08:00
Ryan Havar
1bd594e659 Fix mistake in bip-0079
As pointed out by Adam Gibson on the bitcoin-dev mailing list.
2019-01-26 21:01:16 -08:00
AdamISZ
a9647e0178
fix typos in bip79 2019-01-24 12:47:33 +01:00
Chm
e5c708b3e7
Typo of test data in bip 143
Transaction signature got sigHashType byte missing in decomposed block.
2018-12-22 23:50:26 +08:00
Luke Dashjr
954df0d107
Merge pull request #740 from skddc/patch-1
Fix typo
2018-12-14 21:11:00 +00:00
Luke Dashjr
c5fa2f9562
Merge pull request #734 from maguayo/patch-1
Update bip-0032.mediawiki
2018-12-14 16:48:23 +00:00
Luke Dashjr
c1459ff17a
Merge pull request #745 from harding/2018-12-bip125-clarify-rule-2
BIP125: rephrase rule 2 for clarity
2018-12-14 16:41:38 +00:00
Luke Dashjr
3fbc6afc0e
Merge pull request #735 from Coding-Enthusiast/patch-1
bip-0159: Fix NODE_NETWORK_LIMITED threshold
2018-12-10 15:13:17 +00:00
tadhg
a66d1852a2
Missing word 2018-12-07 01:25:19 +01:00
David A. Harding
af878ab42e
BIP125: rephrase rule #2 for clarity 2018-12-04 16:31:29 -05:00
Karl-Johan Alm
df9c2fc6de
bip-322: strip out proof-of-funds related stuff and fix several issues 2018-12-03 16:47:27 +09:00
tadhg
1dcb4eef30
Fix typo in BIP47 2018-11-30 18:37:42 +01:00
Sebastian Kippe
400c0c4cf9
Fix typo 2018-11-21 16:11:09 +00:00
Luke Dashjr
135ca1a2f1
Merge pull request #736 from RHavar/master
Update bip79 to require Access-Control-Allow-Origin support
2018-10-29 04:25:27 +00:00
Ryan Havar
9f4922ae3f Update bip79 to require Access-Control-Allow-Origin support 2018-10-29 15:18:23 +11:00
Coding Enthusiast
6c99f7a3ef
bip-0159: Fix NODE_NETWORK_LIMITED threshold
The threshold seems to be 288 (2 * 144).  
de74c62583/src/validation.h (L207)
2018-10-28 07:01:19 +03:30
Marcos Aguayo
240a6f114c
Update bip-0032.mediawiki 2018-10-25 21:16:42 +01:00
Luke Dashjr
4c668c43e9
Merge pull request #732 from RHavar/master
Minor grammatical fixes to bip79
2018-10-23 16:21:48 +00:00
Ryan Havar
f83011f40d Minor grammatical fixes to bip79 2018-10-23 09:10:10 -07:00
Luke Dashjr
65cc6a194e Merge BIP 79 2018-10-19 22:40:43 +00:00
Luke Dashjr
1939bc2498 README: Add BIP 79 2018-10-19 22:40:36 +00:00
Ryan Havar
1e0d737620 Fix date format 2018-10-20 09:22:30 +11:00
Ryan Havar
4a05f299ce Retitle and move to bip79 2018-10-19 01:27:42 -04:00
Ryan Havar
cad43f2f5b Add backwards compatibility section 2018-10-16 15:35:16 -08:00
Ryan Havar
6322865e9d Address review comments 2018-10-16 20:02:01 -02:00
Luke Dashjr
4b21d27946
Merge pull request #728 from kaidiren/patch-1
fix bip-0016 link 404
2018-10-16 09:12:19 +00:00
Luke Dashjr
33e040b7bd
Merge pull request #726 from vikmeup/patch-1
Add Trust to compatible wallets
2018-10-16 08:50:25 +00:00
Ryan Havar
605c31a9e0 Add bip for bustapay 2018-10-08 01:53:25 +06:00
kaidiren
433283d671
fix bip-0016 link 404 2018-09-28 15:15:03 +08:00
Luke Dashjr
ad3a16baab
Merge pull request #725 from kallewoof/bip-generic-signmessage
BIP 322: Generic Signed Message Format
2018-09-19 19:19:13 +00:00
Viktor Radchenko
c79576c759
Add Trust to compatible wallets 2018-09-13 16:43:40 -07:00
Karl-Johan Alm
2f152773e6
fix witness program -> witness 2018-09-12 16:21:59 +09:00
Karl-Johan Alm
b925137d5f
BIP: Generic Signed Message Format 2018-09-12 15:01:04 +09:00
Luke Dashjr
43f59dfbcb Merge commit '03b7587' 2018-09-07 05:04:04 +00:00
Luke Dashjr
03b7587d87 BIP 310: Fix preamble; add to README 2018-09-07 05:03:37 +00:00
Luke Dashjr
84808a7bbf Assign BIP 320 to nVersion bits for general purpose use 2018-09-07 05:01:41 +00:00
Luke Dashjr
7e1dee5151
Merge pull request #718 from jimpo/bip-0158-updates
Bip 158 updates
2018-09-07 04:52:09 +00:00
Luke Dashjr
e0b5b3ab48
Merge pull request #716 from jonathancross/bip-158-format
BIP-158: Fixing list formatting and spelling of 'license'
2018-09-07 04:51:32 +00:00
Luke Dashjr
c964d066f5
Merge pull request #698 from polydin/typos
BIP 158: fix incorrect bullet formatting (typo)
2018-09-07 04:50:57 +00:00
Jeff Rade
2195aac4d3 BIP-70 Fixing sipa's gist proposal url 2018-09-04 20:14:09 -05:00
Luke Dashjr
51045796f7
Merge pull request #719 from afk11/bip174-fixture-typo
bip174: typo in some fixtures (using wrong magic prefix)
2018-08-30 13:20:43 +00:00
Thomas Kerin
2b7b95996a BIP-174: fixtures should use correct magic 2018-08-29 23:52:37 +01:00
Jim Posen
fc511f11c6 BIP 158: Specify endianness of block hash to k conversion. 2018-08-27 21:41:24 -07:00
Jim Posen
ab53d7dcfa BIP 158: Fix broken link to test vectors. 2018-08-27 21:32:52 -07:00
Jim Posen
12fc7af590 BIP 158: Add more cases to test vectors. 2018-08-27 21:32:45 -07:00
Jan Čapek
2b0d7d70e2 bip 310 - add assigned number, ellaborate on mining.capabilities incompatibility 2018-08-27 19:18:59 +02:00
Luke Dashjr
24618f3f86
Merge pull request #681 from fedsten/master
BIP 112: fix typo
2018-08-26 22:43:41 +00:00
Luke Dashjr
e9d5abfe96
Merge pull request #712 from mytwocentimes/patch-1
[Trivial]Typos & links fix BIP 151
2018-08-26 22:41:52 +00:00
Jonathan Cross
9039dbc5b0
Fixing list formatting and spelling of 'license' 2018-08-26 22:05:29 +02:00
Jan Čapek
b24e591711 Import initial draft of stratum extension bip 2018-08-24 15:19:52 +02:00
Luke Dashjr
65fe194476
Merge pull request #711 from jonathancross/bip-reservedbits
Minor typo fix for "reservedbits" BIP
2018-08-19 21:43:33 +00:00
Dario
1c53c84581
[Trivial]Typos & links fix BIP 151
Came to learn - fixed a few things [trivial]
2018-08-19 18:46:26 +02:00
Jonathan Cross
3884c9d4f6
Minor typo fix bip-reservedbits 2018-08-15 12:33:16 +02:00
Luke Dashjr
b44239a57d
Merge pull request #710 from dandelion-org/dandelion-rebase2
BIP 156: rename figure filenames [trivial]
2018-08-15 04:21:10 +00:00
Luke Dashjr
d8ba7da2cb
Merge pull request #661 from btcdrak/reservedbits
BIP to reserve nversion bits in blockheader
2018-08-15 04:18:33 +00:00
฿tcDrak
d0a2ac057c
Update metadata and BC 2018-08-14 21:28:16 +00:00
Giulia Fanti
dfd59bb6cc rename figure filenames 2018-08-14 08:21:41 -05:00
Luke Dashjr
9050ba7092
Merge pull request #703 from dandelion-org/dandelion-rebase
BIP 156: Dandelion - Privacy Enhancing Routing
2018-08-14 04:18:40 +00:00
Giulia Fanti
b2c3359bff fixed typo 2018-08-13 22:29:14 -04:00
Giulia Fanti
8e4e640096 renamed files and updated README.mediawiki index 2018-08-13 22:08:58 -04:00
Giulia Fanti
ad3356689f fixed bip number 2018-08-13 21:18:22 -04:00
Luke Dashjr
941fb162d8
Merge pull request #704 from esneider/patch-1
[trivial] correct typo in bip173 (bech32)
2018-08-09 20:11:59 +00:00
Luke Dashjr
29a8781d78
Merge pull request #622 from nym-zone/fix39french
Fix two errors in the BIP 39 French wordlist
2018-08-09 18:22:53 +00:00
Luke Dashjr
fa7035f0a9
Merge pull request #699 from jimpo/bip-157-158
Tweaks to BIP 157/158
2018-08-09 18:17:41 +00:00
Luke Dashjr
7e0ca93366
Merge pull request #701 from jamesob/patch-2
Trivial typo fixes to bip-0118
2018-08-09 18:16:50 +00:00
Luke Dashjr
63baffca9e
Merge pull request #707 from azuchi/fix-bip174-testvector
[BIP174] Fix to unify Test Vector in key order of PSBT Input.
2018-08-09 18:14:46 +00:00
Luke Dashjr
68587cf356
Merge pull request #702 from achow101/bip174-tests
Additional tests for BIP 174
2018-08-09 17:56:39 +00:00
Andrew Chow
131fc2cebb Specify what signers should check for and describe a simple signer
Test cases for what signers should check for
2018-08-08 17:17:04 -07:00
azuchi
72e60d2116 [BIP174] Fix to unify Test Vector in key order of PSBT Input. 2018-07-30 18:10:27 +09:00
Varunram Ganesh
3640129163
[trivial] remove duplicate of 2018-07-28 00:20:50 +05:30
Dario Sneidermanis
ae84f0b151
[trivial] Correct typo 2018-07-22 14:05:06 -07:00
Brad Denby
c947050ed8 Dandelion BIP
Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP

Dandelion BIP
2018-07-20 15:06:50 -07:00
Andrew Chow
6107b01428 Additional tests for BIP 174 2018-07-19 19:03:57 -07:00
James O'Beirne
f3a5954e79
Trivial typo fixes to bip-0118 2018-07-13 12:54:26 -04:00
Luke Dashjr
0a9018d9f0
Merge pull request #700 from achow101/bip174-rev
BIP 174 clarifications and move to proposed
2018-07-12 01:54:31 +00:00
Andrew Chow
0a1574fe49 BIP 174 workflow graphics 2018-07-11 16:20:43 -07:00
Andrew Chow
cb426bfdae bip 174 -> proposed 2018-07-11 14:01:20 -07:00
Andrew Chow
72657b416c Clarifications to signer and combiner roles 2018-07-11 14:01:20 -07:00
Jim Posen
b88d5b6b5c BIP 158: Correct statements about false positive rate. 2018-07-09 23:54:12 -07:00
Jim Posen
f4948ddb4f BIP 157: Limit getcfilter requests to 100 filters. 2018-07-09 23:44:03 -07:00
jojeyh
6a95b8112c BIP 158: fix typo 2018-07-07 15:14:27 -07:00
Luke Dashjr
34dac53cc1
Merge pull request #585 from jonathancross/patch-1
BIP-199 Fix list formatting
2018-07-06 15:40:22 +00:00
Luke Dashjr
d60b2f7df7
Merge pull request #605 from jonathancross/bip-141-add-173
BIP141: Add BIP173 to references.
2018-07-06 15:39:29 +00:00
Luke Dashjr
507383c9a9
Merge pull request #694 from achow101/bip174-rev
Revisions to BIP 174
2018-07-06 08:24:55 +00:00
Andrew Chow
4fcd8bf008 Update tests for new serialization 2018-07-05 15:27:41 -07:00
Andrew Chow
81c20a635e Add sections for encoding, file extension, and mime-type 2018-07-05 15:27:41 -07:00
Andrew Chow
f515da0552 Add new responsibilities, update responsibility, update extensibility descriptions
Add updater, transaction finalizer, and transaction extractor roles.

Update the description of other roles to clarify

Update extensibility section
2018-07-05 15:27:41 -07:00
Andrew Chow
45df424759 Clarify handling of duplicated keys 2018-07-05 15:27:41 -07:00
Andrew Chow
bfae1799d3 Move global data to per-input and per-output data
Change from a global map with input data to a global k/v pair with input and output data.

Add new types for finalized scriptSigs and scriptWitnesses.

Redefined types to support new model

Updated the formatting of the listing
2018-07-05 15:27:41 -07:00
Luke Dashjr
13d083660e
Merge pull request #553 from clarkmoody/master
BIP 173: Adds link to SLIP-0173
2018-07-05 19:53:27 +00:00
Clark
5028e94c1a Adds link to SLIP-0173
Fix typo
2018-07-05 10:42:17 -05:00
Luke Dashjr
6ec29a1028
Merge pull request #684 from erikarvstedt/patch-1
Trivial: Fix typos in BIP-118
2018-07-05 05:15:50 +00:00
Luke Dashjr
cd0a443f98 Merge branch 'master' of github.com:bitcoin/bips 2018-07-05 05:14:42 +00:00
Varunram
c3e8379b61 [trivial] Correct typos across bips
BIPs 11, 16, 61, 98, 116, 117, 143, 157
2018-07-05 05:14:10 +00:00
Luke Dashjr
56d92d29e8
Merge pull request #692 from jamesob/patch-1
Fix typo in BIP 125
2018-07-05 05:09:37 +00:00
Luke Dashjr
5415dd806e Fix BIP 42 & 173 status 2018-07-05 05:09:05 +00:00
Luke Dashjr
998bae0717
Merge pull request #696 from sipa/somefinal
Move BIP42 and BIP173 to Final
2018-07-05 05:06:14 +00:00
Luke Dashjr
91bd69d29b
Merge pull request #687 from Roasbeef/bip158-updates
BIP-0158: remove extended filter, remove txid from regular filter, reparameterize gcs params
2018-07-05 05:03:50 +00:00
Olaoluwa Osuntokun
ac76644533
BIP-0158: regenerate test vectors for fp=19, new reg filter, no ext filter
In this commit, we simplify the code that generates the test vectors to
only generate filters for a target fp of 19, and also only for the
regular filter, as it's the only filter type currently defined.

The test vectors have also been updated to include the previous output
scripts for all input within a block as these are now required to
construct the regular filter.

Finally, the generation code has been updated to properly fetch the
previous input scripts to the generation code can verify the filter it
generates manually against the end server.
2018-07-04 23:19:16 -05:00
Olaoluwa Osuntokun
6a4e819829
BIP-0158: switch to prev output scripts, skip all OP_RETURN 2018-07-04 23:19:15 -05:00
Olaoluwa Osuntokun
1c2ed6dce3
BIP-0158: allow filters to define values for P and M, reparameterize default filter 2018-07-04 15:41:05 -05:00
Olaoluwa Osuntokun
4a85759f02
BIP-0158: remove the extended filter type 2018-07-04 15:41:05 -05:00
Pieter Wuille
6c708338c2 Move BIP42 and BIP173 to Final 2018-06-28 10:31:38 -07:00
James O'Beirne
8a34d1661b
Fix typo in BIP 125 2018-06-25 10:31:47 -04:00
Olaoluwa Osuntokun
285606ef7a
BIP-0158: remove txid from extended filter 2018-05-30 17:15:59 -07:00
Erik Arvstedt
53fc064db5 Trivial: Fix typos in BIP-118 2018-05-22 11:33:32 +02:00
Luke Dashjr
7158648753
Merge pull request #683 from kallewoof/bip-178-abstract
BIP-178: Reword abstract to indicate it's a bitcoin address type, not…
2018-05-21 23:26:21 +00:00
Karl-Johan Alm
20f5021940
BIP-178: Reword abstract to indicate it's a bitcoin address type, not a public key type 2018-05-22 08:21:06 +09:00
Luke Dashjr
dfa80f58df
Merge pull request #682 from cdecker/noinput
BIP 118: SIGHASH_NOINPUT
2018-05-21 05:19:22 +00:00
Christian Decker
67f11db177 noinput: Add the SIGHASH_NOINPUT proposal to the readme 2018-05-20 22:05:29 -07:00
Christian Decker
98b7238f68 noinput: Initial version of the sighash_noinput proposal 2018-05-20 22:05:29 -07:00
Luke Dashjr
6255dc536d
Merge pull request #673 from kallewoof/bip-typed-wif
BIP 178: Version Extended WIF
2018-05-20 23:41:12 +00:00
Karl-Johan Alm
f667e7a3c7
[BIP-178] Version Extended WIF. 2018-05-21 08:31:50 +09:00
Luke Dashjr
562a604a52
Merge pull request #677 from jimpo/bip158-test-vectors
BIP 158: Change test vectors from CSV to JSON format.
2018-05-20 08:35:49 +00:00
Luke Dashjr
5d17384849
Merge pull request #639 from sdaftuar/fix-bip-90
Remove 'hard fork' designation on BIP 90
2018-05-20 08:33:03 +00:00
Federico Tenga
a5c5c76220
Update bip-0112.mediawiki 2018-05-16 19:23:22 +02:00
nopara73
9d879aaf5c
Fix typos 2018-05-12 21:51:18 +07:00
Jim Posen
fe1d3f84ba BIP 158: Change test vectors from CSV to JSON format.
The JSON format is standard for Bitcoin Core test data.
2018-05-01 00:23:45 -07:00
Paul Sztorc
485b1318bd
m7 op return update
This has been right in the code, but I kept forgetting to update the BIP.
2018-04-23 20:50:11 -04:00
Suhas Daftuar
d208ed3ff1 Remove 'hard fork' designation on BIP 90 2018-04-18 09:34:29 -04:00
Petr Korolev
8c8a787206
Update bip-0039.mediawiki
add one more library to generate mnemonics (with multilang support)
2018-04-09 10:21:09 +03:00
Luke Dashjr
f7cfefaccf
Merge pull request #668 from aakselrod/bip0158-test-vectors
BIP158: add test vectors and generation code
2018-04-08 02:50:54 +00:00
Luke Dashjr
563dbe9984
Merge pull request #670 from harding/bip66-disclosure
BIP66: link to disclosure of consensus failure bug
2018-04-08 02:49:01 +00:00
Luke Dashjr
12eb1981c2
Merge pull request #669 from achow101/bip174-rev
BIP 174: Clarify that global data can be for inputs and outputs
2018-04-05 03:33:32 +00:00
David A. Harding
ae8605776d
BIP66: link to sipa's disclosure of consensus failure bug 2018-04-04 15:06:16 -04:00
Andrew Chow
478f20f871 [PSBT] Clarify that global data can be for inputs and outputs
Clarifies that global data fields redeem scripts, witness scripts,
and hd keypaths can be used for data necessary for both the inputs
and outputs of the transaction.
2018-04-04 11:21:54 -04:00
Alex
3571e1a52d BIP158: add test vectors and generation code
In this commit, we add test vectors for filter and header construction and
the code to generate them. The included test vectors are for testnet with a
value of 20 for P. The code generates filters and headers for values of 1
through 32 for P using testnet blocks. Currently, to run the code,
the `Roasbeef` fork of `btcd` (at https://github.com/roasbeef/btcd) is
required to be running locally in testnet mode; this will be changed in a
future commit after the code is merged into the `btcsuite` mainline.
2018-04-03 12:09:26 -06:00
Luke Dashjr
d1874d5cd2
Merge pull request #655 from Alegege/patch-2
BIP 9: Misplaced table cells typo
2018-04-01 05:45:23 +00:00
Luke Dashjr
7eb444dc7e
Merge pull request #667 from Roasbeef/bip-158-minor-updates
BIP158: include the direct pkScript rather than its data pushes
2018-04-01 02:59:52 +00:00
Olaoluwa Osuntokun
4077defdbc
BIP158: include the direct pkScript rather than its data pushes
In this commit, we modify regular filter construction slightly.  Rather
than including each pushed data in the script, we instead just include
the script directly, which will eventually be hashed. The rationale for
doing this is two-fold:

  * Most scripts today and in the foreseeable future will just be a
    commitment.

  * Including only the script itself and not the hash of the script
    reduces the worst case filter size. Otherwise, an attacker could
    include a bunch of 2 byte push datas and blow up the filter size for
    all nodes.
2018-03-31 17:48:18 -07:00
BtcDrak
11e16622f2 BIP to reserve nversion bits in blockheader 2018-03-26 10:50:12 +00:00
Luke Dashjr
032a5f6136
Merge pull request #662 from Varunram/master
[trivial] Correct typos in BIP 98
2018-03-10 19:27:33 +00:00
Varunram Ganesh
c7a902f1f9
[trivial] Correct typos
least <- lest
hashes <- hashses
addendum <- ammendum
2018-03-10 20:10:27 +05:30
Jonathan Cross
df3bf7bd1b
BIP141: Add BIP173 to references. 2018-03-10 10:37:50 +05:30
Luke Dashjr
4e90ce8ec5
Merge pull request #660 from zaq1tomo/fix/bip65
Fix format [in BIP65]
2018-03-06 18:54:09 +00:00
zaq1tomo
12a981949f fix format 2018-03-06 09:59:40 +09:00
zaq1tomo
9f3e9a0c29 fix format 2018-03-06 09:59:33 +09:00
zaq1tomo
31b9a9f1bf fix format 2018-03-06 09:59:27 +09:00
zaq1tomo
8cbdbf53a8 fix format 2018-03-06 09:59:19 +09:00
Alejandro Garcia
e94b373303
BIP 9: Misplaced table cells typo
Second row was created with an incorrect extra empty cell
2018-03-01 17:37:59 +01:00
Luke Dashjr
973a303edc
Merge pull request #556 from rolandgnm/patch-1
Organizes Recent Changes chronologically .
2018-02-21 22:18:27 +00:00
Luke Dashjr
bb71f0e61e
Merge pull request #647 from dangershony/patch-5
Fix a grammar error
2018-02-13 01:30:32 +00:00
Luke Dashjr
31613d7359
Merge pull request #635 from russellpwirtz/patch-1
fix grammar error
2018-02-12 23:35:57 +00:00
Luke Dashjr
0e3551cbe9 Merge remote-tracking branch 'origin-pull/584/head' 2018-02-12 03:30:13 +00:00
Dan Gershony
fd4312bf87
Update bip-0098.mediawiki 2018-02-10 23:31:36 +00:00
Paul Sztorc
5353f9ea23
Merge pull request #2 from psztorc/blind-merged-mining
clarifications + backward compatibility
2018-02-10 18:28:08 -05:00
Paul Sztorc
2a981366e7 clarifications + backward compatibility 2018-02-10 18:26:52 -05:00
Paul Sztorc
cebe06b149
Merge pull request #1 from psztorc/blind-merged-mining
updates
2018-02-10 17:34:21 -05:00
Paul Sztorc
17db87224d move Chris
CS indicated via tweet that he felt he did not contribute enough to be a co-author
2018-02-10 17:31:54 -05:00
Paul Sztorc
5418516065 typos 2018-02-10 17:31:01 -05:00
Paul Sztorc
70f0ed6c39 switch to mediawiki format 2018-02-10 17:23:31 -05:00
Luke Dashjr
e38387e175
Merge pull request #645 from kallerosenbaum/master
Withdrawing BIP120/121 due to security issues during soft-forks
2018-02-10 22:16:31 +00:00
Paul Sztorc
68918ad24a resync 2018-02-10 17:15:21 -05:00
Paul Sztorc
486505b8fa typos 2018-02-10 17:02:33 -05:00
Paul Sztorc
9207df7d05 fix mediawiki formatting 2018-02-10 17:00:23 -05:00
Paul Sztorc
99f553025f mediawiki format 2018-02-10 16:30:07 -05:00
Paul Sztorc
8a8c6253be re-reverse the bips
this is what I originally intended, but I forked this branch at the wrong time
2018-02-10 14:01:25 -05:00
Kalle Rosenbaum
a7819e43c6 Fixing README table background style for BIP120 and 121 2018-02-10 13:56:20 +01:00
Kalle Rosenbaum
85a99fb14b Withdrawing BIP120/121 due to security issues during soft-forks 2018-02-08 22:22:50 +01:00
Luke Dashjr
2d5fc7acb2
Merge pull request #625 from yuzushioh/update-bip39
Add BIP39 Swift implementation link
2018-02-05 04:31:02 +00:00
Luke Dashjr
d6ba393592
Merge pull request #641 from Xeoncross/patch-1
Update bip-0039.mediawiki with Go lib
2018-02-05 04:30:15 +00:00
Luke Dashjr
91e8816966
Merge pull request #637 from mmgen/bip65typo
Fix single typo in BIP65 ("from" -> "form")
2018-02-05 04:29:34 +00:00
Paul Sztorc
3246096174
Delete two-groups.png 2018-02-03 21:42:52 -05:00
Paul Sztorc
39a8bec6b7
Delete images.txt 2018-02-03 21:42:45 -05:00
Paul Sztorc
4bea2ef2b6 one bip at a time 2018-02-03 21:40:43 -05:00
Paul Sztorc
1af547cf72
Delete bip-hashrate-escrows.md 2018-02-03 21:38:23 -05:00
Paul Sztorc
da2e5745f3
Add files via upload 2018-02-03 21:36:40 -05:00
Paul Sztorc
2580d65228
Add files via upload 2018-02-03 21:32:48 -05:00
Paul Sztorc
db86b890f9
Add files via upload 2018-02-03 21:30:22 -05:00
Paul Sztorc
0a1d35877a
Create images.txt 2018-02-03 21:30:10 -05:00
David Pennington
9d187e9ed9
Update bip-0039.mediawiki with Go lib 2018-02-02 20:03:23 -06:00
Randolf Richardson
be9595a4ec
Minor improvements
Improved the clarity of the "that candy cost me 2 bits" example to make it easier for people to understand the meaning of "2 bits."
Corrected punctuation for "e.g.," and for quotation mark usage.
2018-01-30 16:08:00 -08:00
MMGen
3a50cf8d43 Fix single typo in BIP65 ("from" -> "form") 2018-01-26 14:58:11 +03:00
Luke Dashjr
ec54908e70
Merge pull request #636 from jimpo/client-side-filtering
BIPs 157 & 158: Block Filtering stuff
2018-01-23 02:42:33 +00:00
Jim Posen
996c7c8e88 BIP 157 & 158: client-side block filtering. 2018-01-22 13:52:54 -08:00
Russ
d5a0a18109
fix grammar error
"it's" is the contraction of "it" and "is". "its" should be used for ownership
2018-01-16 17:25:36 -08:00
Luke Dashjr
1d19de104e
Merge pull request #634 from Bomper/patch-1
Link to the mailing list
2018-01-15 09:31:32 +00:00
Ben
3d5bae733f
Link directly to the mailing list and remove emailing Luke 2018-01-15 00:52:31 -08:00
Ben
3abbe63c90
Link to the mailing list 2018-01-15 00:22:22 -08:00
Luke Dashjr
320097a518
Merge pull request #633 from maaku/mast-patch-2
BIP-0117: Change semantics of multi-element tail call to not require stack elements to be exactly 520 bytes in size
2018-01-11 06:20:26 +00:00
Mark Friedenbach
612c002c65 BIP-0117: Change semantics of multi-element tail call to not require stack elements to be exactly 520 bytes in size. This allows for more compact direct encoding of scripts of the form "pick 2 of 3 spend conditions" without enabling witness malleability in expected use cases as the components would still be checked against a pre-committed hash tree. 2018-01-11 14:41:45 +09:00
Luke Dashjr
083c357538
Merge pull request #632 from maaku/mast-patch-1
BIP-0117: Correct the examples to use the most recent version of MERKLEBRANCHVERIFY
2018-01-10 06:04:08 +00:00
Mark Friedenbach
7cd6c2fb83 BIP-0117: Correct the examples to use the most recent version of MERKLEBRANCHVERIFY specified in BIP-116. 2018-01-10 13:14:28 +09:00
Luke Dashjr
b7e0c6f11c
Merge pull request #631 from achow101/bip174-tests
More BIP 174 tests
2018-01-06 23:14:46 +00:00
Andrew Chow
a925cbb632 More BIP 174 tests 2018-01-06 15:14:12 -05:00
Luke Dashjr
716c53207c
Merge pull request #630 from NicolasDorier/patch-9
Fix link
2018-01-05 10:34:44 +00:00
Nicolas Dorier
2d113795ac
Fix link 2018-01-05 17:46:08 +09:00
Luke Dashjr
b5fb4fa079
Merge pull request #629 from achow101/bip174-tests
Tests for BIP 174 and some wording clarifications
2018-01-05 04:22:40 +00:00
Andrew Chow
597c5afda5 Test Vectors for BIP 174 2018-01-04 22:47:09 -05:00
Andrew Chow
53891fc7ed Clarify what the number of inputs field is actually 2018-01-04 13:23:15 -05:00
Luke Dashjr
900e9ba403
Merge pull request #627 from sipa/201801_bip173_proposed
Progress BIP173 to Proposed
2018-01-03 17:22:44 +00:00
Pieter Wuille
97a55878e6 Progress BIP173 to Proposed 2018-01-03 09:06:47 -08:00
yuzushioh
499c11d51c add swift implementation 2018-01-02 23:29:07 +09:00
Luke Dashjr
2166b78bbf
Merge pull request #624 from prusnak/master
bip-0084: add extended public keys to test vectors
2018-01-02 01:53:59 +00:00
Pavol Rusnak
e9650f74e4
bip-0084: add extended public keys to test vectors 2018-01-01 22:11:51 +01:00
nullius
50c4f1255e
Fix two errors in the BIP 39 French wordlist
The BIP 39 wordlist contained two significant technical errors:

 - Byte Order Marker (BOM) U+FEFF at the beginning of the first line,
   preceding the word "abaisser".

 - No newline '\n' char terminating the last line, after "zoologie".

The former may cause user loss of funds.  An implementation which
generates a mnemonic phrase and also turns it into a BIP 39 seed value
may feed the string "<U+FEFF>abaisser" to the KDF, while displaying the
word "abaisser" to the user.  Of course, it cannot be expected that the
user would enter "<U+FEFF>abaisser" upon attempt to restore a wallet.
In the face of a buggy wordlist, whitespace handling and normalization
cannot be absolutely relied on to remove a notoriously mischievous
character.  Those who provide technical support may be well advised to
ask French users with unrestorable wallets, "Did your mnemonic phrase
contain the word 'abaisser'?"

The latter broke the shell script I use to massage wordlists into C
sources when building https://github.com/nym-zone/easyseed .

I know of only one commonplace platform where software regularly
prepends UTF-8 files with a spurious U+FEFF, and oftentimes omits a line
terminator on the last line even when asked to create a Unix ('\n') text
file.  It is RECOMMENDED that new wordlists be examined for correctness
using standard shell tools on a sane platform.
2018-01-01 04:50:24 +00:00
Luke Dashjr
38a7545b8b
Merge pull request #620 from satoshilabs/master
BIP 84: Derivation scheme for P2WPKH based accounts
2017-12-31 15:08:33 +00:00
Pavol Rusnak
2382e31f12
BIP-0084: Derivation scheme for P2WPKH based accounts 2017-12-31 14:32:35 +01:00
Luke Dashjr
8ee73ca40a
Merge pull request #618 from jimmysong/unit-bias
BIP 176: Utilization of bits denomination
2017-12-23 04:01:04 +00:00
Jimmy Song
7e4d602585 Bits Denomination BIP 2017-12-22 19:54:17 -08:00
Luke Dashjr
9e0fe1a136
Merge pull request #617 from MarcoFalke/Mf1712-bip159rework
bip159: Clarify that there is only one threshold
2017-12-19 19:10:37 +00:00
MarcoFalke
fa9a4f307e bip159: Add missing link to implementation 2017-12-19 14:00:36 -05:00
MarcoFalke
fa810b3bff bip159: Clarify that there is only one threshold 2017-12-19 13:52:25 -05:00
Luke Dashjr
2e1813abdc
Merge pull request #616 from dcousens/patch-1
BIP174: refactor responsibilities for simplicity and clarity
2017-12-13 01:06:02 +00:00
Daniel Cousens
4b06d2b30a
refactor responsibilities for simplicity and clarity 2017-12-12 19:00:35 +11:00
Luke Dashjr
1ffad501a3
Merge pull request #613 from moodmosaic/patch-1
Update compatible wallets list
2017-11-28 23:57:24 +00:00
Nikos Baxevanis
c54e7f9f95 Update compatible wallets list 2017-11-29 00:18:50 +02:00
Luke Dashjr
d6468cfe2e
Merge pull request #611 from zylstra/patch-1
Typos
2017-11-16 13:22:18 +00:00
Luke Dashjr
c6229db9ff
Merge pull request #610 from kallewoof/bip-fmt-mbv-tcs
BIPs 98, 116, and 117: Fast Merkle Trees; MERKLEBRANCHVERIFY; Tail Call Execution Semantics
2017-11-16 13:16:48 +00:00
Karl-Johan Alm
5df90e1ae8
Updated README to include BIPs 98, 116, 117. 2017-11-16 15:47:36 +09:00
Karl-Johan Alm
689f2a5d02
BIP-0117: Tail Call Execution Semantics (Consensus layer) 2017-11-16 15:47:35 +09:00
Karl-Johan Alm
5dc731292d
BIP-0116: MERKLEBRANCHVERIFY (Consensus layer) 2017-11-16 15:47:35 +09:00
Karl-Johan Alm
e61b25087d
BIP-0098: Fast Merkle Trees 2017-11-16 15:47:35 +09:00
zylstra
1604d9727a
Typos 2017-11-15 15:39:17 -08:00
Luke Dashjr
5c48bcc5ae
Merge pull request #607 from SomberNight/bip173_typo1
BIP-173: fix typo in "Created" date
2017-11-07 22:00:23 +00:00
philsmd
b84deb2adf
bip38 typo: specifid -> specified
There was a small typo in the bip38 specification. If I'm not totally mistaken the word should be "specified" (not specifid)
Thx
2017-11-07 22:19:47 +01:00
SomberNight
f116e46706 BIP-173: fix typo in "Created" date 2017-11-07 17:46:15 +01:00
Luke Dashjr
a73b822919
Merge pull request #606 from jonathancross/bip-2-bitcoinj-link
BIP-2: Fix link to Bitcoin Wallet for Android's wallet/README.specs.md
2017-11-06 22:55:22 +00:00
Luke Dashjr
35ca008947
Merge pull request #488 from instagibbs/rbffixup
Slight clarification for replacement implementation
2017-11-06 22:52:55 +00:00
Jonathan Cross
952efee19e
BIP-2: Fix link to Bitcoin Wallet for Android's wallet/README.specs.md 2017-11-06 22:41:06 +01:00
Luke Dashjr
3f6f1f830b
Merge pull request #604 from commerceblock/master
Adding payment_base to the derivation path as an extra step of security
2017-10-31 04:13:49 +00:00
Omar Shibli
b63ed0e17e security fixes, added payment_base to contract 2017-10-31 05:24:28 +02:00
Luke Dashjr
0402dd2b84 Update status of BIPs 141, 143, 144, and 147 to Proposed 2017-10-29 04:22:13 +00:00
Luke Dashjr
c607dcec88 Merge branch 'master' of github.com:bitcoin/bips 2017-10-29 04:16:19 +00:00
Luke Dashjr
cb3cf69f6a
Merge pull request #601 from TheBlueMatt/patch-1
Clarify cmpctblock previous block requirement
2017-10-29 04:14:43 +00:00
Luke Dashjr
41cabd2de5 scripts/buildtable: Support License-Code header 2017-10-29 04:04:07 +00:00
Matt Corallo
f13983178a Clarify cmpctblock previous block requirement
In all implementations and in the intended reading of "existing chain", cmpctblock messages should never be sent without having fully-validated every previous block it builds on, and it being a new candidate tip. Clarify that slightly more for the avoidance of doubt.
2017-10-18 18:22:57 -04:00
Luke Dashjr
21da438ad5 Merge pull request #600 from flack/patch-1
Typo fix
2017-10-14 03:34:48 +00:00
flack
fba4c80b9f Typo fix 2017-10-05 23:43:18 +02:00
Omar Shibli
dd1f4e0e26 removed extra spacing 2017-10-03 12:43:22 +03:00
Omar Shibli
77437377af fixed headers style 2017-10-03 12:43:22 +03:00
Luke Dashjr
583c92809a Merge pull request #599 from commerceblock/os_bip39-extra-spacing
BIP39: Removed extra spacing
2017-10-03 07:14:05 +00:00
Luke Dashjr
f6beebafd2 Merge pull request #598 from commerceblock/os_bip175-style-fix
BIP175: fixed headers style
2017-10-03 06:53:26 +00:00
Omar Shibli
aecfd94f14 removed extra spacing 2017-10-03 08:28:55 +03:00
Omar Shibli
86dffc03bb fixed headers style 2017-10-03 08:24:16 +03:00
Luke Dashjr
dde2742b71 Merge pull request #593 from jonathancross/bip-175
BIP 175 Improvements
2017-10-02 19:46:34 +00:00
Luke Dashjr
dce3cc5a85 Merge pull request #597 from lsaether/patch-3
rust mnemonic library added
2017-10-01 00:48:39 +00:00
Logan Saether
482aa02e82 rust mnemonic library added
I'm not affiliated with this implementation but I found it today and it appears to be actively maintained.
2017-09-30 19:36:44 -04:00
Luke Dashjr
ce5d831516 BIP 2: Allow editors to fix typos 2017-09-27 18:50:05 +00:00
Luke Dashjr
72f5883b00 Merge pull request #591 from danra/patch-3
Fix broken links in BIP 13
2017-09-27 18:47:09 +00:00
Luke Dashjr
249f1e472b Merge pull request #587 from mruddy/bip173
bip-0173: test vectors, HRP, and casing requirements updates
2017-09-24 19:28:31 +00:00
Luke Dashjr
ed96b6bea5 Merge pull request #595 from lsaether/patch-1
typo 'ECSDA' changed to correct 'ECDSA'
2017-09-24 19:28:00 +00:00
Luke Dashjr
6e01662f97 Merge pull request #594 from izelnakri/master
BIP39: elixir mnemonic library reference added
2017-09-24 19:27:25 +00:00
Logan Saether
10798af90d typo 'ECSDA' changed to correct 'ECDSA'
Elliptic curve digital signature algorithm
2017-09-24 14:01:14 -04:00
mruddy
96d39e8025 bip-0173: test vectors; HRP and casing requirements 2017-09-23 23:30:08 -04:00
Luke Dashjr
7fccc601a0 Merge pull request #592 from jonasschnelli/node_network_limited
Remove second service bit from NODE_NETWORK_LIMITED/BIP159
2017-09-23 18:19:55 +00:00
Jonas Schnelli
8b971ea4de
Remove second service bit from NODE_NETWORK_LIMITED/BIP159 2017-09-23 09:23:38 -06:00
Izel Nakri
b1d2b451f2 elixir mnemonic library added 2017-09-23 11:31:47 +02:00
Jonathan Cross
d8d5a0d8a3
BIP 175 Typo fixes, etc 2017-09-23 05:13:04 +02:00
Luke Dashjr
e49aa21ef6 Merge pull request #589 from danra/patch-1
is->are in BIP 141
2017-09-22 23:34:26 +00:00
danra
c5c8cb4bc8 Fix broken links in BIP 13 2017-09-23 00:45:31 +03:00
danra
13b1df9c25 is->are in BIP 141 2017-09-22 23:53:55 +03:00
Luke Dashjr
39afc8df8b Merge pull request #588 from starcharles/fixed-typo
BIP-0175: fixed typo.
2017-09-20 07:03:56 +00:00
Naoto Satoh
d1ad07ee40 fixed typo 2017-09-20 13:47:58 +09:00
Luke Dashjr
a2d8d7d664 Merge remote-tracking branch 'origin-pull/583/head' 2017-09-18 23:01:13 +00:00
Luke Dashjr
5c70e4d682 Merge pull request #586 from commerceblock/master
BIP 175: Pay to Contract Protocol
2017-09-18 22:59:16 +00:00
Omar Shibli
5d673da3cb omit Track 2017-09-19 01:55:27 +03:00
Omar Shibli
cacc29a91c fixed number 2017-09-19 01:47:01 +03:00
Omar Shibli
2df903a4a1 updated README.md, renamed file 2017-09-19 01:44:42 +03:00
Omar Shibli
dd18e39624 updated compatibility section 2017-09-18 15:58:21 +03:00
Omar Shibli
522a0e88f3 updated alias 2017-09-18 15:49:25 +03:00
Andrew Chow
958641741b Specify the Partially Signed Bitcoin Transaction format in a BIP 2017-09-18 00:24:47 -04:00
Johnson Lau
824ce9da50 Update status for segwit related BIPs 2017-09-17 19:09:50 +08:00
Omar Shibli
689fcdb878 updated BIP number and examples 2017-09-17 11:03:58 +03:00
MeshCollider
f1485fdb5f Fixing spelling in BIP 150 2017-09-16 20:19:35 +00:00
Omar Shibli
3ff47ff642 update Compatibility 2017-09-16 23:17:12 +03:00
Omar Shibli
10104eb211 added Compatibility 2017-09-16 21:38:04 +03:00
Omar Shibli
dd26d81390 removed temp BIP number 2017-09-16 10:42:28 +03:00
Omar Shibli
39a5c1bf7e updated license 2017-09-16 08:55:14 +03:00
Luke Dashjr
abb94297c3 Merge pull request #573 from greenaddress/impl_bip39
add libwally as bip39 implementation
2017-09-16 03:16:14 +00:00
MeshCollider
6295c1a095 Fixing spelling in multiple BIPs 2017-09-16 03:12:13 +00:00
Luke Dashjr
b501de4d2c Merge pull request #582 from sipa/up173
Add extra test cases & implementations to BIP173
2017-09-16 03:05:08 +00:00
Johnson Lau
41e06840eb Promote BIP 145 to Final 2017-09-16 03:01:49 +00:00
Johnson Lau
9cb5ecd9be Withdraw BIP 142 2017-09-16 03:00:24 +00:00
Omar Shibli
3afd4bd57f updated draft 2017-09-06 18:22:27 +03:00
Omar Shibli
4ba4fc3f0a added Pay to Contract Protocol BIP draft 2017-09-06 16:42:37 +03:00
Jonathan Cross
8414837b21 BIP-199 Fix list formatting
The sentence "Both parties can now construct the script and P2SH address for the HTLC." was broken with part appearing below the list item.
2017-09-06 00:32:46 +02:00
Pieter Wuille
199404e96d Add C++ reference 2017-08-25 15:33:56 -07:00
Pieter Wuille
b0ef329498 Add extra test cases to BIP173 2017-08-25 15:33:52 -07:00
Luke Dashjr
775f26c026 Merge pull request #578 from MeshCollider/201708_fix_typos
Correct typo in BIP 144
2017-08-24 06:46:46 +00:00
MeshCollider
bf85f30024 Change "inefficinent" => "inefficient" in BIP 144 2017-08-24 09:58:28 +12:00
Luke Dashjr
110cde0ceb Merge pull request #570 from junderw/addkorean
Add Korean Wordlist
2017-08-15 13:24:35 +00:00
Lawrence Nahum
a412837200
add libwally as bip39 implementation 2017-08-11 22:31:00 +02:00
Luke Dashjr
489fa31d5e Merge pull request #572 from jonasschnelli/node_network_limited
Add Counter-measures for peer fingerprinting part
2017-08-11 19:39:30 +00:00
Jonas Schnelli
ee45bbc7c4
Add fingerprinting countermeasures part 2017-08-11 21:31:36 +02:00
Luke Dashjr
26c0fea8cc Merge pull request #571 from shaolinfry/finals
Update BIP status
2017-08-11 16:43:30 +00:00
shaolinfry
ec28d85aed Fix colours 2017-08-11 16:13:06 +00:00
shaolinfry
d98333302f Update BIP status 2017-08-11 05:36:07 +00:00
junderw
2880981dc3
Add Korean wordlist 2017-08-10 10:56:41 +09:00
Luke Dashjr
f7f317f0f0 Merge pull request #568 from jonasschnelli/node_network_limited
Allow to signal both bits and treat them independently
2017-08-09 03:34:34 +00:00
Jonas Schnelli
f1e884b75a
Allow to signal both bits and treat them independently 2017-08-08 22:20:37 +02:00
Luke Dashjr
7b5d0b2cbc Merge pull request #567 from jonasschnelli/node_network_limited
Set bit 10 and 11 for NODE_NETWORK_LIMITED_LOW, HIGH
2017-08-08 09:01:08 +00:00
Jonas Schnelli
677e6e31ef
Set bit 10 and 11 for NODE_NETWORK_LIMITED_LOW, HIGH 2017-08-08 10:38:54 +02:00
Luke Dashjr
ccc435fb70 Merge pull request #566 from jonasschnelli/node_network_limited
BIP 159: NODE_NETWORK_LIMITED service bits
2017-08-07 17:58:59 +00:00
Jonas Schnelli
ec403b0ac5
Add BIP NODE_NETWORK_LIMITED service bits 2017-08-07 19:50:10 +02:00
Luke Dashjr
545fd89a0f Merge remote-tracking branch 'origin-pull/562/head' 2017-08-07 13:05:54 +00:00
Luke Dashjr
dd4467d12b Merge pull request #565 from sipa/bip-witaddr
Update BIP173: new reference impls + tests fix
2017-08-07 11:46:44 +00:00
Luke Dashjr
6cf474d16d Merge pull request #561 from CikeQiu/patch-1
Add an implementation of Swift
2017-08-07 05:03:29 +00:00
Pieter Wuille
59391f1862 Elaborate on the encoding of witness versions 2017-08-03 23:30:48 -07:00
Pieter Wuille
9b1e7dc8f5 Fix incorrect tests for OP_n in v1+ witnesses 2017-08-02 14:58:47 -07:00
Pieter Wuille
192cfbbacd Add more reference implementations 2017-08-02 14:57:48 -07:00
evoskuil
fbed7daba3 Add link to libbitcoin implementation (BIP39). 2017-07-26 12:42:43 -07:00
Luke Dashjr
6bd62c0c39 Merge pull request #560 from kn0rhaan/patch-1
fixed small typo [in BIP 30]
2017-07-26 05:12:02 +00:00
CikeQiu
11bb375c54 Add an implementation of Swift 2017-07-26 11:33:34 +08:00
kn0rhaan
28d6d0376b fixed small typo 2017-07-21 09:26:40 +02:00
Luke Dashjr
77f9bcdde5 Merge pull request #559 from jameshilliard/bip91-update-reference-tree
Update BIP91 reference implementation repository
2017-07-17 03:43:42 +00:00
James Hilliard
6cbc562fcd Update BIP91 reference implementation repository 2017-07-16 23:09:20 +02:00
Luke Dashjr
118cfbd448 Merge pull request #557 from zander/FlexTrans
Fix typo
2017-07-14 06:00:00 +00:00
TomZ
47af438610 Fix typo 2017-07-10 11:50:39 +02:00
Roland Gabriel Molina
895cc06f4f Organizes Recent Changes chronologically . 2017-07-10 19:47:06 +10:00
Luke Dashjr
449134f1b5 Merge pull request #554 from shaolinfry/bip8-height
Amend BIP8 by height
2017-07-08 10:50:54 +00:00
shaolinfry
fcd34618d7 Amend BIP8 by height 2017-07-07 06:49:30 +00:00
Luke Dashjr
155ce23c2f BIP 8: Add FAILING state to allow lockinontimeout upgrades 2017-06-25 06:36:14 +00:00
Luke Dashjr
d7662ab88c BIP 8: Require the bit to be set during LOCKED_IN 2017-06-25 06:36:14 +00:00
Luke Dashjr
ca8e9b87a7 BIP 8: Use block heights rather than MTP 2017-06-25 06:36:14 +00:00
Luke Dashjr
17e158b3c3 BIP 8: Add a contrast section 2017-06-25 06:32:06 +00:00
Luke Dashjr
750f5e59f6 BIP 8: Refactor back to wholly-contained spec
This partially reverts 7f6a0f811c
2017-06-25 06:32:06 +00:00
Luke Dashjr
7abb1c17b5 Merge pull request #549 from jameshilliard/bip91-clarify
Clarify when BIP91 will cease to be active
2017-06-16 07:11:35 +00:00
James Hilliard
6ab609e01f Clarify when BIP91 will cease to be active 2017-06-16 02:00:43 -05:00
Luke Dashjr
3b32f2d92a Merge pull request #548 from jameshilliard/bip91-confperiod
Use a smaller deployment period for BIP91 but don't enforce until active.
2017-06-16 06:07:15 +00:00
James Hilliard
68a1b67325 Use a smaller deployment period for BIP91 but don't enforce until active. 2017-06-16 00:47:41 -05:00
Luke Dashjr
e6e7ee170a Merge pull request #547 from jameshilliard/bip91-thresholdupdate
Update BIP91 confirmation window and enforcement.
2017-06-15 00:21:56 +00:00
James Hilliard
bab79c2bfb Update BIP91 confirmation window and enforcement. 2017-06-14 18:25:52 -05:00
Luke Dashjr
4ae7ece721 Merge pull request #542 from kallewoof/bip-154-cleanup
BIP 154 cleanup: remove TODO entry
2017-05-25 04:45:10 +00:00
Karl-Johan Alm
4f8c5f11db
BIP 154 cleanup: remove TODO entry 2017-05-25 13:38:41 +09:00
Luke Dashjr
ae993c4e9b Merge pull request #530 from Giszmo/patch-1
small typo in bip47
2017-05-24 03:26:24 +00:00
Luke Dashjr
90fa3ff741 Merge pull request #538 from kallewoof/pow-connection-slots
BIP 154: Rate Limiting via peer specified challenges
2017-05-24 03:26:03 +00:00
Karl-Johan Alm
c39c7f88ad
BIP: Rate Limiting via Proof of Work 2017-05-24 11:25:08 +09:00
Luke Dashjr
fd2a8b68fa Merge pull request #541 from jameshilliard/bip91-typo
Fix BIP91 typo
2017-05-24 02:03:21 +00:00
James Hilliard
152fd5a62f Fix BIP91 typo 2017-05-23 20:34:50 -04:00
Luke Dashjr
98bfcee1b4 Merge pull request #540 from jameshilliard/bip-segsignal
BIP 91: Reduced threshold Segwit MASF
2017-05-23 21:37:04 +00:00
James Hilliard
0295dbb760 Add BIP91 comments section 2017-05-23 17:35:44 -04:00
James Hilliard
92ab294614 Add BIP91 to readme 2017-05-23 17:10:08 -04:00
James Hilliard
31bda2f033 Rename BIP to to “Reduced threshold Segwit MASF” 2017-05-23 16:52:41 -04:00
James Hilliard
0e0fbb4036 Rename to BIP91 2017-05-23 16:51:27 -04:00
Luke Dashjr
8a8c437418 Merge branch 'master' of github.com:bitcoin/bips 2017-05-23 13:22:43 +00:00
Luke Dashjr
4fd8557b7f scripts/buildtable: Check Title length 2017-05-23 13:18:52 +00:00
Luke Dashjr
8cbdc639af Merge pull request #539 from sanch0panza/bip135_add_core_pr
Add link to implementation on Bitcoin Core (PR#10437)
2017-05-23 03:56:06 +00:00
James Hilliard
c63e603229 segsignal reduced activation threshold segwit deployment 2017-05-22 18:19:57 -04:00
sanch0panza
5c1fd93266 Add link to implementation on Bitcoin Core (PR#10437) 2017-05-21 13:48:48 +02:00
Luke Dashjr
3c42de5997 Merge branch 'master' of github.com:bitcoin/bips 2017-05-18 02:42:53 +00:00
Luke Dashjr
96f871c80f BIP 171: Stub Linked Data Signatures support 2017-05-18 02:42:39 +00:00
Luke Dashjr
51384ca981 BIP 171: Specify nonce support for "rate" mode 2017-05-18 00:26:33 +00:00
Luke Dashjr
6b8f2eb395 Merge pull request #519 from wbnns/wbnns-readme
readme: Clarify status for formally accepted BIPs
2017-05-15 01:51:29 +00:00
Will Binns
70c4261e09
readme: Clarify status for formally accepted BIPs
In the table there are some BIPs with a status of Active, and others
with a status of Final. Just wanted to submit this slight text change
for review to the README to indicate that both mean a BIP is formally
accepted.
2017-05-14 17:52:06 -06:00
Luke Dashjr
1b7590e009 bip-0115: Include best practices for wallets, and explain difference from lock-time in Rationale 2017-05-12 04:55:16 +00:00
Luke Dashjr
0fbeba8bb9 Merge pull request #536 from luke-jr/bip-0115
BIP 115: Generic anti-replay protection using Script
2017-05-12 04:14:51 +00:00
Luke Dashjr
f09485e3d8 Assign BIP 115: Generic anti-replay protection using Script 2017-05-12 04:14:01 +00:00
Luke Dashjr
28621f70b5 bip-noreplay: Explain same-block and recent-block cases 2017-05-12 04:08:40 +00:00
Luke Dashjr
27b1d4944f bip-noreplay: Link reference implementation 2017-05-12 04:05:06 +00:00
Luke Dashjr
b582f4e9a9 bip-noreplay: Redo leading zero logic and allow truncated block hashes 2017-05-11 22:12:49 +00:00
Luke Dashjr
d7abc41bb6 bip-noreplay: Remove relative height and redo depth limit 2017-05-11 22:05:00 +00:00
Luke Dashjr
c624f9bfa5 bip-noreplay: Merge in older no-cbah proposal which covers the same opcode 2017-05-11 21:15:29 +00:00
Luke Dashjr
91fd4f9dae Merge pull request #534 from sipa/bip-witaddr
Add extra reference implementations to BIP 173
2017-05-07 23:22:30 +00:00
Pieter Wuille
8cc9702d9c Add extra reference implementations 2017-05-07 16:09:22 -07:00
Luke Dashjr
261b9cd124 Merge pull request #533 from sipa/bip-witaddr
BIP 173: Base32 address format for native v0-16 witness outputs
2017-05-07 22:26:15 +00:00
Pieter Wuille
b93d9ea5d9 Add bip-0173 2017-05-07 15:25:13 -07:00
Luke Dashjr
d7e6a37fe4 scripts/buildtable: Explain the problem for first Comments-URI mismatch 2017-05-07 22:24:47 +00:00
Luke Dashjr
8fc0e0d4be Merge pull request #521 from jonathancross/bip-39-wordlist
bip-0039-wordlists : Typos, capitalization and trailing whitespace.
2017-05-07 22:17:22 +00:00
Luke Dashjr
9cafe77c56 Merge pull request #532 from sanch0panza/bip-genvbvoting-squash
BIP 135: Generalized version bits voting
2017-05-07 22:15:14 +00:00
Luke Dashjr
3b3a9db960 Assign BIP 135: Generalized version bits voting 2017-05-07 22:05:46 +00:00
sanch0panza
b455cad3f8 Initial specification of bip-genvbvoting
Reference implementation:

https://github.com/BitcoinUnlimited/BitcoinUnlimited/pull/458
2017-05-07 10:18:24 +02:00
Luke Dashjr
b9625408cf Merge pull request #531 from shaolinfry/version2
BIP8: clarify deployment terms
2017-05-06 18:27:15 +00:00
shaolinfry
37d7e90eb7 BIP8: clarify deployment terms 2017-05-06 18:14:43 +00:00
Tom Harding
7c23bf14ee bip100: Clarifications 2017-05-06 12:29:54 -04:00
Luke Dashjr
dd3254bb00 scripts/buildtable: Comments-Summary is technically optional 2017-05-05 15:13:20 +00:00
Tom Harding
7ea5bfccde bip100: restore Comments header 2017-05-05 07:41:57 -04:00
Tom Harding
ac9c8b73ed bip100: Improve header metadata. Vote search edge cases.
jgarzik/bip100.git commits:
b82d840733b09104fca3f8805ffa6f2459193201
4ed2a0e4523b06d97e32259e6e180734a794e24f
2017-05-04 18:47:32 -04:00
Leo Wandersleb
d48772e3cb missing word in bip47 2017-05-02 13:57:58 -03:00
Leo Wandersleb
d53872957f small typo in bip47 2017-05-02 13:02:26 -03:00
Luke Dashjr
a27cb636f5 Merge pull request #526 from shaolinfry/bip-segwit-uasf
BIP 149: Segregated Witness (second deployment)
2017-05-01 16:12:43 +00:00
shaolinfry
54f63e56be Assign BIP149 2017-05-01 16:09:18 +00:00
Luke Dashjr
76a8562b04 Merge pull request #529 from azuchi/bip2-add-obsolete-image
BIP 2: Add obsolete status to process image
2017-05-01 02:51:39 +00:00
azuchi
ec8f4b003b Add obsolete status to process image 2017-05-01 11:18:30 +09:00
shaolinfry
a7a89dc6a0 Add compatibility section and remove bit 2017-05-01 01:55:33 +00:00
Luke Dashjr
a301db099d Merge pull request #527 from comboy/bip66-dead-link
fix dead link in BIP66
2017-04-30 19:44:54 +00:00
comboy
117862bfe6 fix dead link in BIP66 2017-04-30 16:09:59 +02:00
shaolinfry
e8e8e1b1e5 Add ML discussion 2017-04-30 09:16:22 +00:00
shaolinfry
b21b63cbdf Correct spelling and remove bit 2017-04-30 08:58:03 +00:00
Luke Dashjr
91426fdab9 Merge pull request #525 from shaolinfry/chart
Simplify chart
2017-04-29 15:07:29 +00:00
shaolinfry
d561da8b5e BIP proposal: segwit-uasf 2017-04-29 10:37:25 +00:00
shaolinfry
b7ebfb488c Simplify chart 2017-04-29 10:30:08 +00:00
Luke Dashjr
172b11d659 Merge pull request #524 from shaolinfry/bip8-chart
BIP 8 Bug fix
2017-04-25 14:10:02 +00:00
shaolinfry
14973bcb09 Bug fix 2017-04-25 18:56:21 +05:30
Luke Dashjr
1d371a5897 Merge pull request #474 from Mirobit/patch-1
Added compatible wallets
2017-04-24 13:52:47 +00:00
Michael Rotarius
647cb208b1 BIP44: Updated compatible wallets
Typo

Fixed github links
2017-04-24 11:16:45 +02:00
Luke Dashjr
b5f44d986a Merge pull request #522 from shaolinfry/bip8-simplified
Further simplify BIP8
2017-04-21 13:41:02 +00:00
shaolinfry
7f6a0f811c Further simplify BIP8.
There is no material change to the specification
However, lockinontimeout is just an implementation
detail, if not set the workflow is BIP9.
As a result, BIP8 is more concisely represented in the
simplified state.
2017-04-21 14:45:16 +05:30
shaolinfry
eb88f8dd1a Fix broken link and title 2017-04-21 12:59:17 +05:30
Luke Dashjr
8eeceda76c Merge pull request #513 from shaolinfry/bip-uavb
BIP 8: Version bits with optional guaranteed lock-in
2017-04-20 18:26:03 +00:00
shaolinfry
43e6486d19 fixup 2017-04-20 23:44:23 +05:30
shaolinfry
4792246198 Update state workflow to reflect specification 2017-04-20 18:29:46 +01:00
shaolinfry
4cc5346dde Add assignments and move state chart 2017-04-20 17:57:13 +01:00
shaolinfry
8421908b2f Use allocated BIP number 8 2017-04-20 17:41:37 +01:00
shaolinfry
efbcb70eb2 Add backwards compatibility section 2017-04-20 17:24:17 +01:00
Luke Dashjr
fadf89a739 Merge pull request #518 from blag/patch-1
Properly format markdown so it renders properly on GitHub
2017-04-20 15:55:15 +00:00
Jonathan Cross
3432f44f6c
[bip-39] Typo, capitalization and trailing whitespace. 2017-04-20 17:39:42 +02:00
shaolinfry
9c4818947b Clarify that activation can occur earlier 2017-04-16 17:09:18 +01:00
shaolinfry
7ca0542136 BIP9 extension to allow optional, guaranteed activation 2017-04-16 16:38:46 +01:00
blag
f60bf00957 Properly format so MD renders properly on GitHub 2017-04-12 13:11:36 -06:00
Luke Dashjr
1f6888e96d Merge pull request #512 from da2ce7/bip148
Stop UASF enforcement if SegWit has IsLockedIn state.
2017-04-06 16:37:02 +00:00
Cameron Garnham
5f34ed741a update BIP text for locked-in state 2017-04-04 20:05:45 +02:00
Cameron Garnham
1352c367a1 Stop BIP 148 enforced signalling if SegWit is Locked-In State 2017-04-04 20:05:43 +02:00
Cameron Garnham
2a97af80db Refactor Code-Example with Better Formatting
No-need to calculate the GetMedianTimePast() value twice.
2017-04-04 12:46:20 +02:00
Luke Dashjr
b7850ab917 Merge branch '20170314-comments' 2017-03-28 17:22:03 +00:00
Luke Dashjr
6a05b468c1 Merge pull request #510 from shaolinfry/patch-2
Update BIP148
2017-03-28 17:20:13 +00:00
shaolinfry
60d4b512b8
Update BIP148
Adjust start time to Aug 1st 2017
Fix code sample logic.
2017-03-28 18:14:10 +01:00
Luke Dashjr
6925e66aa0 Merge pull request #508 from ebfull/htlc
BIP 199: Hashed Time-Locked Contract transactions
2017-03-28 10:19:39 +00:00
Sean Bowe
679c5495d2 New BIP (0199) - HTLC transactions 2017-03-27 22:55:28 -06:00
Luke Dashjr
b23c34ae22 Merge branch 'bip-sizefp' 2017-03-25 08:04:54 +00:00
Luke Dashjr
c8406d3dd6 bip-0180: Elaborate more on merkle stuff 2017-03-25 08:04:36 +00:00
Luke Dashjr
0606cf6576 Merge pull request #506 from luke-jr/bip-sizefp-180
BIP 180: Block size/weight fraud proof
2017-03-25 05:29:51 +00:00
Luke Dashjr
9f366d61f3 Assign BIP 180: Block size/weight fraud proof 2017-03-25 05:21:57 +00:00
Luke Dashjr
82d1537ee7 bip-sizefp: Use "lower-bound" rather than "minimum possible", and address some of jtimon's suggestions 2017-03-25 05:13:52 +00:00
Luke Dashjr
693a9a5213 Merge pull request #505 from shaolinfry/patch-1
Update code sample
2017-03-25 04:18:17 +00:00
Luke Dashjr
ab705800e5 bip-sizefp: Minor tweaks 2017-03-25 04:10:25 +00:00
shaolinfry
cc67ae995c Update code sample 2017-03-25 03:59:43 +00:00
Luke Dashjr
50965e76b6 bip-sizefp: Add links 2017-03-22 22:47:27 +00:00
Luke Dashjr
5291558603 bip-sizefp: Explain how the tx size/weight proofs actually work 2017-03-22 22:40:49 +00:00
Luke Dashjr
90ff1ed214 Merge pull request #503 from shaolinfry/patch-1
Grammar fix.
2017-03-20 12:36:07 +00:00
shaolinfry
44b7b5300e Grammar fix. 2017-03-20 11:53:50 +00:00
Luke Dashjr
2e0be67be6 Merge pull request #501 from shaolinfry/bip-segwit-flagday
BIP 148: Mandatory activation of segwit deployment
2017-03-20 02:47:51 +00:00
shaolinfry
ccef12cc42
Add bip for mandatory activation of segwit deployment 2017-03-19 20:29:21 +00:00
Luke Dashjr
8b4f280c4c bip-sizefp: New BIP for block excess size/weight fraud proofs 2017-03-17 21:52:42 +00:00
Luke Dashjr
d939615535 Propagate summary tone of BIP Comments to their applicable BIP preambles
Affects: BIPs 38, 39, 42, 44, 47, 60, 61, 74, 75, 90, 150, 151, 152
2017-03-15 10:48:56 +00:00
Luke Dashjr
7e202d08b6 Merge pull request #499 from luke-jr/bip-xchgrate
BIP 171: Currency/exchange rate information API
2017-03-14 23:53:01 +00:00
Luke Dashjr
29584bb194 Assign BIP 171: Currency/exchange rate information API 2017-03-14 23:15:21 +00:00
Jeff Garzik
5ad92f06de Add BIP 100, as currently implemented. 2017-03-08 11:46:12 -05:00
Luke Dashjr
d5600c5b74 bip-xchgrate: Recommend HTTPS 2017-03-06 22:10:04 +00:00
Luke Dashjr
cea6be598d bip-xchgrate: history bounds and "nearest" flag 2017-03-06 22:08:51 +00:00
Luke Dashjr
ead6fb2410 Merge pull request #497 from iancoleman/BIP32-test-vectors
BIP 32: Test vectors for leading zeros
2017-03-06 03:51:17 +00:00
Luke Dashjr
43aa6f8190 bip-xchgrate: Note authentication 2017-03-06 02:42:55 +00:00
Luke Dashjr
a361076d49 bip-xchgrate: Add examples 2017-03-06 02:41:09 +00:00
Luke Dashjr
12316e3dec bip-xchgrate: Include locale with enumeration 2017-03-06 02:21:22 +00:00
Luke Dashjr
00323d1a8f bip-xchgrate: Use Unicode CLDR for locales 2017-03-06 02:19:03 +00:00
Luke Dashjr
ee90b8c525 bip-xchgrate: Drop HTML longdesc 2017-03-05 05:49:02 +00:00
Luke Dashjr
f337386550 bip-xchgrate: Fix 2017-03-05 04:32:13 +00:00
Luke Dashjr
253c7f923b bip-xchgrate: Use plain English to define rate 2017-03-05 03:21:16 +00:00
Luke Dashjr
7a324fb947 bip-xchgrate: Use standard currency exchange base/quote terminology 2017-03-05 02:16:22 +00:00
Luke Dashjr
651de8120e bip-xchgrate: More sensible rate definition 2017-03-05 00:23:26 +00:00
Luke Dashjr
3b29e5d3fa bip-xchgrate: Begin Rationale section 2017-03-04 23:46:46 +00:00
Luke Dashjr
019d922851 bip-xchgrate: Limit currency-pair token symbols, and give a little info with enumeration 2017-03-04 23:37:59 +00:00
Luke Dashjr
8eaad1803f bip-xchgrate: Allow currency-pairs to have arbitrary descriptions 2017-03-04 23:23:17 +00:00
Luke Dashjr
125e0cc931 bip-xchgrate: Define rate 2017-03-04 23:15:02 +00:00
Luke Dashjr
94a5b53935 bip-xchgrate: Provide secondary currency code in response to info request 2017-03-04 23:14:10 +00:00
Luke Dashjr
136d85ea56 bip-xchgrate: Draft of a new BIP for a common format for exchange rate information 2017-03-04 08:05:45 +00:00
Ian Coleman
11b0fa37be Mediawiki format used for external links 2017-02-25 15:08:58 +11:00
Ian Coleman
6f94288741 BIP 32: Test vectors for leading zeros
These additional test vectors will ensure all future implementations are
interoperable.
See https://github.com/iancoleman/bip39/issues/58
and https://github.com/bitpay/bitcore-lib/issues/47
2017-02-24 10:30:20 +11:00
azuchi
b2b24b5393 BIP 143: Unify coin unit 2017-02-19 16:19:17 +09:00
zizelevak
b7f682f702 Update czech.txt 2017-02-12 03:40:30 +01:00
zizelevak
8a2a06e94c Update czech.txt 2017-02-10 23:56:16 +01:00
zizelevak
702d651aa5 Update czech.txt 2017-02-10 23:51:36 +01:00
zizelevak
b9f09aae63 Update czech.txt 2017-01-31 08:49:29 +01:00
zizelevak
f4691796c6 Update czech.txt 2017-01-31 08:15:12 +01:00
zizelevak
dab9d97b44 Update czech.txt 2017-01-31 08:08:42 +01:00
Luke Dashjr
ed283b05b3 Merge pull request #492 from azuchi/duplicate-bip69
Remove duplication BIP69
2017-01-29 07:08:57 +00:00
azuchi
1761e8a495 Remove duplication BIP69 2017-01-28 18:55:50 +09:00
zizelevak
92a07ee121 Update czech.txt 2017-01-27 19:54:28 +01:00
zizelevak
7ae1049232 Update czech.txt 2017-01-27 18:23:25 +01:00
zizelevak
1a3ec3a459 Update czech.txt 2017-01-27 17:34:25 +01:00
zizelevak
875f35a07a Update bip-0039-wordlists.md 2017-01-27 16:51:06 +01:00
zizelevak
af07fb993e Update czech.txt
Words are sorting according English alphabet (Czech sorting has difference in “ch”)
2017-01-27 16:49:45 +01:00
Luke Dashjr
1554541db4 bip-noreplay: Initial draft of an anti-replay BIP 2017-01-26 22:44:49 +00:00
zizelevak
9eefdc9151 Update bip-0039-wordlists.md 2017-01-23 13:47:51 +01:00
zizelevak
469a12b918 Update bip-0039-wordlists.md 2017-01-23 13:46:36 +01:00
zizelevak
5be84b01f1 Rename Czech.txt to czech.txt 2017-01-23 12:32:52 +01:00
zizelevak
e3ec9cf9db Create Czech.txt 2017-01-23 12:30:55 +01:00
Luke Dashjr
77cde96da1 Merge pull request #491 from luke-jr/sipa_licensing
BIPs 30, 32, 62, 66, and 103: License under BSD-2-Clause terms
2017-01-20 00:14:29 +00:00
Luke Dashjr
24af63b7e6 script/buildtable: Remove missing-license exceptions no longer needed 2017-01-20 00:13:01 +00:00
Luke Dashjr
4945e73c76 BIP 123: License under CC0-1.0 or GNU-All-Permissive terms
[Friday, January 20, 2017] [12:07:33 AM UTC] <CodeShark>        luke-jr: for BIP123, I think either CC0 or GNU-all-permissive
2017-01-20 00:13:01 +00:00
Luke Dashjr
855eb22004 BIPs 30, 32, 62, 66, and 103: License under BSD-2-Clause terms
[Thursday, January 19, 2017] [7:46:36 PM UTC] <luke-jr> sipa: if you get a minute, can you give me at least a text-"verbal" ACK for some copyright license to put on BIPs 30, 32, 62, 66, and 103 please? is BSD-2-Clause okay?
[Thursday, January 19, 2017] [7:47:01 PM UTC] <sipa>    luke-jr: ACK on 2-clause BSD for 30,32,62,66,103
[Thursday, January 19, 2017] [7:47:13 PM UTC] <sipa>    (and for any other BIPs I contributed to)
2017-01-19 19:55:46 +00:00
Luke Dashjr
872bda33b5 Merge BIP 104: 'Block75' - Max block size like difficulty 2017-01-14 07:06:54 +00:00
Luke Dashjr
834db1b0fb Assign BIP 104 for Block75 2017-01-14 07:04:54 +00:00
Luke Dashjr
5d80de82cf BIP 104: Fix License header 2017-01-14 07:04:12 +00:00
Luke Dashjr
0262ba0288 BIP 104: Use ASCII quotes in Title 2017-01-14 07:04:12 +00:00
Luke Dashjr
95dfd21ea2 scripts/buildtable: Check for extraneous spaces after header name 2017-01-14 07:04:12 +00:00
t.khan
2a9e9503cd Create bip-tkhan-block75.mediawiki 2017-01-13 18:23:15 -05:00
Gregory Sanders
cedf553184 Slight clarification for replacement implementation 2017-01-13 12:33:33 -05:00
Chris Stewart
608d5dc95f Update bip-0141.mediawiki
Clarifying rewording, `OP_0` is not a 1 byte push op code since it pushes the empty byte vector onto the stack.
2017-01-03 17:46:14 -06:00
Chris Stewart
d84186c01c Specify which 1 byte push op codes are valid
This adds documentation to BIP141 about which 1 byte push op codes are valid for segwit. This is needed because `OP_1NEGATE` is a 1 byte push op code, but is NOT a valid 1 byte push op code for segwit. See the implementation here for why `OP_1NEGATE` is not valid: 14d01309be/src/script/script.cpp (L228)
2017-01-03 17:07:37 -06:00
Luke Dashjr
04875c6d6e Merge pull request #482 from techguy613/master
Add license for BIP75
2017-01-01 12:33:50 +00:00
Luke Dashjr
7d94bb685b BIP 75: Add License header 2017-01-01 12:30:28 +00:00
Luke Dashjr
237bf925d7 Merge branch 'master' into HEAD 2017-01-01 12:28:19 +00:00
Luke Dashjr
657151e00e Merge pull request #486 from TheBlueMatt/master
Clarify BIP 152 interaction with classic relay mechanisms
2017-01-01 12:24:58 +00:00
Matt Corallo
f8a9db58c0 Clarify BIP 152 interaction with classic relay mechanisms 2017-01-01 04:16:28 +01:00
Luke Dashjr
51e9151499 Merge pull request #485 from luke-jr/readme_layer
README: Include BIP Layers in index
2016-12-23 09:07:27 +00:00
Matt David
f514593687 - Change "CBC" to GCM. This was missed during the original change from CBC to GCM 2016-12-21 15:28:43 -08:00
Luke Dashjr
183852337b README: Include BIP Layers in index 2016-12-15 05:04:31 +00:00
Luke Dashjr
d2a8fb089d Merge BIPs 123 & 2 activation and implementation 2016-12-15 04:23:13 +00:00
Luke Dashjr
3a28003993 Implement BIP 2 with merging master changes 2016-12-15 04:21:00 +00:00
Luke Dashjr
42770fb619 Bugfix: scripts/buildtable: Increment found marker *after* processing the header 2016-12-15 04:20:14 +00:00
Luke Dashjr
fd5a85d6b8 Implement BIP 123 for BIP 90 (merging master) 2016-12-15 04:10:07 +00:00
Matt David
b8c2959783 - Update CC-BY version to specify 4.0 2016-12-14 13:55:49 -08:00
Luke Dashjr
a7cc4c6014 Merge pull request #484 from paveljanik/patch-3
Fix typos
2016-12-08 10:57:13 +00:00
paveljanik
8102d5f5af Fix typos 2016-12-08 10:20:04 +01:00
Luke Dashjr
0dc0888182 Merge pull request #483 from TheBlueMatt/master
Clarify SPV node usage of BIP 152
2016-12-06 00:52:21 +00:00
Matt Corallo
aee228746d Clarify SPV node usage. 2016-12-05 13:55:40 -08:00
Matt David
1ba95330d1 Merge remote-tracking branch 'upstream/master' 2016-12-02 14:37:53 -08:00
Matt David
9ec4be2808 - Add CC-BY license for BIP75 2016-12-02 14:37:32 -08:00
Luke Dashjr
acffcfbe18 Merge pull request #480 from sdaftuar/first-draft-ism
BIP 90: Buried deployments
2016-12-01 20:16:40 +00:00
Luke Dashjr
a9558eff75 Merge pull request #481 from luke-jr/bip0109-rejected
Update BIP 109 status Draft->Rejected
2016-12-01 20:16:08 +00:00
Suhas Daftuar
2bc2f06089 fix preamble 2016-12-01 15:11:16 -05:00
Suhas Daftuar
5d21c93a68 Assign BIP90 and update README 2016-12-01 08:56:40 -05:00
Luke Dashjr
710a20ad33 Update BIP 109 status Draft->Rejected
All proponents of BIP 109 seem to agree it is dead
2016-11-30 23:33:24 +00:00
Luke Dashjr
284424f217 Merge pull request #479 from blocktrail/bip67-license
add Copyright to BIP67
2016-11-30 21:12:13 +00:00
Suhas Daftuar
0fc3fe20ca Emphasize code simplification over performance optimization 2016-11-30 12:25:52 -05:00
Ruben de Vries
148988067a add Copyright to BIP67 2016-11-30 17:48:54 +01:00
Luke Dashjr
395262bd1d BIPs 17, 18, 19, 20, 22, and 23: Add missing Copyright section 2016-11-30 10:09:54 +00:00
Luke Dashjr
959fecc15b Promote BIP 2 Draft->Active, and implement it
- Update all Accepted status to Proposed (renamed status)
- The BIP Comments preamble headers added to every BIP
- The License preamble headers have been added to all BIPs with a Copyright section
2016-11-30 09:51:01 +00:00
Luke Dashjr
72f18918a8 Promote BIP 123 Draft->Active, and implement it 2016-11-30 09:45:33 +00:00
Luke Dashjr
453b8ab832 Merge pull request #477 from luke-jr/bip0123-clarify
BIP 123: Clarify how used with non-Standards BIPs, and update list
2016-11-30 03:33:15 +00:00
Luke Dashjr
06e6f29fca Merge pull request #475 from zander/ft-update
Update the spec following the new developments
2016-11-29 04:04:17 +00:00
Luke Dashjr
c834fde23b BIP 123: Clarify how used with non-Standards BIPs, and update list 2016-11-29 04:00:50 +00:00
Luke Dashjr
2bd92edce1 BIP 2: Layer is only for ST BIPs 2016-11-29 03:07:35 +00:00
Luke Dashjr
c26a663b08 BIP 2: Include Layer header from BIP 123 in general preamble and change list 2016-11-29 03:05:46 +00:00
Luke Dashjr
34259408fe Merge pull request #476 from techguy613/master
BIP75 Update for SEC Formatted Public Keys and Unique Identifier
2016-11-28 23:29:13 +00:00
Matt David
99614fcf2e - Update identifier comment in paymentrequest.proto 2016-11-28 10:40:52 -08:00
Matt David
7dd419e08a - Update identifier to be a required field in ProtocolMessage and EncryptedProtocolMessage 2016-11-28 10:39:58 -08:00
TomZ
626aa1a9fd Update the spec following the new developments 2016-11-28 18:23:15 +01:00
Matt David
19439279d0 Merge remote-tracking branch 'upstream/master' 2016-11-26 16:43:27 -08:00
Matt David
e3a155c477 - Change EC Keys to use SEC encoding
- Update identifier default to also include epoch time to great a more unique identifier
2016-11-23 10:25:51 -08:00
Luke-Jr
1dedbfa5a6 Merge pull request #469 from ryanofsky/getblocktxn-nonrecent
Allow block responses to getblocktxn requests
2016-11-15 07:54:09 +00:00
Suhas Daftuar
836d2dc91e Initial draft of buried deployments. 2016-11-14 12:01:26 -05:00
Russell Yanofsky
376029beea BIP152: Allow block responses to getblocktxn requests
Corresponding bitcoind change in:

dac53b5 Modify getblocktxn handler not to drop requests for old blocks
2016-11-14 10:58:34 -05:00
Russell Yanofsky
21985daefb BIP152: Fix missing space between words. 2016-11-14 10:57:48 -05:00
Luke-Jr
095fbdab94 Merge pull request #472 from afk11/bip39-allowed-sizes
BIP39: 'recommended size' -> 'allowed size'
2016-11-05 00:03:04 +00:00
Luke-Jr
1286a7793e Merge pull request #473 from sdaftuar/bip152-invalid-blocks
[BIP 152] Update compact block BIP for banning behavior
2016-11-03 19:22:27 +00:00
Suhas Daftuar
30620da93c [BIP 152] Bump p2p protocol for proper banning behavior 2016-11-03 08:44:55 -04:00
Suhas Daftuar
78c3b0a244 [BIP 152] Fix invalid link 2016-11-03 08:12:20 -04:00
Thomas Kerin
5b1c59da6d BIP39: 'recommended size' -> 'allowed size' 2016-11-03 10:14:41 +01:00
Luke-Jr
dd4833f171 Merge pull request #470 from richardkiss/master
Fix hex of first FindAndDelete example
2016-11-02 08:06:41 +00:00
Richard Kiss
d75418ee38 BIP143 - Fix hex of first FindAndDelete example (was just witness data). 2016-11-01 23:40:41 -07:00
Luke-Jr
ff7fbb8b7c Merge pull request #467 from DanielWeigl/master
BIP49 - fix wrong cointype for test vectors - use m/49'/1'/0' for testnet
2016-10-18 06:31:15 +00:00
Luke-Jr
25e3b94e0c Merge pull request #463 from jl2012/bip143_findanddelete
Add examples to show FindAndDelete is not used in BIP143
2016-10-18 06:30:55 +00:00
Luke-Jr
b2dc6edfb8 Merge pull request #466 from btcdrak/patch-10
Update segwit deployment details
2016-10-17 21:54:59 +00:00
Luke-Jr
a060f6f7ed Merge pull request #465 from jl2012/bip147start
Add start day for BIP147
2016-10-17 17:17:39 +00:00
Luke-Jr
93792786bf Merge pull request #464 from sipa/bip141start
BIP 141 start and end time
2016-10-17 17:15:16 +00:00
฿tcDrak
f2b18844c6 Update segwit deployment details 2016-10-17 15:33:17 +01:00
Johnson Lau
2067307874 Add start day for BIP147 2016-10-17 20:18:35 +08:00
Pieter Wuille
5c2da7e07d BIP 141 start and end time 2016-10-17 13:16:22 +02:00
Daniel Weigl
61e766b9dd fix wrong cointype for test vectors - use m/49'/1'/0' for testnet 2016-10-16 17:25:14 +02:00
Johnson Lau
bb3734349f Add examples to show FindAndDelete is not used in BIP143 2016-10-16 02:53:15 +08:00
Luke-Jr
6e47447b32 Merge pull request #462 from TheBlueMatt/segwitcb
SegWit Compact Blocks
2016-10-14 22:37:54 +00:00
Matt Corallo
10fcf4ed0d Fix a few nits and expand on coinbase short ID calc in ver 2 2016-10-14 10:09:03 -04:00
Luke-Jr
175413daeb Merge pull request #447 from jonathancross/master
Improving wording of "makes them consuming"...
2016-10-12 23:15:58 +00:00
Luke-Jr
96fb105b74 Merge pull request #454 from MarcoFalke/patch-2
BIP2: fix typo
2016-10-06 22:56:09 +00:00
Luke-Jr
80e8462fcb Merge pull request #460 from DanielWeigl/master
BIP49 - calculate testvector
2016-10-05 20:13:38 +00:00
Luke Dashjr
6a8b845f63 bip-0002: Add missing Obsolete status and Requires to preamble overview 2016-10-05 20:08:08 +00:00
Luke-Jr
6399875eb7 Merge pull request #458 from MarcoFalke/patch-3
BIP2: Remove Superseded from choices for Status
2016-10-05 20:06:08 +00:00
Luke-Jr
50f459166f Merge pull request #459 from jl2012/segwitscript
Add policy descriptions to BIP141 and 143 and address some nits.
2016-10-05 19:57:50 +00:00
Daniel Weigl
7662d7124a replace BIP-number-placeholders and calculate test vectors 2016-10-05 16:10:12 +02:00
Johnson Lau
3f59ccdddc Add policy descriptions to BIP141 and 143 and address some nits. 2016-10-05 21:00:53 +08:00
MarcoFalke
4ce983bee9 BIP2: Remove Superseded from choices for Status
The section about the BIP status field only defines
"Replaced or Obsolete (which is equivalent to Replaced)",
so remove "Superseded" for clarity.
2016-10-05 14:56:44 +02:00
Luke-Jr
ed5661dbec Merge pull request #457 from laanwj/2016_10_bip144_add_constants
bip-0144: Add enum values for MSG_WITNESS_{BLOCK,TX}, MSG_FILTERED_WITNESS_BLOCK
2016-10-05 12:38:47 +00:00
Wladimir J. van der Laan
9fc3cf52c6 bip-0144: Add enum values for MSG_WITNESS_{BLOCK,TX}, MSG_FILTERED_WITNESS_BLOCK
Found these missing while working on
https://github.com/bitcoin/bitcoin/pull/8880 .
2016-10-05 13:39:49 +02:00
Luke Dashjr
b3e579c935 Merge BIP 49 2016-10-05 11:35:45 +00:00
Luke Dashjr
0f0dad6b89 Assign BIP 49: Derivation scheme for P2WPKH-nested-in-P2SH based accounts 2016-10-05 11:35:37 +00:00
Daniel Weigl
544941d096 added backwards compatibility and copyright 2016-10-05 13:22:18 +02:00
Luke Dashjr
6d086e11d0 Bugfix: scripts/buildtable: Tolerate Discussions-To, Replaces, Superseded-By, and Resolution headers 2016-10-05 05:50:12 +00:00
MarcoFalke
9ea3afd7d6 BIP2: fix typo 2016-10-01 15:43:51 +02:00
Luke Dashjr
9bf1c75882 Merge branch 'bip0002_squash' 2016-10-01 01:41:58 +00:00
Wladimir J. van der Laan
b55fe6e1e4 Merge pull request #451 from dangershony/patch-4
Adding the source code for CoinVault
2016-09-30 18:26:55 +02:00
Dan Gershony
f562566d91 Adding the source code for CoinVault
The C#  implementation is now open source
2016-09-28 21:19:39 +01:00
Pieter Wuille
78cbaca940 Fix a few nits suggested by @instagibbs 2016-09-28 04:52:50 +02:00
Luke-Jr
8b00baf6c8 Merge pull request #449 from zander/FlexTransUpdates
Fixes to 0134
2016-09-27 00:53:43 +00:00
TomZ
5b66911109 Fixes to 0134 2016-09-26 18:09:34 +02:00
Luke-Jr
c485ddf028 Merge pull request #448 from isghe/bip23_fix_link
minor: fix link to BIP 22
2016-09-25 21:37:47 +00:00
isidoro ghezzi
5c256744bf minor: fix link to BIP 22 2016-09-25 21:11:11 +02:00
Jonathan Cross
67b267948a
Improving wording of "makes them consuming"... 2016-09-25 01:36:00 +02:00
Luke Dashjr
e89b98facd bip0002: Status Deferred->Draft 2016-09-24 06:27:51 +00:00
Luke Dashjr
894b6ea66c bip-0002: Sort changes vs BIP 1 by relevance 2016-09-24 06:27:08 +00:00
Luke Dashjr
95c8f65b11 bip-0002: Rename Accepted Status to Proposed 2016-09-24 06:27:08 +00:00
Luke Dashjr
be3260ecd5 bip-0002: Graph: Collapse Active into Final box 2016-09-24 06:27:08 +00:00
Luke Dashjr
0ee015209f bip-0002: graph only shows typical paths, not all possible 2016-09-24 06:27:08 +00:00
Luke Dashjr
e528af13b7 bip-0002: Replace Status chart with SVG 2016-09-24 06:27:08 +00:00
Luke Dashjr
3f4750f0b9 bip-0002: Link Copyright "see below" 2016-09-24 06:27:08 +00:00
Luke Dashjr
ad4f559976 bip-0002: Add summary of changes vs BIP 1 2016-09-24 06:27:08 +00:00
Luke Dashjr
70747425d8 bip-0002: Mention OPL problems 2016-09-24 06:27:08 +00:00
Luke Dashjr
f2e6bbd219 bip-0002: Remove useless History section 2016-09-24 06:27:08 +00:00
Luke Dashjr
c59cfdb894 bip-0002: Remove/merge old BIP 1 Status stuff 2016-09-24 06:27:08 +00:00
Luke Dashjr
0c203dcfb6 bip-0002: Allow non-images in bip-XXXX subdirectory 2016-09-24 06:27:08 +00:00
Luke Dashjr
44f85187fe bip-0002: Allow Post-History header to be a link as with BIPs 99, 122, and 124 2016-09-24 06:27:08 +00:00
Luke Dashjr
7ca7445c80 bip-0002: Drop unused and inapplicable Resolution header from preamble 2016-09-24 06:27:08 +00:00
Luke Dashjr
9b040c5042 bip-0002: Require email addresses for authors 2016-09-24 06:27:08 +00:00
Luke Dashjr
9362ede906 bip-0002: Add new preamble headers for comments/license 2016-09-24 06:27:08 +00:00
Luke Dashjr
7027de2882 bip-0002: Expand on preamble headers for BIP/Title 2016-09-24 06:27:08 +00:00
Luke Dashjr
db70f458c8 bip-0002: Reduce unnecessary duplication in summary of BIP parts 2016-09-24 06:27:08 +00:00
Luke Dashjr
c864f641fa bip-0002: Disallow markdown format 2016-09-24 06:27:08 +00:00
Luke Dashjr
efbbe30cce bip-0002: Clarify and update BIP editor role 2016-09-24 06:27:08 +00:00
Luke Dashjr
f0999cdcc1 bip-0002: Language improvements for BIP workflow 2016-09-24 06:27:08 +00:00
Luke Dashjr
deb036798a bip-0002: Drop BitcoinTalk recommendation 2016-09-24 06:27:07 +00:00
Luke Dashjr
f1ed5afd1f bip-0002: Revise for BIP 1 replacement 2016-09-24 06:27:07 +00:00
Luke Dashjr
5a066ea8fa Copypaste BIP 1 into BIP 2 and aim for replacement 2016-09-24 06:27:07 +00:00
Luke Dashjr
9f0ef24770 bip-0002: Move BIP Comments to GitHub bitcoin/bips wiki 2016-09-24 02:48:30 +00:00
Luke Dashjr
3b4421b788 bip-0002: Prohibit the OPL in new BIPs 2016-09-24 00:36:32 +00:00
Luke-Jr
b11eca4750 Merge pull request #445 from zander/FlexTrans
BIP 134: Flexible Transactions
2016-09-23 10:27:43 +00:00
Luke Dashjr
b3654088cc Assign BIP 134: Flexible Transactions 2016-09-23 10:03:34 +00:00
TomZ
605cb29934 Adding Flexible Transactions proposal. 2016-09-23 11:13:22 +02:00
Luke-Jr
8f8ac4f2f8 Merge pull request #444 from jonnynewbs/master
Update BIP 141 to include definition of Virtual transaction size and Transaction weight
2016-09-20 00:05:15 +00:00
Matt Corallo
430bf9f235 Specify which block encoding to use in the fallback block message 2016-09-19 19:43:38 +02:00
Matt Corallo
bca0dfb3b9 Fix message type 2016-09-19 19:43:38 +02:00
Matt Corallo
a380daff16 Switch priority order to highest-first and add sample negotiation 2016-09-19 19:43:38 +02:00
jonnynewbs
c2213ed1fd Update BIP 141 to include definition of Virtual transaction size and Transaction weight 2016-09-16 13:55:19 -04:00
DanielWeigl
d80224c8bb Merge pull request #1 from afk11/weigl-deriv-bip
Fix url for BIP44
2016-09-07 17:32:00 +02:00
Thomas Kerin
2692800cab
Fix url for BIP44 2016-09-07 16:25:59 +01:00
Matt Corallo
367eade6e8 Add version negotiation details 2016-09-06 13:13:59 +02:00
Pieter Wuille
316d4f32a0 Version 2 sendcmpct for integration of segwit with CB 2016-09-06 13:13:59 +02:00
Luke-Jr
2fceaf98a9 Merge pull request #427 from jl2012/patch-27
BIP112: fix example
2016-09-02 22:11:51 +00:00
Luke-Jr
f45cc085f1 Merge pull request #429 from OpenBitcoinPrivacyProject/master
BIP126: Clarify interaction with BIP69
2016-09-02 22:11:13 +00:00
Luke Dashjr
420b959a69 Merge commit '3649694' 2016-09-02 22:09:54 +00:00
Luke Dashjr
3649694686 Assign BIP 147: Dealing with dummy stack element malleability 2016-09-02 22:09:46 +00:00
Luke-Jr
ef787c3b67 Merge pull request #441 from jl2012/bip146nullfail
BIP146: title and content changed
2016-09-02 22:03:37 +00:00
Johnson Lau
40ba92af28 BIP146: title and content changed 2016-09-02 16:37:33 +08:00
Johnson Lau
89a9829ec4 Add NULLDUMMY softfork BIP 2016-09-02 16:07:46 +08:00
Luke-Jr
40eadef880 Merge pull request #439 from techguy613/master
BIP75 Update: Versioning, Cancellation, Unknown Message Type, New PKI_TYPEs, Status Codes, Motivation
2016-08-31 18:46:37 +00:00
Matt David
45f5c56e45 Merge remote-tracking branch 'upstream/master'
Added:

- Versioning
- Cancellation
- Add UNKNOWN_TYPE to ProtocolMessageType enum in paymentrequest.proto
  and BIP75 text (based on suggestions from
  http://androiddevblog.com/protocol-buffers-pitfall-adding-enum-values/)

  Updated:

  - Additional pki_type values
  - Updated status_code values
  - Update BIP75 Motivation and use cases to provide more color around
    reasoning and use of BIP75

    NOTE: The BIP75 language no longer contains a description of the KYC
    compliance use case, as it is a single, very specific use-case that
    does not have any bearing on the technical specifications herein.
    BIP75 extends the original BIP70 Payment Protocol to become a
    two-way, encrypted messaging process, which can be used for a
    variety of reasons one of which is regulatory compliance.
2016-08-31 09:09:34 -07:00
Matt David
7ba8e5813a - Remove working copy of http address service bip 2016-08-30 14:11:25 -07:00
Matt David
4d1949d707 Merge pull request #19 from jmacwhyte/proofread
Added versioning, canceling
2016-08-30 14:00:34 -07:00
jmacwhyte
ac8a5f4df6 Added versioning, canceling 2016-08-29 17:56:34 -07:00
Matt David
8516e47a5e Merge pull request #18 from jmacwhyte/master
Added additional pki_type values
2016-08-29 15:49:17 -07:00
jmacwhyte
c7fdd9d428 Added additional pki_type values 2016-08-29 15:45:44 -07:00
Luke Dashjr
1501dd99bd Promote BIP 69 Draft->Accepted 2016-08-27 20:21:26 +00:00
Luke Dashjr
04e1a86f51 Promote BIP 45 Draft->Accepted 2016-08-25 21:10:19 +00:00
Luke Dashjr
387fc6011b Promote BIPs 18, 39, 44, 67, 80, 81, 111, 125, 130, and 132 Draft->Accepted; change BIP 43 to Informational 2016-08-23 19:47:29 +00:00
Luke Dashjr
d35a3d33da Promote BIP 9 Draft->Final 2016-08-20 23:50:14 +00:00
Luke-Jr
0aa7bfc0f9 Merge pull request #435 from jl2012/bip146nulldummy
BIP146: change title and add NULLDUMMY rules
2016-08-17 19:36:43 +00:00
Johnson Lau
003cf078ff BIP146: change title and add NULLDUMMY rules 2016-08-18 02:05:33 +08:00
Luke-Jr
c7c47e669d Merge pull request #434 from jonasschnelli/2016/07/auth_bip
Add BIP150 (Peer Authentication)
2016-08-17 08:21:26 +00:00
Bryan Bishop
ffa155e452
peer authentication bip draft editing 2016-08-17 09:44:33 +02:00
Jonas Schnelli
5e49486769
Add BIP150 (Peer Authentication) 2016-08-17 09:44:33 +02:00
Luke Dashjr
932d43f162 Merge BIP 146 2016-08-16 19:44:42 +00:00
Luke Dashjr
55ea805212 Assign BIP 146: Low S values signatures 2016-08-16 19:44:21 +00:00
Johnson Lau
b004187f14 Add new BIP: Low S values signatures 2016-08-17 02:14:18 +08:00
Luke-Jr
b1d9d528da Merge pull request #431 from sreekanthgs/patch-1
Adding ruby implementation to Other implementation
2016-08-10 23:33:56 +00:00
Sreekanth G S
93ef858911 Adding ruby implementation to Other implementation 2016-08-10 22:08:22 +05:30
Luke-Jr
85805beee7 Merge pull request #430 from jonasschnelli/2017/08/bip151_rekey
[bip151] slightly increase robustness of the re-keying
2016-08-07 21:09:59 +00:00
Jonas Schnelli
55163e4546
[bip151] slightly increase robustness of the re-keying 2016-08-07 22:24:37 +02:00
Jonas Schnelli
0c8256f764
[bip151] fix typo in HKDF key 2016-08-07 22:21:06 +02:00
Justus Ranvier
f64f3c3d9c
BIP126: Clarify interaction with BIP69 2016-08-03 21:29:33 -05:00
Luke-Jr
30a0580e91 Merge pull request #428 from jl2012/bip114v2
BIP114: MAST proposal v2
2016-07-29 05:36:02 +00:00
Matt David
6559767e03 - Replace UNKNOWN_TYPE with UNKNOWN_MESSAGE_TYPE 2016-07-28 15:13:32 -07:00
Johnson Lau
9da1f65e39 BIP114: MAST proposal v2 2016-07-29 01:47:03 +08:00
Matt David
f7e08aa1a7 - Add UNKNOWN_TYPE to ProtocolMessageType enum in paymentrequest.proto and BIP75 text (based on suggestions from http://androiddevblog.com/protocol-buffers-pitfall-adding-enum-values/)
- Update BIP75 Motivation and use cases to provide more color around reasoning and use of BIP75

NOTE: The BIP75 language no longer contains a description of the KYC compliance use case, as it is a single, very specific use-case that does not have any bearing on the technical specifications herein. BIP75 extends the original BIP70 Payment Protocol to become a two-way, encrypted messaging process, which can be used for a variety of reasons one of which is regulatory compliance.
2016-07-28 09:26:36 -07:00
Luke Dashjr
7fccadda9f Merge remote-tracking branch 'origin-pull/419/head' 2016-07-27 18:09:53 +00:00
Matt David
95df420895 Merge remote-tracking branch 'upstream/master'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2016-07-27 11:01:28 -07:00
Luke-Jr
87cdaa7d2e Merge pull request #425 from ysangkok/master
BIP-0141: Link to permanent PR of reference implementation
2016-07-27 17:03:18 +00:00
Luke-Jr
0e3f9df412 Merge pull request #426 from chjj/bip151-aadseq
BIP151: Clarifications on sequence numbers.
2016-07-27 17:02:54 +00:00
Johnson Lau
1402ca99cb BIP112: fix example 2016-07-27 17:11:09 +08:00
Christopher Jeffrey
0607a34fcf
bip151: remove aad change. 2016-07-27 00:26:34 -07:00
Christopher Jeffrey
f388fef2f6
BIP151: Clarifications on AAD and sequence numbers. 2016-07-26 23:47:03 -07:00
Janus Troelsen
d49512e612 Link to permanent PR of reference implementation
analogue to ecfb7ebbca
2016-07-25 10:05:55 +02:00
Luke Dashjr
2ac0b472da Merge branch 'master' 2016-07-23 20:36:16 +00:00
Luke Dashjr
d8928eb85a BIP 145: Update s/cost/weight/ 2016-07-23 20:35:56 +00:00
Luke-Jr
d0591ebc39 Merge pull request #424 from elias19r/patch-1
Minor link fix
2016-07-22 21:01:00 +00:00
Elias Rodrigues
6fb5aaf136 Minor link fix 2016-07-22 14:52:15 -03:00
Luke-Jr
850d103abe Merge pull request #416 from jl2012/patch-26
BIP141 fix
2016-07-21 16:13:10 +00:00
Luke-Jr
76e29be5e0 Merge pull request #420 from laanwj/2016_07_bip141_blockmaxweight
bip141: Change 'block cost' to 'block weight'
2016-07-21 16:06:51 +00:00
Luke Dashjr
c98859fe20 Promote Draft->Final BIPs: 68, 112, and 113
Softforks are deployed by miners and enforced on the network
2016-07-18 23:37:42 +00:00
Luke-Jr
fdf2772ce8 Merge pull request #421 from Sjors/patch-1
BIP 39: remove "public beta" from blockchain.info link
2016-07-18 23:22:44 +00:00
Sjors Provoost
34be169fe3 BIP 39: remove "public beta" from blockchain.info link
This is now in the default wallet.
2016-07-18 20:43:23 +02:00
jl2012
55c3d8068a BIP141 terms fix 2016-07-19 00:15:38 +08:00
Luke Dashjr
a53cf50b52 Merge remote-tracking branch 'origin-pull/336/head' 2016-07-18 15:29:09 +00:00
Wladimir J. van der Laan
83596de8ca bip141: Change 'block cost' to 'block weight'
The term 'block cost' led to confusion about the unit that it is
expressed in, in that it expressed monetary cost. Change it to a more
general term 'block weight'.

This was discussed in the [2016-07-14 Bitcoin Core developer meeting](http://www.erisian.com.au/meetbot/bitcoin-core-dev/2016/bitcoin-core-dev.2016-07-14-19.00.html).
2016-07-18 08:17:00 +02:00
Sandro Machado
e00a157306 Add Swift Library 2016-07-18 00:37:10 +01:00
Luke-Jr
ab32c2a845 Merge pull request #358 from bushidowallet/tech-wiki-change
Proposed a new Java implementation link
2016-07-16 00:37:45 +00:00
Luke-Jr
f42ca5953b Merge pull request #399 from jl2012/patch-22
BIP141 script failure clarifications
2016-07-16 00:00:31 +00:00
Luke Dashjr
f275a5549b Merge remote-tracking branch 'origin-pull/335/head' 2016-07-15 15:44:54 +00:00
Luke-Jr
0884f727a8 Merge pull request #308 from dcousens/patch-2
Add BIP21 Javascript library
2016-07-15 15:37:20 +00:00
Luke-Jr
2c84b48778 Merge pull request #325 from afk11/323-fix-typo
Typo in change to BIP50
2016-07-15 15:36:59 +00:00
Luke-Jr
98b7976928 Merge pull request #418 from jonasschnelli/2016/07/bip151_hkdf
[BIP151] Switch from plain HMAC_SHA512 KDF to HKDF
2016-07-15 15:01:19 +00:00
Luke-Jr
c0796a30d3 Merge pull request #417 from dcousens/patch-1
bip141: clarify that marker is 1 byte
2016-07-15 15:00:49 +00:00
Luke Dashjr
6394087857 Merge BIP 126: Best Practices for Heterogeneous Input Script Transactions 2016-07-15 14:54:15 +00:00
Luke Dashjr
f5a708d434 Update README for BIP 126 2016-07-15 14:53:44 +00:00
Jonas Schnelli
529c7cddb7
[BIP151] Switch from plain HMAC_SHA512 KDF to HKDF 2016-07-13 13:18:52 +02:00
Daniel Cousens
9c7fde09aa bip141: clarify that marker is 1 byte 2016-07-12 12:15:35 +10:00
Wladimir J. van der Laan
5ddea46bce Merge pull request #400 from mappum/update-bip9-assignments
Update BIP9 assignments list
2016-07-11 12:48:47 +02:00
Kristov Atlas
da43de2dba Merge pull request #4 from dcousens/patch-1
BIP126: Grammar fix and review
2016-07-06 20:46:38 -04:00
Matt David
cd9d2d37b5 Merge remote-tracking branch 'upstream/master'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2016-07-06 14:08:55 -07:00
Luke-Jr
ad2af69d3c Merge pull request #415 from jl2012/bip68_113_coinbase
BIP68/113 for generation transaction
2016-07-06 01:02:49 +00:00
jl2012
8d40b6ef02 BIP68/113 for generation transaction 2016-07-06 01:53:05 +08:00
Matt Bell
95947c5d77 Added CSV mainnet activation to BIP9 assignments list 2016-07-05 09:43:34 -07:00
Luke-Jr
e36b6d5634 Merge pull request #414 from btcdrak/patch-8
BIP 152: Link to permanent PR of reference implementation
2016-06-30 17:03:14 +00:00
฿tcDrak
ecfb7ebbca Link to permanent PR of reference implementation 2016-06-28 22:42:20 +01:00
Kristov Atlas
f048678277 Merge pull request #5 from justusranvier/bip126
revise wording of alternate HIT procedure
2016-06-27 15:04:31 -04:00
Luke-Jr
eab92a156e Merge pull request #411 from jl2012/bip112_114_fix
BIP112/114 example fix
2016-06-24 12:36:50 +00:00
jl2012
7478ee3260 BIP112/114 example fix 2016-06-24 01:59:25 +08:00
Justus Ranvier
b33ca0c97b
revise wording of alternate HIT procedure 2016-06-23 09:52:16 -05:00
Daniel Cousens
f51a8e1d0e further grammar, not An Hit 2016-06-23 13:42:03 +10:00
Daniel Cousens
05e96d2500 grammar fix 2016-06-23 13:30:24 +10:00
Luke-Jr
ae70f3ec69 Merge pull request #409 from NicolasDorier/master
header message can also get replied by getdata (CMPCT_BLOCK)
2016-06-23 03:13:34 +00:00
Kristov Atlas
cd3bd0b037 Merge pull request #3 from justusranvier/bip126
BIP-126: Best Practices for Heterogeneous Input Script Transactions
2016-06-22 19:47:29 -04:00
Justus Ranvier
9ab38e9c10
BIP-126: Best Practices for Heterogeneous Input Script Transactions
When a Bitcoin transaction contains inputs that reference previous transaction outputs sent to different Bitcoin addresses, personally identifiable information of the user will leak into the blockchain in an uncontrolled manner. While undesirable, these transactions are frequently unavoidable due the natural
fragmentation of wallet balances over time.

This standard proposes a set of best practice guidelines which minimize the uncontrolled disclosure of personally identifiable information by defining standard forms for transactions containing heterogenous input scripts.
2016-06-22 18:43:56 -05:00
Luke-Jr
29963a81ec Merge pull request #408 from jl2012/patch-25
Clarify BIP9 threshold
2016-06-21 02:52:24 +00:00
NicolasDorier
c81272d9f3 header message can also get replied by getdata (CMPCT_BLOCK) 2016-06-19 23:35:08 +02:00
Johnson Lau
5e6dc77d6b Clarify BIP9 threshold
The threshold for should be ≥2016 for mainnet, ≥1512 for testnet.
https://github.com/bitcoin/bitcoin/blob/v0.12.1/src/versionbits.cpp#L69
https://github.com/bitcoin/bitcoin/blob/v0.12.1/src/chainparams.cpp#L84
https://github.com/bitcoin/bitcoin/blob/v0.12.1/src/chainparams.cpp#L177
2016-06-20 01:47:03 +08:00
Luke-Jr
02d408656f Merge pull request #307 from dcousens/patch-1
add BIP39 javascript library
2016-06-17 18:08:24 +00:00
Daniel Cousens
c65874246a Add BIP21 Javascript library 2016-06-17 12:52:34 +10:00
Luke-Jr
97dbb89013 Merge pull request #406 from TheBlueMatt/master
Allow block responses to MSG_CMPCT_BLOCK requests
2016-06-17 00:48:32 +00:00
Matt Corallo
c32b2a7c70 Allow block responses to MSG_CMPCT_BLOCK requests 2016-06-16 17:43:49 -07:00
Luke-Jr
1454837768 Merge pull request #405 from jl2012/patch-24
BIP143: typo fix
2016-06-14 16:37:01 +00:00
Johnson Lau
fbfcdd4ce3 BIP143: typo fix 2016-06-14 23:43:40 +08:00
Daniel Weigl
babd604cc4 minor cleanups 2016-06-14 14:54:41 +02:00
Daniel Weigl
b1e7db5376 new bip proposal "Derivation scheme for P2WPKH-nested-in-P2SH based accounts" 2016-06-14 14:49:09 +02:00
Luke-Jr
3e606c4c99 Merge pull request #404 from jl2012/patch-23
BIP143: private key for example
2016-06-13 17:54:35 +00:00
Johnson Lau
a5f03bbccc BIP143: private key for example 2016-06-13 20:53:08 +08:00
Matt David
66e2d91754 - Removing bolding on next word "header" 2016-06-10 15:09:31 -07:00
Matt David
73b2e134d1 - Fix bulleting for mimetypes 2016-06-10 15:08:19 -07:00
Matt David
3e89e8b947 Remove whitespace causing empty grey boxes 2016-06-10 13:58:02 -07:00
Matt David
faec02cd97 Removing Justin and adding Frank as co-author 2016-06-10 12:49:03 -07:00
Matt David
61674ca008 Add links for RFCs 2016-06-10 09:51:29 -07:00
Matt David
a62ba93990 Add links for RFCs 2016-06-10 09:50:39 -07:00
Matt David
8905c7436d Cleanup Response titles and bold HTTP response codes 2016-06-10 09:48:53 -07:00
Matt David
fd249cb305 Initial Commit of http-address-service BIP draft 2016-06-10 09:47:06 -07:00
Johnson Lau
7304edc475 BIP141: clarify size restriction for witness stack 2016-06-10 13:14:25 +08:00
Luke-Jr
f207ecfada Merge pull request #403 from jl2012/bip143examples2
BIP143: Corrections and examples for OP_CODESEPERATOR
2016-06-09 19:55:02 +00:00
jl2012
0f0a39ccee BIP143: Corrections and examples for OP_CODESEPERATOR 2016-06-10 01:06:56 +08:00
Luke-Jr
7b9a44b092 Merge pull request #401 from jl2012/bip143examples
More examples for BIP143
2016-06-08 21:15:05 +00:00
jl2012
b8125c6684 More examples for BIP143 2016-06-09 04:54:41 +08:00
Matt Bell
cb2952c05e Updated segwit testnet state in BIP9 assignments list 2016-06-08 01:42:46 -07:00
Matt Bell
08c068ed0b Fixed CSV testnet state in BIP9 assignments list 2016-06-08 01:41:53 -07:00
Luke-Jr
c08a24c254 Merge pull request #397 from sipa/clarifymath
Elaborate hash function design in BIP152
2016-06-07 22:28:23 +00:00
Luke-Jr
fedc881598 Merge pull request #395 from chriswheeler/fix-link
Fix typo on link to assignments
2016-06-07 16:16:36 +00:00
Pieter Wuille
e26eadc3ca More small changes 2016-06-07 15:52:03 +02:00
Johnson Lau
d34877f482 BIP141 script failure clarifications
Footnotes to clarify some special conditions which witness scripts will fail
2016-06-07 01:34:19 +08:00
Luke-Jr
a57a7c62f4 Merge pull request #398 from jl2012/patch-20
BIP141: extend max witness program size to 40 bytes
2016-06-04 19:24:08 +00:00
Johnson Lau
d1b52cb198 BIP141: extend max witness program size to 40 bytes
The maximum witness program size is increased from 32 to 40 bytes. This provides extra space to specify script version (for originally 16 upgradable versions to up to 16 * 2 ^ 64)
2016-06-04 20:58:39 +08:00
Pieter Wuille
cfdd9574be Small fixes 2016-06-04 14:58:04 +02:00
Pieter Wuille
f2e10ba7b2 Eloborate hash function design in BIP152 2016-06-04 01:56:39 +02:00
Luke-Jr
c917abe394 Merge pull request #365 from luke-jr/segwit_gbt_updates_20160330
BIP 141 and 145: GBT updates for SegWit
2016-06-01 17:57:05 +00:00
Chris Wheeler
3dc43c84b1 Fix typo on link to assignments 2016-06-01 17:54:45 +01:00
Luke-Jr
55ecc6fd38 Merge pull request #386 from btcdrak/bip9assign
Add BIP9 assignments
2016-05-31 18:08:56 +00:00
Luke Dashjr
8324bc512e Merge branch 'master' into segwit_gbt_updates_20160330 2016-05-31 14:55:53 +00:00
Luke Dashjr
ed0f8da4ad BIP 22 & 145: Use simple Yes/No rather than templates (which don't work on GitHub) 2016-05-31 14:54:54 +00:00
Luke-Jr
a01584f6eb Merge pull request #391 from luke-jr/vb_gbt
BIP 9: GBT updates for versionbits
2016-05-31 14:50:42 +00:00
Luke-Jr
38bd8cfec6 Merge pull request #393 from TheBlueMatt/master
Update to new BIP 152 Protocol Flow
2016-05-24 05:22:55 +00:00
Matt Corallo
9d89d2b778 Update to new BIP 152 Protocol Flow 2016-05-23 22:06:34 -07:00
Luke-Jr
b484c27c5c Merge pull request #392 from TheBlueMatt/master
Replace my generic bip@ email with bip-specific emails everywhere
2016-05-23 10:31:57 +00:00
Luke-Jr
4c61338ccb Merge pull request #389 from TheBlueMatt/152
BIP 152: Compact Block Relay
2016-05-23 10:30:36 +00:00
Matt Corallo
7ae81736cf Replace my generic bip@ email with bip-specific emails everywhere 2016-05-22 18:23:15 -07:00
Matt Corallo
20a842244b Add compact-block bip 2016-05-22 18:21:32 -07:00
Luke Dashjr
a95b8f8796 bip-0009: Remove n/a paragraph 2016-05-22 10:48:51 +00:00
Luke Dashjr
949bb13c1d Replace "rules/force" mutation with a "cannot be ignored" prefix to rule names 2016-05-22 10:48:45 +00:00
Luke Dashjr
d28a720f2a BIP 9: rules/force mutation 2016-05-22 10:48:21 +00:00
Luke Dashjr
074909a173 BIP 9: Clarify GBT "version" 2016-05-22 10:48:00 +00:00
Luke Dashjr
baacb0c645 BIP 9: Use simple Yes/No rather than templates (which don't work on GitHub) 2016-05-22 10:47:50 +00:00
Luke Dashjr
adbf64c626 BIP 9: Switch to rules/vbavailable/vbrequired GBT interface 2016-05-22 10:46:54 +00:00
Luke Dashjr
c7a31304e7 bip-0009: Recommend name "bipN" 2016-05-22 10:46:33 +00:00
Luke Dashjr
4c124a8c5d BIP 9: GBT specification 2016-05-22 10:46:22 +00:00
Luke Dashjr
4e9591d8c7 BIP 9: Add softfork deployment "name" 2016-05-22 10:46:04 +00:00
Luke Dashjr
b8907db950 BIP 9: Clarify nVersion interpretation and bit order 2016-05-22 10:45:53 +00:00
Luke-Jr
ad9fc9ccea Merge pull request #385 from techguy613/master
BIP75 Simplification and Enhancements
2016-05-19 18:51:45 +00:00
Luke-Jr
9a995e6879 Merge pull request #388 from stevenroose/patch-2
Error in BIP0009 code example
2016-05-18 22:47:14 +00:00
Luke-Jr
f65541bf26 Merge pull request #362 from jonasschnelli/2016/03/auth_enc
BIP 151: Peer-to-Peer Communication Encryption
2016-05-18 19:37:53 +00:00
Jonas Schnelli
62a8209268
Add BIP151, Peer-to-Peer Communication Encryption 2016-05-18 21:36:58 +02:00
Steven Roose
580db15907 Less visible error 2016-05-17 02:06:18 +02:00
Luke Dashjr
ce426ab4e1 Merge remote-tracking branch 'origin/master' into segwit_gbt_updates_20160330 2016-05-15 21:31:29 +00:00
Steven Roose
1a3613622b Error in BIP0009 code 2016-05-14 14:22:56 +02:00
Steven Roose
f71727f1c3 BIP0009 code syntax fix 2016-05-14 14:21:46 +02:00
Luke Dashjr
5e6f3ba3be bip-0009: Remove n/a paragraph 2016-05-11 21:54:09 +00:00
Matt David
40d4246d3d - Remove libsecp256k1 reference 2016-05-11 12:59:02 -07:00
Matt David
e1d74be3b6 - Update ECDH output to use SHA512 instead of SHA256
- Specify HMAC_DRBG security strength
2016-05-11 11:19:30 -07:00
Luke Dashjr
162e2e0025 Replace "rules/force" mutation with a "cannot be ignored" prefix to rule names 2016-05-11 17:45:08 +00:00
Luke-Jr
0bbe045104 Merge pull request #381 from dooglus/patch-3
Update bip-0112.mediawiki
2016-05-10 20:24:01 +00:00
Matt David
3cf25a7594 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	bip-0075.mediawiki
2016-05-09 09:07:42 -07:00
BtcDrak
6313ee0f3b Add sorting 2016-05-07 22:41:49 +01:00
BtcDrak
b56f7d7b6d Add BIP9 assignments 2016-05-07 07:45:01 +01:00
Luke-Jr
32f7724149 Merge pull request #384 from jl2012/patch-19
BIP141: BIP9 parameters for testnet
2016-05-07 03:29:21 +00:00
Johnson Lau
797a4167b8 BIP141: BIP9 parameters for testnet 2016-05-06 07:23:43 +02:00
Luke-Jr
aa5531d831 Merge pull request #378 from jl2012/patch-18
BIP141 clarifications and formatting
2016-05-01 18:11:02 +00:00
Luke-Jr
c3e5f1411f Merge pull request #382 from dooglus/patch-4
Update bip-0068.mediawiki
2016-05-01 18:10:25 +00:00
Chris Moore
56cd35957f Update bip-0068.mediawiki
Fix typo.
2016-04-30 22:28:52 -07:00
Chris Moore
bffcc0c29a Update bip-0112.mediawiki
CHECKLOCKTIMEVERIFY is absolute (not relative) isn't it?
2016-04-30 22:19:43 -07:00
Luke-Jr
7b30c3d63e Merge pull request #380 from achow101/master
Update BIP 144 'havewitness' to service bit
2016-04-29 04:54:56 +00:00
Matt David
a90bd90c3c Merge pull request #17 from jmacwhyte/master
Updated S&F suggestions, some other tweaks and typos.
2016-04-28 16:55:06 -07:00
jmacwhyte
f8f05f0ac9 Updated S&F suggestions, some other tweaks and typos. 2016-04-28 16:47:37 -07:00
Matt David
a79432ac99 - Spacing
- Recommit mistakently deleted encrypted invoicerequest flow diagram
2016-04-28 16:39:16 -07:00
Andrew Chow
dde47fc973 Update to NODE_WITNESS service bit 2016-04-28 17:47:36 -04:00
Matt David
057591da8c Fix spacing again and pull IV size down to 12 bytes in accord with NIST 800-38D 2016-04-27 10:01:03 -07:00
Matt David
dcbbc871dc - Fix spacing 2016-04-27 09:54:43 -07:00
Matt David
1e6e914ca7 - Fix spacing 2016-04-27 09:54:06 -07:00
Matt David
7d9e11dbcb - Add information about the use of GCM Authentication tag
- Add requirement of additional authenticated data in the case that either status_code and/or status_message are in use
2016-04-27 09:52:22 -07:00
Matt David
b5517bab86 Add more linebreaks 2016-04-26 18:53:05 -07:00
Matt David
32d9f9d266 Adding linebreaks and fixing some bad links 2016-04-26 18:51:54 -07:00
Matt David
c2a73346a3 - Fix straggling EncryptedPaymentRequest reference 2016-04-26 18:14:14 -07:00
Matt David
6c9625e832 - Fix formatting + fix/add links
- Update images
2016-04-26 18:12:29 -07:00
Matt David
8bb63058fd - Reset bip-0070/extensions.mediawiki to the original BIP70 contents
- Remove status_code and status_message from individual Payment Protocol messages
- Remove EncryptedInvoiceRequest, EncryptedPaymentRequest, EncryptedPayment and EncryptedPaymentACK messages from protobuf definition file
- Add ProtocolMessageType enum and ProtocolMessageType and EncryptedProtocolMesssage messages to bip-0075/paymentrequest.proto definition file
- Update BIP75 text to remove old individual message encryption paths and include new encapsulating messages for self-contained PaymentProtocol communication (including errors) over various transport layers
- Add initial list of status codes
- Update BIP75 to use AES-256-GCM and remove message hash as GCM mode provides authenticated encryption
- Update ECDH calculation to use SHA256 hash of ECDH's X point instead of the raw X point itself
2016-04-26 15:23:12 -07:00
Johnson Lau
ab4f511c5c BIP141 clarifications and formatting
Add rationale of block cost
Change the name of "witness nonce" to "witness reserved value"
Update link to reference implementation
Formatting
2016-04-26 18:13:40 +08:00
Luke-Jr
6015939b3b Merge pull request #377 from OpenBitcoinPrivacyProject/bip47
BIP-0047: version 2 payment codes
2016-04-26 00:00:18 +00:00
Kristov Atlas
1d45d84db6 Merge pull request #2 from justusranvier/bip47
BIP-47: version 2 payment codes
2016-04-25 19:05:44 -04:00
Luke Dashjr
cc4a94c1c0 BIP 9 & 145: rules/force mutation 2016-04-25 00:18:39 +00:00
Luke Dashjr
3cfa48d1e0 BIP 9: Clarify GBT "version" 2016-04-23 21:13:02 +00:00
Luke Dashjr
31c45b611d BIP 9, 22 & 145: Use simple Yes/No rather than templates (which don't work on GitHub) 2016-04-23 20:34:29 +00:00
Luke Dashjr
2e5533849e Merge remote-tracking branch 'personal-github/segwit_gbt_updates_20160330' into segwit_gbt_updates_20160330 2016-04-23 20:20:53 +00:00
Luke Dashjr
4683a9b714 BIP 9 (& 145): Switch to rules/vbavailable/vbrequired GBT interface 2016-04-23 20:20:13 +00:00
Luke Dashjr
7e99bbf958 bip-0009: Recommend name "bipN" 2016-04-23 20:12:41 +00:00
Luke Dashjr
5f697ea543 Merge branch 'master' into segwit_gbt_updates_20160330 2016-04-23 20:02:53 +00:00
Luke-Jr
cf51071ccd Merge pull request #376 from jl2012/bip141p2sh
BIP141: Add P2SH-P2WPKH example and clarify block cost
2016-04-23 20:02:00 +00:00
jl2012
f245646f8b BIP141: Block cost clrification 2016-04-23 16:25:53 +02:00
jl2012
43c34e846b Add P2SH-P2WPKH example 2016-04-23 08:26:48 +02:00
Luke-Jr
cd1932a67a Merge pull request #375 from voisine/patch-4
fix BIP141 nested P2SH scriptSig byte representation
2016-04-23 03:33:13 +00:00
Aaron Voisine
d72c1bfc71 Update bip-0141.mediawiki
The byte representation of "<0 <32-byte-hash>>" is "0x220020{32-byte-hash}"

What was listed here would be the byte representation of "0 <32-byte-hash>". The text explains that there is only one item in scriptSig, so I'm guessing the byte representation is wrong. Also the corrected byte representation would produce the same sig/pubkey described in P2WSH after following the bip16 rules.
2016-04-22 08:44:29 -07:00
Luke-Jr
932d0750f2 Merge pull request #374 from kanzure/bip143-signaturehash
BIP143: Explicitly mention the SignatureHash function
2016-04-20 19:41:40 +00:00
Luke-Jr
a80fbaf619 Merge pull request #373 from kanzure/bip143-typofix
BIP143: fix typo ("including")
2016-04-20 19:41:23 +00:00
Luke-Jr
5160fc71be Merge pull request #372 from jl2012/patch-16
BIP143 clarifying semantics of ACP|SINGLE
2016-04-20 19:40:42 +00:00
Bryan Bishop
a488367502 BIP143: explicitly mention the SignatureHash function
The purpose of BIP143 is to propose an updated SignatureHash function
but "sighash" only appears near the end buried in the text. By
explicitly mentioning the SignatureHash function, readers can more
readily understand the context of the proposal.
2016-04-20 12:45:48 -05:00
Johnson Lau
c1ef3a05e3 BIP143 clarifying semantics of ACP|SINGLE 2016-04-21 01:39:30 +08:00
Bryan Bishop
4cb4534fd9 BIP143: fix typo ("including") 2016-04-20 12:29:44 -05:00
Justus Ranvier
283aa14f77
add version 2 section for bloom filter-based notifications 2016-04-19 13:08:38 -05:00
Justus Ranvier
37a35b5565
add recommended handling for notification tx change outputs 2016-04-19 13:03:13 -05:00
Justus Ranvier
8b11b61981
explain the usage of versions with regards to payment code behavior 2016-04-19 13:01:55 -05:00
Luke-Jr
5d0b400823 Merge pull request #371 from justusranvier/bip47
BIP-0047: Clarify usage and format of outpoints
2016-04-17 22:17:57 +00:00
Justus Ranvier
97dafa75b3
BIP-0047: Clarify usage and format of outpoints
Introduce the terms 'designated input' and 'designated pubkey' for clarity

Update reference link for outpoint to a more canonical source
2016-04-17 09:52:53 -05:00
Luke-Jr
3ff0772bb2 Merge pull request #369 from instagibbs/bip114clar
Some clarification on path meaning and structure
2016-04-14 10:38:10 +00:00
Luke-Jr
6026a0b599 Merge pull request #370 from jl2012/bip114ref
BIP114: Clarifying reference implementation
2016-04-14 10:37:53 +00:00
jl2012
3ef07340b4 BIP114: Clarifying reference implementation 2016-04-14 00:43:16 +08:00
instagibbs
58409dd0e8 Some clarification on path meaning and structure 2016-04-13 11:48:20 -04:00
Luke Dashjr
6c71b46623 Merge BIP 114: Merkelized Abstract Syntax Tree 2016-04-12 20:20:35 +00:00
Luke Dashjr
952ba4ad16 Assign BIP 114: Merkelized Abstract Syntax Tree 2016-04-12 20:20:06 +00:00
Luke-Jr
2b478b5f0a Merge pull request #367 from jl2012/bip141commitment
BIP141: commitment clarification. BIP144: new diagram
2016-04-08 22:03:25 +00:00
jl2012
ee744caca9 BIP141: commitment clarification. BIP144: new diagram 2016-04-09 03:13:37 +08:00
Luke-Jr
5bf411856e Merge pull request #1 from jl2012/patch-13
BIP141: Sigop clarification
2016-04-05 07:36:24 +00:00
Johnson Lau
a6cc319846 Update bip-0141.mediawiki 2016-04-05 13:03:34 +08:00
jl2012
735a556129 Create BIP MAST 2016-04-02 01:06:35 +08:00
Luke-Jr
4cdb00287d Merge pull request #366 from btcdrak/patch-7
Clarify what remains "to be decided"
2016-03-31 19:23:30 +00:00
฿tcDrak
9c0d407b10 Clarify what remains "to be decided" 2016-03-31 15:39:33 +01:00
Johnson Lau
cacf39b057 BIP141: Sigop clarification 2016-03-31 14:22:36 +08:00
Luke Dashjr
2fa7fb9b5c BIP 141: Specify VB name 2016-03-30 22:47:40 +00:00
Luke Dashjr
161b39fa68 BIP 145: Update for BIP 9 2016-03-30 22:47:40 +00:00
Luke Dashjr
12a2131bb4 BIP 9: GBT specification 2016-03-30 22:46:18 +00:00
Luke Dashjr
b0b65ceede BIP 9: Add softfork deployment "name" 2016-03-30 22:46:18 +00:00
Luke Dashjr
b8467dfb7c BIP 9: Clarify nVersion interpretation and bit order 2016-03-30 22:46:18 +00:00
Luke Dashjr
a5447e0c4b BIP 141 & 145: Clarify sigop interaction 2016-03-30 22:46:18 +00:00
Matt David
8bf7d90d20 - Update HTTPS to be TLS-protected HTTP
- Add Updated Messages section to describe the status_code and status_message
- Separated Message and Communication Errors into Payment Protocol Errors and Communication Errors
- Add first draft Payment Protocol error codes
- Update InvoiceRequest Message Creation description amount example to return Payment Protocol error in the case of an issue with the amount.
2016-03-29 15:49:49 -07:00
Luke-Jr
ba16f16742 Merge pull request #364 from jl2012/patch-13
BIP143: Provide private key used in the example
2016-03-28 21:24:30 +00:00
Luke-Jr
51319e55c6 Merge pull request #363 from CodeShark/bip141_edits
Witness validation logic trigger clarifications
2016-03-28 21:24:18 +00:00
Luke-Jr
f8c439a704 Merge pull request #360 from luke-jr/bip0002_deferred
Defer BIP 2
2016-03-28 21:23:35 +00:00
Johnson Lau
cb81c9ab5f BIP143: Provide private key used in the example 2016-03-29 01:19:50 +08:00
Eric Lombrozo
ee7b3ab4c0 Witness validation logic trigger clarifications 2016-03-25 01:35:01 -04:00
Luke-Jr
4650545169 Merge pull request #361 from btcdrak/patch-5
Remove deployment section
2016-03-21 17:23:05 +00:00
฿tcDrak
932d75e24f Remove deployment section.
Now we know we will use BIP9 version bits, remove references to ISM() and leave TDB
as was done with BIP68,112 and 113.
2016-03-21 10:09:58 +00:00
Luke Dashjr
2fd1811331 Defer BIP 2 2016-03-18 20:03:56 +00:00
Luke-Jr
f5c136057b Merge pull request #359 from btcdrak/cvsdeploy
Set deployment schedule for BIP 68,112,113
2016-03-18 19:20:00 +00:00
BtcDrak
63660c0fb7 Set deployment schedule for BIP 68,112,113 2016-03-17 21:18:17 +00:00
Robert Jesionek
9ce2c4d351 Update bip-0032.mediawiki
Added a new Java implementation.
2016-03-17 18:12:15 +01:00
Luke Dashjr
24de1f450e Merge BIP 75 2016-03-17 05:23:41 +00:00
Luke Dashjr
19845126ec Put BIP 75 in the right place in README, and clean up formatting a bit 2016-03-17 05:21:40 +00:00
Matt David
9d86a41747 Merge remote-tracking branch 'origin/master' 2016-03-16 22:07:44 -07:00
Matt David
e8c9f67005 Update BIP header to pass TravisCI 2016-03-16 22:03:49 -07:00
Matt David
4c045c8801 Merge remote-tracking branch 'upstream/master' 2016-03-16 22:00:17 -07:00
Matt David
43ea7bf4a6 Merge pull request #16 from jmacwhyte/proofread
Removed BIP70 extensions
2016-03-16 17:04:06 -07:00
jmacwhyte
9a5ba6688c Removed BIP70 extensions 2016-03-15 18:04:48 -07:00
Matt David
1f203ea5ca Merge pull request #15 from FinalHash/master
Format Comment To Match Previous Style
2016-03-11 16:22:32 -08:00
Matt David
d1e1c7c000 Merge pull request #14 from jonathancross/patch-2
Formatting improvements to BIP-75
2016-03-11 14:47:43 -08:00
Marshall Long
05740a7dbe Format Comment
Format comment to fit style of previous comments
2016-03-11 15:01:25 -05:00
Jonathan Cross
481f322d44 Formatting improvements to BIP-75
* Fixing a few extra closing `b` tags and converting others to wiki bold syntax.
 * Linking "see below" and "see above" items to the actual section of the BIP.
 * Consistent capitalization of "Bitcoin".
 * "requester" => "requester* (more common outside of legal writing)
 * "concious" => "conscious"
 * "Foward" => "Forward"
 * "Satoshis" => "satoshis" (as unit of bitcoin, not the name of creator)
 * Removing unnecessary </img> which can actually cause problems.
 * Adding required `alt` attribute to img tags.
 * Fix wrapping of long lines (some were wrapped at 112 chars) - No effect on final rendering users see.
2016-03-11 19:23:22 +01:00
Matt David
a8c0246295 - Update optional flags to PaymentDetails definition in paymentrequest.proto
- Add DER encoding requirement for EC public keys and ECC signatures
- Add SHA-256 hashing requirement for ECC signatures
- Add FIPS 180-4 SHS link
2016-03-09 18:57:48 -08:00
Matt David
de42024b1a Merge pull request #13 from jmacwhyte/proofread
Extended BIP70 fields, added BIP number
2016-03-09 18:32:59 -08:00
jmacwhyte
dddcb735f8 Extended BIP70 fields, added BIP number 2016-03-09 18:25:02 -08:00
Matt David
f753dd7372 - Add subtract_fee and replace_by_fee flags to PaymentDetails. replace_by_fee is commented out as it's only available in version 2 of the message 2016-03-08 09:43:17 -08:00
Matt David
1b96cf1e78 - Update PaymentDetails index
- Added bolding to replace_by_fee
2016-03-07 18:59:24 -08:00
Matt David
d8ec771caf Merge pull request #12 from jmacwhyte/proofread
Renamed to BIP75, added extensions to BIP70 payment details
2016-03-07 18:52:13 -08:00
jmacwhyte
c0c7d7f0a1 Renamed to BIP75, added extensions to BIP70 payment details 2016-03-07 18:18:58 -08:00
Matt David
df01620ebc Update bip-invoicerequest-extension.mediawiki 2016-03-01 10:50:50 -08:00
Matt David
efa3605fbe Update bip-invoicerequest-extension.mediawiki 2016-03-01 10:49:24 -08:00
Matt David
1fc921c872 - Update motivation for the open standards in the list for optional identity sharing 2016-02-24 09:09:29 -08:00
Sjors Provoost
de90683130 BIP 39: prettier formatting of implementation list 2016-02-23 11:24:29 +08:00
Matt David
ca0f07cfa7 - Add qualifier that nonce MUST be chosen by the encryptor.
- Also, fix ** used for bold and replace with <b></b>
2016-02-22 13:47:49 -08:00
Matt David
8dffb2e58a Merge pull request #10 from jmacwhyte/proofread
Made public keys required, updated steps
2016-02-22 13:46:00 -08:00
jmacwhyte
27bfd6165f Made public keys required, updated steps 2016-02-22 13:09:06 -08:00
Matt David
10e6f46569 - Make message public key sharing mandatory for messages that are encrypted and where both keys are known. For EncryptedInvoiceRequest, only the sender_public_key is required
- Add nonce to EncryptedPaymentRequest, EncryptedPayment and EncryptedPaymentACK
- Update ECDH instruction to allow for the current message instead of an InvoiceRequest to contain the nonce
- Updated paymentrequest.proto with BIP definition changes
2016-02-22 12:04:54 -08:00
Sjors Provoost
717228b8fd BIP 39: link BitcoinJS & blockchain.info implementation
BIP 39 mnemonics are featured quite prominently in the UI as well.
2016-02-22 15:25:53 +08:00
Matt David
6a08dae8c4 Merge pull request #9 from jmacwhyte/proofread
Reworked message definitions, other details
2016-02-21 22:06:47 -08:00
jmacwhyte
198188b924 Improved message definitions, etc. 2016-02-21 21:31:16 -08:00
Matt David
52b6cde023 - Fix Signature note formatting
- Change No EncryptedPayment Required title
- Fix BIP70 link format in References
2016-02-21 14:06:03 -08:00
Matt David
8e8c9778e9 - Add memo to InvoiceRequest message
- Add ephemeral_public_key and requires_payment_message fields to EncryptedPaymentRequest + updated descriptions
- Update EncryptedPayment and EncryptedPaymentACK message descriptions to use ECDH-derived key for signature instead of each side's public key
- Slim down message content-types
- Add EncryptedPayment and EncryptedPaymentACK creation detail steps
- Add updated paymentrequest.proto to bip-ir/ directory
- Add additional flow diagrams for various mobile-to-mobile / Store & Forward scenarios
2016-02-21 14:00:02 -08:00
Matt David
481844e49b Merge pull request #8 from jmacwhyte/master
Encrypted payment messages, other tweaks
2016-02-19 10:12:22 -08:00
jmacwhyte
b01c6b7089 Added EncryptedPayment and ACK, other readability and consistency fixes 2016-02-18 17:47:48 -08:00
Matt David
0c3d6d15ae Include grammar fixes from Dawn 2016-02-17 16:11:59 -08:00
Matt David
7a92454e54 Merge branch 'encrypted-invoicerequest' 2016-02-16 15:26:30 -08:00
Matt David
e675fe9bdd Merge pull request #6 from justinwnewton/patch-4
Update to add 3rd motivation
2016-02-16 15:25:29 -08:00
Matt David
17dfa4149e Merge pull request #7 from justinwnewton/patch-5
Request Matt to update use case 3
2016-02-16 15:25:05 -08:00
Matt David
101718fc6a - Move Definitions section up
- Seperate Process sections into regular and encrypted InvoiceRequest processes and flow diagrams
2016-02-16 15:22:18 -08:00
Sandro Machado
7509fae0be Update bip-0021.mediawiki 2016-02-16 22:18:45 +00:00
Justin Newton
f41e886f25 Request Matt to update use case 3
Asking matt to update use case 3 to include other mods made for store and forward servers.
2016-02-16 13:41:56 -08:00
Justin Newton
79cc9bdaa6 Update to add 3rd motivation
Adding allow for store and forward servers as a way to server payment protocol
2016-02-16 13:19:16 -08:00
Matt David
c7fd6ddb2e Merge pull request #4 from justinwnewton/patch-2
editied Abstract
2016-02-16 10:57:38 -08:00
Matt David
e4a7582c98 Merge pull request #5 from justinwnewton/patch-3
changed justin's email back to @netkic.om
2016-02-16 10:57:10 -08:00
Matt David
d9bf987b99 Add indents for point 2 of the Motivation section 2016-02-16 10:56:08 -08:00
Justin Newton
4e6ff9f149 changed justin's email back to @netkic.om
changed Justin's email back to @netki.com
2016-02-16 10:52:47 -08:00
Justin Newton
961c51c3b2 editied Abstract
added "the identity of" to the first bullet of the abstract.
2016-02-16 10:51:40 -08:00
Matt David
e0bd3b599a - Fixed typos and added a bit more explanation for the Wallet Name public key retrieval example 2016-02-15 17:35:23 -08:00
Matt David
db2bf02180 - Updated Mobile-to-Mobile image to visually include Payment and PaymentACK messages with Store & Forward server 2016-02-15 17:29:33 -08:00
Matt David
62d19677c8 - Add encrypted invoicerequest requirement
- Change ReturnPaymentRequest message name to EncryptedPaymentRequest
- Add Payment Request (with Store & Forward server) use-case documentation
- Add initial public key retrieval ideas
2016-02-15 17:19:37 -08:00
Matt David
7ae2624bb3 - Update e-mail addresses for Justin and Matt
- Add 2 new use cases and add Wallet Name to the Address Book section of optional ways to add entries to an address book
2016-02-10 09:43:21 -08:00
Thomas Kerin
9bb5acaec7
Typo 2016-02-09 18:52:38 +00:00
Matt David
06c3c1b488 Merge pull request #3 from jmacwhyte/proofread
Added example use case.
2016-02-02 10:24:08 -08:00
jmacwhyte
a715f2cdb1 Added example use case. 2016-02-01 19:36:45 -08:00
Daniel Cousens
32bde7b58d add BIP39 javascript library 2016-01-29 11:13:17 +11:00
Matt David
88898c2f87 Fix Implementation section spacing 2016-01-20 13:19:25 -08:00
Matt David
8c78781cf0 - Remove Acronyms section
- Update InvoiceRequest notification_url definition to use SHOULD instead of MAY
- Capitalize MUST, SHOULD, etc.
- Update InvoiceRequest Message Creation steps to specifically define behavior for empty amount or amount out of bounds
- Add implementation section with references to Addressimo reference Store & Forward server and a client implementation in functest_ir.py
- Add flow diagrams for BIP70 extension and moble-to-mobile example with store and forward service
2016-01-20 13:16:22 -08:00
Matt David
32e82105cb Merge pull request #2 from jmacwhyte/proofread
added some details, fix typo
2016-01-12 09:13:27 -08:00
jmacwhyte
a81b43b49b added some details, fix typo 2016-01-11 15:22:06 -08:00
Matt David
0c93de978e Fix bullet in motivation 2016-01-11 11:07:18 -08:00
Matt David
6c537eb0a7 Fix bullet in motivation 2016-01-11 11:06:47 -08:00
Matt David
5ec3d52181 Updating abstract and motivation with changes made by the Netki team 2016-01-11 11:05:26 -08:00
Matt David
58754bd493 - Fix typos in abstract and "motiviation" 2016-01-07 14:24:48 -08:00
Matt David
385287b395 - Adding James to the author list 2016-01-07 13:53:51 -08:00
Matt David
67470e0817 - Update motivation to include auditability
- Update InvoiceRequest to include nonce
- Remove ephemeral_public_key from ReturnPaymentRequest
- Update message validation and nonce usage in processes
2016-01-07 11:37:09 -08:00
Matt David
583a64cf3d Merge pull request #1 from voisine/patch-3
use same email for voisine as in other BIPs
2015-12-07 11:45:09 -08:00
Aaron Voisine
d14e205477 use same email for voisine as in other BIPs 2015-12-07 09:42:25 -08:00
Matt David
b2db2eba41 - Add flow overview image
- Make Abstract more readable
- Update Sender definition and acronym descriptions
- Added comments to ReturnPaymentRequest definition
- Bold ECDH and AES Setup notes and added "(see below)" for reference
2015-12-04 15:16:32 -08:00
Matt David
e71e57216b - Fix section levels
- Add Message Interaction Details + new mimetypes
2015-12-04 13:26:50 -08:00
Matt David
845f24069b Fix last links 2015-12-04 11:40:43 -08:00
Matt David
c91ec76f41 Remove anchors 2015-12-04 11:33:06 -08:00
Matt David
2d9b626d6c Test anchor 2015-12-04 11:31:38 -08:00
Matt David
61cfbaefa7 Remove anchor template and use spans for anchors instead 2015-12-04 11:29:44 -08:00
Matt David
543409c7f7 Fix local anchors and links 2015-12-04 11:26:32 -08:00
Matt David
2c8bc2392b Updated BIP based on colleague feedback
- Removed Requestor/Responder definitions
- Seperated ECDH secret point generation and AES-256 (CBC Mode) setup from individual steps (listed twice) and created it's own section
- Added InvoiceRequest Validation section
2015-12-04 11:10:01 -08:00
Matt David
a876e47bd1 Fix mediawiki table formatting 2015-12-03 17:32:01 -08:00
Matt David
d698201463 Fix mediawiki table formatting 2015-12-03 17:31:09 -08:00
Matt David
4e3b9a5b06 Fix mediawiki table formatting 2015-12-03 17:30:04 -08:00
Matt David
94c23ddffd Initial version of invoicerequest extension BIP 2015-12-03 17:24:29 -08:00
505 changed files with 93872 additions and 1306 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.mediawiki linguist-detectable

View File

@ -0,0 +1,31 @@
name: GitHub Actions Check
run-name: ${{ github.actor }} Checks 🚀
on: [push, pull_request]
jobs:
Link-Format-Checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: scripts/link-format-chk.sh
Build-Table-Checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: scripts/buildtable.pl >/tmp/table.mediawiki || exit 1
Diff-Checks:
name: "Diff Checks (fails until number assignment)"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 2
- run: scripts/diffcheck.sh
Typo-Checks:
name: "Typo Checks"
runs-on: ubuntu-latest
steps:
- name: Checkout Actions Repository
uses: actions/checkout@v5
- name: Check spelling
uses: crate-ci/typos@master

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
bip-0174/coinjoin-workflow.aux
bip-0174/coinjoin-workflow.log
bip-0174/coinjoin-workflow.pdf
bip-0174/multisig-workflow.aux
bip-0174/multisig-workflow.log
bip-0174/multisig-workflow.pdf

View File

@ -1,7 +0,0 @@
os: linux
language: generic
sudo: false
script:
- scripts/buildtable.pl >/tmp/table.mediawiki || exit 1
- diff README.mediawiki /tmp/table.mediawiki | grep '^[<>] |' >/tmp/after.diff || true
- if git checkout HEAD^ && scripts/buildtable.pl >/tmp/table.mediawiki 2>/dev/null; then diff README.mediawiki /tmp/table.mediawiki | grep '^[<>] |' >/tmp/before.diff || true; newdiff=$(diff -s /tmp/before.diff /tmp/after.diff -u | grep '^+'); if [ -n "$newdiff" ]; then echo "$newdiff"; exit 1; fi; else echo 'Cannot build previous commit table for comparison'; fi

44
.typos.toml Normal file
View File

@ -0,0 +1,44 @@
[default]
extend-ignore-re = [
# NOTE: use here for regex patterns
"xpub.*",
"xprv.*",
"3.*", # address
"5.*", # address
"private_key .*",
"privkey .*",
"tt.*", # <tt> tags
"code.*", # <code> tags
"\\w*<sub>", # prefix for <sub> tags
"OP_SUCCESSx|\\d+",
"pay.*",
"ser.*",
"prefix.*",
"value: .*",
"pqNTRUsign",
"Strnad",
]
[default.extend-words]
# NOTE: use here for false-positives
anc = "anc"
PSBT = "PSBT"
ser = "ser"
# Names
Atack = "Atack"
Falke = "Falke"
Meni = "Meni"
Ono = "Ono"
Toom = "Toom"
[files]
extend-exclude = [
"/*/*.csv",
"/*/*.d*",
"/*/*.go",
"/*/*.json",
"/*/*/*.json",
"/*/*/*/*/*/*.o",
"/*/*/*/*/*/*/*/*.o",
"/*/*.t*",
]

12
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,12 @@
# Contributing Guidelines
## Typos
Among other tasks, the CI verifies that changes do not contain common typos.
This check is done using [`typos`](https://github.com/crate-ci/typos).
To run this task locally, install [`typos`](https://github.com/crate-ci/typos)
and then run in the root directory:
```bash
typos
```

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,11 @@
<pre>
BIP: 1
Title: BIP Purpose and Guidelines
Author: Amir Taaki <genjix@riseup.net>
Status: Active
Authors: Amir Taaki <genjix@riseup.net>
Status: Closed
Type: Process
Created: 2011-08-19
Assigned: 2011-09-19
Proposed-Replacement: 2
</pre>
==What is a BIP?==
@ -20,7 +21,7 @@ Because the BIPs are maintained as text files in a versioned repository, their r
There are three kinds of BIP:
* A Standards Track BIP describes any change that affects most or all Bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Bitcoin.
* An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. Informational BIPs do not necessarily represent a Bitcoin community consensus or recommendation, so users and implementors are free to ignore Informational BIPs or follow their advice.
* An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. Informational BIPs do not necessarily represent a Bitcoin community consensus or recommendation, so users and implementers are free to ignore Informational BIPs or follow their advice.
* A Process BIP describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Process BIPs are like Standards Track BIPs but apply to areas other than the Bitcoin protocol itself. They may propose an implementation, but not to Bitcoin's codebase; they often require community consensus; unlike Informational BIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in Bitcoin development. Any meta-BIP is also considered a Process BIP.
==BIP Work Flow==
@ -35,7 +36,7 @@ BIP authors are responsible for collecting community feedback on both the initia
It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. If in doubt, split your BIP into several well-focused ones.
The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#BIP_Editors|BIP Editors]] below. Also see [[#BIP_Editor_Responsibilities__Workflow|BIP Editor Responsibilities & Workflow]]. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad.
The BIP editors assign BIP numbers and change their status. Please send all BIP-related email to the BIP editor, which is listed under [[#bip-editors|BIP Editors]] below. Also see [[#bip-editor-responsibilities--workflow|BIP Editor Responsibilities & Workflow]]. The BIP editor reserves the right to reject BIP proposals if they appear too unfocused or too broad.
Authors MUST NOT self assign BIP numbers, but should use an alias such as "bip-johndoe-infinitebitcoins" which includes the author's name/nick and the BIP subject.
@ -176,6 +177,9 @@ This document was derived heavily from Python's PEP-0001. In many places text wa
==Changelog==
10 Oct 2015 - Added clarifications about submission process and BIP number assignment.
01 Jan 2016 - Clarified early stages of BIP idea championing, collecting community feedback, etc.
* 2016-12-14:
** Closed: [https://github.com/bitcoin/bips/pull/478 Superseded by BIP2]
* 2016-01-01:
** Clarified early stages of BIP idea championing, collecting community feedback, etc.
* 2015-10-10:
** Added clarifications about submission process and BIP number assignment.

View File

@ -1,31 +1,205 @@
<pre>
BIP: 2
Title: BIP Status and Comments
Author: Luke Dashjr <luke+bip@dashjr.org>
Status: Draft
Title: BIP process, revised
Authors: Luke Dashjr <luke+bip@dashjr.org>
Status: Closed
Type: Process
Created: 2016-02-03
Assigned: 2016-02-03
License: BSD-2-Clause OR OPUBL-1.0
Replaces: 1
Proposed-Replacement: 3
</pre>
==Abstract==
This BIP describes objective criteria that can be used to determine when a BIP Status should be changed, to ensure it is a reliable metric documenting actual usage of the proposal. It also adds a way for final comment on completed BIPs, by adding to them a reference to a wiki page and summary of the tone thereof. Finally, it extends the list of allowable BIP licenses to include many more popular options.
A Bitcoin Improvement Proposal (BIP) is a design document providing information to the Bitcoin community, or describing a new feature for Bitcoin or its processes or environment. The BIP should provide a concise technical specification of the feature and a rationale for the feature.
We intend BIPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Bitcoin. The BIP author is responsible for building consensus within the community and documenting dissenting opinions.
Because the BIPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal.
This particular BIP replaces BIP 1 with a more well-defined and clear process.
==Copyright==
This BIP is dual-licensed under the Open Publication License and BSD 2-clause license.
==BIP workflow==
The BIP process begins with a new idea for Bitcoin. Each potential BIP must have a champion -- someone who writes the BIP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around the idea. The BIP champion (a.k.a. Author) should first attempt to ascertain whether the idea is BIP-able.
Small enhancements or patches to a particular piece of software often don't require standardisation between multiple projects; these don't need a BIP and should be injected into the relevant project-specific development workflow with a patch submission to the applicable issue tracker.
Additionally, many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons.
The first step should be to search past discussions to see if an idea has been considered before, and if so, what issues arose in its progression.
After investigating past work, the best way to proceed is by posting about the new idea to the [https://groups.google.com/g/bitcoindev Bitcoin development mailing list].
Vetting an idea publicly before going as far as writing a BIP is meant to save both the potential author and the wider community time.
Asking the Bitcoin community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick).
It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Bitcoin is used.
Once the champion has asked the Bitcoin community as to whether an idea has any chance of acceptance, a draft BIP should be presented to the [https://groups.google.com/g/bitcoindev Bitcoin development mailing list].
This gives the author a chance to flesh out the draft BIP to make it properly formatted, of high quality, and to address additional concerns about the proposal.
Following a discussion, the proposal should be submitted to the [https://github.com/bitcoin/bips BIPs git repository] as a pull request.
This draft must be written in BIP style as described below, and named with an alias such as "bip-johndoe-infinitebitcoins" until an editor has assigned it a BIP number (authors MUST NOT self-assign BIP numbers).
BIP authors are responsible for collecting community feedback on both the initial idea and the BIP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the BIP author accept private comments in the early design phases, setting up a wiki page or git repository, etc. BIP authors should use their discretion here.
It is highly recommended that a single BIP contain a single key proposal or new idea. The more focused the BIP, the more successful it tends to be. If in doubt, split your BIP into several well-focused ones.
When the BIP draft is complete, a BIP editor will assign the BIP a number, label it as Standards Track, Informational, or Process, and merge the pull request to the BIPs git repository.
The BIP editors will not unreasonably reject a BIP.
Reasons for rejecting BIPs include duplication of effort, disregard for formatting rules, being too unfocused or too broad, being technically unsound, not providing proper motivation or addressing backwards compatibility, or not in keeping with the Bitcoin philosophy.
For a BIP to be accepted it must meet certain minimum criteria.
It must be a clear and complete description of the proposed enhancement.
The enhancement must represent a net improvement.
The proposed implementation, if applicable, must be solid and must not complicate the protocol unduly.
The BIP author may update the draft as necessary in the git repository. Updates to drafts should also be submitted by the author as pull requests.
===Transferring BIP Ownership===
It occasionally becomes necessary to transfer ownership of BIPs to a new champion. In general, we'd like to retain the original author as a co-author of the transferred BIP, but that's really up to the original author. A good reason to transfer ownership is because the original author no longer has the time or interest in updating it or following through with the BIP process, or has fallen off the face of the 'net (i.e. is unreachable or not responding to email). A bad reason to transfer ownership is because you don't agree with the direction of the BIP. We try to build consensus around a BIP, but if that's not possible, you can always submit a competing BIP.
If you are interested in assuming ownership of a BIP, send a message asking to take over, addressed to both the original author and the BIP editors. If the original author doesn't respond to email in a timely manner, the BIP editors will make a unilateral decision (it's not like such decisions can't be reversed :).
===BIP Editors===
The current BIP editors are:
* Bryan Bishop ([[mailto:kanzure@gmail.com|kanzure@gmail.com]])
* Jon Atack ([[mailto:jon@atack.com|jon@atack.com]])
* Luke Dashjr ([[mailto:luke_bipeditor@dashjr.org|luke_bipeditor@dashjr.org]])
* Mark "Murch" Erhardt ([[mailto:murch@murch.one|murch@murch.one]])
* Olaoluwa Osuntokun ([[mailto:laolu32@gmail.com|laolu32@gmail.com]])
* Ruben Somsen ([[mailto:rsomsen@gmail.com|rsomsen@gmail.com]])
===BIP Editor Responsibilities & Workflow===
The BIP editors subscribe to the Bitcoin development mailing list.
Off-list BIP-related correspondence should be sent (or CC'd) to the BIP editors.
For each new BIP that comes in an editor does the following:
* Read the BIP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted.
* The title should accurately describe the content.
* The BIP draft must have been sent to the Bitcoin development mailing list for discussion.
* Motivation and backward compatibility (when applicable) must be addressed.
* The defined Layer header must be correctly assigned for the given specification.
* Licensing terms must be acceptable for BIPs.
If the BIP isn't ready, the editor will send it back to the author for revision, with specific instructions.
Once the BIP is ready for the repository it should be submitted as a "pull request" to the [https://github.com/bitcoin/bips BIPs git repository] where it may get further feedback.
The BIP editor will:
* Assign a BIP number in the pull request.
* Merge the pull request when it is ready.
* List the BIP in [[README.mediawiki]]
The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and update BIP headers as appropriate.
BIP editors may also, at their option, unilaterally make and merge strictly-editorial changes to BIPs, such as correcting misspellings, fixing broken links, etc.
==BIP format and structure==
===Specification===
BIPs should be written in mediawiki or markdown format.
Each BIP should have the following parts:
* Preamble -- Headers containing metadata about the BIP ([[#bip-header-preamble|see below]]).
* Abstract -- A short (~200 word) description of the technical issue being addressed.
* Copyright -- The BIP must be explicitly licensed under acceptable copyright terms ([[#bip-licensing|see below]]).
* Specification -- The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Bitcoin platforms.
* Motivation -- The motivation is critical for BIPs that want to change the Bitcoin protocol. It should clearly explain why the existing protocol is inadequate to address the problem that the BIP solves.
* Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work. The rationale should provide evidence of consensus within the community and discuss important objections or concerns raised during discussion.
* Backwards compatibility -- All BIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The BIP must explain how the author proposes to deal with these incompatibilities.
* Reference implementation -- The reference implementation must be completed before any BIP is given status "Final", but it need not be completed before the BIP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. The final implementation must include test code and documentation appropriate for the Bitcoin protocol.
====BIP header preamble====
Each BIP must begin with an RFC 822 style header preamble. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required.
<pre>
BIP: <BIP number, or "?" before being assigned>
* Layer: <Consensus (soft fork) | Consensus (hard fork) | Peer Services | API/RPC | Applications>
Title: <BIP title; maximum 44 characters>
Author: <list of authors' real names and email addrs>
* Discussions-To: <email address>
* Comments-Summary: <summary tone>
Comments-URI: <links to wiki page for comments>
Status: <Draft | Active | Proposed | Deferred | Rejected |
Withdrawn | Final | Replaced | Obsolete>
Type: <Standards Track | Informational | Process>
Created: <date created on, in ISO 8601 (yyyy-mm-dd) format>
License: <abbreviation for approved license(s)>
* License-Code: <abbreviation for code under different approved license(s)>
* Post-History: <dates of postings to bitcoin mailing list, or link to thread in mailing list archive>
* Requires: <BIP number(s)>
* Replaces: <BIP number>
* Superseded-By: <BIP number>
</pre>
The Layer header (only for Standards Track BIPs) documents which layer of Bitcoin the BIP applies to.
See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123.
The Author header lists the names and email addresses of all the authors/owners of the BIP.
The format of the Author header value must be
Random J. User <address@dom.ain>
If there are multiple authors, each should be on a separate line following RFC 2822 continuation line conventions.
While a BIP is in private discussions (usually during the initial Draft phase), a Discussions-To header will indicate the mailing list or URL where the BIP is being discussed. No Discussions-To header is necessary if the BIP is being discussed privately with the author, or on the bitcoin email mailing lists.
The Type header specifies the type of BIP: Standards Track, Informational, or Process.
The Created header records the date that the BIP was assigned a number, while Post-History is used to record when new versions of the BIP are posted to bitcoin mailing lists.
Dates should be in yyyy-mm-dd format, e.g. 2001-08-14.
Post-History is permitted to be a link to a specific thread in a mailing list archive.
BIPs may have a Requires header, indicating the BIP numbers that this BIP depends on.
BIPs may also have a Superseded-By header indicating that a BIP has been rendered obsolete by a later document; the value is the number of the BIP that replaces the current document. The newer BIP must have a Replaces header containing the number of the BIP that it rendered obsolete.
====Auxiliary Files====
BIPs may include auxiliary files such as diagrams. Auxiliary files should be included in a subdirectory for that BIP, or must be named BIP-XXXX-Y.ext, where "XXXX" is the BIP number, "Y" is a serial number (starting at 1), and "ext" is replaced by the actual file extension (e.g. "png").
==BIP types==
There are three kinds of BIP:
* A Standards Track BIP describes any change that affects most or all Bitcoin implementations, such as a change to the network protocol, a change in block or transaction validity rules, or any change or addition that affects the interoperability of applications using Bitcoin. Standards Track BIPs consist of two parts, a design document and a reference implementation.
* An Informational BIP describes a Bitcoin design issue, or provides general guidelines or information to the Bitcoin community, but does not propose a new feature. Informational BIPs do not necessarily represent a Bitcoin community consensus or recommendation, so users and implementers are free to ignore Informational BIPs or follow their advice.
* A Process BIP describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Process BIPs are like Standards Track BIPs but apply to areas other than the Bitcoin protocol itself. They may propose an implementation, but not to Bitcoin's codebase; they often require community consensus; unlike Informational BIPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and changes to the tools or environment used in Bitcoin development. Any meta-BIP is also considered a Process BIP.
==BIP status field==
===Specification===
The typical paths of the status of BIPs are as follows:
<img src="bip-0002/process.png"></img>
Champions of a BIP may decide on their own to change the status between Draft, Deferred, or Withdrawn.
A BIP editor may also change the status to Deferred when no progress is being made on the BIP.
A BIP may only change status from Draft (or Rejected) to Accepted, when the author deems it is complete, has a working implementation (where applicable), and has community plans to progress it to the Final status.
A BIP may only change status from Draft (or Rejected) to Proposed, when the author deems it is complete, has a working implementation (where applicable), and has community plans to progress it to the Final status.
BIPs should be changed from Draft or Accepted status, to Rejected status, upon request by any person, if they have not made progress in three years. Such a BIP may be changed to Draft status if the champion provides revisions that meaningfully address public criticism of the proposal, or to Accepted status if it meets the criteria required as described in the previous paragraph.
BIPs should be changed from Draft or Proposed status, to Rejected status, upon request by any person, if they have not made progress in three years. Such a BIP may be changed to Draft status if the champion provides revisions that meaningfully address public criticism of the proposal, or to Proposed status if it meets the criteria required as described in the previous paragraph.
An Accepted BIP may progress to Final only when specific criteria reflecting real-world adoption has occurred. This is different for each BIP depending on the nature of its proposed changes, which will be expanded on below. Evaluation of this status change should be objectively verifiable, and/or be discussed on the development mailing list.
A Proposed BIP may progress to Final only when specific criteria reflecting real-world adoption has occurred. This is different for each BIP depending on the nature of its proposed changes, which will be expanded on below. Evaluation of this status change should be objectively verifiable, and/or be discussed on the development mailing list.
When a Final BIP is no longer relevant, its status may be changed to Replaced or Obsolete (which is equivalent to Replaced). This change must also be objectively verifiable and/or discussed.
@ -33,8 +207,6 @@ A process BIP may change status from Draft to Active when it achieves rough cons
====Progression to Final status====
See [[bip-0123.mediawiki|BIP 123]] for definitions of the various BIP layers. Activation of this BIP implies activation of BIP 123.
A soft-fork BIP strictly requires a clear miner majority expressed by blockchain voting (eg, using BIP 9). In addition, if the economy seems willing to make a "no confidence" hard-fork (such as a change in proof-of-work algorithm), the soft-fork does not become Final for as long as such a hard-fork might have majority support, or at most three months. Soft-fork BIPs may also set additional requirements for their adoption. Because of the possibility of changes to miner dynamics, especially in light of delegated voting (mining pools), it is highly recommended that a supermajority vote around 95% be required by the BIP itself, unless rationale is given for a lower threshold.
A hard-fork BIP requires adoption from the entire Bitcoin economy, particularly including those selling desirable goods and services in exchange for bitcoin payments, as well as Bitcoin holders who wish to spend or would spend their bitcoins (including selling for other currencies) differently in the event of such a hard-fork. Adoption must be expressed by de facto usage of the hard-fork in practice (ie, not merely expressing public support, although that is a good step to establish agreement before adoption of the BIP). This economic adoption cannot be established merely by a super-majority, except by literally forcing the minority to accept the hard-fork (whether this is viable or not is outside the scope of this document).
@ -43,7 +215,7 @@ Peer services BIPs should be observed to be adopted by at least 1% of public lis
API/RPC and application layer BIPs must be implemented by at least two independent and compatible software applications.
Software authors are encouraged to publish summaries of what BIPs their software supports to aid in verification of status changes. Good examples of this at the time of writing this BIP, can be observed in [https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md Bitcoin Core's doc/bips.md file] as well as [https://github.com/schildbach/bitcoin-wallet/blob/master/wallet/README.specs Bitcoin Wallet for Android's wallet/README.specs file].
Software authors are encouraged to publish summaries of what BIPs their software supports to aid in verification of status changes. Good examples of this at the time of writing this BIP, can be observed in [https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md Bitcoin Core's doc/bips.md file] as well as [https://github.com/bitcoin-wallet/bitcoin-wallet/blob/master/wallet/README.specs.md Bitcoin Wallet for Android's wallet/README.specs.md file].
These criteria are considered objective ways to observe the de facto adoption of the BIP, and are not to be used as reasons to oppose or reject a BIP. Should a BIP become actually and unambiguously adopted despite not meeting the criteria outlined here, it should still be updated to Final status.
@ -51,7 +223,7 @@ These criteria are considered objective ways to observe the de facto adoption of
Why is this necessary at all?
* BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. As a result, many BIPs with significant real-world use have been left as Draft or Accepted status longer than appropriate. By giving objective criteria to judge the progression of BIPs, this proposal aims to help keep the Status accurate and up-to-date.
* BIP 1 defines an ambiguous criteria for the Status field of BIPs, which is often a source of confusion. As a result, many BIPs with significant real-world use have been left as Draft or Proposed status longer than appropriate. By giving objective criteria to judge the progression of BIPs, this proposal aims to help keep the Status accurate and up-to-date.
How is the entire Bitcoin economy defined by people selling goods/services and holders?
@ -75,7 +247,7 @@ What if a single merchant wishes to block a hard-fork?
How about a small number of merchants (maybe only two) who sell products to each other?
* In this scenario, it would seem the previous Bitcoin is alive any working, and that the hard-fork has failed. How to resolve such a split is outside the scope of this BIP.
* In this scenario, it would seem the previous Bitcoin is alive and working, and that the hard-fork has failed. How to resolve such a split is outside the scope of this BIP.
How can economic agreement veto a soft-fork?
@ -102,18 +274,25 @@ What if a BIP is proposed that only makes sense for a single specific project?
===Specification===
Each BIP should, in its preamble, link to a Bitcoin Wiki page with a summary tone of the comments on that page.
Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page in [https://www.mediawiki.org/wiki/Help:Talk_pages#Editing_conventions_on_talk_pages standard "Talk page" format].
Each BIP should, in its preamble, link to a public wiki page with a summary tone of the comments on that page.
Reviewers of the BIP who consider themselves qualified, should post their own comments on this wiki page.
The comments page should generally only be used to post final comments for a completed BIP.
If a BIP is not yet completed, reviewers should instead post on the applicable development mailing list thread to allow the BIP author(s) to address any concerns or problems pointed out by the review.
Some BIPs receive exposure outside the development community prior to completion, and other BIPs might not be completed at all. To avoid a situation where critical BIP reviews may go unnoticed during this period, reviewers may, at their option, still post their review on the comments page, provided they first post it to the mailing list and plan to later remove or revise it as applicable based on the completed version. Such revisions should be made by editing the previous review and updating the timestamp. Reviews made prior to the complete version may be removed if they are no longer applicable and have not been updated in a timely manner (eg, within one month).
Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "BIP Comments" namespace. For example, the link for BIP 1 will be https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001 .
Pages must be named after the full BIP number (eg, "BIP 0001") and placed in the "Comments" namespace.
For example, the link for BIP 1 will be https://github.com/bitcoin/bips/wiki/Comments:BIP-0001 .
In order to avoid possible abuse of Bitcoin Wiki moderation, BIPs may choose to list a second forum for BIP comments, in addition to the Bitcoin Wiki. In this case, the second forum's URI should be listed below the Bitcoin Wiki's URI.
Comments posted to this wiki should use the following format:
Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances:
<Your opinion> --<Your name>, <Date of posting, as YYYY-MM-DD>
BIPs may also choose to list a second forum for BIP comments, in addition to the BIPs wiki.
In this case, the second forum's URI should be listed below the primary wiki's URI.
After some time, the BIP itself may be updated with a summary tone of the comments.
Summary tones may be chosen from the following, but this BIP does not intend to cover all possible nuances and other summaries may be used as needed:
* No comments yet.
* Unanimously Recommended for implementation
@ -124,7 +303,7 @@ Summary tones may be chosen from the following, but this BIP does not intend to
For example, the preamble to BIP 1 might be updated to include the line:
Comments-Summary: No comments yet.
Comments-URI: https://en.bitcoin.it/wiki/BIP_Comments:BIP_0001
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0001
https://some-other-wiki.org/BIP_1_Comments
These fields must follow the "Discussions-To" header defined in BIP 1 (if that header is not present, it should follow the position where it would be present; generally this is immediately above the Status header).
@ -139,14 +318,13 @@ What is the purpose of BIP comments?
Will BIP comments be censored or limited to particular participants/"experts"?
* The Bitcoin Wiki moderators have control over that venue and may make reasonable moderation attempts. Admitted non-experts should refrain from commenting outside of their area of knowledge. However, comments should not be censored, and participation should be open to the public.
* If the Bitcoin Wiki were to abuse its position, the venue for comments can always be changed.
* Participants should freely refrain from commenting outside of their area of knowledge or expertise. However, comments should not be censored, and participation should be open to the public.
==BIP licensing==
===Specification===
New BIPs may be accepted with the following licenses. Each new BIP must identify at least one acceptable license in its preamble. The License header in the preamble must be placed after the Created header. Each license must be referenced by their respecitve abbreviation given below.
New BIPs may be accepted with the following licenses. Each new BIP must identify at least one acceptable license in its preamble. The License header in the preamble must be placed after the Created header. Each license must be referenced by their respective abbreviation given below.
For example, a preamble might include the following License header:
@ -155,7 +333,7 @@ For example, a preamble might include the following License header:
In this case, the BIP text is fully licensed under both the OSI-approved BSD 2-clause license as well as the GNU All-Permissive License, and anyone may modify and redistribute the text provided they comply with the terms of *either* license. In other words, the license list is an "OR choice", not an "AND also" requirement.
It is also possible to license source code differently from the BIP text. A optional License-Code header is placed after the License header. Again, each license must be referenced by their respective abbreviation given below.
It is also possible to license source code differently from the BIP text. An optional License-Code header is placed after the License header. Again, each license must be referenced by their respective abbreviation given below.
For example, a preamble specifying the optional License-Code header might look like:
@ -172,39 +350,47 @@ For a later version (eg, GPL 3.0), you would increase the version number (and re
License-Code: GPL-3.0 # This refers to GPL v3.0 *only*, no later license versions are acceptable.
License-Code: GPL-3.0+ # This refers to GPL v3.0 *or later*.
In the event that the text or code is not available under common license terms, the list should instead be replaced with the single term "Complex", and full details provided in the Copyright section of the BIP.
In the event that the licensing for the text or code is too complicated to express with a simple list of alternatives, the list should instead be replaced with the single term "Complex". In all cases, details of the licensing terms must be provided in the Copyright section of the BIP.
BIPs are not required to be *exclusively* licensed under approved terms, and may also be licensed under unacceptable licenses *in addition to* at least one acceptable license.
In this case, only the acceptable license(s) should be listed in the License and License-Code headers.
====Recommended licenses====
* BSD-2-Clause: [https://opensource.org/licenses/BSD-2-Clause OSI-approved BSD 2-clause license]
* BSD-3-Clause: [https://opensource.org/licenses/BSD-3-Clause OSI-approved BSD 3-clause license]
* BSD-2-Clause: [https://opensource.org/license/BSD-2-Clause OSI-approved BSD 2-clause license]
* BSD-3-Clause: [https://opensource.org/license/BSD-3-Clause OSI-approved BSD 3-clause license]
* CC0-1.0: [https://creativecommons.org/publicdomain/zero/1.0/ Creative Commons CC0 1.0 Universal]
* GNU-All-Permissive: [http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html GNU All-Permissive License]
* FSFAP: [https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html FSF All Permissive License]
In addition, it is recommended that literal code included in the BIP be dual-licensed under the same license terms as the project it modifies. For example, literal code intended for Bitcoin Core would ideally be dual-licensed under the MIT license terms as well as one of the above with the rest of the BIP text.
====Not recommended, but acceptable licenses====
* Apache-2.0: [http://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0]
* BSL-1.0: [http://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0]
* Apache-2.0: [https://www.apache.org/licenses/LICENSE-2.0 Apache License, version 2.0]
* BSL-1.0: [https://www.boost.org/LICENSE_1_0.txt Boost Software License, version 1.0]
* CC-BY-4.0: [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution 4.0 International]
* CC-BY-SA-4.0: [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International]
* MIT: [https://opensource.org/licenses/MIT Expat/MIT/X11 license]
* AGPL-3.0+: [http://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer]
* FDL-1.3: [http://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License, version 1.3]
* GPL-2.0+: [http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer]
* LGPL-2.1+: [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer]
* OPL: [http://opencontent.org/openpub/ Open Publication License, version 1.0]
* MIT: [https://opensource.org/license/MIT The MIT License]
* AGPL-3.0+: [https://www.gnu.org/licenses/agpl-3.0.en.html GNU Affero General Public License (AGPL), version 3 or newer]
* FDL-1.3: [https://www.gnu.org/licenses/fdl-1.3.en.html GNU Free Documentation License, version 1.3]
* GPL-2.0+: [https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL), version 2 or newer]
* LGPL-2.1+: [https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html GNU Lesser General Public License (LGPL), version 2.1 or newer]
Additionally, PD is used to express that the work is placed in the public domain.
This may not be used for new BIPs, and is only defined for use by BIPs predating acceptance of this BIP.
====Not acceptable licenses====
All licenses not explicitly included in the above lists are not acceptable terms for a Bitcoin Improvement Proposal unless a later BIP extends this one to add them.
However, BIPs predating the acceptance of this BIP were allowed under other terms, and should use these abbreviation when no other license is granted:
* OPUBL-1.0: [https://opencontent.org/openpub/ Open Publication License, version 1.0]
* PD: Released into the public domain
===Rationale===
BIP 1 allowed the Open Publication License or releasing into the public domain; was this insufficient?
* The OPL is generally regarded as obsolete, and not a license suitable for new publications.
* Many are unfamiliar with the OPL terms, and may just prefer to use the public domain rather than license under uncertain terms.
* The OPUBL-1.0 is generally regarded as obsolete, and not a license suitable for new publications.
* Many are unfamiliar with the OPUBL-1.0 terms, and may just prefer to use the public domain rather than license under uncertain terms.
* The OPUBL-1.0 license terms allowed for the author to prevent publication and derived works, which was widely considered inappropriate for Bitcoin standards.
* Public domain is not universally recognised as a legitimate action, thus it is inadvisable.
Why are there software licenses included?
@ -216,6 +402,19 @@ Why is Public Domain no longer acceptable for new BIPs?
* In some jurisdictions, public domain is not recognised as a legitimate legal action, leaving the BIP simply copyrighted with no redistribution or modification allowed at all.
==Changes from BIP 1==
* Acceptable licenses are entirely rechosen, allowing a wide variety of open licenses, while prohibiting the problematic older choices.
* Accepted Status has been renamed to Proposed.
* An implementation is now required (when applicable) before BIPs can proceed to Proposed Status.
* BIP Comments are newly introduced.
* The License preamble headers have been added.
* The Layer header is included from BIP 123.
* Non-image auxiliary files are permitted in the bip-XXXX subdirectory.
* Email addresses are now required for authors.
* The Post-History header may be provided as a link instead of a simple date.
* The Resolution header has been dropped, as it is not applicable to a decentralised system where no authority exists to make final decisions.
==See Also==
* [[bip-0001.mediawiki|BIP 1: BIP Purpose and Guidelines]]

BIN
bip-0002/process.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

53
bip-0002/process.svg Normal file
View File

@ -0,0 +1,53 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 206" width="720" height="206">
<defs>
<style type="text/css"><![CDATA[
rect {
fill: white;
stroke: black;
stroke-width: 1;
}
text {
fill: black;
}
svg>path {
stroke: black;
stroke-width: 2;
fill: none;
marker-end: url(#arrow);
}
]]></style>
<marker id="arrow" markerWidth="13" markerHeight="13" refX="8" refY="6" orient="auto">
<path d="M0,2 L0,11 L8,6 L0,2" style="fill: black;" />
</marker>
</defs>
<rect x="8" y="8" width="128" height="32"/>
<text x="72" y="32" font-size="20" text-anchor="middle">Draft</text>
<path d="M136,24 L200,24"/>
<rect x="200" y="8" width="128" height="32"/>
<text x="264" y="32" font-size="20" text-anchor="middle">Proposed</text>
<path d="M328,24 L392,24"/>
<rect x="392" y="8" width="128" height="32"/>
<text x="456" y="32" font-size="20" text-anchor="middle">Final/Active</text>
<path d="M456,40 L456,80"/>
<rect x="392" y="80" width="128" height="32"/>
<text x="456" y="104" font-size="20" text-anchor="middle">Replaced</text>
<path d="M120,40 L120,72 L200,72"/>
<rect x="200" y="56" width="128" height="32"/>
<text x="264" y="80" font-size="20" text-anchor="middle">Rejected</text>
<path d="M328,32 L360,32 L360,72 L328,72" stroke-dasharray="4, 2"/>
<path d="M88,40 L88,120 L200,120"/>
<rect x="200" y="104" width="128" height="32"/>
<text x="264" y="128" font-size="20" text-anchor="middle">Withdrawn</text>
<path d="M24,40 L24,166"/>
<rect x="8" y="166" width="128" height="32"/>
<text x="72" y="190" font-size="20" text-anchor="middle">Deferred</text>
<path d="M56,166 L56,40"/>
<path d="M520,24 L584,24"/>
<rect x="584" y="8" width="128" height="32"/>
<text x="648" y="32" font-size="20" text-anchor="middle">Obsolete</text>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

802
bip-0003.md Normal file
View File

@ -0,0 +1,802 @@
```
BIP: 3
Title: Updated BIP Process
Authors: Murch <murch@murch.one>
Status: Deployed
Type: Process
Assigned: 2025-01-09
License: BSD-2-Clause
Discussion: https://github.com/murchandamus/bips/pull/2
https://gnusha.org/pi/bitcoindev/59fa94cea6f70e02b1ce0da07ae230670730171c.camel@timruffing.de/#t
Version: 1.4.0
Requires: 123
Replaces: 2
```
## Abstract
This _Bitcoin Improvement Proposal (BIP)_ provides information about the preparation of BIPs and policies relating to
the publication of BIPs. It replaces [BIP2](bip-0002.mediawiki) with a streamlined process, and may be amended to
address the evolving needs of the BIP process.
## Motivation
BIP2 was written in 2016.
This BIP revisits aspects of the BIP2 process
that did not achieve broad adoption, reduces the judgment calls assigned to the BIP Editor role, delineates the
BIPtypes more clearly, and generalizes the BIP process to fit the communitys use of the repository.
## Fundamentals
### What is a BIP?
BIPs are improvement proposals for Bitcoin. The main topic is information and technologies that support and expand the utility of the Bitcoin
currency. Most BIPs provide a concise, self-contained, technical description of one new concept, feature, or standard.
Some BIPs describe processes, implementation guidelines, best practices, incident reports (e.g.,
[BIP50](bip-0050.mediawiki)), or other information relevant to the Bitcoin community. However, any topics related to
the Bitcoin protocol, peer-to-peer network, and client software may be acceptable.
BIPs are intended to be a means for proposing new protocol features, coordinating client standards, and
documenting design decisions that have gone into implementations. BIPs may be submitted by anyone, provided the
content is of high quality, e.g., does not waste the communitys time.
The scope of the BIPs
repository is limited to BIPs that do not oppose the fundamental principle that Bitcoin constitutes a peer-to-peer
electronic cash system for the Bitcoin currency.
### BIP Ownership
Each BIP is primarily owned by its authors and represents the authors opinion or recommendation. The authors are
expected to foster discussion, address feedback and dissenting opinions, and, if applicable, advance the adoption of
their proposal within the Bitcoin community. As a BIP progresses through the workflow, it becomes increasingly
co-owned by the Bitcoin community.
#### Authors and Deputies
Authors may want additional help with the BIP process after writing an initial draft. In that case, they may assign
one or more Deputies to their BIP. Deputies are stand-in owners of a BIP who were not involved in writing the
document. They support the authors in advancing the proposal, or act as a point of contact for the BIP in the absence of the
authors. Deputies may perform the role of Authors for any aspect of the BIP process unless overruled by an Author.
Deputies share ownership of the BIP at the discretion of the Authors.
### What is the Significance of BIPs?
BIPs do not define what Bitcoin is: individual BIPs do not represent Bitcoin community consensus or a general
recommendation for implementation. A BIP represents a personal recommendation by the BIP authors to the Bitcoin
community. Some BIPs may never be adopted. Some BIPs may be adopted by one or more Bitcoin clients or other related
software. Some may even end up changing the consensus rules that the Bitcoin ecosystem jointly enforces.
### What is the Purpose of the BIPs Repository?
The [BIPs repository](https://github.com/bitcoin/bips/) serves as a publication medium and archive for mature proposals.
Through its high visibility, it facilitates the community-wide consideration of BIPs and provides a well-established
source to retrieve the latest version of any BIP. The repository transparently records all changes to each BIP and
allows any community member to retain a complete copy of the archive easily.
The BIPs repository neither tracks community sentiment[^acceptance] nor ecosystem adoption[^adoption] of BIPs beyond
the brief overview provided via the BIP status (see [Workflow](#workflow) below).
Proposals are published in this repository if they are on-topic and fulfill the editorial criteria.
No formal or informal decision body governs Bitcoin development or decides adoption of BIPs.
## BIP Format and Structure
### Specification
Authors may choose to submit BIPs in MediaWiki or Markdown[^markdown] format.
Each BIP must have a _Preamble_, an _Abstract_, a _Copyright_, and a _Motivation_ section. Authors should consider all issues in the
following list and address each as appropriate.
* Preamble — Headers containing metadata about the BIP (see the section [BIP Header Preamble](#bip-header-preamble)
below).
* Abstract — A short description of the issue being addressed.
* Motivation — Why is this BIP being written? Clearly explain how the existing situation presents a problem and why the proposed idea resolves the
issue or improves upon the current situation.
* Specification — The technical specification should describe the syntax and semantics of any new feature. The
specification should be detailed enough to enable any Bitcoin project to create an interoperable implementation.
* Rationale — The rationale fleshes out the specification by describing what inspired the design and why particular
design decisions were made. It should describe related work and alternate designs that were considered. The rationale
should record relevant objections or important concerns that were raised and addressed as this proposal was developed.
* Backward Compatibility — Any BIP that introduces incompatibilities must include a section describing these incompatibilities and their severity as well as provide instructions on how
implementers and users should deal with these incompatibilities.
* Reference Implementation — Where applicable, a reference implementation, test vectors, and documentation must be
finished before the BIP can be given the status "Complete". Test vectors must be provided in the BIP or
as auxiliary files (see [Auxiliary Files](#auxiliary-files)) under an acceptable license. The reference implementation
can be provided in the BIP, as an auxiliary file, or per linking another code reference that is expected to remain
available permanently such as a pull request, a dedicated branch, a new repository, or similar.
* Changelog — A section to track modifications to a BIP after reaching Complete status.
* Copyright — The BIP must be placed under an acceptable license (see [BIP Licensing](#bip-licensing) below).
#### BIP Header Preamble
Each BIP must begin with an [RFC 822-style header preamble](https://www.w3.org/Protocols/rfc822/). The headers must
appear in the following order. Headers marked with "\*" are optional. All other headers are required.
##### Overview
```
BIP: <BIP number, or "?" before assignment>
* Layer: <Consensus (soft fork) | Consensus (hard fork) | Peer Services | API/RPC | Applications>
Title: <BIP title (50 characters)>
Authors: <Authors names and email addresses>
* Deputies: <Deputies names and email addresses>
Status: <Draft | Complete | Deployed | Closed>
Type: <Specification | Informational | Process>
Assigned: <Date of number assignment (yyyy-mm-dd), or "?" before assignment>
License: <SPDX License Expression>
* Discussion: <Noteworthy discussion threads in "yyyy-mm-dd: URL" format>
* Version: <MAJOR.MINOR.PATCH>
* Requires: <BIP number(s)>
* Replaces: <BIP number(s)>
* Proposed-Replacement: <BIP number(s)>
```
##### Header Descriptions
* BIP — The assigned number of the BIP (without leading zeros). Please use "?" before a number has been assigned by the BIP Editors.
* Layer — The layer of Bitcoin the BIP applies to using the BIP classification defined in [BIP123](bip-0123.mediawiki).
* Authors — The names (or pseudonyms) and email addresses of all authors of the BIP. The format of each authors header
value must be
Random J. User <address@dom.ain>
Multiple authors are recorded on separate lines:
Authors: Random J. User <address@dom.ain>
Anata Sample <anata@domain.example>
* Deputies — Additional owners of the BIP that are not authors. The Deputies header uses the same format as the
Authors header. See the [BIP Ownership](#bip-ownership) section above.
* Status — The stage of the workflow of the proposal. See the [Workflow](#workflow) section below.
* Type — See the [BIP Types](#bip-types) section below for a description of the three BIP types.
* Assigned The date a BIP was assigned its number. Please use "?" before a number has been assigned by the BIP Editors.
* License — The License header specifies SPDX License Expressions describing the terms under which the
BIP and its auxiliary files are available. See the [BIP Licensing](#bip-licensing) section below.
* Discussion — The Discussion header points the audience to relevant discussions of the BIP, e.g., the mailing list
thread in which the idea for the BIP was discussed, a thread where a new version of the BIP was presented, or relevant
discussion threads on other platforms. Entries take the format "yyyy-mm-dd: URL", e.g., `2009-01-09:
https://www.mail-archive.com/cryptography@metzdowd.com/msg10142.html`, using the date and URL of the start of the
conversation. Multiple discussions should be listed on separate lines.
* Version — The current version number of this BIP. See the [Changelog](#changelog-section-and-version-header) section below.
* Requires — A list of existing BIPs the new proposal depends on. If multiple BIPs
are required, they should be listed in one line separated by a comma and space (e.g., "1, 2").
* Replaces[^proposes-to-replace] — BIP authors may put the numbers of one or more prior BIPs in the Replaces header to recommend that their
BIP succeeds, supersedes, or renders obsolete those prior BIPs.
* Proposed-Replacement[^superseded-by-proposed-replacement] — When a later BIP indicates that it intends to supersede an
existing BIP, the later BIPs number is added to the Proposed-Replacement header of the existing BIP to indicate the
potential successor BIP.
#### Auxiliary Files
BIPs may include auxiliary files such as diagrams and source code. Auxiliary files must be included in a subdirectory
for that BIP named `bip-XXXX`, where "XXXX" is the BIP number zero-padded to four digits. File names in the subdirectory
do not need to adhere to a specific convention.
### BIP Types
* A **Specification BIP** defines a set of technical rules describing a new feature or affecting the interoperability of implementations. The
distinguishing characteristic of a Specification BIP is that it can be implemented, and implementations can be compliant with
it. Specification BIPs must have a Specification section, must have a Backward Compatibility section (if incompatibilities are introduced), and can only be advanced to Complete after they contain or refer to a reference implementation and test vectors.
* An **Informational BIP** describes a Bitcoin design issue, or provides general guidelines or other information to the
Bitcoin community.
* A **Process BIP** describes a process surrounding Bitcoin, or proposes a change to (or an event in) a process. Process
BIPs are like Specification BIPs, but apply to topics other than the Bitcoin protocol and Bitcoin implementations.
They often require community consensus and are typically binding for the corresponding process. Examples include
procedures, guidelines, and changes to decision-making processes such as the BIP process.
## Workflow
The BIP process starts with a new idea for Bitcoin. Each potential BIP must have authors—people who write the BIP,
gather feedback, shepherd the discussion in the appropriate forums, and finally recommend a mature proposal to the
community.
![Status Diagram](bip-0003/status-diagram.png "Status Diagram for the BIP Workflow")
### Ideation
After having an idea, the authors should evaluate whether it meets the criteria to become a BIP, as described in this
BIP. The idea must be of interest to the broader community or relevant to multiple software projects. Minor improvements
and matters concerning only a single project usually do not require standardization and should instead be brought up directly to
the relevant project.
The authors should first research whether their idea has been considered before. Ideas in Bitcoin are often rediscovered,
and prior related discussions may inform the authors of the issues that may arise in its progression. After some investigation,
the novelty and viability of the idea should be tested by posting a new, dedicated thread about the idea to the [Bitcoin Development Mailing
List](https://groups.google.com/g/bitcoindev). Prior correspondence can be found in the [mailing list
archive](https://gnusha.org/pi/bitcoindev/).
It is recommended that authors establish before or at the start of working on a draft whether their idea may be of
interest to the Bitcoin community.
Authors should avoid opening a pull request with a BIP draft out of the blue.
Vetting an idea publicly before investing time and effort to formally describe the idea is meant to save time for both the authors and
the community. Not only may someone point out relevant discussion topics that were missed in the authors
research, or that an idea is guaranteed to be rejected based on prior discussions, but describing an idea publicly also
tests whether it is of interest to more people beside the authors.
As a first sketch of the proposal is taking shape, the authors should present it to the [Bitcoin Development Mailing
List](https://groups.google.com/g/bitcoindev). This gives the authors a chance to collect initial feedback and address
fundamental concerns. If the authors wish to work in public on the proposal at this stage, it is recommended that they
open a pull request against one of their forks of the BIPs repository instead of the main BIPs repository.
It is recommended that complicated proposals be split into separate BIPs that each focus on a specific component of the
overall proposal.
### Progression through BIP Statuses
The following sections refer to BIP Status field values. The BIP Status field is defined in the Header Preamble
specification above.
#### Draft
After fleshing out the proposal further and ensuring that it is of high quality and properly formatted, the authors
should open a pull request to the [BIPs repository](https://github.com/bitcoin/bips). The document must adhere to the
formatting requirements specified above and should be provided as a file named with a working title of the form
"bip-title.[md|mediawiki]". Only BIP Editors may assign BIP numbers. Until one has done so, authors should refer to their
BIP by name only.
BIPs that (1) adhere to the formatting requirements, (2) are on-topic, and (3) have materially progressed beyond the
ideation phase, e.g., by generating substantial public discussion and commentary from diverse contributors, by
independent Bitcoin projects working on adopting the proposal, or by the authors working for an extended period toward
improving the proposal based on community feedback, will be assigned a number by a BIP Editor. A number may be
considered assigned only after it has been publicly announced in the pull request by a BIP Editor. The BIP Editors should
not assign a number when they perceive a proposal being met with lack of interest: number assignment facilitates the
distributed discussion of ideas, but before a proposal garners some interest in the Bitcoin community, there is no need
to refer to it by a number.
Proposals are also not ready for number assignment if they duplicate efforts, disregard formatting rules, are too
unfocused or too broad, fail to provide proper motivation, fail to address backward compatibility where necessary, or
fail to specify the feature clearly and comprehensively. Reviewers and BIP Editors should provide guidance on how the
proposal may be improved to progress toward readiness. Pull requests that are proposing off-topic ideas or
have stopped making progress may be closed.
When the proposal is ready and has been assigned a number, a BIP Editor will merge it into the BIPs repository. After the
BIP has been merged to the repository, its main focus should no longer shift significantly, even while the authors may
continue to update the proposal as necessary. Updates to merged documents by the authors should also be submitted as
pull requests.
#### Complete[^complete]
When the authors have concluded all planned work on their proposal, are confident that their BIP represents a net
improvement, is clear, comprehensive, and is
ready for adoption by the Bitcoin community, they may update the BIPs status to Complete to indicate that they
recommend adoption, implementation, or deployment of the BIP. Where applicable, the authors must ensure that any
proposed specification is solid, not unduly complicated, and definitive. Specification BIPs must come with or refer to a working reference implementation and comprehensive test vectors before they can be moved to Complete. Subsequently, the BIPs content should only be
adjusted in minor details, e.g., to improve language, clarify ambiguities, backfill omissions in the specification, add
test vectors for edge cases, or address other issues discovered as the BIP is being adopted.
A Complete BIP can only move to Deployed or Closed. Any necessary changes to the specification should be minimal and
interfere as little as possible with ongoing adoption. If a Complete BIP is found to need substantial functional
changes, it may be preferable to move it to Closed[^new-BIP], and to start a new BIP with the changes instead.
Otherwise, it could cause confusion as to what being compliant with the BIP means.
A BIP may remain in the Complete status indefinitely unless its authors or deputies decide to move it to Closed or it is advanced to
Deployed.
Complete is the final status for most successful Informational BIPs.
#### Deployed
A Complete BIP should only be moved to Deployed once it is settled: after its approach has solidified, its
Specification has been put through its paces, feedback from early adopters has been processed, and amendments to the BIP have stopped.
Then, a BIP may be advanced to Deployed upon request by any community member with evidence[^evidence] that
the BIP is in active use. Convincing evidence includes for example: an established project having deployed support
for the BIP in mainnet software releases, a soft fork proposals activation criteria having been met on the network, or
rough consensus for the BIP having been demonstrated.
Once Deployed, the BIP is considered final.
Any modifications to the BIP beyond bug fixes, other minor amendments, additions to the test vectors, or editorial
changes should be avoided.
Any breaking changes to the BIPs Specification should be proposed as a new separate BIP.[^new-BIP]
##### Process BIPs
A Process BIP may change status from Complete to Deployed when it achieves rough consensus on the Bitcoin Development Mailing List. A
proposal is said to have rough consensus if its advancement has been open to discussion on the mailing list for at least
one month, the discussion achieved meaningful engagement, and no person maintains any unaddressed substantiated objections to it. Addressed or obstructive objections
may be ignored/overruled by general agreement that they have been sufficiently addressed, but clear reasoning must be
given in such circumstances. Deployed Process BIPs may be modified indefinitely as long as a proposed modification has
rough consensus per the same criteria.[^living-documents]
#### Closed[^closed]
A BIP that is of historical interest only, and is not being actively worked on, promoted or in active use, should be
marked as Closed. The reason for moving the
proposal to (or from) Closed should be recorded in the Changelog section in the same commit that updates the status.
BIPs do not get deleted, they are retained even after being updated to Closed.
Transitions involving the Closed state are:
##### Draft ↦ Closed
BIP authors may decide on their own to change their BIPs status from Draft to Closed. If a Draft BIP stops making
progress, sees accumulated feedback unaddressed, or otherwise appears stalled for a year, anyone may propose the BIP
status be updated to Closed. The BIP is then updated to Closed unless the authors assert that they intend to continue work within four weeks of being contacted.
##### Complete ↦ Closed
BIPs that had attained the Complete status, i.e., that had been recommended for adoption, may be moved to Closed per the
authors announcement to the Bitcoin Development Mailing List[^bip-announcements-to-list]. However, if someone volunteers to adopt the proposal
within four weeks, they become the BIP's author or deputy (see [Transferring BIP Ownership](#transferring-bip-ownership) below), and the BIP will
remain Complete instead.
##### Deployed ↦ Closed
A BIP may evolve from Deployed to Closed when it is no longer in active use. Any community member may initiate this
Status update by announcing it to the mailing list[^bip-announcements-to-list], and proceed if no objections have been raised for four weeks.
##### Closed ↦ Draft
The Closed status is generally intended to be a final status for BIPs,
and if BIP authors decide to make another attempt at a previously Closed BIP, it is generally recommended to create a new
proposal. (Obviously, the authors may borrow any amount of inspiration or actual text from any prior BIPs as licensing
permits.) The authors should take special care to address the issues that caused the prior attempts abandonment. Even
if the prior attempt had been assigned a number, the new BIP will generally be assigned a distinct number. However, if it is
obvious that the new attempt directly continues work on the same idea, it may be reasonable to return the
Closed BIP to Draft status.
### Changelog Section and Version Header
To help implementers understand updates to a BIP, any changes after it has reached Complete must be tracked with version,
date, and description in a Changelog section sorted by most recent version first. The version number is inspired by semantic versioning (MAJOR.MINOR.PATCH).
The MAJOR version is incremented if changes to the BIPs Specification are introduced that are incompatible with prior
versions (which should be rare after a BIP is Complete, and only happen in well-grounded exceptional cases to a BIP that
is Deployed). The MINOR version is incremented whenever the specification of the BIP is changed or extended in a
backward-compatible way. The PATCH version is incremented for other changes to the BIP that are noteworthy (bug fixes,
test vectors, important clarifications, etc.). Version 1.0.0 is used to label the promotion to
Complete. A Changelog section may be introduced during the Draft phase to record significant changes (using versions 0.x.y).
Example:
> __Changelog__
>
> * __2.0.0__ (2025-01-22):
> * Introduce a breaking change in the specification to fix a bug.
> * __1.1.0__ (2025-01-17):
> * Add a backward compatible extension to the BIP.
> * __1.0.1__ (2025-01-15):
> * Clarify an edge case and add corresponding test vectors.
> * __1.0.0__ (2025-01-14):
> * Complete planned work on the BIP.
After a BIP receives a Changelog, the
Preamble must indicate the latest version in the Version header. The Changelog highlights revisions to BIPs to human readers. A single
BIP shall not recommend more than one variant of an idea at the same time. A different or
competing variant of an existing BIP must be published as a separate BIP.
### Adoption of Proposals
The BIPs repository does not track the sentiment on proposals and does not track the adoption of BIPs beyond whether they
are in active use or not. It is not intended for BIPs to list additional implementations beyond the reference
implementation: the BIPs repository is not a signpost where to find implementations.[^OtherImplementations] After a BIP
is advanced to Complete, it is up to the Bitcoin community to evaluate, adopt, ignore, or reject a BIP. Individual
Bitcoin projects are encouraged to publish a list of BIPs they implement. A good example of this at the time of writing
this BIP can be observed in Bitcoin Cores [doc/bips.md](https://github.com/bitcoin/bitcoin/blob/master/doc/bips.md)
file.
### Transferring BIP Ownership
It occasionally becomes necessary to transfer ownership of BIPs to new owners. In general, it would be preferable to
retain the original authors of the transferred BIP, but that is up to the original authors. A good reason to transfer
ownership is because the original authors no longer have the time or interest in updating it or following through with
the BIP process, or are unreachable or unresponsive. A bad reason
to transfer ownership is because someone doesn't agree with the direction of the BIP. The community tries to build
consensus around a BIP, but if that's not possible, rather than fighting over control, the dissenters should supply a
competing BIP.
If someone is interested in assuming ownership of a BIP, they should send an email asking to take over, addressed to the
original authors, the BIPEditors, and the Bitcoin Development Mailing List[^bip-announcements-to-list]. If the authors are unreachable or do not respond in a timely
manner (e.g., four weeks), the BIP Editors will make a unilateral decision whether to appoint the applicants as
[Authors or Deputies](#authors-and-deputies) (which may be amended should the original authors make a delayed reappearance).
## BIP Licensing
The Bitcoin project develops a global peer-to-peer digital cash system. Open standards are indispensable for continued
interoperability. Open standards reduce friction, and encourage anybody and everyone to contribute, compete, and
innovate on a level playing field. Only freely licensed contributions are accepted to the BIPs repository.
### Specification
Each new BIP must specify in two ways under which license terms it is made available. First, it must specify an [SPDX
License Expression](https://spdx.dev/ids/) in the License field in the preamble. Second, it must include a matching
Copyright section, possibly providing further details on licensing.
For example, a preamble might include the following License header:
License: CC0-1.0 OR MIT
In this case, the BIP (including all auxiliary files) is made available under the terms of both CC0 1.0 Universal as well as the
MIT License, and anyone may modify and redistribute it provided they comply with the terms of
*either* license, at their option. In other words, the license list is an "OR choice", not an "AND also" requirement. See the [SPDX
documentation](https://spdx.dev/ids/) and the [SPDX License List](https://spdx.org/licenses/) for further details.
Wherever different from those specified in the License header, an auxiliary file or directory should specify the license terms under which it is made available as is common in
software (e.g., with a [`SPDX-License-Identifier: <SPDX License Expression>` comment](https://spdx.dev/ids/),
a license header, or a LICENSE/COPYING file). Such exceptions should also be mentioned in the Copyright section. It is recommended to make any test vectors available
under CC0-1.0 or FSFAP in addition to any other licenses to allow anyone to copy test vectors into their
implementations without introducing license hindrances.
A few BIP2-era BIPs (98, 116, 117, 330, 340) have a no longer used "License-Code" header indicating the license terms applicable to auxiliary source code files. For such cases, please refer to BIP2.
It is recommended that source code included in a BIP (whether within the text or in auxiliary files) be licensed under the same license terms as the project it
is proposed to modify, if any. For example, changes intended for Bitcoin Core would ideally be licensed (also) under the MIT
License.
In all cases, details of the licensing terms must be provided in the Copyright section of the BIP.
#### Acceptable Licenses[^licenses]
Each new BIP must be made available under at least one acceptable license as listed below. BIPs are not required to be
*exclusively* licensed under approved terms, and may also be licensed under other licenses *in addition to* at least one
acceptable license.
In other words, a new BIP must specify an SPDX License Expression that is either "L" or equivalent to "L OR E" for some
acceptable license L from the following list and another SPDX License Expression E.
* BSD-2-Clause: [BSD 2-Clause License](https://opensource.org/license/BSD-2-Clause)
* BSD-3-Clause: [BSD 3-Clause License](https://opensource.org/license/BSD-3-Clause)
* CC0-1.0: [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/)
* FSFAP: [FSF All Permissive License](https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html)
* CC-BY-4.0: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/)
* MIT: [The MIT License](https://opensource.org/license/MIT)
* MIT-0: [MIT No Attribution License](https://opensource.org/license/MIT-0)
* Apache-2.0: [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
* BSL-1.0: [Boost Software License 1.0](https://www.boost.org/LICENSE_1_0.txt)
#### Not Acceptable Licenses
All licenses not explicitly included in the above lists are not acceptable terms for a Bitcoin Improvement Proposal.
However, BIPs predating this proposal were accepted under other terms, and should use one of the following identifiers.
* LicenseRef-PD: Placed into the public domain
* OPUBL-1.0: [Open Publication License 1.0](https://opencontent.org/openpub/)
## BIP Editors
The current BIP Editors are:
* Bryan Bishop ([kanzure@gmail.com](mailto:kanzure@gmail.com))
* Jon Atack ([jon@atack.com](mailto:jon@atack.com))
* Luke Dashjr ([luke_bipeditor@dashjr.org](mailto:luke_bipeditor@dashjr.org))
* Mark "Murch" Erhardt ([murch@murch.one](mailto:murch@murch.one))
* Olaoluwa Osuntokun ([laolu32@gmail.com](mailto:laolu32@gmail.com))
* Ruben Somsen ([rsomsen@gmail.com](mailto:rsomsen@gmail.com))
### BIP Editor Responsibilities and Workflow
The BIP Editors subscribe to the Bitcoin Development Mailing List and watch the [BIPs
repository](https://github.com/bitcoin/bips).
When either a new BIP idea or an early draft is submitted to the mailing list, BIP Editors or other community members should comment in regard
to:
* Novelty of the idea
* Viability, utility, and relevance of the concept
* Readiness of the proposal
* On-topic for the Bitcoin community
Discussion in pull request comments can often be hard to follow as feedback gets marked as resolved when it is addressed
by authors. Substantive discussion of ideas may be more accessible to a broader audience on the mailing list, where it
is also more likely to be retained by the community memory.
If the BIP needs more work, an editor should ensure that constructive, actionable feedback is provided to the authors
for revision. Once the BIP is ready it should be submitted as a "pull request" to the [BIPs
repository](https://github.com/bitcoin/bips) where it may get further feedback.
For each new BIP pull request that comes in, an editor checks the following:
* The idea has been previously proposed to the Bitcoin Development Mailing List and discussed there
* The described idea is on-topic for the repository
* A draft of the BIP by one of the authors has been previously discussed on the Bitcoin Development Mailing List
* Title accurately describes the content
* Proposal is of general interest and/or pertains to more than one Bitcoin project/implementation
* Document is properly formatted
* Licensing terms are acceptable
* Motivation, Rationale, and Backward Compatibility have been addressed
* Specification provides sufficient detail for implementation
* The defined Layer and Type headers must be correctly assigned for the given specification
* The BIP is ready: it is comprehensible, technically feasible and sound, and all aspects are addressed as necessary
Editors do NOT evaluate whether the proposal is likely to be adopted.
Then, a BIP Editor will:
* Assign a BIP number in the pull request
* Ensure that the BIP is listed in the [README](README.mediawiki)
* Merge the pull request when it is ready
The BIP Editors are intended to fulfill administrative and editorial responsibilities. The BIP Editors monitor BIP
changes, and update BIP headers as appropriate.
BIP Editors may also, at their option, unilaterally make and merge strictly editorial changes to BIPs, such as
correcting misspellings, mending grammar mistakes, fixing broken links, etc. as long as they do not change the meaning or conflict with the
original intent of the authors. Such a change must be recorded in the Changelog if its noteworthy per the criteria
mentioned in the [Changelog](#changelog) section.
## Backward Compatibility
### Changes from BIP2
#### Workflow
- Status field values are reduced from nine to four:
- Deferred, Obsolete, Rejected, Replaced, and Withdrawn are gathered up into Closed.[^closed]
- Final and Active are collapsed into Deployed.
- Proposed is renamed to Complete.
- The remaining statuses are Draft, Complete, Deployed, and Closed.
- The comment system is abolished.[^comments]
- A BIP in Draft or Complete status may no longer be closed solely on grounds of not making progress for three years.[^rejection]
- A BIP in Draft status may be updated to Closed status if it appears to have stopped making progress for at least a
year and its authors do not assert within four weeks of being contacted that they intend to continue working on it.
- Complete BIPs can only be moved to Closed by its authors and may remain in Complete indefinitely.
- A Changelog section is introduced to track significant changes to BIPs after they have reached the Complete status.
- Process BIPs are living documents that do not ossify and may be modified indefinitely.
- Some judgment calls previously required from BIP Editors are reassigned either to the BIP authors or the repositorys
audience.
#### BIP Format
- The Standards Track type is superseded by the similar Specification type.[^standard-track]
- Many sections are declared optional; it is up to the authors and reviewers to judge whether all relevant topics have
been comprehensively addressed and which topics require a designated section to do so.
- "Other Implementations" sections are discouraged.[^OtherImplementations]
- Auxiliary files are only permitted in the corresponding BIPs subdirectory, as no one used the alternative of labeling
them with the BIP number.
- Tracking of community consensus and adoption is out of scope for the BIPs repository, except to determine
whether a BIP is in active use for the move into or out of the Deployed status.
- The distinction between recommended and acceptable licenses was dropped.
- Most licenses that have not been used in the BIP process have been dropped from the list of acceptable licenses.
#### Preamble
- "Comments-URI" and "Comments-Summary" headers are dropped from the preamble.[^comments]
- The "Superseded-By" header is replaced with the "Proposed-Replacement" header.
- The "Post-History" header is replaced with the "Discussion" header.
- The optional "Version" header is introduced.
- The "Discussions-To" header is dropped, as it has never been used in any BIP.
- The "License-Code" header has been sunset, as it was used by only five BIPs (98, 116, 117, 330, 340) and created more ambiguity than clarity.
- The "Created" header is renamed to "Assigned", as the headers value is the date of number assignment.[^assigned]
- Introduce Deputies and optional "Deputies" header.
- The BIP "Title" header may now contain up to 50 characters (increased from 44 in BIP2).
- The "Layer" header is optional for Specification BIPs or Informational BIPs, as it does not make sense for all BIPs.[^layer]
- Rename the "Author" field to "Authors".
### Updates to Existing BIPs should this BIP be Activated
#### Previous BIP Process
This BIP replaces BIP2 as the guideline for the BIPprocess.
#### BIP Types
Standards Track BIPs and eligible Informational BIPs are assigned the Specification type. The Standards Track type is
considered obsolete. Specification BIPs use the Layer header rules specified in [BIP123](bip-0123.mediawiki).
#### Comments
The Comments-URI and Comments-Summary headers should be removed from all BIPs whose comment page in the wiki is empty.
For existing BIPs whose comment page has content, BIP Authors may keep both headers or remove both headers at their
discretion. It is recommended that existing wiki pages are not modified due to the activation of this BIP.
#### Status Field
After the activation of this BIP, the Status fields of existing BIPs that do not fit the specification in this BIP are
updated to the corresponding values prescribed in this BIP. BIPs that have had Draft status for extended periods will be
moved to Complete or Deployed as applicable in collaboration with their authors. The authors of incomplete Draft BIPs
will be contacted to learn whether the BIPs are still in progress toward Complete, and will otherwise be updated to
Closed as described in the [Workflow](#workflow) section above.
#### Authors Header
The Author header is replaced with the Authors header in all BIPs.
#### Discussion Header
The Post-History header is replaced with the Discussion header in all BIPs.
#### Proposed-Replacement Header
The Superseded-By header is replaced with the Proposed-Replacement header in all BIPs.
#### Licenses
Existing BIPs retain their license terms unchanged.
The License and License-Code headers of BIPs are updated to express those terms using SPDX License Expressions.
## Changelog
* __1.4.0__ (2025-12-09):
* Revert AI guidance, add Changelog section, broaden reference implementation formats, move Type header responsibility to authors, other editorial changes
* __1.3.1__ (2025-11-10):
* Reiterate that numbers are assigned by BIP Editors in pull requests
* __1.3.0__ (2025-10-22):
* Restrict use of AI/LLM tools, require original work.
* __1.2.1__ (2025-09-19):
* Clarify that idea should be discussed on dedicated mailing list thread
* __1.2.0__ (2025-09-19):
* Rename Created header to Assigned to clarify that it holds the date of number assignment
* __1.1.0__ (2025-07-18):
* Switch to SPDX License Expressions, drop License-Code header, and make editorial changes to BIP Licensing section.
* __1.0.1__ (2025-06-27):
* Improve description of acceptance, purpose of the BIPs repository, when Draft BIPs can be closed due to not
making progress, and make other minor improvements to phrasing.
* __1.0.0__ (2025-03-18):
* Complete planned work and move to Proposed.
## Copyright
This BIP is licensed under the [BSD-2-Clause License](https://opensource.org/licenses/BSD-2-Clause). Some content was
adapted from [BIP2](bip-0002.mediawiki) which was also licensed under the BSD-2-Clause.
## Related Work
- [BIP1: BIP Purpose and Guidelines](bip-0001.mediawiki)
- [BIP2: BIP Process, revised](bip-0002.mediawiki)
- [BIP123: BIP Classification](bip-0123.mediawiki)
- [RFC 822: Standard for ARPA Internet Text Messages](https://datatracker.ietf.org/doc/html/rfc822)
- [RFC 2223: Instructions to RFC Authors](https://datatracker.ietf.org/doc/html/rfc2223)
- [RFC 7282: On Consensus and Humming in the IETF](https://tools.ietf.org/html/rfc7282)
## Acknowledgements
We thank AJ Towns, Jon Atack, Jonas Nick, Larry Ruane, Pieter Wuille, Tim Ruffing, and others for their review,
feedback, and helpful comments.
## Rationale
[^assigned]: **Why was the Created header renamed to Assigned?**
Both BIP1 and BIP2 described the Created header as "date created on" in the preamble template, but followed that
up with "Created header records the date that the BIP was assigned a number" as the description of the field. This
has frequently led to confusion, with authors using the date of opening the pull request, the date they started
writing their proposal, the date of number assignment (as prescribed), or various other dates. Aligning the name of
the header and the text in the preamble template with the descriptions will reduce the confusion.
[^standard-track]: **Why was the Specification type introduced?**
The definitions of Informational and Standards Track BIPs caused some confusion in the past. Due to Informational
BIPs being described as optional, Standards Track BIPs were sometimes misunderstood to be generally recommended.
This has led to a number of BIPs that propose new features affecting interoperability of implementations being
assigned the Informational type. The situation is remedied by introducing a new _Specification BIP_ type that is
inclusive of any BIPs that can be implemented and affect interoperability of Bitcoin applications. Since all BIPs
are individual recommendations by the authors (even if some may eventually achieve endorsement by the majority of
the community), the prior reminder that Informational BIPs are optional is dropped.
[^comments]: **Why were comments, Comments-URI, and Comments-Summary removed from the process?**
The comments feature saw insignificant adoption. Few BIPs received any comments and barely any more than two with
only a handful of contributors commenting at all. This led to many situations in which one or two comments ended up
dominating the comment summary. While some of those comments may have been representative of broadly held opinions,
it also overstated the importance of individual comments directly in the Preamble of BIPs. As collecting feedback in
this accessible fashion failed, the new process puts the burden back on the audience to make their own evaluation.
[^layer]: **Why is the layer header now permitted for other BIP types?**
The layer header had already been used by many Informational BIPs, so the rule that it is only available to
Standards Track BIPs is dropped.
[^OtherImplementations]: **What is the issue with "Other Implementations" sections in BIPs?**
In the past, some BIPs had "Other Implementations" sections that caused frequent change requests to existing BIPs.
This put a burden on the BIP authors and BIP Editors, and frequently led to lingering pull requests due to the corresponding BIPs
authors no longer participating in the process. Many of these alternative implementations eventually became
unmaintained or were low-quality to begin with. Therefore, "Other Implementations" sections are heavily discouraged.
[^complete]: **Why was the Proposed status renamed to Complete?**
Some reviewers of this BIP raised that in a process which outlines the workflow of Bitcoin Improvement _Proposals_
using "Proposed" as a status field value was overloading the term: clearly _proposals_ are proposed at all stages of
the process. "Complete" expresses that the authors have concluded planned work on all parts of the proposal and are
ready to recommend their BIP for adoption. The term "ready" was also considered, but considered too subjective.
[^rejection]: **Why can proposals remain in Draft or Complete indefinitely?**
The automatic 3-year timeout of BIPs has led to some disagreement in the past and seems unnecessary in cases where
the authors remain active in the community and still consider their idea worth pursuing. On the other hand,
Draft proposals that appear stale may be closed after only one year, which should achieve the main goal of
the original rule by limiting the effort and attention spent on proposals that never reach Complete.
[^closed]: **Why was the Closed Status introduced?**
The Closed Status provides value to the audience by indicating which documents are only of historical significance.
Previously, the process had Deferred, Obsolete, Rejected, Replaced, and Withdrawn, which all meant some flavor of
"work has stopped on this." The many statuses complicated the process, may have contributed to process fatigue, and
may have resulted in BIPs statuses not being maintained well. The author of this BIP feels that all of the
aforementioned can be represented by _Closed_ without significantly impacting the information quality of the
overview table. Where the many Status variants provided minuscule additional information, the simplification is more
valuable and the Changelog section now collects specific details.
[^acceptance]: **When is a BIP "accepted"?**
Many standards processes such as the PEPs or the IETF have a mechanism for a proposal to be formally accepted by
some council or committee. The BIP Process does not have such a decision body. Bitcoin development and "acceptance"
of BIPs emerges from the participation of stakeholders across the ecosystem, and refers to some vague notion of community
interest and support for a proposal.
BIP2 had made an attempt to gather community feedback into comment summaries in BIPs directly. Given the low
participation and corresponding low information quality of the summaries that resulted from that feature, this BIP
instead intends to leave the evaluation of BIPs to the reviewers and users.
[^adoption]: **Why does the BIPs repository no longer track adoption?**
In the past, some BIPs maintained lists of projects that had implemented the BIP. These lists generated
noise for subscribers of the repository, often listed implementations of questionable quality, and quickly
grew outdated, therefore providing little value. The repository no longer tracks which projects have implemented
BIPs. Instead, it is recommended that projects publish a list of the BIPs they implement.
[^markdown]: **Which flavor of Markdown is allowed?**
The author of this proposal has no opinion on Markdown flavors, but recommends that proposals stick to the basic
Markdown syntax features commonly shared across Markdown dialects.
[^living-documents]: **Why are Process BIPs living documents?**
In the past years, the existing BIPs process has not always provided a clear approach to all situations. For
example, the content of BIP2 appears to have been penned especially with fork proposals in mind. It seems clear
that Bitcoin development will evolve in many surprising ways in the future. Instead of mandating the effort of
writing a new process document every time new situations arise, it seems preferable to allow the process to adapt to
the concerns of the future in specific aspects. Therefore, Process BIPs are defined as living documents that remain
open to amendment. If a Process BIP requires large modifications or even a complete overhaul, a new BIP should be
preferred.
[^new-BIP]: **Why should the specification of an implemented BIP no longer be changed?**
After a Complete or Deployed BIP has been deployed by one or more implementations, breaking changes to the
specification could lead to a situation where multiple "compliant" implementations fail at being interoperable,
because they implemented different versions of the same BIP. Therefore, even changes to the specification of
Complete BIPs should be avoided, but Deployed BIPs should never be subject to breaking changes to their
specification.
[^bip-announcements-to-list]: **Why are some BIP status changes announced to the mailing list?**
The BIPs repository does not and cannot track who might be interested in or has deployed a BIP. While concerns were
raised that making announcements to the Bitcoin Developer Mailing List would introduce unnecessary noise, our
rationale is that 1) moving Complete and Deployed BIPs to the Closed status will be a rare occurrence, 2) status
updates will usually not generate a lot of discussion, 3) while the mailing list should preferably only used for
getting review for new BIPs, it is the only channel available to us that can be considered a public announcement to
the audience of the BIPs repository: even if the authors, implementers, or other parties interested in a BIP do not
see the announcement themselves, they may be made aware by someone that does see it.
[^superseded-by-proposed-replacement]: **Why is Superseded-By replaced with Proposed-Replacement?**
Reviewers asked who should get to decide whether a BIP is superseded in case of a disagreement among the authors of
the original BIP, the authors of the new BIP, the editors, or the community? This is addressed by making the
"Replaces" header part of the recommendation of the authors of the new document, and replacing the "Superseded-By"
header with the "Proposed-Replacement" header that lists any proposals that recommend replacing the original document.
[^proposes-to-replace]: **Why was "Replaces" retained instead of changing it to "Proposes-to-Replace"?**
When one BIP proposes to supersede another, it is on the original BIP where things get complicated. The BIP is an
author document, but depending on its progress through the workflow, it may meanwhile be co-owned by the community. Who may decide
whether the original document should endorse a potential replacement BIP? Is it the original authors, the authors of the new
proposal, the BIP Editors, some sort of community process, or a mix of all of the above?
On the new BIP these problems dont exist in the same manner. As it is freshly written, it is wholly owned by its
authors. The community is not yet invested and the original BIPs authors do not have a privileged role
in determining the content of the new BIP. The authors of the new BIP can unilaterally recommend that it be
considered a replacement for a prior BIP. From there, the community can evaluate the proposal and adopt or
reject it, thus establishing whether it is successful in superseding the original or not.
[^evidence]: **How is evidence for advancing to Deployed evaluated?**
Whether evidence is deemed convincing to move a BIP to Deployed is up to the BIP Editors and Bitcoin community.
Running a single instance of a personal fork of a software project might be rejected, while a small software project with
dozens of users may be sufficient. The main point of the Deployed status is to indicate that changes to the BIP
could negatively impact users of projects that have already implemented support.
[^licenses]: **Why were some licenses dropped?**
Among the 141 BIPs with licenses in the repository, only nine licenses have ever been used to license BIPs
(although, some BIPs were made available under more than one license) and only one license has been used to license
code:
Licenses used:
* BSD-2-Clause: 55
* PD: 42
* CC0-1.0: 23
* BSD-3-Clause: 19
* OPUBL-1.0: 5
* CC-BY-SA-4.0: 4
* FSFAP: 3
* MIT: 2
* CC-BY-4.0: 1
License-Code used (previous BIP2 format):
* BSD-2-Clause: 1
* CC0-1.0: 1
* MIT: 5
The following previously acceptable licenses were retained per request of reviewers, even though they have so far
never been used in the BIPs process:
* Apache-2.0: [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
* BSL-1.0: [Boost Software License 1.0](https://www.boost.org/LICENSE_1_0.txt)
The following previously acceptable licenses have never been used in the BIPs Process and have been dropped:
* AGPL-3.0+: [GNU Affero General Public License (AGPL) 3](https://www.gnu.org/licenses/agpl-3.0.en.html)
* FDL-1.3: [GNU Free Documentation License 1.3](https://www.gnu.org/licenses/fdl-1.3.en.html)
* GPL-2.0+: [GNU General Public License (GPL) 2 or newer](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
* LGPL-2.1+: [GNU Lesser General Public License (LGPL) 2.1 or newer](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)
Why are software licenses included?
* Some BIPs, in particular those concerning the consensus layer, may include literal code in the BIP itself which
may not be available under the license terms the authors wish to use for the BIP.
* The author of this BIP has been provided with a learned opinion indicating that software licenses are perfectly
acceptable for licensing "human code" i.e., text as well as Markdown or MediaWiki code.
Why is CC-BY-SA-4.0 no longer acceptable for new BIPs?
* Specification BIPs are required to have a Reference Implementation and Test Vectors to be advanced to Complete. As
the BIPs repository is aiming to make proposals easily adoptable, the intention is for the reference
implementation and test vectors to be as accessible as possible. Copyleft licenses may introduce friction here,
and therefore CC-BY-SA-4.0 (and the GPL-flavors) is no longer considered acceptable for new BIPs. As mentioned
above, existing BIPs will retain their original licensing.
Why are Open Publication License and Public Domain no longer acceptable for new BIPs?
* Public domain is not universally recognised as a legitimate action, thus it is inadvisable.
* The Open Publication License is generally regarded as obsolete, and not a license suitable for new publications.

BIN
bip-0003/status-diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

277
bip-0008.mediawiki Normal file
View File

@ -0,0 +1,277 @@
<pre>
BIP: 8
Title: Version bits with lock-in by height
Authors: Shaolin Fry <shaolinfry@protonmail.ch>
Luke Dashjr <luke+bip@dashjr.org>
Status: Draft
Type: Informational
Assigned: 2017-02-01
License: BSD-3-Clause OR CC0-1.0
</pre>
==Abstract==
This document specifies an alternative to [[bip-0009.mediawiki|BIP9]] that corrects for a number of perceived mistakes.
Block heights are used for start and timeout rather than POSIX timestamps.
It additionally introduces an activation parameter that can guarantee activation of backward-compatible changes (further called "soft forks").
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
==Motivation==
BIP9 introduced a mechanism for doing parallel soft forking deployments based on repurposing the block nVersion field. Activation is dependent on near unanimous hashrate signalling which may be impractical and result in veto by a small minority of non-signalling hashrate. Super majority hashrate based activation triggers allow for accelerated activation where the majority hash power enforces the new rules in lieu of full nodes upgrading. Since all consensus rules are ultimately enforced by full nodes, eventually any new soft fork will be enforced by the economy. This proposal combines these two aspects to provide optional flag day activation after a reasonable time, as well as for accelerated activation by majority of hash rate before the flag date.
Due to using timestamps rather than block heights, it was found to be a risk that a sudden loss of significant hashrate could interfere with a late activation.
Block time is somewhat unreliable and may be intentionally or unintentionally inaccurate, so thresholds based on block time are not ideal. Secondly, BIP9 specified triggers based on the first retarget after a given time, which is non-intuitive. Since each new block must increase the height by one, thresholds based on block height are much more reliable and intuitive and can be calculated exactly for difficulty retarget.
==Specification==
===Parameters===
Each soft fork deployment is specified by the following per-chain parameters (further elaborated below):
# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier.
# The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}.
# The '''startheight''' specifies the height of the first block at which the bit gains its meaning.
# The '''timeoutheight''' specifies a block height at which the miner signalling ends. Once this height has been reached, if the soft fork has not yet locked in (excluding this block's bit state), the deployment is considered failed on all descendants of the block.
# The '''threshold''' specifies the minimum number of block per retarget period which indicate lock-in of the soft fork during the subsequent period.
# The '''minimum_activation_height''' specifies the height of the first block at which the soft fork is allowed to become active.
# The '''lockinontimeout''' boolean if set to true, blocks are required to signal in the final period, ensuring the soft fork has locked in by timeoutheight.
===Selection guidelines===
The following guidelines are suggested for selecting these parameters for a soft fork:
# '''name''' should be selected such that no two softforks, concurrent or otherwise, ever use the same name. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number.
# '''bit''' should be selected such that no two concurrent softforks use the same bit. The bit chosen should not overlap with active usage (legitimately or otherwise) for other purposes.
# '''startheight''' should be set to some block height in the future. If '''minimum_activation_height''' is not going to be set, then '''startheight''' should be set to a height when a majority of economic activity is expected to have upgraded to software including the activation parameters. Some allowance should be made for potential release delays. If '''minimum_activation_height''' is going to be set, then '''startheight''' can be set to be soon after software with parameters is expected to be released. This shifts the time for upgrading from before signaling begins to during the LOCKED_IN state.
# '''timeoutheight''' should be set to a block height when it is considered reasonable to expect the entire economy to have upgraded by, probably at least 1 year, or 52416 blocks (26 retarget intervals) after '''startheight'''.
# '''threshold''' should be 1815 blocks (90% of 2016), or 1512 (75%) for testnet.
# '''minimum_activation_height''' should be set to several retarget periods in the future if the '''startheight''' is to be very soon after software with parameters is expected to be released. '''minimum_activation_height''' should be set to a height when a majority of economic activity is expected to have upgraded to software including the activation parameters. This allows more time to be spent in the LOCKED_IN state so that nodes can upgrade. This may be set to 0 to have the LOCKED_IN state be a single retarget period.
# '''lockinontimeout''' should be set to true for any softfork that is expected or found to have political opposition from a non-negligible percent of miners. (It can be set after the initial deployment, but cannot be cleared once set.)
A later deployment using the same bit is possible as long as the startheight is after the previous one's
timeoutheight or activation, but it is discouraged until necessary, and even then recommended to have a pause in between to detect buggy software.
'''startheight''', '''timeoutheight''', and '''minimum_activation_height''' must be an exact multiple of 2016 (ie, at a retarget boundary), and '''timeoutheight''' must be at least 4032 blocks (2 retarget intervals) after '''startheight'''.
===States===
With each block and soft fork, we associate a deployment state. The possible states are:
# '''DEFINED''' is the first state that each soft fork starts out as. The genesis block is by definition in this state for each deployment.
# '''STARTED''' for blocks at or beyond the startheight.
# '''MUST_SIGNAL''' for one retarget period prior to the timeout, if LOCKED_IN was not reached and '''lockinontimeout''' is true.
# '''LOCKED_IN''' for at least one retarget period after the first retarget period with STARTED (or MUST_SIGNAL) blocks of which at least threshold have the associated bit set in nVersion. A soft fork remains in LOCKED_IN until at least '''minimum_activation_height''' is reached.
# '''ACTIVE''' for all blocks after the LOCKED_IN state.
# '''FAILED''' for all blocks after the timeoutheight if LOCKED_IN is not reached.
===Bit flags===
The nVersion block header field is to be interpreted as a 32-bit little-endian integer (as present), and bits are selected within this integer as values (1 << N) where N is the bit number.
Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be
001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive.
Due to the constraints set by BIP 34, BIP 66 and BIP 65, we only have 0x7FFFFFFB possible nVersion values available.
This restricts us to at most 30 independent deployments. By restricting the top 3 bits to 001 we get 29 out of those
for the purposes of this proposal, and support two future upgrades for different mechanisms (top bits 010 and 011).
When a block nVersion does not have top bits 001, it is treated as if all
bits are 0 for the purposes of deployments.
Miners should continue setting the bit in LOCKED_IN phase so uptake is visible, though this has no effect on consensus rules.
===New consensus rules===
The new consensus rules for each soft fork are enforced for each block that has ACTIVE state.
During the MUST_SIGNAL phase, if '''(2016 - threshold)''' blocks in the retarget period have already failed to signal, any further blocks that fail to signal are invalid.
===State transitions===
<img src="bip-0008/states.png" align="middle"></img>
Note that when '''lockinontimeout''' is true, the LOCKED_IN state will be reached no later than at a height of '''timeoutheight'''.
Regardless of the value of '''lockinontimeout''', if LOCKED_IN is reached, ACTIVE will be reached either one retarget period later, or at '''minimum_activation_height''', whichever comes later.
The genesis block has state DEFINED for each deployment, by definition.
State GetStateForBlock(block) {
if (block.height == 0) {
return DEFINED;
}
All blocks within a retarget period have the same state. This means that if
floor(block1.height / 2016) = floor(block2.height / 2016), they are guaranteed to have the same state for every
deployment.
if ((block.height % 2016) != 0) {
return GetStateForBlock(block.parent);
}
Otherwise, the next state depends on the previous state:
switch (GetStateForBlock(GetAncestorAtHeight(block, block.height - 2016))) {
We remain in the initial state until we reach the start block height.
case DEFINED:
if (block.height >= startheight) {
return STARTED;
}
return DEFINED;
After a period in the STARTED state, we tally the bits set,
and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their
version numbers.
If the threshold hasn't been met, lockinontimeout is true, and we are at the last period before the timeout, then we transition to MUST_SIGNAL.
If the threshold hasn't been met and we reach the timeout, we transition directly to FAILED.
Note that a block's state never depends on its own nVersion; only on that of its ancestors.
case STARTED:
int count = 0;
walk = block;
for (i = 0; i < 2016; i++) {
walk = walk.parent;
if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) {
++count;
}
}
if (count >= threshold) {
return LOCKED_IN;
} else if (lockinontimeout && block.height + 2016 >= timeoutheight) {
return MUST_SIGNAL;
} else if (block.height >= timeoutheight) {
return FAILED;
}
return STARTED;
If we have finished a period of MUST_SIGNAL, we transition directly to LOCKED_IN.
case MUST_SIGNAL:
return LOCKED_IN;
After at least one retarget period of LOCKED_IN, we automatically transition to ACTIVE if the minimum activation height is reached. Otherwise LOCKED_IN continues.
case LOCKED_IN:
if (block.height >= minimum_activation_height) {
return ACTIVE;
} else {
return LOCKED_IN;
}
And ACTIVE and FAILED are terminal states, which a deployment stays in once they're reached.
case ACTIVE:
return ACTIVE;
case FAILED:
return FAILED;
}
}
'''Implementation'''
It should be noted that the states are maintained along block chain
branches, but may need recomputation when a reorganization happens.
Given that the state for a specific block/deployment combination is completely determined by its ancestry before the
current retarget period (i.e. up to and including its ancestor with height block.height - 1 - (block.height % 2016)),
it is possible to implement the mechanism above efficiently and safely by caching the resulting state of every multiple-of-2016
block, indexed by its parent.
===Mandatory signalling===
Blocks received while in the MUST_SIGNAL phase must be checked to ensure that they signal as required. For example:
if (GetStateForBlock(block) == MUST_SIGNAL) {
int nonsignal = 0;
walk = block;
while (true) {
if ((walk.nVersion & 0xE0000000) != 0x20000000 || ((walk.nVersion >> bit) & 1) != 1) {
++nonsignal;
if (nonsignal > 2016 - threshold) {
return state.Invalid(BlockValidationResult::RECENT_CONSENSUS_CHANGE, "bad-version-bip8-must-signal");
}
}
if (walk.nHeight % 2016 == 0) {
// checked every block in this retarget period
break;
}
walk = walk.parent;
}
}
Implementations should be careful not to ban peers that send blocks that are invalid due to not signalling (or blocks that build on those blocks), as that would allow an incompatible chain that is only briefly longer than the compliant chain to cause a split of the p2p network. If that occurred, nodes that have not set ''lockinontimeout'' may not see new blocks in the compliant chain, and thus not reorg to it at the point when it has more work, and would thus not be following the valid chain with the most work.
Implementations with ''lockinontimeout'' set to true may potentially follow a lower work chain than nodes with ''lockinontimeout'' set to false for an extended period. In order for this not to result in a net split nodes with ''lockinontimeout'' set to true, those nodes may need to preferentially connect to each other. Deployments proposing that implementations set ''lockinontimeout'' to true should either use parameters that do not risk there being a higher work alternative chain, or specify a mechanism for implementations that support the deployment to preferentially peer with each other.
===Warning mechanism===
To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state).
===getblocktemplate changes===
The template request Object is extended to include a new item:
{| class="wikitable"
!colspan=4| template request
|-
! Key !! Required !! Type !! Description
|-
| rules || No || Array of Strings || list of supported softfork deployments, by name
|}
The template Object is also extended:
{| class="wikitable"
!colspan=4| template
|-
! Key !! Required !! Type !! Description
|-
| rules || Yes || Array of Strings || list of softfork deployments, by name, that are active state
|-
| vbavailable || Yes || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value
|-
| vbrequired || No || Number || bit mask of softfork deployment version bits the server requires enabled in submissions
|}
The "version" key of the template is retained, and used to indicate the server's preference of deployments.
If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF].
Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired".
Servers MUST set bits in "vbrequired" for deployments in MUST_SIGNAL state, to ensure blocks produced are valid.
Softfork deployment names listed in "rules" or as keys in "vbavailable" may be prefixed by a '!' character.
Without this prefix, GBT clients may assume the rule will not impact usage of the template as-is; typical examples of this would be when previously valid transactions cease to be valid, such as BIPs 16, 65, 66, 68, 112, and 113.
If a client does not understand a rule without the prefix, it may use it unmodified for mining.
On the other hand, when this prefix is used, it indicates a more subtle change to the block structure or generation transaction; examples of this would be BIP 34 (because it modifies coinbase construction) and 141 (since it modifies the txid hashing and adds a commitment to the generation transaction).
A client that does not understand a rule prefixed by '!' must not attempt to process the template, and must not attempt to use it for mining even unmodified.
=== Reference implementation ===
https://github.com/bitcoin/bitcoin/compare/master...luke-jr:bip8
==Contrasted with BIP 9==
* The '''lockinontimeout''' flag is added, providing a way to guarantee transition to LOCKED_IN.
* Block heights are used for the deployment monotonic clock, rather than median-time-past.
==Backwards compatibility==
BIP8 and BIP9 deployments should not share concurrent active deployment bits. Nodes that only implement BIP9 will not activate a BIP8 soft fork if hashpower threshold is not reached by '''timeoutheight''', however, those nodes will still accept the blocks generated by activated nodes.
==Deployments==
A living list of deployment proposals can be found [[bip-0008/assignments.mediawiki|here]].
==References==
[[bip-0009.mediawiki|BIP9]]
[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-February/013643.html Mailing list discussion]
==Copyright==
This document is dual licensed as BSD 3-clause, and Creative Commons CC0 1.0 Universal.

View File

@ -0,0 +1,6 @@
==Deployments==
List of deployments.
State can be defined, active, failed. Dates are in UTC.

35
bip-0008/states.dot Normal file
View File

@ -0,0 +1,35 @@
digraph {
rankdir=TD;
node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.5, fontname="Arial"];
edge [weight = 100];
"DEFINED" -> "STARTED" [label="height >= start_height"];
"STARTED" -> "MUST_SIGNAL" [label="height + 2016 >= timeoutheight AND lockinontimeout"];
"STARTED" -> "FAILED" [label="height >= timeoutheight\nAND\nNOT lockinontimeout"];
"LOCKED_IN" -> "ACTIVE" [label="height >= minimum_activation_height"];
"LOCKED_IN":se -> "LOCKED_IN":ne [label="height < minimum_activation_height"];
"MUST_SIGNAL" -> "LOCKED_IN" [label="always"];
edge [weight = 1];
"STARTED" -> "LOCKED_IN" [label="height < timeoutheight\nAND\nthreshold reached"];
"FAILED" -> "LOCKED_IN" [style=invis];
"DEFINED":sw -> "DEFINED":nw;
"STARTED":sw -> "STARTED":nw;
"ACTIVE":sw -> "ACTIVE":nw;
"FAILED":sw -> "FAILED":nw;
"STARTED" [fillcolor="#a0a0ff"];
"MUST_SIGNAL" [fillcolor="#a0a0ff"];
"LOCKED_IN" [fillcolor="#ffffa0"];
"ACTIVE" [fillcolor="#a0ffa0"];
"FAILED" [fillcolor="#ffa0a0"];
{ rank=same; "STARTED" "MUST_SIGNAL" }
{ rank=same; "FAILED" "LOCKED_IN" }
{ rank=sink; "ACTIVE" }
}

BIN
bip-0008/states.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

126
bip-0008/states.svg Normal file
View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.46.1 (0)
-->
<!-- Pages: 1 -->
<svg width="937pt" height="348pt"
viewBox="0.00 0.00 937.00 348.37" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 344.37)">
<polygon fill="white" stroke="transparent" points="-4,4 -4,-344.37 933,-344.37 933,4 -4,4"/>
<!-- DEFINED -->
<g id="node1" class="node">
<title>DEFINED</title>
<path fill="lightgrey" stroke="black" stroke-width="2" d="M114,-333.75C114,-333.75 30,-333.75 30,-333.75 24,-333.75 18,-327.75 18,-321.75 18,-321.75 18,-309.75 18,-309.75 18,-303.75 24,-297.75 30,-297.75 30,-297.75 114,-297.75 114,-297.75 120,-297.75 126,-303.75 126,-309.75 126,-309.75 126,-321.75 126,-321.75 126,-327.75 120,-333.75 114,-333.75"/>
<text text-anchor="middle" x="72" y="-312.05" font-family="Arial" font-size="14.00">DEFINED</text>
</g>
<!-- DEFINED&#45;&gt;DEFINED -->
<g id="edge9" class="edge">
<title>DEFINED:sw&#45;&gt;DEFINED:nw</title>
<path fill="none" stroke="black" d="M18,-297.75C12,-287.25 0,-287.25 0,-315.75 0,-334.01 4.92,-340.57 10.04,-340.17"/>
<polygon fill="black" stroke="black" points="12.41,-342.75 18,-333.75 8.02,-337.3 12.41,-342.75"/>
</g>
<!-- STARTED -->
<g id="node2" class="node">
<title>STARTED</title>
<path fill="#a0a0ff" stroke="black" stroke-width="2" d="M114,-246.75C114,-246.75 30,-246.75 30,-246.75 24,-246.75 18,-240.75 18,-234.75 18,-234.75 18,-222.75 18,-222.75 18,-216.75 24,-210.75 30,-210.75 30,-210.75 114,-210.75 114,-210.75 120,-210.75 126,-216.75 126,-222.75 126,-222.75 126,-234.75 126,-234.75 126,-240.75 120,-246.75 114,-246.75"/>
<text text-anchor="middle" x="72" y="-225.05" font-family="Arial" font-size="14.00">STARTED</text>
</g>
<!-- DEFINED&#45;&gt;STARTED -->
<g id="edge1" class="edge">
<title>DEFINED&#45;&gt;STARTED</title>
<path fill="none" stroke="black" d="M72,-297.55C72,-285.91 72,-270.3 72,-256.99"/>
<polygon fill="black" stroke="black" points="75.5,-256.93 72,-246.93 68.5,-256.93 75.5,-256.93"/>
<text text-anchor="middle" x="155" y="-268.55" font-family="Times,serif" font-size="14.00">height &gt;= start_height</text>
</g>
<!-- STARTED&#45;&gt;STARTED -->
<g id="edge10" class="edge">
<title>STARTED:sw&#45;&gt;STARTED:nw</title>
<path fill="none" stroke="black" d="M18,-210.75C12,-200.25 0,-200.25 0,-228.75 0,-247.01 4.92,-253.57 10.04,-253.17"/>
<polygon fill="black" stroke="black" points="12.41,-255.75 18,-246.75 8.02,-250.3 12.41,-255.75"/>
</g>
<!-- MUST_SIGNAL -->
<g id="node3" class="node">
<title>MUST_SIGNAL</title>
<path fill="#a0a0ff" stroke="black" stroke-width="2" d="M634,-246.75C634,-246.75 550,-246.75 550,-246.75 544,-246.75 538,-240.75 538,-234.75 538,-234.75 538,-222.75 538,-222.75 538,-216.75 544,-210.75 550,-210.75 550,-210.75 634,-210.75 634,-210.75 640,-210.75 646,-216.75 646,-222.75 646,-222.75 646,-234.75 646,-234.75 646,-240.75 640,-246.75 634,-246.75"/>
<text text-anchor="middle" x="592" y="-225.05" font-family="Arial" font-size="14.00">MUST_SIGNAL</text>
</g>
<!-- STARTED&#45;&gt;MUST_SIGNAL -->
<g id="edge2" class="edge">
<title>STARTED&#45;&gt;MUST_SIGNAL</title>
<path fill="none" stroke="black" d="M126.18,-228.75C222.75,-228.75 424.19,-228.75 527.64,-228.75"/>
<polygon fill="black" stroke="black" points="527.94,-232.25 537.94,-228.75 527.94,-225.25 527.94,-232.25"/>
<text text-anchor="middle" x="332" y="-235.55" font-family="Times,serif" font-size="14.00">height + 2016 &gt;= timeoutheight AND lockinontimeout</text>
</g>
<!-- FAILED -->
<g id="node4" class="node">
<title>FAILED</title>
<path fill="#ffa0a0" stroke="black" stroke-width="2" d="M114,-129.75C114,-129.75 30,-129.75 30,-129.75 24,-129.75 18,-123.75 18,-117.75 18,-117.75 18,-105.75 18,-105.75 18,-99.75 24,-93.75 30,-93.75 30,-93.75 114,-93.75 114,-93.75 120,-93.75 126,-99.75 126,-105.75 126,-105.75 126,-117.75 126,-117.75 126,-123.75 120,-129.75 114,-129.75"/>
<text text-anchor="middle" x="72" y="-108.05" font-family="Arial" font-size="14.00">FAILED</text>
</g>
<!-- STARTED&#45;&gt;FAILED -->
<g id="edge3" class="edge">
<title>STARTED&#45;&gt;FAILED</title>
<path fill="none" stroke="black" d="M72,-210.28C72,-191.69 72,-161.99 72,-140.25"/>
<polygon fill="black" stroke="black" points="75.5,-140 72,-130 68.5,-140 75.5,-140"/>
<text text-anchor="middle" x="162.5" y="-181.55" font-family="Times,serif" font-size="14.00">height &gt;= timeoutheight</text>
<text text-anchor="middle" x="162.5" y="-166.55" font-family="Times,serif" font-size="14.00">AND</text>
<text text-anchor="middle" x="162.5" y="-151.55" font-family="Times,serif" font-size="14.00">NOT lockinontimeout</text>
</g>
<!-- LOCKED_IN -->
<g id="node5" class="node">
<title>LOCKED_IN</title>
<path fill="#ffffa0" stroke="black" stroke-width="2" d="M634,-129.75C634,-129.75 550,-129.75 550,-129.75 544,-129.75 538,-123.75 538,-117.75 538,-117.75 538,-105.75 538,-105.75 538,-99.75 544,-93.75 550,-93.75 550,-93.75 634,-93.75 634,-93.75 640,-93.75 646,-99.75 646,-105.75 646,-105.75 646,-117.75 646,-117.75 646,-123.75 640,-129.75 634,-129.75"/>
<text text-anchor="middle" x="592" y="-108.05" font-family="Arial" font-size="14.00">LOCKED_IN</text>
</g>
<!-- STARTED&#45;&gt;LOCKED_IN -->
<g id="edge7" class="edge">
<title>STARTED&#45;&gt;LOCKED_IN</title>
<path fill="none" stroke="black" d="M126.08,-218.75C163.11,-212.29 213.23,-202.95 257,-192.75 329.78,-175.79 346.33,-165.17 419,-147.75 454.78,-139.17 495.06,-130.94 527.74,-124.62"/>
<polygon fill="black" stroke="black" points="528.47,-128.04 537.63,-122.72 527.15,-121.17 528.47,-128.04"/>
<text text-anchor="middle" x="503.5" y="-181.55" font-family="Times,serif" font-size="14.00">height &lt; timeoutheight</text>
<text text-anchor="middle" x="503.5" y="-166.55" font-family="Times,serif" font-size="14.00">AND</text>
<text text-anchor="middle" x="503.5" y="-151.55" font-family="Times,serif" font-size="14.00">threshold reached</text>
</g>
<!-- MUST_SIGNAL&#45;&gt;LOCKED_IN -->
<g id="edge6" class="edge">
<title>MUST_SIGNAL&#45;&gt;LOCKED_IN</title>
<path fill="none" stroke="black" d="M592,-210.28C592,-191.69 592,-161.99 592,-140.25"/>
<polygon fill="black" stroke="black" points="595.5,-140 592,-130 588.5,-140 595.5,-140"/>
<text text-anchor="middle" x="616.5" y="-166.55" font-family="Times,serif" font-size="14.00">always</text>
</g>
<!-- FAILED&#45;&gt;FAILED -->
<g id="edge12" class="edge">
<title>FAILED:sw&#45;&gt;FAILED:nw</title>
<path fill="none" stroke="black" d="M18,-93.75C12,-83.25 0,-83.25 0,-111.75 0,-130.01 4.92,-136.57 10.04,-136.17"/>
<polygon fill="black" stroke="black" points="12.41,-138.75 18,-129.75 8.02,-133.3 12.41,-138.75"/>
</g>
<!-- FAILED&#45;&gt;LOCKED_IN -->
<!-- LOCKED_IN&#45;&gt;LOCKED_IN -->
<g id="edge5" class="edge">
<title>LOCKED_IN:se&#45;&gt;LOCKED_IN:ne</title>
<path fill="none" stroke="black" d="M646,-93.75C652,-83.25 664,-83.25 664,-111.75 664,-130.01 659.08,-136.57 653.96,-136.17"/>
<polygon fill="black" stroke="black" points="655.98,-133.3 646,-129.75 651.59,-138.75 655.98,-133.3"/>
<text text-anchor="middle" x="796.5" y="-108.05" font-family="Times,serif" font-size="14.00">height &lt; minimum_activation_height</text>
</g>
<!-- ACTIVE -->
<g id="node6" class="node">
<title>ACTIVE</title>
<path fill="#a0ffa0" stroke="black" stroke-width="2" d="M634,-42.75C634,-42.75 550,-42.75 550,-42.75 544,-42.75 538,-36.75 538,-30.75 538,-30.75 538,-18.75 538,-18.75 538,-12.75 544,-6.75 550,-6.75 550,-6.75 634,-6.75 634,-6.75 640,-6.75 646,-12.75 646,-18.75 646,-18.75 646,-30.75 646,-30.75 646,-36.75 640,-42.75 634,-42.75"/>
<text text-anchor="middle" x="592" y="-21.05" font-family="Arial" font-size="14.00">ACTIVE</text>
</g>
<!-- LOCKED_IN&#45;&gt;ACTIVE -->
<g id="edge4" class="edge">
<title>LOCKED_IN&#45;&gt;ACTIVE</title>
<path fill="none" stroke="black" d="M592,-93.55C592,-81.91 592,-66.3 592,-52.99"/>
<polygon fill="black" stroke="black" points="595.5,-52.93 592,-42.93 588.5,-52.93 595.5,-52.93"/>
<text text-anchor="middle" x="730.5" y="-64.55" font-family="Times,serif" font-size="14.00">height &gt;= minimum_activation_height</text>
</g>
<!-- ACTIVE&#45;&gt;ACTIVE -->
<g id="edge11" class="edge">
<title>ACTIVE:sw&#45;&gt;ACTIVE:nw</title>
<path fill="none" stroke="black" d="M538,-6.75C532,3.75 520,3.75 520,-24.75 520,-43.01 524.92,-49.57 530.04,-49.17"/>
<polygon fill="black" stroke="black" points="532.41,-51.75 538,-42.75 528.02,-46.3 532.41,-51.75"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -1,13 +1,14 @@
<pre>
BIP: 9
Title: Version bits with timeout and delay
Author: Pieter Wuille <pieter.wuille@gmail.com>
Peter Todd <pete@petertodd.org>
Greg Maxwell <greg@xiph.org>
Rusty Russell <rusty@rustcorp.com.au>
Status: Draft
Authors: Pieter Wuille <pieter.wuille@gmail.com>
Peter Todd <pete@petertodd.org>
Greg Maxwell <greg@xiph.org>
Rusty Russell <rusty@rustcorp.com.au>
Status: Deployed
Type: Informational
Created: 2015-10-04
Assigned: 2015-10-04
License: PD
</pre>
==Abstract==
@ -16,14 +17,15 @@ This document specifies a proposed change to the semantics of the 'version' fiel
==Motivation==
BIP 34 introduced a mechanism for doing soft-forking changes without a predefined flag timestamp (or flag block height), instead relying on measuring miner support indicated by a higher version number in block headers. As it relies on comparing version numbers as integers however, it only supports one single change being rolled out at once, requiring coordination between proposals, and does not allow for permanent rejection: as long as one soft fork is not fully rolled out, no future one can be scheduled.
[[bip-0034.mediawiki|BIP 34]] introduced a mechanism for doing soft-forking changes without a predefined flag timestamp (or flag block height), instead relying on measuring miner support indicated by a higher version number in block headers. As it relies on comparing version numbers as integers however, it only supports one single change being rolled out at once, requiring coordination between proposals, and does not allow for permanent rejection: as long as one soft fork is not fully rolled out, no future one can be scheduled.
In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule after its 95% threshold was reached, removing 2<sup>31</sup>+2 values from the set of valid version numbers (all negative numbers, as nVersion is interpreted as a signed integer, as well as 0 and 1). This indicates another downside this approach: every upgrade permanently restricts the set of allowed nVersion field values. This approach was later reused in BIP 66 and BIP 65, which further removed nVersions 2 and 3 as valid options. As will be shown further, this is unnecessary.
In addition, BIP 34 made the integer comparison (nVersion >= 2) a consensus rule after its 95% threshold was reached, removing 2<sup>31</sup>+2 values from the set of valid version numbers (all negative numbers, as nVersion is interpreted as a signed integer, as well as 0 and 1). This indicates another downside this approach: every upgrade permanently restricts the set of allowed nVersion field values. This approach was later reused in [[bip-0066.mediawiki|BIP 66]] and [[bip-0065.mediawiki|BIP 65]], which further removed nVersions 2 and 3 as valid options. As will be shown further, this is unnecessary.
==Specification==
Each soft fork deployment is specified by the following per-chain parameters (further elaborated below):
# The '''name''' specifies a very brief description of the soft fork, reasonable for use as an identifier. For deployments described in a single BIP, it is recommended to use the name "bipN" where N is the appropriate BIP number.
# The '''bit''' determines which bit in the nVersion field of the block is to be used to signal the soft fork lock-in and activation. It is chosen from the set {0,1,2,...,28}.
# The '''starttime''' specifies a minimum median time past of a block at which the bit gains its meaning.
# The '''timeout''' specifies a time at which the deployment is considered failed. If the median time past of a block >= timeout and the soft fork has not yet locked in (including this block's bit state), the deployment is considered failed on all descendants of the block.
@ -32,6 +34,7 @@ Each soft fork deployment is specified by the following per-chain parameters (fu
The following guidelines are suggested for selecting these parameters for a soft fork:
# '''name''' should be selected such that no two softforks, concurrent or otherwise, ever use the same name.
# '''bit''' should be selected such that no two concurrent softforks use the same bit.
# '''starttime''' should be set to some date in the future, approximately one month after a software release date including the soft fork. This allows for some release delays, while preventing triggers as a result of parties running pre-release software.
# '''timeout''' should be 1 year (31536000 seconds) after starttime.
@ -51,6 +54,8 @@ With each block and soft fork, we associate a deployment state. The possible sta
===Bit flags===
The nVersion block header field is to be interpreted as a 32-bit little-endian integer (as present), and bits are selected within this integer as values (1 << N) where N is the bit number.
Blocks in the STARTED state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be
001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive.
@ -105,14 +110,14 @@ referred to as MTP in the diagram above, and is treated as a monotonic clock def
After a period in the STARTED state, if we're past the timeout, we switch to FAILED. If not, we tally the bits set,
and transition to LOCKED_IN if a sufficient number of blocks in the past period set the deployment bit in their
version numbers. The threshold is 1915 blocks (95% of 2016), or 1512 for testnet (75% of 2016).
The transition to FAILED takes precendence, as otherwise an ambiguity can arise.
version numbers. The threshold is ≥1916 blocks (95% of 2016), or ≥1512 for testnet (75% of 2016).
The transition to FAILED takes precedence, as otherwise an ambiguity can arise.
There could be two non-overlapping deployments on the same bit, where the first one transitions to LOCKED_IN while the
other one simultaneously transitions to STARTED, which would mean both would demand setting the bit.
Note that a block's state never depends on its own nVersion; only on that of its ancestors.
case STARTED: {
case STARTED:
if (GetMedianTimePast(block.parent) >= timeout) {
return FAILED;
}
@ -120,14 +125,14 @@ Note that a block's state never depends on its own nVersion; only on that of its
walk = block;
for (i = 0; i < 2016; i++) {
walk = walk.parent;
if (walk.nVersion & 0xE0000000 == 0x2000000 && (walk.nVersion >> bit) & 1 == 1) {
if (walk.nVersion & 0xE0000000 == 0x20000000 && (walk.nVersion >> bit) & 1 == 1) {
count++;
}
}
if (count >= threshold) {
return LOCKED_IN;
}
}
return STARTED;
After a retarget period of LOCKED_IN, we automatically transition to ACTIVE.
@ -157,12 +162,48 @@ block, indexed by its parent.
To support upgrade warnings, an extra "unknown upgrade" is tracked, using the "implicit bit" mask = (block.nVersion & ~expectedVersion) != 0. Mask will be non-zero whenever an unexpected bit is set in nVersion. Whenever LOCKED_IN for the unknown upgrade is detected, the software should warn loudly about the upcoming soft fork. It should warn even more loudly after the next retarget period (when the unknown upgrade is in the ACTIVE state).
===getblocktemplate changes===
The template request Object is extended to include a new item:
{| class="wikitable"
!colspan=4| template request
|-
! Key !! Required !! Type !! Description
|-
| rules || No || Array of Strings || list of supported softfork deployments, by name
|}
The template Object is also extended:
{| class="wikitable"
!colspan=4| template
|-
! Key !! Required !! Type !! Description
|-
| rules || Yes || Array of Strings || list of softfork deployments, by name, that are active state
|-
| vbavailable || Yes || Object || set of pending, supported softfork deployments; each uses the softfork name as the key, and the softfork bit as its value
|-
| vbrequired || No || Number || bit mask of softfork deployment version bits the server requires enabled in submissions
|}
The "version" key of the template is retained, and used to indicate the server's preference of deployments.
If versionbits is being used, "version" MUST be within the versionbits range of [0x20000000...0x3FFFFFFF].
Miners MAY clear or set bits in the block version WITHOUT any special "mutable" key, provided they are listed among the template's "vbavailable" and (when clearing is desired) NOT included as a bit in "vbrequired".
Softfork deployment names listed in "rules" or as keys in "vbavailable" may be prefixed by a '!' character.
Without this prefix, GBT clients may assume the rule will not impact usage of the template as-is; typical examples of this would be when previously valid transactions cease to be valid, such as BIPs [[bip-0016.mediawiki|16]], [[bip-0065.mediawiki|65]], [[bip-0066.mediawiki|66]], [[bip-0068.mediawiki|68]], [[bip-0112.mediawiki|112]], and [[bip-0113.mediawiki|113]].
If a client does not understand a rule without the prefix, it may use it unmodified for mining.
On the other hand, when this prefix is used, it indicates a more subtle change to the block structure or generation transaction; examples of this would be [[bip-0034.mediawiki|BIP 34]] (because it modifies coinbase construction) and [[bip-0141.mediawiki|141]] (since it modifies the txid hashing and adds a commitment to the generation transaction).
A client that does not understand a rule prefixed by '!' must not attempt to process the template, and must not attempt to use it for mining even unmodified.
==Support for future changes==
The mechanism described above is very generic, and variations are possible for future soft forks. Here are some ideas that can be taken into account.
'''Modified thresholds'''
The 1915 threshold (based on in BIP 34's 95%) does not have to be maintained for eternity, but changes should take the effect on the warning system into account. In particular, having a lock-in threshold that is incompatible with the one used for the warning system may have long-term effects, as the warning system cannot rely on a permanently detectable condition anymore.
The 1916 threshold (based on BIP 34's 95%) does not have to be maintained for eternity, but changes should take the effect on the warning system into account. In particular, having a lock-in threshold that is incompatible with the one used for the warning system may have long-term effects, as the warning system cannot rely on a permanently detectable condition anymore.
'''Conflicting soft forks'''
At some point, two mutually exclusive soft forks may be proposed. The naive way to deal with this is to never create software that implements both, but that is making a bet that at least one side is guaranteed to lose. Better would be to encode "soft fork X cannot be locked-in" as consensus rule for the conflicting soft fork - allowing software that supports both, but can never trigger conflicting changes.
@ -174,7 +215,7 @@ Soft forks right now are typically treated as booleans: they go from an inactive
The failure timeout allows eventual reuse of bits even if a soft fork was
never activated, so it's clear that the new use of the bit refers to a
new BIP. It's deliberately very course grained, to take into account
new BIP. It's deliberately very coarse-grained, to take into account
reasonable development and deployment delays. There are unlikely to be
enough failed proposals to cause a bit shortage.
@ -182,6 +223,10 @@ The fallow period at the conclusion of a soft fork attempt allows some
detection of buggy clients, and allows time for warnings and software
upgrades for successful soft forks.
==Deployments==
A living list of deployment proposals can be found [[bip-0009/assignments.mediawiki|here]].
==Copyright==
This document is placed in the public domain.

View File

@ -0,0 +1,37 @@
==Deployments==
List of proposed deployments.
State can be defined, active, failed. Dates are in UTC.
{| class="wikitable sortable"
! Name
! Bit
! Mainnet Start
! Mainnet Expire
! Mainnet State
! Testnet Start
! Testnet Expire
! Testnet State
! BIPs
|-
| csv
| 0
| 2016-05-01 00:00:00
| 2017-05-01 00:00:00
| active since #419328
| 2016-03-01 00:00:00
| 2017-05-01 00:00:00
| active since #770112
| [[/bip-0068.mediawiki|68]], [[/bip-0112.mediawiki|112]], [[/bip-0113.mediawiki|113]]
|-
| segwit
| 1
| 2016-11-15 00:00:00
| 2017-11-15 00:00:00
| active since #481824
| 2016-05-01 00:00:00
| 2017-05-01 00:00:00
| active since #834624
| [[/bip-0141.mediawiki|141]], [[/bip-0143.mediawiki|143]], [[/bip-0147.mediawiki|147]]
|}

22
bip-0009/states.gv Normal file
View File

@ -0,0 +1,22 @@
/* There are many ways to compile this, but one of them is:
*
* $ dot -Tpng states.gv -o states.png
*/
digraph {
/* States. */
DEFINED; FAILED; STARTED; LOCKED_IN; ACTIVE;
/* Relationships between states, labeled where applicable. */
DEFINED -> DEFINED;
DEFINED -> FAILED [label = "timeout ≤ MTP"];
DEFINED -> STARTED [label = "starttime ≤ MTP < timeout"];
FAILED -> FAILED;
STARTED -> STARTED;
STARTED -> FAILED [label = "timeout ≤ MTP"];
STARTED -> LOCKED_IN [label = "(MTP < timeout) AND (threshold reached)"];
LOCKED_IN -> ACTIVE [label = "Always"];
ACTIVE -> ACTIVE;
/* Visualization hack to unclutter output. */
nodesep = 1.2;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -1,10 +1,11 @@
<pre>
BIP: 10
Layer: Applications
Title: Multi-Sig Transaction Distribution
Author: Alan Reiner <etotheipi@gmail.com>
Status: Withdrawn
Authors: Alan Reiner <etotheipi@gmail.com>
Status: Closed
Type: Informational
Created: 2011-10-28
Assigned: 2011-10-28
</pre>
A multi-signature transaction is one where a certain number of Bitcoins are "encumbered" with more than one recipient address. The subsequent transaction that spends these coins will require each party involved (or some subset, depending on the script), to see the proposed transaction and sign it with their private key. This necessarily requires collaboration between all parties -- to propose a distribution of encumbered funds, collect signatures from all necessary participants, and then broadcast the completed transaction.
@ -25,7 +26,7 @@ This BIP proposes the following process, with terms in quotes referring to recom
# One party will initiate this process by creating a "Distribution Proposal", which could be abbreviated DP, or TxDP
# The user creating the TxDP (the preparer) will create the transaction as they would like to see it spent, but with blank TxIn scripts (where the signatures scripts will eventually go).
# The proposed transaction will be spending a set of unspent TxOuts available in the blockchain. The full transactions containing these TxOuts will be serialized and included, as well. This so that the values of the TxIns can be verified before signing (the prev-tx-hash is part of the data being signed, but the value is not). By including the full tx, the signing party can verify that the tx matches the OutPoint hash, and then verify input values, all without any access to the blockchain.
# The TxDP will have an "DP ID" or "Unsigned ID" which is the hash of the proposed transaction with blanked scripts, in Base58. This is a specific naming convention to make sure it is not confused with the actual the transaction ID that it will have after it is broadcast (the transaction ID cannot be determined until after all signatures are collected). The final Tx ID can be referred to as its "Broadcast ID", in order to distinguish it from the pre-signed ID.
# The TxDP will have an "DP ID" or "Unsigned ID" which is the hash of the proposed transaction with blanked scripts, in Base58. This is a specific naming convention to make sure it is not confused with the actual transaction ID that it will have after it is broadcast (the transaction ID cannot be determined until after all signatures are collected). The final Tx ID can be referred to as its "Broadcast ID", in order to distinguish it from the pre-signed ID.
# The TxDP will have a potentially-unordered list of sig-pubkey pairs which represent collected signatures. If you receive a TxDP missing only your signature, you can broadcast it as soon as you sign it.
# Identical TxDP objects with different signatures can be easily combined. This allows one party to send out all the requests for signatures at once, and combine them all when they are received (instead of having to "pass it around".
# For cases where the TxDP might be put into a file or sent via email, it should use .txdp or .btcdp suffix
@ -90,10 +91,17 @@ The following is an example TxDP from Armory, produced while running on the test
In this transaction, there are two inputs, one of 150 BTC and the other of 12 BTC. This transaction combines 162 BTC to create two outputs, one of 160 BTC, one 1.9995 BTC, and a tx fee of 0.0005. In this TxDP, both inputs have been signed, and thus could broadcast immediately.
The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpretted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP.
The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpreted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP.
A party receiving this TxDP can simply add their signature to the appropriate _TXINPUT_ line. If that is the last signature required, they can broadcast it themselves. Any software that implements this standard should be able to combine multiple TxDPs into a single TxDP. However, even without the programmatic support, a user could manually combine them by copying the appropriate _TXSIGS_ lines between serializations, though it is not the recommended method for combining TxDPs.
A party receiving this TxDP can simply add their signature to the appropriate _TXINPUT_ line. If that is the last signature required, they can broadcast it themselves. Any software that implements this standard should be able to combine multiple TxDPs into a single TxDP. However, even without the programmatic support, a user could manually combine them by copying the appropriate _SIG_ lines between serializations, though it is not the recommended method for combining TxDPs.
== Changelog ==
* 2014-11-26:
** Withdrawn after Armory stopped using BIP10 and no other projects were known to implement support (see [https://github.com/bitcoin/bips/pull/125 bips#125]).
* 2011-10-28:
** Original Draft published.
== Reference Implementation ==
This proposal was implemented and tested in the older versions of ''Armory'' Bitcoin software for use in offline-wallet transaction signing (as a 1-of-1 transaction). Implementation can be found in https://github.com/etotheipi/BitcoinArmory/blob/v0.91-beta/armoryengine/Transaction.py under the class PyTxDistProposal. However, as of verion 0.92 released in July 2014, Armory no longer uses this proposal for offline wallet transaction signing and has moved on to a new format.
This proposal was implemented and tested in the older versions of ''Armory'' Bitcoin software for use in offline-wallet transaction signing (as a 1-of-1 transaction). Implementation can be found in https://github.com/etotheipi/BitcoinArmory/blob/v0.91-beta/armoryengine/Transaction.py under the class PyTxDistProposal. However, as of version 0.92 released in July 2014, Armory no longer uses this proposal for offline wallet transaction signing and has moved on to a new format.

View File

@ -1,11 +1,12 @@
<pre>
BIP: 11
Layer: Applications
Title: M-of-N Standard Transactions
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2011-10-18
Post-History: 2011-10-02
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2011-10-18
Discussion: 2011-10-02
</pre>
==Abstract==
@ -20,7 +21,7 @@ A couple of motivating use cases:
* A wallet secured by a "wallet protection service" (WPS). 2-of-2 signatures required transactions will be used, with one signature coming from the (possibly compromised) computer with the wallet and the second signature coming from the WPS. When sending protected bitcoins, the user's bitcoin client will contact the WPS with the proposed transaction and it can then contact the user for confirmation that they initiated the transaction and that the transaction details are correct. Details for how clients and WPS's communicate are outside the scope of this BIP. Side note: customers should insist that their wallet protection service provide them with copies of the private key(s) used to secure their wallets that they can safely store off-line, so that their coins can be spent even if the WPS goes out of business.
* Three-party escrow (buyer, seller and trusted dispute agent). 2-of-3 signatures required transactions will be used. The buyer and seller and agent will each provide a public key, and the buyer will then send coins into a 2-of-3 CHECKMULTISIG transaction and send the seller and the agent the transaction id. The seller will fulfill their obligation and then ask the buyer to co-sign a transaction ( already signed by seller ) that sends the tied-up coins to him (seller).<br />If the buyer and seller cannot agree, then the agent can, with the cooperation of either buyer or seller, decide what happens to the tied-up coins. Details of how buyer, seller, and agent communicate to gather signatures or public keys are outside the scope of this BIP.
* Three-party escrow (buyer, seller, and trusted dispute agent). 2-of-3 signatures required transactions will be used. The buyer and seller and agent will each provide a public key, and the buyer will then send coins into a 2-of-3 CHECKMULTISIG transaction and send the seller and the agent the transaction id. The seller will fulfill their obligation and then ask the buyer to co-sign a transaction ( already signed by seller ) that sends the tied-up coins to him (seller).<br />If the buyer and seller cannot agree, then the agent can, with the cooperation of either buyer or seller, decide what happens to the tied-up coins. Details of how buyer, seller, and agent communicate to gather signatures or public keys are outside the scope of this BIP.
==Specification==
@ -35,7 +36,7 @@ OP_CHECKMULTISIG transactions are redeemed using a standard scriptSig:
(OP_0 is required because of a bug in OP_CHECKMULTISIG; it pops one too many items off the execution stack, so a dummy value must be placed on the stack).
The current Satoshi bitcoin client does not relay or mine transactions with scriptSigs larger than 200 bytes; to accomodate 3-signature transactions, this will be increased to 500 bytes.
The current Satoshi bitcoin client does not relay or mine transactions with scriptSigs larger than 200 bytes; to accommodate 3-signature transactions, this will be increased to 500 bytes.
==Rationale==
@ -51,7 +52,7 @@ A weaker argument is OP_CHECKMULTISIG should not be used because it pops one too
OP_CHECKMULTISIG is already supported by old clients and miners as a non-standard transaction type.
https://github.com/gavinandresen/bitcoin-git/tree/op_eval
https://github.com/gavinandresen/bitcoin-git/tree/77f21f1583deb89bf3fffe80fe9b181fedb1dd60
== Post History ==

View File

@ -1,10 +1,11 @@
<pre>
BIP: 12
Layer: Consensus (soft fork)
Title: OP_EVAL
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Withdrawn
Type: Standards Track
Created: 2011-10-18
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Closed
Type: Specification
Assigned: 2011-10-18
</pre>
==Abstract==
@ -40,11 +41,11 @@ OP_EVAL allows the receiver of bitcoins to specify how they can be spent when th
If ''serialized script'' is a large or complicated multi-signature script, then the burden of paying for it (in increased transaction fees due to more signature operations or transaction size) is shifted from the sender to the receiver.
The main objection to OP_EVAL is that it adds complexity, and complexity is the enemy of security. Also, evaluating data as code has a long record of being a source of security vulnerabilties.
The main objection to OP_EVAL is that it adds complexity, and complexity is the enemy of security. Also, evaluating data as code has a long record of being a source of security vulnerabilities.
That same argument can be applied to the existing Bitcoin 'scripting' system; scriptPubKeys are transmit as data across the network and are then interpreted by every bitcoin implementation. OP_EVAL just moves the data that will be interpreted. It is debatable whether or not the entire idea of putting a little interpreted expression evaluation language at the core of Bitcoin was brilliant or stupid, but the existence of OP_EVAL does not make the expression language less secure.
There is a 1-confirmation attack on old clients that interepret OP_EVAL as a no-op, but it is expensive and difficult in practice. The attack is:
There is a 1-confirmation attack on old clients that interpret OP_EVAL as a no-op, but it is expensive and difficult in practice. The attack is:
# Attacker creates an OP_EVAL transaction that is valid as seen by old clients, but invalid for new clients.
# Attacker also creates a standard transaction that spends the OP_EVAL transaction, and pays the victim.
@ -72,7 +73,7 @@ Example of a transaction that must fail for both old and new miners/clients:
==Reference Implementation==
https://github.com/gavinandresen/bitcoin-git/tree/op_eval
https://github.com/gavinandresen/bitcoin-git/tree/77f21f1583deb89bf3fffe80fe9b181fedb1dd60
==See Also==

View File

@ -1,17 +1,18 @@
<pre>
BIP: 13
Layer: Applications
Title: Address Format for pay-to-script-hash
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2011-10-18
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2011-10-18
</pre>
==Abstract==
This BIP describes a new type of Bitcoin address to support arbitrarily complex transactions. Complexity in this context is defined as what information is needed by the recipient to respend the received coins, in contrast to needing a single ECDSA private key as in current implementations of Bitcoin.
In essence, an address encoded under this proposal represents the encoded hash of a [[script]], rather than the encoded hash of an ECDSA public key.
In essence, an address encoded under this proposal represents the encoded hash of a [https://en.bitcoin.it/wiki/Script script], rather than the encoded hash of an ECDSA public key.
==Motivation==
@ -19,7 +20,7 @@ Enable "end-to-end" secure wallets and payments to fund escrow transactions or o
==Specification==
The new bitcoin address type is constructed in the same manner as existing bitcoin addresses (see [[Base58Check encoding]]):
The new bitcoin address type is constructed in the same manner as existing bitcoin addresses (see [https://en.bitcoin.it/Base58Check_encoding Base58Check encoding]):
base58-encode: [one-byte version][20-byte hash][4-byte checksum]
@ -47,7 +48,7 @@ This proposal is not backwards compatible, but it fails gracefully-- if an older
==Reference Implementation==
See base58.cpp1/base58.h at https://github.com/bitcoin/bitcoin/src
See base58.cpp/base58.h at https://github.com/bitcoin/bitcoin/tree/master/src
==See Also==

View File

@ -1,12 +1,14 @@
<pre>
BIP: 14
Layer: Peer Services
Title: Protocol Version and User Agent
Author: Amir Taaki <genjix@riseup.net>
Patrick Strateman <bitcoin-bips@covertinferno.org>
Status: Final
Type: Standards Track
Created: 2011-11-10
Post-History: 2011-11-02
Authors: Amir Taaki <genjix@riseup.net>
Patrick Strateman <bitcoin-bips@covertinferno.org>
Status: Deployed
Type: Specification
Assigned: 2011-11-10
Discussion: 2011-11-02: https://gnusha.org/pi/bitcoindev/1320268981.72296.YahooMailNeo@web121003.mail.ne1.yahoo.com/
2011-11-10: https://gnusha.org/pi/bitcoindev/1320959761.36702.YahooMailNeo@web121014.mail.ne1.yahoo.com/
</pre>
In this document, bitcoin will be used to refer to the protocol while Satoshi will refer to the current client in order to prevent confusion.
@ -25,7 +27,7 @@ Version bumping can also introduce incompatibilities and fracture the network. I
By using a protocol version, we set all implementations on the network to a common standard. Everybody is able to agree within their confines what is protocol and what is implementation-dependent. A user agent string is offered as a 'vanity-plate' for clients to distinguish themselves in the network.
Separation of the network protocol from the implemention, and forming development of said protocol by means of a mutual consensus among participants, has the democratic disadvantage when agreement is hard to reach on contentious issues. To mitigate this issue, strong communication channels and fast release schedules are needed, and are outside the scope of this document (concerning a process-BIP type).
Separation of the network protocol from the implementation, and forming development of said protocol by means of a mutual consensus among participants, has the democratic disadvantage when agreement is hard to reach on contentious issues. To mitigate this issue, strong communication channels and fast release schedules are needed, and are outside the scope of this document (concerning a process-BIP type).
User agents provide extra tracking information that is useful for keeping tabs on network data such as client implementations used or common architectures/operating-systems. In the rare case they may even provide an emergency method of shunning faulty clients that threaten network health- although this is strongly unrecommended and extremely bad form. The user agent does not provide a method for clients to work around and behave differently to different implementations, as this will lead to protocol fracturing.

View File

@ -1,15 +1,16 @@
<pre>
BIP: 15
Layer: Applications
Title: Aliases
Author: Amir Taaki <genjix@riseup.net>
Status: Deferred
Type: Standards Track
Created: 2011-12-10
Authors: Amir Taaki <genjix@riseup.net>
Status: Closed
Type: Specification
Assigned: 2011-12-10
</pre>
[[bip-0070.mediawiki|BIP 0070]] (payment protocol) may be seen as the alternative to Aliases.
Using vanilla bitcoin, to send funds to a destination, an address in the form 1Hd44nkJfNAcPJeZyrGC5sKJS1TzgmCTjjZ is needed. The problem with using addresses is they are not easy to remember. An analogy can be thought if one were required to enter the IP address of their favourite websites if domain names did not exist.
Using vanilla bitcoin, to send funds to a destination, an address in the form 1Hd44nkJfNAcPJeZyrGC5sKJS1TzgmCTjjZ is needed. The problem with using addresses is that they are not easy to remember. An analogy can be thought if one were required to enter the IP address of their favourite websites if domain names did not exist.
This document aims to layout through careful argument, a bitcoin alias system. This is a big modification to the protocol that is not easily changed in the future and has big ramifications. There is impetus in getting it correct the first time. Aliases have to be robust and secure.
@ -33,7 +34,7 @@ Their FirstBits alias becomes:
It is enough information to be given the FirstBits alias ''1brmlab''. When someone wishes to make a purchase, without FirstBits, they either have to type out their address laboriously by hand, scan their QR code (which requires a mobile handset that this author does not own) or find their address on the internet to copy and paste into the client to send bitcoins. FirstBits alleviates this impracticality by providing an easy method to make payments.
Together with [[vanitygen|Vanitygen (vanity generator)]], it becomes possible to create memorable unique named addresses. Addresses that are meaningful, rather than an odd assemblage of letters and numbers but add context to the destination.
Together with Vanitygen (vanity generator), it becomes possible to create memorable unique named addresses. Addresses that are meaningful, rather than an odd assemblage of letters and numbers but add context to the destination.
However FirstBits has its own problems. One is that the possible aliases one is able to generate is limited by the available computing power available. It may not be feasible to generate a complete or precise alias that is wanted- only approximates may be possible. It is also computationally resource intensive which means a large expenditure of power for generating unique aliases in the future, and may not scale up to the level of individuals at home or participants with hand-held devices in an environment of ubiquitous computing.
@ -205,7 +206,7 @@ NameResolutionService::~NameResolutionService()
void NameResolutionService::ExplodeHandle(const string& strHandle, string& strNickname, string& strDomain)
{
// split address at @ furthrest to the right
// split address at @ furthest to the right
size_t nPosAtsym = strHandle.rfind('@');
strNickname = strHandle.substr(0, nPosAtsym);
strDomain = strHandle.substr(nPosAtsym + 1, strHandle.size());
@ -345,7 +346,7 @@ By using DNS lookups, the MITM problem with IP transactions could be mitigated b
=== Namecoin ID ===
This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retreives the structured data containing the bitcoin address(es) associated with this alias.
This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retrieves the structured data containing the bitcoin address(es) associated with this alias.
Using a decentralised domain name system like Namecoin, means no external server or entity needs to be trusted unlike the other proposals listed here. This indicates a system with the advantage of having a high availability and ease of entry (no restrictions for users to create aliases).
@ -398,4 +399,4 @@ Any text can be put into the brackets, allowing merchants to adapt it to all the
New features can be added later to support uncovered cases.
See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more informations.
See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more information.

View File

@ -1,10 +1,11 @@
<pre>
BIP: 16
Layer: Consensus (soft fork)
Title: Pay to Script Hash
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2012-01-03
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2012-01-03
</pre>
==Abstract==
@ -37,7 +38,7 @@ The rules for validating these outpoints when relaying transactions or consideri
# Normal validation is done: an initial stack is created from the signatures and {serialized script}, and the hash of the script is computed and validation fails immediately if it does not match the hash in the outpoint.
# {serialized script} is popped off the initial stack, and the transaction is validated again using the popped stack and the deserialized script as the scriptPubKey.
These new rules should only be applied when validating transactions in blocks with timestamps >= 1333238400 (Apr 1 2012) <ref>[https://github.com/bitcoin/bitcoin/commit/8f188ece3c82c4cf5d52a3363e7643c23169c0ff Remove -bip16 and -paytoscripthashtime command-line arguments]</ref>. There are transaction earlier than 1333238400 in the block chain that fail these new validation rules. <ref>[http://blockexplorer.com/tx/6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192 Transaction 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192]</ref>. Older transactions must be validated under the old rules. (see the Backwards Compatibility section for details).
These new rules should only be applied when validating transactions in blocks with timestamps >= 1333238400 (Apr 1 2012) <ref>[https://github.com/bitcoin/bitcoin/commit/8f188ece3c82c4cf5d52a3363e7643c23169c0ff Remove -bip16 and -paytoscripthashtime command-line arguments]</ref>. There are transactions earlier than 1333238400 in the block chain that fail these new validation rules. <ref>[https://web.archive.org/web/20141122040355/http://blockexplorer.com/tx/6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192 Transaction 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192]</ref>. Older transactions must be validated under the old rules. (see the Backwards Compatibility section for details).
For example, the scriptPubKey and corresponding scriptSig for a one-signature-required transaction is:
@ -55,7 +56,7 @@ Examples:
+3 signature operations:
{2 [pubkey1] [pubkey2] [pubkey3] 3 OP_CHECKMULTISIG}
+22 signature operations
+22 signature operations:
{OP_CHECKSIG OP_IF OP_CHECKSIGVERIFY OP_ELSE OP_CHECKMULTISIGVERIFY OP_ENDIF}
==Rationale==
@ -71,7 +72,7 @@ The signature operation counting rules are intended to be easy and quick to impl
There is a 1-confirmation attack on old implementations, but it is expensive and difficult in practice. The attack is:
# Attacker creates a pay-to-script-hash transaction that is valid as seen by old software, but invalid for new implementation, and sends themselves some coins using it.
# Attacker also creates a standard transaction that spends the pay-to-script transaction, and pays the victim who is running old software.
# Attacker also creates a standard transaction that spends the pay-to-script-hash transaction, and pays the victim who is running old software.
# Attacker mines a block that contains both transactions.
If the victim accepts the 1-confirmation payment, then the attacker wins because both transactions will be invalidated when the rest of the network overwrites the attacker's invalid block.
@ -98,7 +99,7 @@ If a majority of hashing power does not support the new validation rules, then r
===520-byte limitation on serialized script size===
As a consequence of the requirement for backwards compatiblity the serialized script is itself subject to the same rules as any other PUSHDATA operation, including the rule that no data greater than 520 bytes may be pushed to the stack. Thus it is not possible to spend a P2SH output if the redemption script it refers to is >520 bytes in length. For instance while the OP_CHECKMULTISIG opcode can itself accept up to 20 pubkeys, with 33-byte compressed pubkeys it is only possible to spend a P2SH output requiring a maximum of 15 pubkeys to redeem: 3 bytes + 15 pubkeys * 34 bytes/pubkey = 513 bytes.
As a consequence of the requirement for backwards compatibility the serialized script is itself subject to the same rules as any other PUSHDATA operation, including the rule that no data greater than 520 bytes may be pushed to the stack. Thus it is not possible to spend a P2SH output if the redemption script it refers to is >520 bytes in length. For instance while the OP_CHECKMULTISIG opcode can itself accept up to 20 pubkeys, with 33-byte compressed pubkeys it is only possible to spend a P2SH output requiring a maximum of 15 pubkeys to redeem: 3 bytes + 15 pubkeys * 34 bytes/pubkey = 513 bytes.
==Reference Implementation==
@ -113,4 +114,5 @@ https://gist.github.com/gavinandresen/3966071
* [[bip-0016/qa.mediawiki|Quality Assurance test checklist]]
== References ==
<references>
<references/>

View File

@ -1,4 +1,4 @@
This page is a Quality Assurance test plan for [[BIP 16]]. If you see a test missing, please add it.
This page is a Quality Assurance test plan for [[../bip-0016.mediawiki|BIP 16]]. If you see a test missing, please add it.
If you can help test, please edit this page to sign-off on it.
{| class="wikitable"

View File

@ -1,16 +1,22 @@
<pre>
BIP: 17
Layer: Consensus (soft fork)
Title: OP_CHECKHASHVERIFY (CHV)
Author: Luke Dashjr <luke+bip17@dashjr.org>
Status: Withdrawn
Type: Standards Track
Created: 2012-01-18
Authors: Luke Dashjr <luke+bip17@dashjr.org>
Status: Closed
Type: Specification
Assigned: 2012-01-18
License: BSD-2-Clause
</pre>
==Abstract==
This BIP describes a new opcode (OP_CHECKHASHVERIFY) for the Bitcoin scripting system, and a new 'standard' transaction type that uses it to enables the receiver of bitcoins to specify the transaction type needed to re-spend them.
==Copyright==
This BIP is licensed under the BSD 2-clause license.
==Motivation==
The purpose of pay-to-script-hash is to move the responsibility for supplying the conditions to redeem a transaction from the sender of the funds to the redeemer.
@ -78,7 +84,7 @@ Avoiding a block-chain split by malicious pay-to-script transactions requires ca
* A pay-to-script-hash transaction that is invalid for new clients/miners but valid for old clients/miners.
To gracefully upgrade and ensure no long-lasting block-chain split occurs, more than 50% of miners must support full validation of the new transaction type and must switch from the old validation rules to the new rules at the same time.
To gracefully upgrade and ensure no long-lasting block-chain split occurs, more than 50% of miners must support full validation of the new transaction type and must switch from the old validation rules to the new rules at the same time.
To judge whether or not more than 50% of hashing power supports this BIP, miners are asked to upgrade their software and put the string "p2sh/CHV" in the input of the coinbase transaction for blocks that they create.

View File

@ -1,16 +1,22 @@
<pre>
BIP: 18
Layer: Consensus (soft fork)
Title: hashScriptCheck
Author: Luke Dashjr <luke+bip17@dashjr.org>
Status: Draft
Type: Standards Track
Created: 2012-01-27
Authors: Luke Dashjr <luke+bip17@dashjr.org>
Status: Complete
Type: Specification
Assigned: 2012-01-27
License: BSD-2-Clause
</pre>
==Abstract==
This BIP modifies the basic format of transaction inputs and outputs, replacing the current scriptSig and scriptPubKey (scripts executed to validate a transaction) with new contents: dataSig, scriptCheck, and hashScriptCheck.
==Copyright==
This BIP is licensed under the BSD 2-clause license.
==Motivation==
The purpose of pay-to-script-hash is to move the responsibility for supplying the conditions to redeem a transaction from the sender of the funds to the redeemer.

View File

@ -1,16 +1,22 @@
<pre>
BIP: 19
Layer: Applications
Title: M-of-N Standard Transactions (Low SigOp)
Author: Luke Dashjr <luke+bip17@dashjr.org>
Status: Draft
Type: Standards Track
Created: 2012-01-30
Authors: Luke Dashjr <luke+bip17@dashjr.org>
Status: Closed
Type: Specification
Assigned: 2012-01-30
License: BSD-2-Clause
</pre>
==Abstract==
This BIP proposes M-of-N-signatures required transactions as a new 'standard' transaction type using the existing scripting system without significant modifications.
==Copyright==
This BIP is licensed under the BSD 2-clause license.
==Motivation==
Enable secured wallets, escrow transactions, and other use cases where redeeming funds requires more than a single signature.
@ -38,7 +44,7 @@ But only for n less than or equal to 3.
These transactions are redeemed using a standard scriptSig:
...signatures...
The current Satoshi bitcoin client does not relay or mine transactions with scriptSigs larger than 200 bytes; to accomodate 3-signature transactions, this will be increased to 500 bytes.
The current Satoshi bitcoin client does not relay or mine transactions with scriptSigs larger than 200 bytes; to accommodate 3-signature transactions, this will be increased to 500 bytes.
===Templates===
scriptPubKey:

View File

@ -1,10 +1,13 @@
<pre>
BIP: 20
Layer: Applications
Title: URI Scheme
Author: Luke Dashjr <luke+bip@dashjr.org>
Status: Replaced
Type: Standards Track
Created: 2011-01-10
Authors: Luke Dashjr <luke+bip@dashjr.org>
Status: Closed
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'''
@ -12,6 +15,9 @@ BIP 0020 is based off an earlier document by Nils Schneider. '''And has been rep
==Abstract==
This BIP proposes a URI scheme for making Bitcoin payments.
==Copyright==
This BIP is licensed under the BSD 2-clause license.
==Motivation==
The purpose of this URI scheme is to enable users to easily make payments by simply clicking links on webpages or scanning QR Codes.
@ -27,7 +33,7 @@ Graphical bitcoin clients SHOULD register themselves as the handler for the "bit
=== BNF grammar ===
(See also [[#Simpler syntax|a simpler representation of syntax]])
(See also [[#simpler-syntax|a simpler representation of syntax]])
bitcoinurn = "bitcoin:" bitcoinaddress [ ";version=" bitcoinversion ] [ "?" bitcoinparams ]
bitcoinaddress = base58 *base58
@ -47,8 +53,8 @@ Graphical bitcoin clients SHOULD register themselves as the handler for the "bit
*label: Label for that address (e.g. name of receiver)
*address: bitcoin address
*message: message that shown to the user after scanning the QR code
*size: amount of base bitcoin units ([[#Transfer amount/size|see below]])
*message: message that is shown to the user after scanning the QR code
*size: amount of base bitcoin units ([[#transfer-amountsize|see below]])
*send: used to send bitcoin, rather than to request them
*(others): optional, for future extensions
@ -90,7 +96,7 @@ Make it possible for later generations to improve our work, to mend our errors,
=== Simpler syntax ===
This section is non-normative and does not cover all possible syntax.
Please see the [[#BNF grammar|BNF grammar]] above for the normative syntax.
Please see the [[#bnf-grammar|BNF grammar]] above for the normative syntax.
[foo] means optional, &lt;bar&gt; are placeholders

View File

@ -1,13 +1,22 @@
<pre>
BIP: 21
Layer: Applications
Title: URI Scheme
Author: Nils Schneider <nils.schneider@gmail.com>
Matt Corallo <bip21@bluematt.me>
Status: Final
Type: Standards Track
Created: 2012-01-29
Authors: Nils Schneider <nils.schneider@gmail.com>
Matt Corallo <bip21@bluematt.me>
Status: Closed
Type: Specification
Assigned: 2012-01-29
Replaces: 20
Proposed-Replacement: 321
</pre>
=Superseded by BIP 321=
This BIP has been superseded and replaced with BIP 321. Please see [[bip-0321.mediawiki|BIP 321]] instead.
=Original BIP=
This BIP is a modification of an earlier [[bip-0020.mediawiki|BIP 0020]] by Luke Dashjr. BIP 0020 was based off an earlier document by Nils Schneider. The alternative payment amounts in BIP 0020 have been removed.
==Abstract==
@ -34,7 +43,7 @@ Elements of the query component may contain characters outside the valid range.
=== ABNF grammar ===
(See also [[#Simpler syntax|a simpler representation of syntax]])
(See also [[#simpler-syntax|a simpler representation of syntax]])
bitcoinurn = "bitcoin:" bitcoinaddress [ "?" bitcoinparams ]
bitcoinaddress = *base58
@ -54,11 +63,10 @@ The scheme component ("bitcoin:") is case-insensitive, and implementations must
*label: Label for that address (e.g. name of receiver)
*address: bitcoin address
*message: message that describes the transaction to the user ([[#Examples|see examples below]])
*size: amount of base bitcoin units ([[#Transfer amount/size|see below]])
*message: message that describes the transaction to the user ([[#examples|see examples below]])
*(others): optional, for future extensions
==== Transfer amount/size ====
==== Transfer amount ====
If an amount is provided, it MUST be specified in decimal BTC.
All amounts MUST contain no commas and use a period (.) as the separating character to separate whole numbers and decimal fractions.
@ -98,6 +106,8 @@ Please see the BNF grammar above for the normative syntax.
=== Examples ===
Note: The addresses used in these examples are intentionally invalid to prevent accidental transactions.
Just the address:
bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W
@ -118,7 +128,6 @@ Some future version that has variables which are (currently) not understood but
Characters must be URI encoded properly.
== Reference Implementations ==
=== Bitcoin clients ===
* Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858.
== Reference Implementation ==
Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858.

View File

@ -1,10 +1,12 @@
<pre>
BIP: 22
Layer: API/RPC
Title: getblocktemplate - Fundamentals
Author: Luke Dashjr <luke+bip22@dashjr.org>
Status: Final
Type: Standards Track
Created: 2012-02-28
Authors: Luke Dashjr <luke+bip22@dashjr.org>
Status: Deployed
Type: Specification
Assigned: 2012-02-28
License: BSD-2-Clause
</pre>
==Abstract==
@ -12,13 +14,17 @@
This BIP describes a new JSON-RPC method for "smart" Bitcoin miners and proxies.
Instead of sending a simple block header for hashing, the entire block structure is sent, and left to the miner to (optionally) customize and assemble.
==Copyright==
This BIP is licensed under the BSD 2-clause license.
==Specification==
===Block Template Request===
A JSON-RPC method is defined, called "getblocktemplate".
It accepts exactly one argument, which MUST be an Object of request parameters.
If the request parameters include a "mode" key, that is used to explicitly select between the default "template" request or a [[bip-0023.mediawiki#Block Proposal|"proposal"]].
If the request parameters include a "mode" key, that is used to explicitly select between the default "template" request or a [[bip-0023.mediawiki#block-proposal|"proposal"]].
Block template creation can be influenced by various parameters:
{| class="wikitable"
@ -26,9 +32,9 @@ Block template creation can be influenced by various parameters:
|-
! Key !! Required !! Type !! Description
|-
| capabilities || {{No}} || Array of Strings || SHOULD contain a list of the following, to indicate client-side support: [[#Optional: Long Polling|"longpoll"]], "coinbasetxn", "coinbasevalue", [[bip-0023.mediawiki#Block Proposal|"proposal"]], [[bip-0023.mediawiki#Logical Services|"serverlist"]], "workid", and any of the [[bip-0023.mediawiki#Mutations|mutations]]
| capabilities || No || Array of Strings || SHOULD contain a list of the following, to indicate client-side support: [[#optional-long-polling|"longpoll"]], "coinbasetxn", "coinbasevalue", [[bip-0023.mediawiki#block-proposal|"proposal"]], [[bip-0023.mediawiki#logical-services|"serverlist"]], "workid", and any of the [[bip-0023.mediawiki#mutations|mutations]]
|-
| mode || {{No}} || String || MUST be "template" or omitted
| mode || No || String || MUST be "template" or omitted
|}
getblocktemplate MUST return a JSON Object containing the following keys:
@ -37,29 +43,29 @@ getblocktemplate MUST return a JSON Object containing the following keys:
|-
! Key !! Required !! Type !! Description
|-
| bits || {{Yes}} || String || the compressed difficulty in hexadecimal
| bits || Yes || String || the compressed difficulty in hexadecimal
|-
| curtime || {{Yes}} || Number || the current time as seen by the server (recommended for block time) - note this is not necessarily the system clock, and must fall within the mintime/maxtime rules
| curtime || Yes || Number || the current time as seen by the server (recommended for block time) - note this is not necessarily the system clock, and must fall within the mintime/maxtime rules
|-
| height || {{Yes}} || Number || the height of the block we are looking for
| height || Yes || Number || the height of the block we are looking for
|-
| previousblockhash || {{Yes}} || String || the hash of the previous block, in big-endian hexadecimal
| previousblockhash || Yes || String || the hash of the previous block, in big-endian hexadecimal
|-
| sigoplimit || {{No}} || Number || number of sigops allowed in blocks
| sigoplimit || No || Number || number of sigops allowed in blocks
|-
| sizelimit || {{No}} || Number || number of bytes allowed in blocks
| sizelimit || No || Number || number of bytes allowed in blocks
|-
| transactions || {{Yes|Should}} || Array of Objects || Objects containing [[#Transactions Object Format|information for Bitcoin transactions]] (excluding coinbase)
| transactions || Should || Array of Objects || Objects containing [[#transactions-object-format|information for Bitcoin transactions]] (excluding coinbase)
|-
| version || {{Yes}} || Number || always 1 or 2 (at least for bitcoin) - clients MUST understand the implications of the version they use (eg, comply with [[bip-0034.mediawiki|BIP 0034]] for version 2)
| version || Yes || Number || always 1 or 2 (at least for bitcoin) - clients MUST understand the implications of the version they use (eg, comply with [[bip-0034.mediawiki|BIP 0034]] for version 2)
|-
| coinbaseaux || {{No}} || Object || data that SHOULD be included in the coinbase's scriptSig content. Only the values (hexadecimal byte-for-byte) in this Object should be included, not the keys. This does not include the block height, which is required to be included in the scriptSig by [[bip-0034.mediawiki|BIP 0034]]. It is advisable to encode values inside "PUSH" opcodes, so as to not inadvertently expend SIGOPs (which are counted toward limits, despite not being executed).
| coinbaseaux || No || Object || data that SHOULD be included in the coinbase's scriptSig content. Only the values (hexadecimal byte-for-byte) in this Object should be included, not the keys. This does not include the block height, which is required to be included in the scriptSig by [[bip-0034.mediawiki|BIP 0034]]. It is advisable to encode values inside "PUSH" opcodes, so as to not inadvertently expend SIGOPs (which are counted toward limits, despite not being executed).
|-
| coinbasetxn || {{Patch|this or ↓}} || Object || [[#Transactions Object Format|information for coinbase transaction]]
| coinbasetxn || this or ↓ || Object || [[#transactions-object-format|information for coinbase transaction]]
|-
| coinbasevalue || {{Patch|this or ↑}} || Number || total funds available for the coinbase (in Satoshis)
| coinbasevalue || this or ↑ || Number || total funds available for the coinbase (in Satoshis)
|-
| workid || {{No}} || String || if provided, this value must be returned with results (see [[#Block Submission|Block Submission]])
| workid || No || String || if provided, this value must be returned with results (see [[#block-submission|Block Submission]])
|}
==== Transactions Object Format ====

View File

@ -1,19 +1,25 @@
<pre>
BIP: 23
Layer: API/RPC
Title: getblocktemplate - Pooled Mining
Author: Luke Dashjr <luke+bip22@dashjr.org>
Status: Final
Type: Standards Track
Created: 2012-02-28
Authors: Luke Dashjr <luke+bip22@dashjr.org>
Status: Deployed
Type: Specification
Assigned: 2012-02-28
License: BSD-2-Clause
</pre>
==Abstract==
This BIP describes extensions to the getblocktemplate JSON-RPC call to enhance pooled mining.
==Copyright==
This BIP is licensed under the BSD 2-clause license.
==Specification==
Note that all sections of this specification are optional extensions on top of [[BIP 0022|BIP 22]].
Note that all sections of this specification are optional extensions on top of [[bip-0022.mediawiki|BIP 22]].
===Summary Support Levels===
@ -21,15 +27,15 @@ Something can be said to have BIP 23 Level 1 support if it implements at least:
* [http://www.ietf.org/rfc/rfc1945.txt RFC 1945]
* [http://json-rpc.org/wiki/specification JSON-RPC 1.0]
* [[bip-0022.mediawiki|BIP 22 (non-optional sections)]]
* [[bip-0022.mediawiki#Optional: Long Polling|BIP 22 Long Polling]]
* [[#Basic Pool Extensions|BIP 23 Basic Pool Extensions]]
* [[#Mutations|BIP 23 Mutation "coinbase/append"]]
* [[#Submission Abbreviation|BIP 23 Submission Abbreviation "submit/coinbase"]]
* [[#Mutations|BIP 23 Mutation "time/increment"]] (only required for servers)
* [[bip-0022.mediawiki#optional-long-polling|BIP 22 Long Polling]]
* [[#basic-pool-extensions|BIP 23 Basic Pool Extensions]]
* [[#mutations|BIP 23 Mutation "coinbase/append"]]
* [[#submission-abbreviation|BIP 23 Submission Abbreviation "submit/coinbase"]]
* [[#mutations|BIP 23 Mutation "time/increment"]] (only required for servers)
It can be said to have BIP 23 Level 2 support if it also implements:
* [[#Mutations|BIP 23 Mutation "transactions/add"]]
* [[#Block Proposals|BIP 23 Block Proposals]]
* [[#mutations|BIP 23 Mutation "transactions/add"]]
* [[#block-proposals|BIP 23 Block Proposals]]
===Basic Pool Extensions===

View File

@ -1,14 +1,20 @@
<pre>
BIP: 30
Layer: Consensus (soft fork)
Title: Duplicate transactions
Author: Pieter Wuille <pieter.wuille@gmail.com>
Status: Final
Type: Standards Track
Created: 2012-02-22
Authors: Pieter Wuille <pieter.wuille@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2012-02-22
License: BSD-2-Clause
</pre>
==Abstract==
This document gives a specification for dealing with duplicate transactions in the block chain, in an attempt to solve certain problems the reference implementations has with them.
This document gives a specification for dealing with duplicate transactions in the block chain, in an attempt to solve certain problems the reference implementation has with them.
==Copyright==
This BIP is licensed under the 2-clause BSD license.
==Motivation==
So far, the Bitcoin reference implementation always assumed duplicate transactions (transactions with the same identifier) didn't exist. This is not true; in particular coinbases are easy to duplicate, and by building on duplicate coinbases, duplicate normal transactions are possible as well. Recently, an attack that exploits the reference implementation's dealing with duplicate transactions was described and demonstrated. It allows reverting fully-confirmed transactions to a single confirmation, making them vulnerable to become unspendable entirely. Another attack is possible that allows forking the block chain for a subset of the network.

View File

@ -1,10 +1,11 @@
<pre>
BIP: 31
Layer: Peer Services
Title: Pong message
Author: Mike Hearn <hearn@google.com>
Status: Final
Type: Standards Track
Created: 2012-04-11
Authors: Mike Hearn <hearn@google.com>
Status: Deployed
Type: Specification
Assigned: 2012-04-11
</pre>
==Abstract==

View File

@ -3,14 +3,18 @@ RECENT CHANGES:
* (30 Apr 2013) Switched from multiplication by I<sub>L</sub> to addition of I<sub>L</sub> (faster, easier implementation)
* (25 May 2013) Added test vectors
* (15 Jan 2014) Rename keys with index ≥ 0x80000000 to hardened keys, and add explicit conversion functions.
* (24 Feb 2017) Added test vectors for hardened derivation with leading zeros
* (4 Nov 2020) Added new test vectors for hardened derivation with leading zeros
<pre>
BIP: 32
Layer: Applications
Title: Hierarchical Deterministic Wallets
Author: Pieter Wuille <pieter.wuille@gmail.com>
Status: Final
Authors: Pieter Wuille <pieter.wuille@gmail.com>
Status: Deployed
Type: Informational
Created: 2012-02-11
Assigned: 2012-02-11
License: BSD-2-Clause
</pre>
==Abstract==
@ -19,7 +23,11 @@ This document describes hierarchical deterministic wallets (or "HD Wallets"): wa
The specification is intended to set a standard for deterministic wallets that can be interchanged between different clients. Although the wallets described here have many features, not all are required by supporting clients.
The specification consists of two parts. In a first part, a system for deriving a tree of keypairs from a single seed is presented. The second part demonstrates how to build a wallet structure on top of such a tree.
The specification consists of two parts. In the first part, a system for deriving a tree of keypairs from a single seed is presented. The second part demonstrates how to build a wallet structure on top of such a tree.
==Copyright==
This BIP is licensed under the 2-clause BSD license.
==Motivation==
@ -27,7 +35,7 @@ The Bitcoin reference client uses randomly generated keys. In order to avoid the
Deterministic wallets do not require such frequent backups, and elliptic curve mathematics permit schemes where one can calculate the public keys without revealing the private keys. This permits for example a webshop business to let its webserver generate fresh addresses (public key hashes) for each order or for each customer, without giving the webserver access to the corresponding private keys (which are required for spending the received funds).
However, deterministic wallets typically consist of a single "chain" of keypairs. The fact that there is only one chain means that sharing a wallet happens on an all-or-nothing basis. However, in some cases one only wants some (public) keys to be shared and recoverable. In the example of a webshop, the webserver does not need access to all public keys of the merchant's wallet; only to those addresses which are used to receive customer's payments, and not for example the change addresses that are generated when the merchant spends money. Hierarchical deterministic wallets allow such selective sharing by supporting multiple keypair chains, derived from a single root.
However, deterministic wallets typically consist of a single "chain" of keypairs. The fact that there is only one chain means that sharing a wallet happens on an all-or-nothing basis. However, in some cases one only wants some (public) keys to be shared and recoverable. In the example of a webshop, the webserver does not need access to all public keys of the merchant's wallet; only to those addresses which are used to receive customers' payments, and not for example the change addresses that are generated when the merchant spends money. Hierarchical deterministic wallets allow such selective sharing by supporting multiple keypair chains, derived from a single root.
==Specification: Key derivation==
@ -42,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.
@ -94,7 +102,7 @@ The function N((k, c)) &rarr; (K, c) computes the extended public key correspond
To compute the public child key of a parent private key:
* N(CKDpriv((k<sub>par</sub>, c<sub>par</sub>), i)) (works always).
* CKDpub(N(k<sub>par</sub>, c<sub>par</sub>), i) (works only for non-hardened child keys).
The fact that they are equivalent is what makes non-hardened keys useful (one can derive child public keys of a given parent key without knowing any private key), and also what distinguishes them from hardened keys. The reason for not always using non-hardened keys (which are more useful) is security; see further for more information.
The fact that they are equivalent is what makes non-hardened keys useful (one can derive child public keys of a given parent key without knowing any private key), and also what distinguishes them from hardened keys. The reason for not always using non-hardened keys (which are more useful) is security; see further below for more information.
====Public parent key &rarr; private child key====
@ -109,25 +117,25 @@ To shorten notation, we will write CKDpriv(CKDpriv(CKDpriv(m,3<sub>H</sub>),2),5
* N(m/a<sub>H</sub>/b/c) = N(m/a<sub>H</sub>/b)/c = N(m/a<sub>H</sub>)/b/c.
However, N(m/a<sub>H</sub>) cannot be rewritten as N(m)/a<sub>H</sub>, as the latter is not possible.
Each leaf node in the tree corresponds to an actual key, while the internal nodes correspond to the collections of keys that descend from them. The chain codes of the leaf nodes are ignored, and only their embedded private or public key is relevant. Because of this construction, knowing an extended private key allows reconstruction of all descendant private keys and public keys, and knowing an extended public keys allows reconstruction of all descendant non-hardened public keys.
Each leaf node in the tree corresponds to an actual key, while the internal nodes correspond to the collections of keys that descend from them. The chain codes of the leaf nodes are ignored, and only their embedded private or public key is relevant. Because of this construction, knowing an extended private key allows reconstruction of all descendant private keys and public keys, and knowing an extended public key allows reconstruction of all descendant non-hardened public keys.
===Key identifiers===
Extended keys can be identified by the Hash160 (RIPEMD160 after SHA256) of the serialized ECSDA public key K, ignoring the chain code. This corresponds exactly to the data used in traditional Bitcoin addresses. It is not advised to represent this data in base58 format though, as it may be interpreted as an address that way (and wallet software is not required to accept payment to the chain key itself).
Extended keys can be identified by the Hash160 (RIPEMD160 after SHA256) of the serialized ECDSA public key K, ignoring the chain code. This corresponds exactly to the data used in traditional Bitcoin addresses. It is not advised to represent this data in base58 format though, as it may be interpreted as an address that way (and wallet software is not required to accept payment to the chain key itself).
The first 32 bits of the identifier are called the key fingerprint.
===Serialization format===
Extended public and private keys are serialized as follows:
* 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)
* 4 bytes: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)
* 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 derived keys, ....
* 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
* 4 bytes: child number. This is ser<sub>32</sub>(i) for i in x<sub>i</sub> = x<sub>par</sub>/i, with x<sub>i</sub> the key being serialized. (0x00000000 if master key)
* 32 bytes: the chain code
* 33 bytes: the public key or private key data (ser<sub>P</sub>(K) for public keys, 0x00 || ser<sub>256</sub>(k) for private keys)
This 78 byte structure can be encoded like other Bitcoin data in Base58, by first adding 32 checksum bits (derived from the double SHA-256 checksum), and then converting to the Base58 representation. This results in a Base58-encoded string of up to 112 characters. Because of the choice of the version bytes, the Base58 representation will start with "xprv" or "xpub" on mainnet, "tprv" or "tpub" on testnet.
This 78 byte structure can be encoded like other Bitcoin data in Base58, by first adding 32 checksum bits (derived from the double SHA-256 checksum), and then converting to the Base58 representation. This results in a Base58-encoded string of exactly 111 characters. Because of the choice of the version bytes, the Base58 representation will start with "xprv" or "xpub" on mainnet, "tprv" or "tpub" on testnet.
Note that the fingerprint of the parent only serves as a fast way to detect parent and child nodes in software, and software must be willing to deal with collisions. Internally, the full 160-bit identifier could be used.
@ -141,13 +149,13 @@ The total number of possible extended keypairs is almost 2<sup>512</sup>, but th
* Calculate I = HMAC-SHA512(Key = "Bitcoin seed", Data = S)
* Split I into two 32-byte sequences, I<sub>L</sub> and I<sub>R</sub>.
* Use parse<sub>256</sub>(I<sub>L</sub>) as master secret key, and I<sub>R</sub> as master chain code.
In case I<sub>L</sub> is 0 or ≥n, the master key is invalid.
In case parse<sub>256</sub>(I<sub>L</sub>) is 0 or parse<sub>256</sub>(I<sub>L</sub>) n, the master key is invalid.
<img src=bip-0032/derivation.png></img>
==Specification: Wallet structure==
The previous sections specified key trees and their nodes. The next step is imposing a wallet structure on this tree. The layout defined in this section is a default only, though clients are encouraged to mimick it for compatibility, even if not all features are supported.
The previous sections specified key trees and their nodes. The next step is imposing a wallet structure on this tree. The layout defined in this section is a default only, though clients are encouraged to mimic it for compatibility, even if not all features are supported.
===The default wallet layout===
@ -174,7 +182,7 @@ When a business has several independent offices, they can all use wallets derive
====Recurrent business-to-business transactions: N(m/i<sub>H</sub>/0)====
In case two business partners often transfer money, one can use the extended public key for the external chain of a specific account (M/i h/0) as a sort of "super address", allowing frequent transactions that cannot (easily) be associated, but without needing to request a new address for each payment.
Such a mechanism could also be used by mining pool operators as variable payout address.
Such a mechanism could also be used by mining pool operators as a variable payout address.
====Unsecure money receiver: N(m/i<sub>H</sub>/0)====
@ -191,7 +199,7 @@ In addition to the expectations from the EC public-key cryptography itself:
the intended security properties of this standard are:
* Given a child extended private key (k<sub>i</sub>,c<sub>i</sub>) and the integer i, an attacker cannot find the parent private key k<sub>par</sub> more efficiently than a 2<sup>256</sup> brute force of HMAC-SHA512.
* Given any number (2 ≤ N ≤ 2<sup>32</sup>-1) of (index, extended private key) tuples (i<sub>j</sub>,(k<sub>i<sub>j</sub></sub>,c<sub>i<sub>j</sub></sub>)), with distinct i<sub>j</sub>'s, determining whether they are derived from a common parent extended private key (i.e., whether there exists a (k<sub>par</sub>,c<sub>par</sub>) such that for each j in (0..N-1) CKDpriv((k<sub>par</sub>,c<sub>par</sub>),i<sub>j</sub>)=(k<sub>i<sub>j</sub></sub>,c<sub>i<sub>j</sub></sub>)), cannot be done more efficiently than a 2<sup>256</sup> brute force of HMAC-SHA512.
Note however that the following properties does not exist:
Note however that the following properties do not exist:
* Given a parent extended public key (K<sub>par</sub>,c<sub>par</sub>) and a child public key (K<sub>i</sub>), it is hard to find i.
* Given a parent extended public key (K<sub>par</sub>,c<sub>par</sub>) and a non-hardened child private key (k<sub>i</sub>), it is hard to find k<sub>par</sub>.
@ -202,7 +210,7 @@ Private and public keys must be kept safe as usual. Leaking a private key means
Somewhat more care must be taken regarding extended keys, as these correspond to an entire (sub)tree of keys.
One weakness that may not be immediately obvious, is that knowledge of a parent extended public key plus any non-hardened private key descending from it is equivalent to knowing the parent extended private key (and thus every private and public key descending from it). This means that extended public keys must be treated more carefully than regular public keys.
It is also the reason for the existence of hardened keys, and why they are used for the account level in the tree. This way, a leak of account-specific (or below) private key never risks compromising the master or other accounts.
It is also the reason for the existence of hardened keys, and why they are used for the account level in the tree. This way, a leak of account-specific (or below) private keys never risks compromising the master or other accounts.
==Test Vectors==
@ -251,31 +259,53 @@ Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c
** ext pub: xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt
** ext prv: xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j
==Implementations==
===Test vector 3===
Two Python implementations exist:
These vectors test for the retention of leading zeros. See [https://github.com/bitpay/bitcore-lib/issues/47 bitpay/bitcore-lib#47] and [https://github.com/iancoleman/bip39/issues/58 iancoleman/bip39#58] for more information.
PyCoin (https://github.com/richardkiss/pycoin) is a suite of utilities for dealing with Bitcoin that includes BIP0032 wallet features. BIP32Utils (https://github.com/jmcorgan/bip32utils) is a library and command line interface specifically focused on BIP0032 wallets and scripting.
Seed (hex): 4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be
* Chain m
** ext pub: xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13
** ext prv: xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6
* Chain m/0<sub>H</sub>
** ext pub: xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y
** ext prv: xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L
A Java implementation is available at https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java
===Test vector 4===
A C++ implementation is available at https://github.com/ciphrex/mSIGNA/blob/master/deps/CoinCore/src/hdkeys.h
These vectors test for the retention of leading zeros. See [https://github.com/btcsuite/btcutil/issues/172 btcsuite/btcutil#172] for more information.
An Objective-C implementation is available at https://github.com/oleganza/CoreBitcoin/blob/master/CoreBitcoin/BTCKeychain.h
Seed (hex): 3ddd5602285899a946114506157c7997e5444528f3003f6134712147db19b678
* Chain m
** ext pub: xpub661MyMwAqRbcGczjuMoRm6dXaLDEhW1u34gKenbeYqAix21mdUKJyuyu5F1rzYGVxyL6tmgBUAEPrEz92mBXjByMRiJdba9wpnN37RLLAXa
** ext prv: xprv9s21ZrQH143K48vGoLGRPxgo2JNkJ3J3fqkirQC2zVdk5Dgd5w14S7fRDyHH4dWNHUgkvsvNDCkvAwcSHNAQwhwgNMgZhLtQC63zxwhQmRv
* Chain m/0<sub>H</sub>
** ext pub: xpub69AUMk3qDBi3uW1sXgjCmVjJ2G6WQoYSnNHyzkmdCHEhSZ4tBok37xfFEqHd2AddP56Tqp4o56AePAgCjYdvpW2PU2jbUPFKsav5ut6Ch1m
** ext prv: xprv9vB7xEWwNp9kh1wQRfCCQMnZUEG21LpbR9NPCNN1dwhiZkjjeGRnaALmPXCX7SgjFTiCTT6bXes17boXtjq3xLpcDjzEuGLQBM5ohqkao9G
* Chain m/0<sub>H</sub>/1<sub>H</sub>
** ext pub: xpub6BJA1jSqiukeaesWfxe6sNK9CCGaujFFSJLomWHprUL9DePQ4JDkM5d88n49sMGJxrhpjazuXYWdMf17C9T5XnxkopaeS7jGk1GyyVziaMt
** ext prv: xprv9xJocDuwtYCMNAo3Zw76WENQeAS6WGXQ55RCy7tDJ8oALr4FWkuVoHJeHVAcAqiZLE7Je3vZJHxspZdFHfnBEjHqU5hG1Jaj32dVoS6XLT1
A Ruby implementation is available at https://github.com/GemHQ/money-tree
===Test vector 5===
Two Go implementations exist:
These vectors test that invalid extended keys are recognized as invalid.
hdkeychain (https://github.com/conformal/btcutil/tree/master/hdkeychain) provides an API for bitcoin hierarchical deterministic extended keys (BIP0032). Go HD Wallet (https://github.com/WeMeetAgain/go-hdwallet).
Two JavaScript implementations exist: available at https://github.com/sarchar/brainwallet.github.com/tree/bip32 and https://github.com/bitpay/bitcore
A PHP implemetation is available at https://github.com/Bit-Wasp/bitcoin-lib-php
A C# implementation is available at https://github.com/NicolasDorier/NBitcoin (ExtKey, ExtPubKey)
A Haskell implementation is available at https://github.com/haskoin/haskoin together with a CLI interface at https://github.com/np/hx
* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5fTtTQBm (pubkey version / prvkey mismatch)
* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGTQQD3dC4H2D5GBj7vWvSQaaBv5cxi9gafk7NF3pnBju6dwKvH (prvkey version / pubkey mismatch)
* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Txnt3siSujt9RCVYsx4qHZGc62TG4McvMGcAUjeuwZdduYEvFn (invalid pubkey prefix 04)
* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFGpWnsj83BHtEy5Zt8CcDr1UiRXuWCmTQLxEK9vbz5gPstX92JQ (invalid prvkey prefix 04)
* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6N8ZMMXctdiCjxTNq964yKkwrkBJJwpzZS4HS2fxvyYUA4q2Xe4 (invalid pubkey prefix 01)
* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD9y5gkZ6Eq3Rjuahrv17fEQ3Qen6J (invalid prvkey prefix 01)
* xprv9s2SPatNQ9Vc6GTbVMFPFo7jsaZySyzk7L8n2uqKXJen3KUmvQNTuLh3fhZMBoG3G4ZW1N2kZuHEPY53qmbZzCHshoQnNf4GvELZfqTUrcv (zero depth with non-zero parent fingerprint)
* xpub661no6RGEX3uJkY4bNnPcw4URcQTrSibUZ4NqJEw5eBkv7ovTwgiT91XX27VbEXGENhYRCf7hyEbWrR3FewATdCEebj6znwMfQkhRYHRLpJ (zero depth with non-zero parent fingerprint)
* xprv9s21ZrQH4r4TsiLvyLXqM9P7k1K3EYhA1kkD6xuquB5i39AU8KF42acDyL3qsDbU9NmZn6MsGSUYZEsuoePmjzsB3eFKSUEh3Gu1N3cqVUN (zero depth with non-zero index)
* xpub661MyMwAuDcm6CRQ5N4qiHKrJ39Xe1R1NyfouMKTTWcguwVcfrZJaNvhpebzGerh7gucBvzEQWRugZDuDXjNDRmXzSZe4c7mnTK97pTvGS8 (zero depth with non-zero index)
* DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHGMQzT7ayAmfo4z3gY5KfbrZWZ6St24UVf2Qgo6oujFktLHdHY4 (unknown extended key version)
* DMwo58pR1QLEFihHiXPVykYB6fJmsTeHvyTp7hRThAtCX8CvYzgPcn8XnmdfHPmHJiEDXkTiJTVV9rHEBUem2mwVbbNfvT2MTcAqj3nesx8uBf9 (unknown extended key version)
* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzF93Y5wvzdUayhgkkFoicQZcP3y52uPPxFnfoLZB21Teqt1VvEHx (private key 0 not in 1..n-1)
* xprv9s21ZrQH143K24Mfq5zL5MhWK9hUhhGbd45hLXo2Pq2oqzMMo63oStZzFAzHGBP2UuGCqWLTAPLcMtD5SDKr24z3aiUvKr9bJpdrcLg1y3G (private key n not in 1..n-1)
* xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6Q5JXayek4PRsn35jii4veMimro1xefsM58PgBMrvdYre8QyULY (invalid pubkey 020000000000000000000000000000000000000000000000000000000000000007)
* xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHL (invalid checksum)
==Acknowledgements==

View File

@ -1,10 +1,11 @@
<pre>
BIP: 33
Layer: Peer Services
Title: Stratized Nodes
Author: Amir Taaki <genjix@riseup.net>
Status: Draft
Type: Standards Track
Created: 2012-05-15
Authors: Amir Taaki <genjix@riseup.net>
Status: Closed
Type: Specification
Assigned: 2012-05-15
</pre>
== Abstract ==

View File

@ -1,10 +1,11 @@
<pre>
BIP: 34
Layer: Consensus (soft fork)
Title: Block v2, Height in Coinbase
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2012-07-06
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2012-07-06
</pre>
==Abstract==
@ -19,7 +20,7 @@ Bitcoin blocks and transactions are versioned binary structures. Both currently
==Specification==
# Treat transactions with a version greater than 1 as non-standard (official Satoshi client will not mine or relay them).
# Add height as the first item in the coinbase transaction's scriptSig, and increase block version to 2. The format of the height is "serialized CScript" -- first byte is number of bytes in the number (will be 0x03 on main net for the next 150 or so years with 2<sup>23</sup>-1 blocks), following bytes are little-endian representation of the number (including a sign bit). Height is the height of the mined block in the block chain, where the genesis block is height zero (0).
# Add height as the first item in the coinbase transaction's scriptSig, and increase block version to 2. The format of the height is "minimally encoded serialized CScript" -- first byte is number of bytes in the number (will be 0x03 on main net for the next 150 or so years with 2<sup>23</sup>-1 blocks), following bytes are little-endian representation of the number (including a sign bit). Height is the height of the mined block in the block chain, where the genesis block is height zero (0).
# 75% rule: If 750 of the last 1,000 blocks are version 2 or greater, reject invalid version 2 blocks. (testnet3: 51 of last 100)
# 95% rule ("Point of no return"): If 950 of the last 1,000 blocks are version 2 or greater, reject all version 1 blocks. (testnet3: 75 of last 100)

View File

@ -1,10 +1,11 @@
<pre>
BIP: 35
Layer: Peer Services
Title: mempool message
Author: Jeff Garzik <jgarzik@exmulti.com>
Status: Final
Type: Standards Track
Created: 2012-08-16
Authors: Jeff Garzik <jgarzik@exmulti.com>
Status: Deployed
Type: Specification
Assigned: 2012-08-16
</pre>
==Abstract==
@ -13,7 +14,7 @@ Make a network node's transaction memory pool accessible via a new "mempool" mes
==Motivation==
Several use cases make it desireable to expose a network node's transaction memory pool:
Several use cases make it desirable to expose a network node's transaction memory pool:
# SPV clients, wishing to obtain zero-confirmation transactions sent or received.
# Miners, to avoid missing lucrative fees, downloading existing network transactions after a restart.
# Remote network diagnostics.
@ -21,7 +22,7 @@ Several use cases make it desireable to expose a network node's transaction memo
==Specification==
# The mempool message is defined as an empty message where pchCommand == "mempool"
# Upon receipt of a "mempool" message, the node will respond with an "inv" message containing MSG_TX hashes of all the transactions in the node's transaction memory pool, if any.
# Upon receipt of a "mempool" message, the node will respond with an "inv" message containing MSG_TX hashes of all the transactions in the node's transaction memory pool, if any.
# The typical node behavior in response to an "inv" is "getdata". However, the reference Satoshi implementation ignores requests for transaction hashes outside that which is recently relayed. To support "mempool", an implementation must extend its "getdata" message support to querying the memory pool.
# Feature discovery is enabled by checking two "version" message attributes:
## Protocol version >= 60002

View File

@ -1,10 +1,12 @@
<pre>
BIP: 36
Layer: Peer Services
Title: Custom Services
Author: Stefan Thomas <justmoon@members.fsf.org>
Status: Draft
Type: Standards Track
Created: 2012-08-03
Authors: Stefan Thomas <justmoon@members.fsf.org>
Status: Closed
Type: Specification
Assigned: 2012-08-03
License: PD
</pre>
==Abstract==
@ -22,7 +24,7 @@ Two new fields are added to the <code>version</code> command, after <code>extra_
{|class="wikitable"
! Field Size !! Description !! Data type !! Comments
|-
| 1+ || service_count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of extra services
| 1+ || service_count || [[Protocol_specification#variable-length-integer|var_int]] || Number of extra services
|-
| ? || service_list || service[] || List of service definitions
|}
@ -32,11 +34,11 @@ The service definitions <code>service[]</code> are given in the following format
{|class="wikitable"
! Field Size !! Description !! Data type !! Comments
|-
| ? || service_name || [[#Variable length string|var_str]] || Unique service identifier
| ? || service_name || [[#variable-length-string|var_str]] || Unique service identifier
|-
| 4 || service_version || uint32_t || Identifies service version being used by the node
|-
| ? || service_data || [[#Variable length string|var_str]] || Additional service-specific data
| ? || service_data || [[#variable-length-string|var_str]] || Additional service-specific data
|}
A node MUST NOT announce two services with the same <code>service_name</code>. If a remote node sends such a <code>version</code> message the client MAY disconnect.

View File

@ -1,11 +1,15 @@
<pre>
BIP: 37
Layer: Peer Services
Title: Connection Bloom filtering
Author: Mike Hearn <hearn@google.com>
Matt Corallo <bip@bluematt.me>
Status: Final
Type: Standards Track
Created: 2012-10-24
Authors: Mike Hearn <hearn@google.com>
Matt Corallo <bip37@bluematt.me>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0037
Status: Deployed
Type: Specification
Assigned: 2012-10-24
License: PD
</pre>
==Abstract==
@ -155,7 +159,7 @@ A ''Merkle tree'' is a way of arranging a set of items as leaf nodes of tree in
** Check whether this node corresponds to a leaf node (transaction) that is to be included OR any parent thereof:
*** If so, append a '1' bit to the flag bits
*** Otherwise, append a '0' bit.
** Check whether this node is a internal node (non-leaf) AND is the parent of an included leaf node:
** Check whether this node is an internal node (non-leaf) AND is the parent of an included leaf node:
*** If so:
**** Descend into its left child node, and process the subtree beneath it entirely (depth-first).
**** If this node has a right child node too, descend into it as well.

View File

@ -1,11 +1,15 @@
<pre>
BIP: 38
Layer: Applications
Title: Passphrase-protected private key
Author: Mike Caldwell <mcaldwell@swipeclock.com>
Aaron Voisine <voisine@gmail.com>
Status: Draft (Some confusion applies: The announcements for this never made it to the list, so it hasn't had public discussion)
Type: Standards Track
Created: 2012-11-20
Authors: Mike Caldwell <mcaldwell@swipeclock.com>
Aaron Voisine <voisine@gmail.com>
Comments-Summary: Unanimously Discourage for implementation
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0038
Status: Deployed
Type: Specification
Assigned: 2012-11-20
License: PD
</pre>
==Abstract==
@ -32,10 +36,10 @@ Password and passphrase-protected private keys enable new practical use cases fo
This proposal is hereby placed in the public domain.
==Rationale==
:'''''User story:''' As a Bitcoin user who uses paper wallets, I would like the ability to add encryption, so that my Bitcoin paper storage can be two factor: something I have plus something I know.''
:'''''User story:''' As a Bitcoin user who would like to pay a person or a company with a private key, I do not want to worry that any part of the communication path may result in the interception of the key and theft of my funds. I would prefer to offer an encrypted private key, and then follow it up with the password using a different communication channel (e.g. a phone call or SMS).''
:'''''User story:''' (EC-multiplied keys) As a user of physical bitcoins, I would like a third party to be able to create password-protected Bitcoin private keys for me, without them knowing the password, so I can benefit from the physical bitcoin without the issuer having access to the private key. I would like to be able to choose a password whose minimum length and required format does not preclude me from memorizing it or engraving it on my physical bitcoin, without exposing me to an undue risk of password cracking and/or theft by the manufacturer of the item.''
:'''''User story:''' (EC multiplied keys) As a user of paper wallets, I would like the ability to generate a large number of Bitcoin addresses protected by the same password, while enjoying a high degree of security (highly expensive scrypt parameters), but without having to incur the scrypt delay for each address I generate.
:'' '''User story:''' As a Bitcoin user who uses paper wallets, I would like the ability to add encryption, so that my Bitcoin paper storage can be two factor: something I have plus something I know.''
:'' '''User story:''' As a Bitcoin user who would like to pay a person or a company with a private key, I do not want to worry that any part of the communication path may result in the interception of the key and theft of my funds. I would prefer to offer an encrypted private key, and then follow it up with the password using a different communication channel (e.g. a phone call or SMS).''
:'' '''User story:''' (EC-multiplied keys) As a user of physical bitcoins, I would like a third party to be able to create password-protected Bitcoin private keys for me, without them knowing the password, so I can benefit from the physical bitcoin without the issuer having access to the private key. I would like to be able to choose a password whose minimum length and required format does not preclude me from memorizing it or engraving it on my physical bitcoin, without exposing me to an undue risk of password cracking and/or theft by the manufacturer of the item.''
:'' '''User story:''' (EC-multiplied keys) As a user of paper wallets, I would like the ability to generate a large number of Bitcoin addresses protected by the same password, while enjoying a high degree of security (highly expensive scrypt parameters), but without having to incur the scrypt delay for each address I generate.''
==Specification==
This proposal makes use of the following functions and definitions:
@ -43,12 +47,12 @@ This proposal makes use of the following functions and definitions:
*'''AES256Encrypt, AES256Decrypt''': the simple form of the well-known AES block cipher without consideration for initialization vectors or block chaining. Each of these functions takes a 256-bit key and 16 bytes of input, and deterministically yields 16 bytes of output.
*'''SHA256''', a well-known hashing algorithm that takes an arbitrary number of bytes as input and deterministically yields a 32-byte hash.
*'''scrypt''': A well-known key derivation algorithm. It takes the following parameters: (string) password, (string) salt, (int) n, (int) r, (int) p, (int) length, and deterministically yields an array of bytes whose length is equal to the length parameter.
*'''ECMultiply''': Multiplication of an elliptic curve point by a scalar integer with respect to the [[secp256k1]] elliptic curve.
*'''G, N''': Constants defined as part of the [[secp256k1]] elliptic curve. G is an elliptic curve point, and N is a large positive integer.
*'''[[Base58Check]]''': a method for encoding arrays of bytes using 58 alphanumeric characters commonly used in the Bitcoin ecosystem.
*'''ECMultiply''': Multiplication of an elliptic curve point by a scalar integer with respect to the secp256k1 elliptic curve.
*'''G, N''': Constants defined as part of the secp256k1 elliptic curve. G is an elliptic curve point, and N is a large positive integer.
*'''Base58Check''': a method for encoding arrays of bytes using 58 alphanumeric characters commonly used in the Bitcoin ecosystem.
===Prefix===
It is proposed that the resulting Base58Check-encoded string start with a '6'. The number '6' is intended to represent, from the perspective of the user, "a private key that needs something else to be usable" - an umbrella definition that could be understood in the future to include keys participating in multisig transactions, and was chosen with deference to the existing prefix '5' most commonly observed in [[Wallet Import Format]] which denotes an unencrypted private key.
It is proposed that the resulting Base58Check-encoded string start with a '6'. The number '6' is intended to represent, from the perspective of the user, "a private key that needs something else to be usable" - an umbrella definition that could be understood in the future to include keys participating in multisig transactions, and was chosen with deference to the existing prefix '5' most commonly observed in Wallet Import Format which denotes an unencrypted private key.
It is proposed that the second character ought to give a hint as to what is needed as a second factor, and for an encrypted key requiring a passphrase, the uppercase letter P is proposed.
@ -60,9 +64,9 @@ To keep the size of the encrypted key down, no initialization vectors (IVs) are
* How the user sees it: 58 characters always starting with '6P'
** Visual cues are present in the third character for visually identifying the EC-multiply and compress flag.
* Count of payload bytes (beyond prefix): 37
** 1 byte (''flagbyte''):
** 1 byte (''flagbyte''):
*** the most significant two bits are set as follows to preserve the visibility of the compression flag in the prefix, as well as to keep the payload within the range of allowable values that keep the "6P" prefix intact. For non-EC-multiplied keys, the bits are 11. For EC-multiplied keys, the bits are 00.
*** the bit with value 0x20 when set indicates the key should be converted to a bitcoin address using the compressed public key format.
*** the bit with value 0x20 when set indicates the key should be converted to a base58check encoded P2PKH bitcoin address using the DER compressed public key format. When not set, it should be a base58check encoded P2PKH bitcoin address using the DER uncompressed public key format.
*** the bits with values 0x10 and 0x08 are reserved for a future specification that contemplates using multisig as a way to combine the factors such that parties in possession of the separate factors can independently sign a proposed transaction without requiring that any party possess both factors. These bits must be 0 to comply with this version of the specification.
*** the bit with value 0x04 indicates whether a lot and sequence number are encoded into the first factor, and activates special behavior for including them in the decryption process. This applies to EC-multiplied keys only. Must be 0 for non-EC-multiplied keys.
*** remaining bits are reserved for future use and must all be 0 to comply with this version of the specification.
@ -71,10 +75,10 @@ To keep the size of the encrypted key down, no initialization vectors (IVs) are
**16 bytes: lasthalf: An AES-encrypted key material record (contents depend on whether EC multiplication is used)
* Range in base58check encoding for non-EC-multiplied keys without compression (prefix 6PR):
** Minimum value: 6PRHv1jg1ytiE4kT2QtrUz8gEjMQghZDWg1FuxjdYDzjUkcJeGdFj9q9Vi (based on 01 42 C0 plus thirty-six 00's)
** Maximum value: 6PRWdmoT1ZursVcr5NiD14p5bHrKVGPG7yeEoEeRb8FVaqYSHnZTLEbYsU (based on 01 42 C0 plus thirty-six FF's)
** Maximum value: 6PRWdmoT1ZursVcr5NiD14p5bHrKVGPG7yeEoEeRb8FVaqYSHnZTLEbYsU (based on 01 42 C0 plus thirty-six FF's)
* Range in base58check encoding for non-EC-multiplied keys with compression (prefix 6PY):
** Minimum value: 6PYJxKpVnkXUsnZAfD2B5ZsZafJYNp4ezQQeCjs39494qUUXLnXijLx6LG (based on 01 42 E0 plus thirty-six 00's)
** Maximum value: 6PYXg5tGnLYdXDRZiAqXbeYxwDoTBNthbi3d61mqBxPpwZQezJTvQHsCnk (based on 01 42 E0 plus thirty-six FF's)
** Maximum value: 6PYXg5tGnLYdXDRZiAqXbeYxwDoTBNthbi3d61mqBxPpwZQezJTvQHsCnk (based on 01 42 E0 plus thirty-six FF's)
* Range in base58check encoding for EC-multiplied keys without compression (prefix 6Pf):
** Minimum value: 6PfKzduKZXAFXWMtJ19Vg9cSvbFg4va6U8p2VWzSjtHQCCLk3JSBpUvfpf (based on 01 43 00 plus thirty-six 00's)
** Maximum value: 6PfYiPy6Z7BQAwEHLxxrCEHrH9kasVQ95ST1NnuEnnYAJHGsgpNPQ9dTHc (based on 01 43 00 plus thirty-six FF's)
@ -166,7 +170,7 @@ To recalculate the address:
# Derive ''passfactor'' using scrypt with ''ownerentropy'' and the user's passphrase and use it to recompute ''passpoint''
# Derive decryption key for ''pointb'' using scrypt with ''passpoint'', ''addresshash'', and ''ownerentropy''
# Decrypt ''encryptedpointb'' to yield ''pointb''
# ECMultiply ''pointb'' by ''passfactor''. Use the resulting EC point as a public key and hash it into ''address'' using either compressed or uncompressed public key methodology as specifid in ''flagbyte''.
# ECMultiply ''pointb'' by ''passfactor''. Use the resulting EC point as a public key and hash it into ''address'' using either compressed or uncompressed public key methodology as specified in ''flagbyte''.
=====Decryption=====
# Collect encrypted private key and passphrase from user.
@ -180,7 +184,7 @@ To recalculate the address:
# Hash the Bitcoin address, and verify that ''addresshash'' from the encrypted private key record matches the hash. If not, report that the passphrase entry was incorrect.
==Backwards compatibility==
Backwards compatibility is minimally applicable since this is a new standard that at most extends [[Wallet Import Format]]. It is assumed that an entry point for private key data may also accept existing formats of private keys (such as hexadecimal and [[Wallet Import Format]]); this draft uses a key format that cannot be mistaken for any existing one and preserves auto-detection capabilities.
Backwards compatibility is minimally applicable since this is a new standard that at most extends Wallet Import Format. It is assumed that an entry point for private key data may also accept existing formats of private keys (such as hexadecimal and Wallet Import Format); this draft uses a key format that cannot be mistaken for any existing one and preserves auto-detection capabilities.
==Suggestions for implementers of proposal with alt-chains==
If this proposal is accepted into alt-chains, it is requested that the unused flag bytes not be used for denoting that the key belongs to an alt-chain.
@ -205,14 +209,10 @@ The preliminary values of 16384, 8, and 8 are hoped to offer the following prope
==Reference implementation==
Added to alpha version of Casascius Bitcoin Address Utility for Windows available at:
* via https: https://casascius.com/btcaddress-alpha.zip
* at github: https://github.com/casascius/Bitcoin-Address-Utility
* https://github.com/casascius/Bitcoin-Address-Utility
Click "Tools" then "PPEC Keygen" (provisional name)
==Other implementations==
* Javascript - https://github.com/bitcoinjs/bip38
==Test vectors==
===No compression, no EC multiply===
@ -272,7 +272,7 @@ Test 2:
Test 1:
*Passphrase: MOLON LABE
*Passphrase code: passphraseaB8feaLQDENqCgr4gKZpmf4VoaT6qdjJNJiv7fsKvjqavcJxvuR1hy25aTu5sX
*Passphrase code: passphraseaB8feaLQDENqCgr4gKZpmf4VoaT6qdjJNJiv7fsKvjqavcJxvuR1hy25aTu5sX
*Encrypted key: 6PgNBNNzDkKdhkT6uJntUXwwzQV8Rr2tZcbkDcuC9DZRsS6AtHts4Ypo1j
*Bitcoin address: 1Jscj8ALrYu2y9TD8NrpvDBugPedmbj4Yh
*Unencrypted private key (WIF): 5JLdxTtcTHcfYcmJsNVy1v2PMDx432JPoYcBTVVRHpPaxUrdtf8
@ -280,9 +280,9 @@ Test 1:
*Confirmation code: cfrm38V8aXBn7JWA1ESmFMUn6erxeBGZGAxJPY4e36S9QWkzZKtaVqLNMgnifETYw7BPwWC9aPD
*Lot/Sequence: 263183/1
Test 2:
Test 2:
*Passphrase (all letters are Greek - test UTF-8 compatibility with this): ΜΟΛΩΝ ΛΑΒΕ
*Passphrase code: passphrased3z9rQJHSyBkNBwTRPkUGNVEVrUAcfAXDyRU1V28ie6hNFbqDwbFBvsTK7yWVK
*Passphrase code: passphrased3z9rQJHSyBkNBwTRPkUGNVEVrUAcfAXDyRU1V28ie6hNFbqDwbFBvsTK7yWVK
*Encrypted private key: 6PgGWtx25kUg8QWvwuJAgorN6k9FbE25rv5dMRwu5SKMnfpfVe5mar2ngH
*Bitcoin address: 1Lurmih3KruL4xDB5FmHof38yawNtP9oGf
*Unencrypted private key (WIF): 5KMKKuUmAkiNbA3DazMQiLfDq47qs8MAEThm4yL8R2PhV1ov33D

View File

@ -1,13 +1,17 @@
<pre>
BIP: 39
Layer: Applications
Title: Mnemonic code for generating deterministic keys
Author: Marek Palatinus <slush@satoshilabs.com>
Pavol Rusnak <stick@satoshilabs.com>
Aaron Voisine <voisine@gmail.com>
Sean Bowe <ewillbefull@gmail.com>
Status: Draft
Type: Standards Track
Created: 2013-09-10
Authors: Marek Palatinus <slush@satoshilabs.com>
Pavol Rusnak <stick@satoshilabs.com>
Aaron Voisine <voisine@gmail.com>
Sean Bowe <ewillbefull@gmail.com>
Comments-Summary: Unanimously Discourage for implementation
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0039
Status: Deployed
Type: Specification
Assigned: 2013-09-10
License: MIT
</pre>
==Abstract==
@ -15,35 +19,39 @@
This BIP describes the implementation of a mnemonic code or mnemonic sentence --
a group of easy to remember words -- for the generation of deterministic wallets.
It consists of two parts: generating the mnemonic, and converting it into a
It consists of two parts: generating the mnemonic and converting it into a
binary seed. This seed can be later used to generate deterministic wallets using
BIP-0032 or similar methods.
==Copyright==
This BIP falls under the MIT License.
==Motivation==
A mnemonic code or sentence is superior for human interaction compared to the
handling of raw binary or hexidecimal representations of a wallet seed. The
handling of raw binary or hexadecimal representations of a wallet seed. The
sentence could be written on paper or spoken over the telephone.
This guide is meant to be a way to transport computer-generated randomness with
a human readable transcription. It's not a way to process user-created
a human-readable transcription. It's not a way to process user-created
sentences (also known as brainwallets) into a wallet seed.
==Generating the mnemonic==
The mnemonic must encode entropy in a multiple of 32 bits. With more entropy
security is improved but the sentence length increases. We refer to the
initial entropy length as ENT. The recommended size of ENT is 128-256 bits.
initial entropy length as ENT. The allowed size of ENT is 128-256 bits.
First, an initial entropy of ENT bits is generated. A checksum is generated by
taking the first <pre>ENT / 32</pre> bits of its SHA256 hash. This checksum is
taking the first <code>ENT / 32</code> bits of its SHA256 hash. This checksum is
appended to the end of the initial entropy. Next, these concatenated bits
are split into groups of 11 bits, each encoding a number from 0-2047, serving
as an index into a wordlist. Finally, we convert these numbers into words and
use the joined words as a mnemonic sentence.
The following table describes the relation between the initial entropy
length (ENT), the checksum length (CS) and the length of the generated mnemonic
length (ENT), the checksum length (CS), and the length of the generated mnemonic
sentence (MS) in words.
<pre>
@ -64,12 +72,12 @@ MS = (ENT + CS) / 11
An ideal wordlist has the following characteristics:
a) smart selection of words
- the wordlist is created in such way that it's enough to type the first four
- the wordlist is created in such a way that it's enough to type the first four
letters to unambiguously identify the word
b) similar words avoided
- word pairs like "build" and "built", "woman" and "women", or "quick" and "quickly"
not only make remembering the sentence difficult, but are also more error
not only make remembering the sentence difficult but are also more error
prone and more difficult to guess
c) sorted wordlists
@ -94,7 +102,7 @@ This seed can be later used to generate deterministic wallets using BIP-0032 or
similar methods.
The conversion of the mnemonic sentence to a binary seed is completely independent
from generating the sentence. This results in rather simple code; there are no
from generating the sentence. This results in a rather simple code; there are no
constraints on sentence structure and clients are free to implement their own
wordlists or even whole sentence generators, allowing for flexibility in wordlists
for typo detection or other purposes.
@ -110,7 +118,14 @@ will make the desired wallet available.
==Wordlists==
* [[bip-0039/bip-0039-wordlists.md|Moved to separate document]]
Since the vast majority of BIP39 wallets supports only the English wordlist,
it is '''strongly discouraged''' to use non-English wordlists for generating
the mnemonic sentences.
If you still feel your application really needs to use a localized wordlist,
use one of the following instead of inventing your own.
* [[bip-0039/bip-0039-wordlists.md|Wordlists]]
==Test vectors==
@ -128,15 +143,3 @@ Also see https://github.com/bip32JP/bip32JP.github.io/blob/master/test_JP_BIP39.
Reference implementation including wordlists is available from
http://github.com/trezor/python-mnemonic
==Other Implementations==
Objective-C - https://github.com/nybex/NYMnemonic
Haskell - https://github.com/haskoin/haskoin
.NET C# (PCL) - https://github.com/Thashiznets/BIP39.NET
.NET C# (PCL) - https://github.com/NicolasDorier/NBitcoin
JavaScript - https://github.com/bitpay/bitcore-mnemonic

View File

@ -1,56 +1,59 @@
#Wordlists
# Wordlists
* [English](english.txt)
* [Japanese](japanese.txt)
* [Korean](korean.txt)
* [Spanish](spanish.txt)
* [Chinese (Simplified)](chinese_simplified.txt)
* [Chinese (Traditional)](chinese_traditional.txt)
* [French](french.txt)
* [Italian](italian.txt)
* [Czech](czech.txt)
* [Portuguese](portuguese.txt)
##Wordlists (Special Considerations)
## Wordlists (Special Considerations)
###Japanese
### Japanese
1. **Developers implementing phrase generation or checksum verification must separate words using ideographic spaces / accommodate users inputting ideographic spaces.**
(UTF-8 bytes: **0xE38080**; C/C+/Java: **"\u3000"**; Python: **u"\u3000"**)
1. **Developers implementing phrase generation or checksum verification must separate words using ideographic spaces / accommodate users inputting ideographic spaces.**
(UTF-8 bytes: **0xE38080**; C/C+/Java: **"\u3000"**; Python: **u"\u3000"**)
However, code that only accepts Japanese phrases but does not generate or verify them should be fine as is.
This is because when generating the seed, normalization as per the spec will
automatically change the ideographic spaces into normal ASCII spaces, so as long as your code never shows the user an ASCII space
separated phrase or tries to split the phrase input by the user, dealing with ASCII or Ideographic space is the same.
2. Word-wrapping doesn't work well, so making sure that words only word-wrap at one of the
ideographic spaces may be a necessary step. As a long word split in two could be mistaken easily
2. Word-wrapping doesn't work well, so making sure that words only word-wrap at one of the
ideographic spaces may be a necessary step. As a long word split in two could be mistaken easily
for two smaller words (This would be a problem with any of the 3 character sets in Japanese)
###Spanish
### Spanish
1. Words can be uniquely determined typing the first 4 characters (sometimes less).
1. Words can be uniquely determined by typing the first 4 characters (sometimes less).
2. Special Spanish characters like 'ñ', 'ü', 'á', etc... are considered equal to 'n', 'u', 'a', etc... in terms of identifying a word. Therefore, there is no need to use a Spanish keyboard to introduce the passphrase, an application with the Spanish wordlist will be able to identify the words after the first 4 chars have been typed even if the chars with accents have been replaced with the equivalent without accents.
3. There are no words in common between the Spanish wordlist and any other language wordlist, therefore it is possible to detect the language with just one word.
###Chinese
### Chinese
1. Chinese text typically does not use any spaces as word separators. For the sake of
uniformity, we propose to use normal ASCII spaces (0x20) to separate words as per standard.
###French
### French
Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch
([The pull request](https://github.com/bitcoin/bips/issues/152))
1. High priority on simple and common french words.
1. High priority on simple and common French words.
2. Only words with 5-8 letters.
3. A word is fully recognizable by typing the first 4 letters (special french characters "é-è" are considered equal to "e", for exemple "museau" and "musée" can not be together).
3. A word is fully recognizable by typing the first 4 letters (special French characters "é-è" are considered equal to "e", for example "museau" and "musée" can not be together).
4. Only infinitive verbs, adjectives and nouns.
5. No pronouns, no adverbs, no prepositions, no conjunctions, no interjections (unless a noun/adjective is also popular than its interjection like "mince;chouette").
6. No numeral adjectives.
7. No words in the plural (except invariable words like "univers", or same spelling than singular like "heureux").
7. No words in the plural (except invariable words like "univers", or same spelling as singular like "heureux").
8. No female adjectives (except words with same spelling for male and female adjectives like "magique").
9. No words with several senses AND different spelling in speaking like "verre-vert", unless a word has a meaning much more popular than another like "perle" and "pairle".
10. No very similar words with 1 letter of difference.
10. No very similar words with only 1 letter of difference.
11. No essentially reflexive verbs (unless a verb is also a noun like "souvenir").
12. No words with "ô;â;ç;ê;œ;æ;î;ï;û;ù;à;ë;ÿ".
13. No words ending by "é;ée;è;et;ai;ait".
@ -65,7 +68,7 @@ Credits: @paoloaga @Polve
Words chosen using the following rules:
1. Simple and common italian words.
1. Simple and common Italian words.
2. Length between 4 and 8 characters.
3. First 4 letters must be unique between all words.
4. No accents or special characters.
@ -73,11 +76,42 @@ Words chosen using the following rules:
6. No plural words.
7. No words that remind negative/sad/bad things.
8. If both female/male words are available, choose male version.
9. No words with double vocals (like: lineetta).
9. No words with double vowels (like: lineetta).
10. No words already used in other language mnemonic sets.
11. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there must be at least other 3 different letters.
12. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there not must be the same sequence of 3 or more letters.
12. If 3 of the first 4 letters are already used in the same sequence in another mnemonic word, there must not be the same sequence of 3 or more letters.
Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good.
Rules 11 and 12 prevent the selection words that are not different enough. This makes each word more recognizable among others and less error prone. For example: the wordlist contains "atono", then "atomo" is rejected, but "atomico" is good.
All the words have been manually selected and automatically checked against the rules.
### Czech
Credits: @zizelevak (Jan Lansky zizelevak@gmail.com)
Words chosen using the following rules:
1. Words are 4-8 letters long.
2. Words can be uniquely determined by typing the first 4 letters.
3. Only words containing all letters without diacritical marks. (It was the hardest task, because one third of all Czech letters has diacritical marks.)
4. Only nouns, verbs and adverbs, no other word types. All words are in basic form.
5. No personal names or geographical names.
6. No very similar words with 1 letter of difference.
7. Words are sorted according to English alphabet (Czech sorting has difference in "ch").
8. No words already used in other language mnemonic sets (english, italian, french, spanish). Letters with diacritical marks from these sets are counted as analogous letters without diacritical marks.
### Portuguese
Credits: @alegotardo @bitmover-studio @brenorb @kuthullu @ninjastic @sabotag3x @Trimegistus
1. Words can be uniquely determined by typing the first 4 characters.
2. No accents or special characters.
3. No complex verb forms.
4. No plural words, unless there's no singular form.
5. No words with double spelling.
6. No words with the exact sound as another word with different spelling.
7. No offensive words.
8. No words already used in other language mnemonic sets.
9. The words which have not the same spelling in Brazil and in Portugal are excluded.
10. No words that remind one of negative/sad/bad things.
11. No very similar words with only 1 letter of difference.

2048
bip-0039/czech.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
abaisser
abaisser
abandon
abdiquer
abeille
@ -2045,4 +2045,4 @@ yacht
zèbre
zénith
zeste
zoologie
zoologie

2048
bip-0039/korean.txt Normal file

File diff suppressed because it is too large Load Diff

2048
bip-0039/portuguese.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,21 @@
<pre>
BIP: 42
Layer: Consensus (soft fork)
Title: A finite monetary supply for Bitcoin
Author: Pieter Wuille <pieter.wuille@gmail.com>
Status: Draft
Type: Standards Track
Created: 2014-04-01
Authors: Pieter Wuille <pieter.wuille@gmail.com>
Comments-Summary: Unanimously Recommended for implementation
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0042
Status: Deployed
Type: Specification
Assigned: 2014-04-01
License: PD
</pre>
==Abstract==
Although it is widely believed that Satoshi was an inflation-hating goldbug he never said this, and in fact programmed Bitcoin's money supply to grow indefinitely, forever. He modeled the monetary supply as 4 gold mines being discovered per mibillenium (1024 years), with equal intervals between them, each one being depleted over the course of 140 years.
Although it is widely believed that Satoshi was an inflation-hating goldbug he never said this, and in fact programmed Bitcoin's money supply to grow indefinitely, forever. He modeled the monetary supply as 4 gold mines being discovered per mibillennium (1024 years), with equal intervals between them, each one being depleted over the course of 140 years.
This poses obvious problems, however. Prominent among them is the discussion on what to call 1 billion Bitcoin, which symbol color to use for it, and when wallet clients should switch to it by default.
This poses obvious problems, however. Prominent among them is the discussion on what to call 1 billion bitcoin, which symbol color to use for it, and when wallet clients should switch to it by default.
To combat this, this document proposes a controversial change: making Bitcoin's monetary supply finite.
@ -38,7 +42,7 @@ Note that several other programming languages do not exhibit this behaviour, mak
===Floating-point approximation===
An obvious solution would be to reimplement the shape of the subsidy curve using floating-point approximations, such as simulated annealing or quantitative easing, which have already proven their worth in consensus systems. Unfortunately, since the financial crisis everyone considers numbers with decimal points in them fishy, and integers are not well supported by Javascript.
An obvious solution would be to reimplement the shape of the subsidy curve using floating-point approximations, such as simulated annealing or quantitative easing, which have already proven their worth in consensus systems. Unfortunately, since the financial crisis everyone considers numbers with decimal points in them fishy, and integers are not well supported by Javascript.
===Truncation===

View File

@ -1,11 +1,12 @@
<pre>
BIP: 43
Layer: Applications
Title: Purpose Field for Deterministic Wallets
Author: Marek Palatinus <slush@satoshilabs.com>
Pavol Rusnak <stick@satoshilabs.com>
Status: Draft
Type: Standards Track
Created: 2014-04-24
Authors: Marek Palatinus <slush@satoshilabs.com>
Pavol Rusnak <stick@satoshilabs.com>
Status: Deployed
Type: Specification
Assigned: 2014-04-24
</pre>
==Abstract==
@ -17,7 +18,7 @@ based on algorithm described in BIP-0032 (BIP32 from now on).
Although Hierarchical Deterministic Wallet structure as described by BIP32
is an important step in user experience and security of the cryptocoin wallets,
the BIP32 specification offers implementors too many degrees of freedom.
the BIP32 specification offers implementers too many degrees of freedom.
Multiple implementations may claim they are BIP32 compatible, but in fact
they can produce wallets with different logical structures making them
non-interoperable. This situation unfortunately renders "BIP32 compatible"
@ -39,6 +40,8 @@ We encourage different schemes to apply for assigning a separate BIP number
and use the same number for purpose field, so addresses won't be generated
from overlapping BIP32 spaces.
Purpose codes from 10001 to 19999 are reserved for [[https://github.com/satoshilabs/slips|SLIPs]].
Example: Scheme described in BIP44 should use 44' (or 0x8000002C) as purpose.
Note that m / 0' / * is already taken by BIP32 (default account), which

View File

@ -1,11 +1,15 @@
<pre>
BIP: 44
Layer: Applications
Title: Multi-Account Hierarchy for Deterministic Wallets
Author: Marek Palatinus <slush@satoshilabs.com>
Pavol Rusnak <stick@satoshilabs.com>
Status: Draft
Type: Standards Track
Created: 2014-04-24
Authors: Marek Palatinus <slush@satoshilabs.com>
Pavol Rusnak <stick@satoshilabs.com>
Comments-Summary: Mixed review (one person)
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0044
Status: Deployed
Type: Specification
Assigned: 2014-04-24
Requires: 32, 43
</pre>
==Abstract==
@ -260,14 +264,6 @@ is required and a pull request to the above file should be created.
|m / 44' / 1' / 1' / 1 / 1
|}
==Compatible wallets==
* [[https://mytrezor.com|myTREZOR web wallet]] ([[https://github.com/trezor/webwallet|source]])
* [[https://play.google.com/store/apps/details?id=com.bonsai.wallet32|Wallet32 @ Android]] ([[https://github.com/ksedgwic/Wallet32|source]])
* [[https://play.google.com/store/apps/details?id=com.mycelium.wallet|Mycelium Bitcoin Wallet (Android)]] ([[https://github.com/mycelium-com/wallet|source]])
* [[https://copay.io/|Copay]] ([[https://github.com/bitpay/copay|source]])
* [[https://maza.club/encompass|Encompass]] ([[https://github.com/mazaclub/encompass|source]])
* [[https://www.coinvault.io/|CoinVault]]
==Reference==
* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]

View File

@ -1,19 +1,20 @@
<pre>
BIP: 45
Layer: Applications
Title: Structure for Deterministic P2SH Multisignature Wallets
Author: Manuel Araoz <manu@bitpay.com>
Ryan X. Charles <ryan@bitpay.com>
Matias Alejo Garcia <matias@bitpay.com>
Status: Draft
Type: Standards Track
Created: 2014-04-25
Authors: Manuel Araoz <manu@bitpay.com>
Ryan X. Charles <ryan@bitpay.com>
Matias Alejo Garcia <matias@bitpay.com>
Status: Complete
Type: Specification
Assigned: 2014-04-25
</pre>
==Abstract==
This BIP defines a structure for hierarchical deterministic P2SH multi-party
multi-signature wallets (HDPM wallets from now on) based on the algorithm
described in BIP-0032 (BIP32 from now on) and purpose scheme described in
described in BIP-0032 (BIP32 from now on) and purpose scheme described in
BIP-0043 (BIP43 from now on).
This BIP is a particular application of BIP43.
@ -59,8 +60,8 @@ Hardened derivation is used at this level.
The index of the party creating a P2SH multisig address. The indices can
be determined independently by lexicographically sorting the purpose public
keys of each cosigner. Each cosigner creates addresses on it's own branch,
even though they have independent extended master public key, as explained
keys of each cosigner. Each cosigner creates addresses on its own branch,
even though they have independent extended master public key, as explained
in the "Address generation" section.
Note that the master public key is not shared amongst the cosigners. Only the
@ -76,12 +77,12 @@ purpose public keys:
03f76588e06c0d688617ef365d1e58a7f1aa84daa3801380b1e7f12acc9a69cd13
</pre>
it should use `m / 45 ' / 0 / *` for
`039863fb5f07b667d9b1ca68773c6e6cdbcac0088ffba9af46f6f6acd153d44463`,
`m / 45 ' / 1 / *` for
`03a473275a750a20b7b71ebeadfec83130c014da4b53f1c4743fcf342af6589a38`,
and `m / 45 ' / 2 / *` for
`03f76588e06c0d688617ef365d1e58a7f1aa84daa3801380b1e7f12acc9a69cd13`,
it should use <code>m / 45 ' / 0 / *</code> for
<code>039863fb5f07b667d9b1ca68773c6e6cdbcac0088ffba9af46f6f6acd153d44463</code>,
<code>m / 45 ' / 1 / *</code> for
<code>03a473275a750a20b7b71ebeadfec83130c014da4b53f1c4743fcf342af6589a38</code>,
and <code>m / 45 ' / 2 / *</code> for
<code>03f76588e06c0d688617ef365d1e58a7f1aa84daa3801380b1e7f12acc9a69cd13</code>,
as dictated by their lexicographical order.
@ -99,7 +100,7 @@ chain is used for addresses which are not meant to be visible outside of the
wallet and is used for return transaction change.
For example, if cosigner 2 wants to generate a change address, he would use
`m / 45 ' / 2 / 1 / *`, and `m / 45 ' / 2 / 0 / *` for a receive
<code>m / 45 ' / 2 / 1 / *</code>, and <code>m / 45 ' / 2 / 0 / *</code> for a receive
address.
Non-hardened derivation is used at this level.
@ -115,7 +116,7 @@ Non-hardened derivation is used at this level.
Each party generates their own extended master keypair and shares the
extended purpose' public key with the others, which is stored encrypted.
Each party can generate any of the other's derived public keys, but only
his own private keys.
his own private keys.
===Address Generation Procedure===
When generating an address, each party can independently generate the N needed
@ -134,18 +135,18 @@ others using the next index, and calculate the needed script for the address.
Example: Cosigner #2 wants to receive a payment to the shared wallet. His last
used index on his own branch is 4. Then, the path for the next receive
address is `m/45'/2/0/5`. He uses this same path in all of the cosigners
address is <code>m/45'/2/0/5</code>. He uses this same path in all of the cosigners
trees to generate a public key for each one, and from that he gets the new
p2sh address.
====Change address case====
Again, each cosigner generates addresses only on his own branch. One of the
n cosigners wants to create an outgoing payment, for which he'll need a change
address. He generates a new address using the same procedure as above, but
using a separate index to track the used change addresses.
using a separate index to track the used change addresses.
Example: Cosigner #5 wants to send a payment from the shared wallet, for which
he'll need a change address. His last used change index on his own branch is
11. Then, the path for the next change address is `m/45'/5/1/12`. He uses
11. Then, the path for the next change address is <code>m/45'/5/1/12</code>. He uses
this same path in all of the cosigners trees to generate a public key for each
one, and from that he gets the new p2sh address.
@ -160,7 +161,7 @@ that specific address (using the same path that generated the public key in
that address, but deriving the private key instead), and sign it. Once the
proposal reaches m signatures, any cosigner can broadcast it to the network,
becoming final. The specifics of how this proposal is structured, and the
protocol to accept or reject it, belong to another BIP, in my opinion.
protocol to accept or reject it, belong to another BIP, in my opinion.
===Address discovery===
@ -168,8 +169,8 @@ When the master seed is imported from an external source the software should
start to discover the addresses in the following manner:
# for each cosigner:
# derive the cosigner's node (`m / 45' / cosigner_index`)
# for both the external and internal chains on this node (`m / 45' / cosigner_index / 0` and `m / 45' / cosigner_index / 1`):
# derive the cosigner's node (<code>m / 45' / cosigner_index</code>)
# for both the external and internal chains on this node (<code>m / 45' / cosigner_index / 0</code> and <code>m / 45' / cosigner_index / 1</code>):
# scan addresses of the chain; respect the gap limit described below
Please note that the algorithm uses the transaction history, not address
@ -179,7 +180,7 @@ even if the earlier ones don't have transactions
===Address gap limit===
Address gap limit is currently set to 20. If the software hits 20 unused
Address gap limit is currently set to 20. If the software hits 20 unused
addresses (no transactions associated with that address) in a row, it expects
there are no used addresses beyond this point and stops searching the address chain.
@ -189,13 +190,13 @@ an external chain by generating a new address.
===Rationale===
This stucture provides a general way of doing HDPM wallets between m-of-n
This structure provides a general way of doing HDPM wallets between m-of-n
parties. Here are some explanations about the design decisions made.
The reason for using separate branches for each cosigner is we don't want
two of them generating the same address and receiving simultaneous payments
to it. The ideal case is that each address receives at most one payment,
requested by the corresponding cosigner.
requested by the corresponding cosigner.
==Examples==
@ -241,7 +242,7 @@ requested by the corresponding cosigner.
| m / 45' / 2 / 1 / 9
|}
==Compatible walets==
==Compatible wallets==
* [[https://copay.io|Copay wallet]] ([[https://github.com/bitpay/copay|source]])

192
bip-0046.mediawiki Normal file
View File

@ -0,0 +1,192 @@
<pre>
BIP: 46
Layer: Applications
Title: Address Scheme for Timelocked Fidelity Bonds
Authors: Chris Belcher <belcher@riseup.net>
Thebora Kompanioni <theborakompanioni+bip46@gmail.com>
Status: Draft
Type: Specification
Assigned: 2022-04-01
License: CC0-1.0
Discussion: 2022-05-01: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020389.html
</pre>
== Abstract ==
This BIP defines the derivation scheme for HD wallets which create timelocked addresses used for creating fidelity bonds. It also gives advice to wallet developers on how to use fidelity bonds to sign over messages, such as certificates, which are needed when using fidelity bonds that are stored offline.
== Copyright ==
This document is licensed under the Creative Commons CC0 1.0 Universal license.
== Motivation ==
Fidelity bonds are used to resist sybil attacks in certain decentralized anonymous protocols. They are created by locking up bitcoins using the `OP_CHECKLOCKTIMEVERIFY` opcode.
Having a common derivation scheme allows users of wallet software to have a backup of their fidelity bonds by storing only the HD seed and a reference to this BIP. Importantly the user does not need to backup any timelock values.
We largely use the same approach used in BIPs 49, 84 and 86 for ease of implementation.
This allows keeping the private keys of fidelity bonds in cold storage, which increases the sybil resistance of a system without hot wallet risk.
== Backwards Compatibility ==
This BIP is not backwards compatible by design as described in the Considerations section of [[bip-0049.mediawiki|BIP 49]]. An incompatible wallet will not discover fidelity bonds at all and the user will notice that something is wrong.
== Background ==
=== Fidelity bonds ===
A fidelity bond is a mechanism where bitcoin value is deliberately sacrificed to make a cryptographic identity expensive to obtain. A way to create a fidelity bond is to lock up bitcoins by sending them to a timelocked address. The valuable thing being sacrificed is the time-value-of-money.
The sacrifice must be done in a way that can be proven to a third party. This proof can be made by showing the UTXO outpoint, the address redeemscript and a signature which signs a message using the private key corresponding to the public key in the redeemscript.
The sacrificed value is an objective measurement that can't be faked and which can be verified by anybody (just like, for example PoW mining). Sybil attacks can be made very expensive by forcing a hypothetical sybil attacker to lock up many bitcoins for a long time. JoinMarket implements fidelity bonds for protection from sybil attackers. At the time of writing over 600 BTC in total have been locked up with some for many years. Their UTXOs and signatures have been advertised to the world as proof. We can calculate that for a sybil attacker to succeed in unmixing all the CoinJoins, they would have to lock up over 100k BTC for several years.
=== Fidelity bonds in cold storage ===
To allow for holding fidelity bonds in cold storage, there is an intermediate keypair called the certificate.
UTXO key ---signs---> certificate ---signs---> endpoint
Where the endpoint might be a IRC nickname or Tor onion hostname. The certificate keypair can be kept online and used to prove ownership of the fidelity bond. Even if the hot wallet private keys are stolen, the coins in the timelocked address will still be safe, although the thief will be able to impersonate the fidelity bond until the expiry.
== Rationale ==
It is useful for the user to avoid having to keep a record of the timelocks in the time-locked addresses. So only a limited small set of timelocks are defined by this BIP. This way the user must only store their seed phrase, and knowledge that they have coins stored using this BIP standard. The user doesn't need to remember or store any dates.
This standard is already implemented and deployed in JoinMarket. As most changes would require a protocol change of a live system, there is limited scope for changing this standard in review. This BIP is more about documenting something which already exists, warts and all.
== Specifications ==
This BIP defines the two needed steps to derive multiple deterministic addresses based on a [[bip-0032.mediawiki|BIP 32]] master private key. It also defines the format of the certificate that can be signed by the deterministic address key.
=== Public key derivation ===
To derive a public key from the root account, this BIP uses a similar account-structure as defined in BIP [[bip-0084.mediawiki|44]] but with <tt>change</tt> set to <tt>2</tt>.
<pre>
m / 84' / 0' / 0' / 2 / index
</pre>
A key derived with this derivation path pattern will be referred to as <tt>derived_key</tt> further
in this document.
For <tt>index</tt>, addresses are numbered from 0 in a sequentially increasing manner with a fixed upper bound: The index only goes up to <tt>959</tt> inclusive. Only 960 addresses can be derived for a given BIP32 master key. Furthermore there is no concept of a gap limit, instead wallets must always generate all 960 addresses and check for all of them if they have a balance and history.
=== Timelock derivation ===
The timelock used in the time-locked address is derived from the <tt>index</tt>. The timelock is a unix time. It is always at the start of the first second at the beginning of the month (see [[#test-vectors|Test vectors]]). The <tt>index</tt> counts upwards the months from January 2020, ending in December 2099. At 12 months per year for 80 years this totals 960 timelocks. Note that care must be taken with the year 2038 problem on 32-bit systems.
<pre>
year = 2020 + index // 12
month = 1 + index % 12
</pre>
=== Address derivation ===
To derive the address from the above calculated public key and timelock, we create a <tt>witness script</tt> which locks the funds until the <tt>timelock</tt>, and then checks the signature of the <tt>derived_key</tt>. The <tt>witness script</tt> is hashed with SHA256 to produce a 32-byte hash value that forms the <tt>witness program</tt> in the output script of the P2WSH address.
witnessScript: <timelock> OP_CHECKLOCKTIMEVERIFY OP_DROP <derived_key> OP_CHECKSIG
witness: <signature> <witnessScript>
scriptSig: (empty)
scriptPubKey: 0 <32-byte-hash>
(0x0020{32-byte-hash})
=== Message signing ===
In order to support signing of certificates, implementers should support signing ASCII messages.
The certificate message is defined as `"fidelity-bond-cert" || "|" || cert_pubkey || "|" || cert_expiry`.
The certificate expiry `cert_expiry` is the number of the 2016-block period after which the certificate is no longer valid. For example, if `cert_expiry` is 330 then the certificate will become invalid after block height 665280 (:=330x2016). The purpose of the expiry parameter is so that in case the certificate keypair is compromised, the attacker can only impersonate the fidelity bond for a limited amount of time.
A certificate message can be created by another application external to this standard. It is then prepended with the string `0x18 || "Bitcoin Signed Message:\n"` and a byte denoting the length of the certificate message. The whole thing is then signed with the private key of the <tt>derived_key</tt>. This part is identical to the "Sign Message" function which many wallets already implement.
Almost all wallets implementing this standard can use their already-existing "Sign Message" function to sign the certificate message. As the certificate message itself is always an ASCII string, the wallet may not need to specially implement this section at all but just rely on users copypasting their certificate message into the already-existing "Sign Message" user interface. This works as long as the wallet knows how to use the private key of the timelocked address for signing messages.
It is most important for wallet implementations of this standard to support creating the certificate signature. Verifying the certificate signature is less important.
== Test vectors ==
<pre>
mnemonic = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
rootpriv = xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu
rootpub = xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8
// First timelocked address = m/84'/0'/0'/2/0
derived private_key = L2tQBEdhC48YLeEWNg3e4msk94iKfyVa9hdfzRwUERabZ53TfH3d
derived public_key = 02a1b09f93073c63f205086440898141c0c3c6d24f69a18db608224bcf143fa011
unix locktime = 1577836800
string locktime = 2020-01-01 00:00:00
redeemscript = 0400e10b5eb1752102a1b09f93073c63f205086440898141c0c3c6d24f69a18db608224bcf143fa011ac
scriptPubKey = 0020bdee9515359fc9df912318523b4cd22f1c0b5410232dc943be73f9f4f07e39ad
address = bc1qhhhf29f4nlyalyfrrpfrknxj9uwqk4qsyvkujsa7w0ulfur78xkspsqn84
// Test certificate using the first timelocked address
// Note that as signatures contains a random nonce, it might not be exactly the same when your code generates it
// p2pkh address is the p2pkh address corresponding to the derived public key, it can be used to verify the message
// signature in any wallet that supports Verify Message.
// As mentioned before, it is more important for implementers of this standard to support signing such messages, not verifying them
message = fidelity-bond-cert|020000000000000000000000000000000000000000000000000000000000000001|375
address = bc1qhhhf29f4nlyalyfrrpfrknxj9uwqk4qsyvkujsa7w0ulfur78xkspsqn84
p2pkh address = 16vmiGpY1rEaYnpGgtG7FZgr2uFCpeDgV6
signature = H2b/90XcKnIU/D1nSCPhk8OcxrHebMCr4Ok2d2yDnbKDTSThNsNKA64CT4v2kt+xA1JmGRG/dMnUUH1kKqCVSHo=
// 2nd timelocked address = m/84'/0'/0'/2/1
derived private_key = KxctaFBzetyc9KXeUr6jxESCZiCEXRuwnQMw7h7hroP6MqnWN6Pf
derived public_key = 02599f6db8b33265a44200fef0be79c927398ed0b46c6a82fa6ddaa5be2714002d
unix locktime = 1580515200
string locktime = 2020-02-01 00:00:00
redeemscript = 0480bf345eb1752102599f6db8b33265a44200fef0be79c927398ed0b46c6a82fa6ddaa5be2714002dac
scriptPubKey = 0020b8f898643991608524ed04e0c6779f632a57f1ffa3a3a306cd81432c5533e9ae
address = bc1qhrufsepej9sg2f8dqnsvvaulvv490u0l5w36xpkds9pjc4fnaxhq7pcm4h
// timelocked address after the year 2038 = m/84'/0'/0'/2/240
derived private_key = L3SYqae23ZoDDcyEA8rRBK83h1MDqxaDG57imMc9FUx1J8o9anQe
derived public_key = 03ec8067418537bbb52d5d3e64e2868e67635c33cfeadeb9a46199f89ebfaab226
unix locktime = 2208988800
string locktime = 2040-01-01 00:00:00
redeemscript = 05807eaa8300b1752103ec8067418537bbb52d5d3e64e2868e67635c33cfeadeb9a46199f89ebfaab226ac
scriptPubKey = 0020e7de0ad2720ae1d6cc9b6ad91af57eb74646762cf594c91c18f6d5e7a873635a
address = bc1qul0q45njptsadnymdtv34at7karyva3v7k2vj8qc7m2702rnvddq0z20u5
// last timelocked address = m/84'/0'/0'/2/959
derived private_key = L5Z9DDMnj5RZMyyPiQLCvN48Xt7GGmev6cjvJXD8uz5EqiY8trNJ
derived public_key = 0308c5751121b1ae5c973cdc7071312f6fc10ab864262f0cbd8134f056166e50f3
unix locktime = 4099766400
string locktime = 2099-12-01 00:00:00
redeemscript = 0580785df400b175210308c5751121b1ae5c973cdc7071312f6fc10ab864262f0cbd8134f056166e50f3ac
scriptPubKey = 0020803268e042008737cf439748cbb5a4449e311da9aa64ae3ac56d84d059654f85
address = bc1qsqex3czzqzrn0n6rjayvhddygj0rz8df4fj2uwk9dkzdqkt9f7zs5c493u
// Test certificate and endpoint signing using the first timelocked address = m/84'/0'/0'/2/0 (see above)
bond private_key = L2tQBEdhC48YLeEWNg3e4msk94iKfyVa9hdfzRwUERabZ53TfH3d
bond p2pkh address = 16vmiGpY1rEaYnpGgtG7FZgr2uFCpeDgV6
certificate private_key = KyZpNDKnfs94vbrwhJneDi77V6jF64PWPF8x5cdJb8ifgg2DUc9d
certificate public_key = 0330d54fd0dd420a6e5f8d3624f5f3482cae350f79d5f0753bf5beef9c2d91af3c
certificate p2pkh address = 1JaUQDVNRdhfNsVncGkXedaPSM5Gc54Hso
certificate message = fidelity-bond-cert|0330d54fd0dd420a6e5f8d3624f5f3482cae350f79d5f0753bf5beef9c2d91af3c|375
certificate signature = INOP3cB9UW7F1e1Aglj8rI9QhnyxmgWDEPt+nOMvl7hJJne7rH/KCNDYvLiqNuB9qWaWUojutjRsgPJrvyDQ+0Y=
// example endpoint signing two IRC nicknames (used in JoinMarket)
endpoint message = J54LS6YyJPoseqFS|J55VZ6U6ZyFDNeuv
endpoint signature = H18WE4MugDNoWZIf9jU0njhQptdUyBDUf7lToG9bpMKmeJK0lOoABaDs5bKnohSuZ0e9gnSco5OL9lXdKU7gP5E=
</pre>
Code generating these test vectors can be found here: https://github.com/chris-belcher/timelocked-addresses-fidelity-bond-bip-testvectors
== Reference ==
* [[https://gist.github.com/chris-belcher/18ea0e6acdb885a2bfbdee43dcd6b5af/|Design for improving JoinMarket's resistance to sybil attacks using fidelity bonds]]
* [[https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/fidelity-bonds.md|JoinMarket fidelity bonds doc page]]
* [[bip-0065.mediawiki|BIP65 - OP_CHECKLOCKTIMEVERIFY]]
* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]
* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]]
* [[bip-0049.mediawiki|BIP49 - Derivation scheme for P2WPKH-nested-in-P2SH based accounts]]
* [[bip-0084.mediawiki|BIP84 - Derivation scheme for P2WPKH based accounts]]
* [[bip-0086.mediawiki|BIP86 - Key Derivation for Single Key P2TR Outputs]]

View File

@ -1,17 +1,26 @@
RECENT CHANGES:
* (18 Dec 2015) Update explanations to resolve FAQs
* (12 Oct 2015) Revise blinding method for notification transactions
* (21 Sep 2015) Correct base58check version byte
* (15 Feb 2021) Finalize specification
* (28 Sep 2017) Adjust text to match test vectors
* (19 Apr 2016) Define version 2 payment codes
<pre>
BIP: 47
Layer: Applications
Title: Reusable Payment Codes for Hierarchical Deterministic Wallets
Author: Justus Ranvier <justus@openbitcoinprivacyproject.org>
Status: Draft
Authors: Justus Ranvier <justus@openbitcoinprivacyproject.org>
Comments-Summary: Unanimously Discourage for implementation
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0047
Status: Deployed
Type: Informational
Created: 2015-04-24
Assigned: 2015-04-24
</pre>
==Status==
This BIP can be considered final in terms of enabling compatibility with wallets that implement version 1 and version 2 reusable payment codes, however future developments of the reusable payment codes specification will not be distributed via the BIP process.
The Open Bitcoin Privacy Project RFC repo should be consulted for specifications related to version 3 or higher payment codes: https://github.com/OpenBitcoinPrivacyProject/rfc
==Abstract==
This BIP defines a technique for creating a payment code which can be publicly advertised and associated with a real-life identity without creating the loss of security or privacy inherent to P2PKH address reuse.
@ -84,7 +93,27 @@ Hardened derivation is used at this level.
Except where noted, all keys derived from a payment code use the public derivation method.
==Standard Payment Codes (v1)==
==Versions==
Payment codes contain a version byte which identifies a specific set of behavior.
Unless otherwise specified, payment codes of different versions are interoperable. If Alice uses a version x payment code, and Bob uses a version y payment code, they can still send and receive transactions between each other.
Currently specified versions:
* Version 1
** Address type: P2PKH
** Notification type: address
* Version 2
** Address type: P2PKH
** Notification type: bloom-multisig
===Recommended Versions===
* Wallets which have bloom filtering capabilities SHOULD create version 2 payment codes instead of version 1 payment codes.
* Version 1 payment codes are only recommended for wallets which lack access to bloom filtering capability.
==Version 1==
===Representation===
@ -119,20 +148,25 @@ It is assumed that Alice can easily obtain Bob's payment code via a suitable met
* Payment code: an extended public key and associated metadata which is associated with a particular identity/account
* Notification address: the P2PKH address associated with the 0<sup>th</sup> public key derived from a payment code
* Notification transaction: a transaction which sends an output to a notification address which includes an embedded payment code
* Designated input: the first input in the notification transaction which exposes an secp256k1 pubkey in either its signature script, or in the redeem script or pubkey script of the output being spent
* Designated pubkey: the first secp256k1 pubkey pushed to the stack during script execution for the designated input
* Outpoint: the specific output of a previous transaction which is being spent. See the Reference section for the binary serialization
====Notification Transaction====
Prior to the first time Alice initiates a transaction to Bob, Alice MUST inform Bob of her payment code via the following procedure:
Note: this procedure is used if Bob uses a version 1 payment code (regardless of the version of Alice's payment code). If Bob's payment code is not version 1, see the appropriate section in this specification.
# Alice constructs a transaction which sends a small quantity of bitcoins to Bob's notification address (notification transaction)
## The inputs selected for this transaction MUST NOT be easily associated with Alice's notification address
# Alice derives a unique shared secret using ECDH:
## Alice selects the private key corresponding to the first exposed public key, of the first pubkey-exposing input, of the transaction: <pre>a</pre>
## Alice selects the private key corresponding to the designated pubkey: <pre>a</pre>
## Alice selects the public key associated with Bob's notification address: <pre>B, where B = bG</pre>
## Alice calculates a secret point: <pre>S = aB</pre>
## Alice calculates a 64 byte blinding factor: <pre>s = HMAC-SHA512(x, o)</pre>
## Alice calculates a 64 byte blinding factor: <pre>s = HMAC-SHA512(o, x)</pre>
### "x" is the x value of the secret point
### "o" is the outpoint being spent by the first pubkey-exposing input of the transaction.
### "o" is the outpoint being spent by the designated input
# Alice serializes her payment code in binary form.
# Alice renders her payment code (P) unreadable to anyone except Bob:
## Replace the x value with x': <pre>x' = x XOR (first 32 bytes of s)</pre>
@ -143,12 +177,12 @@ Prior to the first time Alice initiates a transaction to Bob, Alice MUST inform
# Bob watches for any transactions which create an output at his notification address.
# When a transaction is received, the client examines it to determine if it contains a standard OP_RETURN output with an 80 byte payload (notification transactions).
# If the first byte of the payload in a notification transaction is 0x01:
## Bob selects the first exposed public key, of the first pubkey-exposing input, of the transaction: <pre>A, where A = aG</pre>
## Bob selects the designated pubkey: <pre>A, where A = aG</pre>
## Bob selects the private key associated with his notification address: <pre>b</pre>
## Bob calculates a secret point: <pre>S = bA</pre>
## Bob calculates the binding factor: <pre>s = HMAC-SHA512(x, o)</pre>
## Bob calculates the blinding factor: <pre>s = HMAC-SHA512(x, o)</pre>
### "x" is the x value of the secret point
### "o" is the outpoint being spent by the first pubkey-exposing input of the transaction.
### "o" is the outpoint being spent by the designated input.
## Bob interprets the 80 byte payload as a payment code, except:
### Replace the x value with x': <pre>x' = x XOR (first 32 bytes of s)</pre>
### Replace the chain code with c': <pre>c' = c XOR (last 32 bytes of s)</pre>
@ -177,9 +211,20 @@ Alice SHOULD use an input script in one of the following standard forms to expos
Compatible wallets MAY provide a method for a user to manually specify the public key associated with a notification transaction in order to recover payment codes sent via non-standard notification transactions.
=====Post-Notification Privacy Considerations=====
Incautious handling of change outputs from notification transactions may cause unintended loss of privacy.
The recipient of a transaction which spends a change output from a prior notification transaction will learn about the potential connection between the sender and the recipient of the notification transaction.
The following actions are recommended to reduce this risk:
* Wallets which support mixing SHOULD mix change outputs from notification transactions prior to spending them
* Wallets which do not support mixing MAY simulate mixing by creating a transaction which spends the change output to the next external BIP44 address
====Sending====
# Each time Alice wants to initiate a transaction to Bob, Alice derives a unique P2PKH address for the transaction using ECDH follows:
# Each time Alice wants to initiate a transaction to Bob, Alice derives a unique P2PKH address for the transaction using ECDH as follows:
## Alice selects the 0th private key derived from her payment code: <pre>a</pre>
## Alice selects the next unused public key derived from Bob's payment code, starting from zero: <pre>B, where B = bG</pre>
### The "next unused" public key is based on an index specific to the Alice-Bob context, not global to either Alice or Bob
@ -190,7 +235,7 @@ Compatible wallets MAY provide a method for a user to manually specify the publi
<img src="bip-0047/reusable_payment_codes-04.png" />
<img src="bip-0047/reusable_payment_codes-05.png" />
# Bob is watching for incoming payments on B' ever since he received the notification transaction from Alice.
## Bob calculates n shared secrets with Alice, using the 0<sup>th</sup> public key derived Alice's payment code, and private keys 0 - n derived from Bob's payment code, where n is his desired lookahead window.
## Bob calculates n shared secrets with Alice, using the 0<sup>th</sup> public key derived from Alice's payment code, and private keys 0 - n derived from Bob's payment code, where n is his desired lookahead window.
## Bob calculates the ephemeral deposit addresses using the same procedure as Alice: <pre>B' = B + sG</pre>
## Bob calculate the private key for each ephemeral address as: <pre>b' = b + s</pre>
<img src="bip-0047/reusable_payment_codes-02.png" />
@ -230,7 +275,7 @@ Normal operation of a payment code-enabled wallet can be performed by an SPV cli
Recovering a wallet from a seed, however, does require access to a fully-indexed blockchain.
The required data may be obtained from copy of the blockchain under the control of the user, or via a publicly-queriable blockchain explorer.
The required data may be obtained from copy of the blockchain under the control of the user, or via a publicly-queryable blockchain explorer.
When querying a public blockchain explorer, wallets SHOULD connect to the explorer through Tor (or equivalent) and SHOULD avoid grouping queries in a manner that associates ephemeral addresses with each other.
@ -273,7 +318,7 @@ A recipient specifies their preference for alternate notification by setting the
===Bitmessage Notification===
A recipient prefers to receive notifications via Bitmessage indiates this preference by:
A recipient which prefers to receive notifications via Bitmessage indicates this preference by:
* Setting bit 0 of the features byte to 1
* Setting byte 67 of the serialized payment code to the desired Bitmessage address version
@ -291,6 +336,41 @@ The sender transmits their payment code in base58 form to the calculated Bitmess
In order to use Bitmessage notification, the recipient must have a Bitmessage client which listens at the address which the senders will derive and is capable of relaying received payment codes to the Bitcoin wallet.
==Version 2==
Version 2 payment codes behave identifically to version 1 payment codes, except as modified below.
===Representation===
====Binary Serialization====
* Byte 0: version. required value: 0x02
===Protocol===
====Definitions====
* Notification change output: the change output from a notification transaction which resides in the sender's wallet, but can be automatically located by the intended recipient
* Payment code identifier: a 33 byte representation of a payment code constructed by prepending 0x02 to the SHA256 hash of the binary serialization of the payment code
====Notification Transaction====
Note: this procedure is used if Bob uses a version 2 payment code (regardless of the version of Alice's payment code). If Bob's payment code is not version 2, see the appropriate section in this specification.
# Construct a notification transaction as per the version 1 instructions, except do not create the output to Bob's notification address
# Create a notification change address as follows:
## Obtain the pubkey corresponding to the next change address
## Construct a multisig output in the form:
<pre>OP_1 <Bob's payment code identifier> <change address pubkey> OP_2 OP_CHECKMULTISIG</pre>
The relative ordering of the payment code identifier and change address pubkey in the above script MAY be randomized
Bob detects notification transactions by adding his payment code identifier to his bloom filter.
# When the filter returns a notification transaction, the sender's payment code is unblinded using the same procedure as for version 1 notification transactions.
Alice's wallet should spend the notification change output at the next appropriate opportunity.
==Test Vectors==
* [[https://gist.github.com/SamouraiDev/6aad669604c5930864bd|BIP47 Reusable Payment Codes Test Vectors]]
@ -300,7 +380,7 @@ In order to use Bitmessage notification, the recipient must have a Bitmessage cl
* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]
* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]]
* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]]
* [[https://bitcoin.org/en/glossary/outpoint|Outpoint]]
* [[https://bitcoin.org/en/developer-reference#outpoint|Outpoint]]
* [[https://github.com/petertodd/dust-b-gone|dust-b-gone]]
* [[https://en.bitcoin.it/wiki/Base58Check_encoding|Base58Check encoding]]
* [[https://bitmessage.org/bitmessage.pdf|Bitmessage]]

253
bip-0048.mediawiki Normal file
View File

@ -0,0 +1,253 @@
<pre>
BIP: 48
Layer: Applications
Title: Multi-Script Hierarchy for Multi-Sig Wallets
Authors: Fontaine <dentondevelopment@protonmail.com>
Status: Deployed
Type: Specification
Assigned: 2020-12-16
License: MIT
</pre>
==Abstract==
This BIP defines a logical hierarchy for deterministic multi-sig wallets based on an algorithm
described in BIP-0067 (BIP67 from now on), BIP-0032 (BIP32 from now on), purpose scheme described in
BIP-0043 (BIP43 from now on), and multi-account hierarchy described in
BIP-0044 (BIP44 from now on).
This BIP is a particular application of BIP43.
==Copyright==
This BIP falls under the MIT License.
==Motivation==
The motivation of this BIP is to define the existing industry wide practice of utilizing m/48'
derivation paths in hierarchical deterministic multi-sig wallets so that other developers may
benefit from a standard. This BIP allows for future script types to easily be appended to the
specification so that a new BIP is not required for every future script type.
The hierarchy proposed in this paper is quite comprehensive. It allows the handling of
multiple accounts, external and internal chains per account, multiple script types and
millions of addresses per chain.
This paper was inspired from BIP44.
==Backwards compatibility==
Currently a number of wallets utilize the <code>m/48'</code> derivation scheme for HD multi-sig accounts.
This BIP is intended to maintain the *existing* real world use of the <code>m/48'</code> derivation.
No breaking changes are made so as to avoid "loss of funds" to existing users.
Wallets which currently support the <code>m/48'</code> derivation will not need to make any changes
to comply with this BIP.
==Specification==
===Key sorting===
Any wallet that supports BIP48 inherently supports deterministic key sorting as per BIP67 so that all possible
multi-signature addresses/scripts are derived from deterministically sorted public keys.
===Path levels===
We define the following 6 levels in BIP32 path:
<pre>
m / purpose' / coin_type' / account' / script_type' / change / address_index
</pre>
<code>h</code> or <code>'</code> in the path indicates that BIP32 hardened derivation is used.
Each level has a special meaning, described in the chapters below.
===Purpose===
Purpose is a constant set to 48' following the BIP43 recommendation.
It indicates that the subtree of this node is used according to this specification.
Hardened derivation is used at this level.
===Coin type===
One master node (seed) can be used for multiple Bitcoin networks.
Sharing the same space for various networks has some disadvantages.
Avoiding reusing addresses across networks and improving privacy issues.
Coin type <code>0</code> for mainnet and <code>1</code> for testnet.
Hardened derivation is used at this level.
===Account===
This level splits the key space into independent user identities, following the BIP44 pattern,
so the wallet never mixes the coins across different accounts.
Users can use these accounts to organize the funds in the same
fashion as bank accounts; for donation purposes (where all
addresses are considered public), for saving purposes,
for common expenses etc.
Accounts are numbered from index 0 in sequentially increasing manner.
This number is used as child index in BIP32 derivation.
Hardened derivation is used at this level.
===Script===
This level splits the key space into two separate <code>script_type</code>(s). To provide
forward compatibility for future script types this specification can be easily extended.
Currently the only script types covered by this BIP are Native Segwit (p2wsh) and
Nested Segwit (p2sh-p2wsh).
The following path represents Nested Segwit (p2sh-p2wsh) mainnet, account 0:
<code>1'</code>: Nested Segwit (p2sh-p2wsh) <code>m/48'/0'/0'/1'</code></br>
The following path represents Native Segwit (p2wsh) mainnet, account 0:
<code>2'</code>: Native Segwit (p2wsh) <code>m/48'/0'/0'/2'</code></br>
The recommended default for wallets is pay to witness script hash <code>m/48'/0'/0'/2'</code>.
===Change===
Constant 0 is used for external chain and constant 1 for internal chain (also
known as change addresses). External chain is used for addresses that are meant
to be visible outside of the wallet (e.g. for receiving payments). Internal
chain is used for addresses which are not meant to be visible outside of the
wallet and is used for return transaction change.
Public derivation is used at this level.
===Index===
Addresses are numbered from index 0 in sequentially increasing manner.
This number is used as child index in BIP32 derivation.
Public derivation is used at this level.
==Examples==
{|
|network
|account
|script
|chain
|address
|path
|-
|mainnet
|first
|p2sh-p2wsh
|external
|first
|m / 48' / 0' / 0' / 1' / 0 / 0
|-
|mainnet
|first
|p2wsh
|external
|first
|m / 48' / 0' / 0' / 2' / 0 / 0
|-
|mainnet
|first
|p2wsh
|external
|second
|m / 48' / 0' / 0' / 2' / 0 / 1
|-
|mainnet
|first
|p2wsh
|change
|first
|m / 48' / 0' / 0' / 2' / 1 / 0
|-
|mainnet
|first
|p2wsh
|change
|second
|m / 48' / 0' / 0' / 2' / 1 / 1
|-
|mainnet
|second
|p2wsh
|external
|first
|m / 48' / 0' / 1' / 2' / 0 / 0
|-
|mainnet
|second
|p2wsh
|external
|second
|m / 48' / 0' / 1' / 2' / 0 / 1
|-
|testnet
|first
|p2sh-p2wsh
|external
|first
|m / 48' / 1' / 0' / 1' / 0 / 0
|-
|testnet
|first
|p2wsh
|external
|second
|m / 48' / 1' / 0' / 2' / 0 / 1
|-
|testnet
|first
|p2wsh
|change
|first
|m / 48' / 1' / 0' / 2' / 1 / 0
|-
|testnet
|first
|p2wsh
|change
|second
|m / 48' / 1' / 0' / 2' / 1 / 1
|-
|testnet
|second
|p2wsh
|external
|first
|m / 48' / 1' / 1' / 2' / 0 / 0
|-
|testnet
|second
|p2wsh
|external
|second
|m / 48' / 1' / 1' / 2' / 0 / 1
|-
|testnet
|second
|p2wsh
|change
|first
|m / 48' / 1' / 1' / 2' / 1 / 0
|-
|testnet
|second
|p2wsh
|change
|second
|m / 48' / 1' / 1' / 2' / 1 / 1
|}
==Reference==
* [[bip-0067.mediawiki|BIP67 - Deterministic Pay-to-script-hash multi-signature addresses through public key sorting]]
* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]
* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]]
* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]]

117
bip-0049.mediawiki Normal file
View File

@ -0,0 +1,117 @@
<pre>
BIP: 49
Layer: Applications
Title: Derivation scheme for P2WPKH-nested-in-P2SH based accounts
Authors: Daniel Weigl <DanielWeigl@gmx.at>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0049
Status: Deployed
Type: Specification
Assigned: 2016-05-19
License: PD
</pre>
==Abstract==
This BIP defines the derivation scheme for HD wallets using the P2WPKH-nested-in-P2SH ([[bip-0141.mediawiki|BIP 141]]) serialization format for segregated witness transactions.
==Motivation==
With the usage of P2WPKH-nested-in-P2SH ([[bip-0141.mediawiki#p2wpkh-nested-in-bip16-p2sh|BIP 141]]) transactions it is necessary to have a common derivation scheme.
It allows the user to use different HD wallets with the same masterseed and/or a single account seamlessly.
Thus the user needs to create dedicated segregated witness accounts, which ensures that only wallets compatible with this BIP
will detect the accounts and handle them appropriately.
===Considerations===
Two generally different approaches are possible for current BIP44 capable wallets:
1) Allow the user to use the same account(s) that they already use, but add segregated witness encoded addresses to it.
1.1) Use the same public keys as defined in BIP44, but in addition to the normal P2PKH address also derive the P2SH address from it.
1.2) Use the same account root, but branch off and derive different external and internal chain roots to derive dedicated public keys for the segregated witness addresses.
2) Create dedicated accounts used only for segregated witness addresses.
The solutions from point 1 have a common disadvantage: if a user imports/recovers a BIP49-compatible wallet masterseed into/in a non-BIP49-compatible wallet, the account might show up but also it might miss some UTXOs.
Therefore this BIP uses solution 2, which fails in a more visible way. Either the account shows up or not at all. The user does not have to check his balance after using the same seed in different wallets.
==Specifications==
This BIP defines the two needed steps to derive multiple deterministic addresses based on a [[bip-0032.mediawiki|BIP 32]] root account.
===Public key derivation===
To derive a public key from the root account, this BIP uses the same account-structure as defined in
[[bip-0044.mediawiki|BIP 44]], but only uses a different purpose value to indicate the different transaction
serialization method.
<pre>
m / purpose' / coin_type' / account' / change / address_index
</pre>
For the `purpose`-path level it uses `49'`. The rest of the levels are used as defined in BIP44.
===Address derivation===
To derive the P2SH address from the above calculated public key, we use the encapsulation defined in [[bip-0141.mediawiki#p2wpkh-nested-in-bip16-p2sh|BIP 141]]:
witness: <signature> <pubkey>
scriptSig: <0 <20-byte-key-hash>>
(0x160014{20-byte-key-hash})
scriptPubKey: HASH160 <20-byte-script-hash> EQUAL
(0xA914{20-byte-script-hash}87)
===Extended Key Version===
When serializing extended keys, this scheme uses alternate version bytes. Extended public keys use <code>0x049d7cb2</code> to produce a "ypub" prefix, and private keys use <code>0x049d7878</code> to produce a "yprv" prefix. Testnet uses <code>0x044a5262</code> "upub" and <code>0x044a4e28</code> "uprv."
Additional registered version bytes are listed in [[https://github.com/satoshilabs/slips/blob/master/slip-0132.md|SLIP-0132]].
==Backwards Compatibility==
This BIP is not backwards compatible by design as described under [[#considerations|considerations]]. An incompatible wallet will not discover accounts at all and the user will notice that something is wrong.
==Test vectors==
<pre>
masterseedWords = abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
masterseed = uprv8tXDerPXZ1QsVNjUJWTurs9kA1KGfKUAts74GCkcXtU8GwnH33GDRbNJpEqTvipfCyycARtQJhmdfWf8oKt41X9LL1zeD2pLsWmxEk3VAwd (testnet)
// Account 0, root = m/49'/1'/0'
account0Xpriv = uprv91G7gZkzehuMVxDJTYE6tLivdF8e4rvzSu1LFfKw3b2Qx1Aj8vpoFnHdfUZ3hmi9jsvPifmZ24RTN2KhwB8BfMLTVqaBReibyaFFcTP1s9n (testnet)
account0Xpub = upub5EFU65HtV5TeiSHmZZm7FUffBGy8UKeqp7vw43jYbvZPpoVsgU93oac7Wk3u6moKegAEWtGNF8DehrnHtv21XXEMYRUocHqguyjknFHYfgY (testnet)
// Account 0, first receiving private key = m/49'/1'/0'/0/0
account0recvPrivateKey = cULrpoZGXiuC19Uhvykx7NugygA3k86b3hmdCeyvHYQZSxojGyXJ
account0recvPrivateKeyHex = 0xc9bdb49cfbaedca21c4b1f3a7803c34636b1d7dc55a717132443fc3f4c5867e8
account0recvPublicKeyHex = 0x03a1af804ac108a8a51782198c2d034b28bf90c8803f5a53f76276fa69a4eae77f
// Address derivation
keyhash = HASH160(account0recvPublicKeyHex) = 0x38971f73930f6c141d977ac4fd4a727c854935b3
scriptSig = <0 <keyhash>> = 0x001438971f73930f6c141d977ac4fd4a727c854935b3
addressBytes = HASH160(scriptSig) = 0x336caa13e08b96080a32b5d818d59b4ab3b36742
// addressBytes base58check encoded for testnet
address = base58check(prefix | addressBytes) = 2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2 (testnet)
</pre>
==Reference==
* [[bip-0016.mediawiki|BIP16 - Pay to Script Hash]]
* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]
* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]]
* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic Wallets]]
* [[bip-0141.mediawiki|BIP141 - Segregated Witness (Consensus layer)]]
== Copyright ==
This document is placed in the public domain.

View File

@ -1,10 +1,11 @@
<pre>
BIP: 50
Title: March 2013 Chain Fork Post-Mortem
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Informational
Created: 2013-03-20
Assigned: 2013-03-20
License: PD
</pre>
==What went wrong==
@ -41,7 +42,7 @@ This would be an issue even if the entire network was running version 0.7.2. It
===Immediately===
'''Done''': Release a version 0.8.1, forked directly from 0.8.0, that, for the next two months has the following new rules:
# Reject blocks that would probably could cause more than 10,000 locks to be taken.
# Reject blocks that would probably cause more than 10,000 locks to be taken.
# Limit the maximum block-size created to 500,000 bytes
# Release a patch for older versions that implements the same rules, but also increases the maximum number of locks to 537,000
# Create a web page on bitcoin.org that will urge users to upgrade to 0.8.1, but will tell them how to set DB_CONFIG to 537,000 locks if they absolutely cannot.

301
bip-0052.mediawiki Normal file
View File

@ -0,0 +1,301 @@
<pre>
BIP: 52
Layer: Consensus (hard fork)
Title: Durable, Low Energy Bitcoin PoW
Authors: Michael Dubrovsky <mike+bip@powx.org>
Bogdan Penkovsky <bogdan+bip@powx.org>
Status: Closed
Type: Specification
Assigned: 2021-05-13
License: BSD-2-Clause OR OPUBL-1.0
</pre>
== Simple Summary ==
Bitcoin's energy consumption is growing with its value (see Figure below).
Although scaling PoW is necessary to maintain the security of the network,
reliance on massive energy consumption has scaling drawbacks and leads to mining
centralization. A major consequence of the central role of local electricity
cost in mining is that today, most existing and potential participants in the
Bitcoin network cannot profitably mine Bitcoin even if they have the capital to
invest in mining hardware. From a practical perspective, Bitcoin adoption by
companies like Tesla (which recently rescinded its acceptance of Bitcoin as
payment) has been hampered by its massive energy consumption and perceived
environmental impact.
<img src="bip-0052/btc_energy-small.png"></img>
Figure. Bitcoin price and estimated Bitcoin energy consumption.
Data sources: [https://cbeci.org Cambridge Bitcoin Electricity Consumption Index], [https://www.coindesk.com CoinDesk].
We propose a novel proof-of-work paradigm for Bitcoin--Optical proof-of-work. It
is designed to decouple Bitcoin mining from energy and make it feasible outside
of regions with low electricity costs. ''Optical proof-of-work'' (oPoW) is a
modification of Hashcash that is most efficiently computed using a new class of
photonic processors. Without compromising the cryptographic or game-theoretical
security of Hashcash, oPoW shifts the operating expenses of mining (OPEX), to
capital expenses (CAPEX)--i.e. electricity to hardware. oPoW makes it possible
for billions of new miners to enter the market simply by investing in a
low-energy photonic miner. Shifting to a high-CAPEX PoW has the added benefit of
making the hashrate resilient to Bitcoin's price fluctuations - once low-OPEX
hardware is operating there is no reason to shut it down even if the value of
mining rewards diminishes. oPoW is hardware-compatible with GPUs, FPGAs, and
ASICs meaning that a transitional period of optical and traditional hardware
mining in parallel on the network is feasible
More information is available here: [https://www.powx.org/opow].
== Abstract ==
As Bitcoin gained utility and value over the preceding decade, the network incentivized the purchase of billions of dollars in mining equipment and electricity. With the growth of competition, home mining became unprofitable. Even the most sophisticated special-purpose hardware (ASIC miners) doesnt cover its energy costs unless the miner also has direct access to very cheap electricity. This heavy reliance on energy makes it difficult for new miners to enter the market and leads to hashrate instability as miners shut off their machines when the price of Bitcoin falls. Additionally as the network stores ever more value, the percentage of world energy consumption that is associated with Bitcoin continues to grow, creating the potential for scaling failure and a general backlash. To ensure that Bitcoin can continue scaling and reach its full potential as a world currency and store of value, we propose a low-energy proof-of-work paradigm for Bitcoin. ''Optical proof of work (oPoW)'' is designed to decouple Bitcoins security from massive energy use and make bitcoin mining feasible outside of regions with low electricity costs. ''Optical proof-of-work'' is a modification of Hashcash that is most efficiently computed using a new class of photonic processors that has emerged as a leading solution for ultra-low energy computing over the last 5 years. oPoW shifts the operating expenses of mining (OPEX), to capital expenses (CAPEX)i.e. electricity to hardware, without compromising the cryptographic or game-theoretical security of Hashcash. We provide an example implementation of oPoW, briefly discuss its cryptographic construction as well as the working principle of photonic processors. Additionally, we outline the potential benefits of oPoW to the bitcoin network, including geographic decentralization and democratization of mining as well as hashrate resilience to price fluctuations.
== Copyright ==
This BIP is dual-licensed under the Open Publication License and BSD 2-clause license.
== Motivation ==
As Bitcoin has grown over the past decade from a small network run by hobbyists to a global currency, the underlying Proof of Work protocol has not been updated. Initially pitched as a global decentralized network (“one CPU-one vote”), Bitcoin transactions today are secured by a small group of corporate entities. In practice, it is only feasible for [http://archive.is/YeDwh entities that can secure access to abundant, inexpensive energy]. The economics of mining limit profitability to places like Iceland, Texas, or Western China. Besides the negative environmental externalities, which may be significant, mining today is performed primarily with the consent (and in many cases, partnership) of large public utilities and the governments that control them. Although this may not be a problem in the short term, in the long term it stands to erode the censorship resistance and security of Bitcoin and other public blockchains through potential regulation or [https://arxiv.org/pdf/1605.07524.pdf partitioning attacks].
Recent events, such as the [https://twitter.com/MustafaYilham/status/1384278267067203590 ~25% hashrate crash due to coal-powered grid failure in china] and Teslas rescinding of its acceptance of Bitcoin as a form of payment, show that there are practical real-world downsides to Proof of Workss massive reliance on energy.
<img src="bip-0052/emusk_tweet.png"></img>
Whether or not the Bitcoin community accepts this common criticism as entirely valid, it has real-world effects which will only get worse over time. Eliminating the exponentially growing energy use currently built into Bitcoin without eliminating the security of PoW would be ideal and should not be a partisan issue.
New consensus mechanisms have been proposed as a means of securing cryptocurrencies whilst reducing energy cost, such as various forms of Proof of Stake and Proof of Space-Time. While many of these alternative mechanisms offer compelling guarantees, they generally require new security assumptions, which have not been stress-tested by live deployments at any adequate scale. Consequently, we still have relatively little empirical understanding of their safety. Completely changing the Bitcoin paradigm is likely to introduce new unforeseen problems. We believe that the major issues discussed above can be resolved by improving rather than eliminating Bitcoins fundamental security layer—Proof of Work. Instead of devising a new consensus architecture to fix these issues, it is sufficient to shift the economics of PoW. The financial cost imposed on miners need not be primarily composed of electricity. The situation can be significantly improved by reducing the operating expense (OPEX)—energy—as a major mining component. Then, by shifting the cost towards capital expense (CAPEX)—mining hardware—the dynamics of the mining ecosystem becomes much less dependent on electricity prices, and much less electricity is consumed as a whole.
Moreover, a reduction in energy consumption automatically leads to
geographically distributed mining, as mining becomes profitable even in regions
with expensive electricity. Additionally, lower energy consumption will
eliminate heating issues experienced by todays mining operations, which will
further decrease operating cost as well as noise associated with fans and
cooling systems. All of this means that individuals and smaller entities would
be able to enter the mining ecosystem simply for the cost of a miner, without
first gaining access to cheap energy or a dedicated, temperature-controlled data
center. To a degree, memory-hard PoW schemes like
[https://github.com/tromp/cuckoo Cuckoo Cycle], which increase the use of SRAM
in lieu of pure computation, push the CAPEX/OPEX ratio in the right direction by
occupying ASIC chip area with memory. To maximize the CAPEX to OPEX ratio of the
Optical Proof of Work algorithm, we developed
[https://assets.pubpub.org/xi9h9rps/01581688887859.pdf ''HeavyHash''] [1].
HeavyHash is a cryptographic construction that takes the place of SHA256 in
Hashcash. Our algorithm is hardware-compatible with ultra-energy-efficient photonic co-processors that have been developed for machine learning hardware accelerators.
HeavyHash uses a proven digital hash (SHA3) packaged with a large amount of MAC (Multiply-and-Accumulate) computation into a Proof of Work puzzle. Although HeavyHash can be computed on any standard digital hardware, it becomes hardware efficient only when a small digital core is combined with a low-power photonic co-processor for performing MAC operations. oPoW mining machines will have a small digital core flip-chipped onto a large, low-power photonic chip. This core will be bottlenecked by the throughput of the digital to analog and analog to digital converters. A prototype of such analogue optical matrix multiplier can be seen in the figure below.
<img src="bip-0052/optical_chip.png"></img>
Figure. TOP: Photonic Circuit Diagram, A. Laser input (1550nm, common telecom wavelength) B. Metal pads for controlling modulators to transduce electrical data to optical C. Metal pads for tuning mesh of directional couplers D. Optical signal exits here containing the results of the computation and is output to fibers via a grating coupler the terminus of each waveguide. E. Alignment circuit for aligning fiber coupling stage. Bottom: a photograph of a bare oPoW miner prototype chip before wire and fiber bonding. On the right side of the die are test structures (F).
The ''HeavyHash'' derives its name from the fact that it is bloated or weighted with additional computation. This means that a cost comparable oPoW miner will have a much lower nominal hashrate compared to a Bitcoin ASIC (HeavyHashes/second vs. SHA256 Hashes/second in equivalent ASIC). We provide the cryptographic security argument of the HeavyHash function in Section 3 in [https://assets.pubpub.org/xi9h9rps/01581688887859.pdf Towards Optical Proof of Work] [1]. In the article, we also provide a game-theoretic security argument for CAPEX-heavy PoW. For additional information, we recommend reading [https://uncommoncore.co/wp-content/uploads/2019/10/A-model-for-Bitcoins-security-and-the-declining-block-subsidy-v1.02.pdf this article].
While traditional digital hardware relies on electrical currents, optical
computing uses light as the basis for some of or all of its operations. Building
on the development and commercialization of silicon photonic chips for telecom
and datacom applications, modern photonic co-processors are silicon chips made
using well-established and highly scalable silicon CMOS processes. However,
unlike cutting edge electronics which require ever-smaller features (e.g. 5 nm),
fabricated by exponentially more complex and expensive machinery, silicon
photonics uses old fabrication nodes (90 nm). Due to the large de Broglie
wavelength of photons, as compared to electrons, there is no benefit to using
the small feature sizes. The result is that access to silicon photonic wafer
fabrication is readily available, in contrast to the notoriously difficult
process of accessing advanced nodes. Moreover, the overall cost of entry is
lower as lithography masks for silicon photonics processes are an order of
magnitude cheaper ($500k vs. $5M). Examples of companies developing optical
processors for AI, which will be hardware-compatible with oPoW include [https://lightmatter.co/ Lightmatter], [https://www.lightelligence.ai/ Lightelligence], [https://luminous.co/ Luminous], [https://www.intel.com/content/www/us/en/architecture-and-technology/silicon-photonics/silicon-photonics-overview.html Intel], and other more recent entrants.
== Specification ==
=== HeavyHash ===
The HeavyHash is performed in three stages:
# Keccak hash
# Matrix-vector multiplication
# Keccak of the result xored with the hashed input
Note that the most efficient matrix-vector multiplication is performed on a
photonic miner. However, this linear algebra operation can be performed on any
conventional computing hardware (CPU, GPU, etc.), therefore making the HeavyHash
hardware-compatible with any digital device.
The algorithms pseudo-code:
<pre>// M is a Matrix 64 x 64 of Unsigned 4 values
// 256-bitVector
x1 <- keccak(input)
// Reshape the obtained bitvector
// into a 64-vector of unsigned 4-bit values
x2 <- reshape(x1, 64)
// Perform a matrix-vector multiplication.
// The result is 64-vector of 14-bit unsigned.
x3 <- vector_matrix_mult(x2, M)
// Truncate all values to 4 most significant bits.
// This is due to the specifics of analog
// computing by the photonic accelerator.
// Obtain a 64-vector of 4-bit unsigned.
x4 <- truncate_to_msb(x3, 4)
// Interpret as a 256-bitvector
x5 <- flatten(x4)
// 256-bitVector
result <- keccak(xor(x5, x1))</pre>
Which in C can be implemented as:
<pre>
static void heavyhash(const uint16_t matrix[64][64], void* pdata, size_t pdata_len, void* output)
{
uint8_t hash_first[32] __attribute__((aligned(32)));
uint8_t hash_second[32] __attribute__((aligned(32)));
uint8_t hash_xored[32] __attribute__((aligned(32)));
uint16_t vector[64] __attribute__((aligned(64)));
uint16_t product[64] __attribute__((aligned(64)));
sha3_256((uint8_t*) hash_first, 32, (const uint8_t*)pdata, pdata_len);
for (int i = 0; i < 32; ++i) {
vector[2*i] = (hash_first[i] >> 4);
vector[2*i+1] = hash_first[i] & 0xF;
}
for (int i = 0; i < 64; ++i) {
uint16_t sum = 0;
for (int j = 0; j < 64; ++j) {
sum += matrix[i][j] * vector[j];
}
product[i] = (sum >> 10);
}
for (int i = 0; i < 32; ++i) {
hash_second[i] = (product[2*i] << 4) | (product[2*i+1]);
}
for (int i = 0; i < 32; ++i) {
hash_xored[i] = hash_first[i] ^ hash_second[i];
}
sha3_256((uint8_t*)output, 32, (const uint8_t*)hash_xored, 32);
}
</pre>
=== Random matrix generation ===
The random matrix M (which is a HeavyHash parameter) is obtained in a deterministic way and is changed every block. Matrix M coefficients are generated using a pseudo-random number generation algorithm (xoshiro) from the previous block header. If the matrix is not full rank, it is repeatedly generated again.
An example code to obtain the matrix M:
<pre>
void generate_matrix(uint16_t matrix[64][64], struct xoshiro_state *state) {
do {
for (int i = 0; i < 64; ++i) {
for (int j = 0; j < 64; j += 16) {
uint64_t value = xoshiro_gen(state);
for (int shift = 0; shift < 16; ++shift) {
matrix[i][j + shift] = (value >> (4*shift)) & 0xF;
}
}
}
} while (!is_full_rank(matrix));
}
static inline uint64_t xoshiro_gen(struct xoshiro_state *state) {
const uint64_t result = rotl64(state->s[0] + state->s[3], 23) + state->s[0];
const uint64_t t = state->s[1] << 17;
state->s[2] ^= state->s[0];
state->s[3] ^= state->s[1];
state->s[1] ^= state->s[2];
state->s[0] ^= state->s[3];
state->s[2] ^= t;
state->s[3] = rotl64(state->s[3], 45);
return result;
}
</pre>
== Discussion ==
=== Geographic Distribution of Mining Relative to CAPEX-OPEX Ratio of Mining Costs ===
Below is a simple model showing several scenarios for the geographic distribution of mining activity relative to the CAPEX/OPEX ratio of the cost of operating a single piece of mining hardware. As the ratio of energy consumption to hardware cost decreases, geographic variations in energy cost cease to be a determining factor in miner distribution.
Underlying assumptions: 1. Electricity price y is fixed in time but varies geographically. 2. Every miner has access to the same hardware. 3. Each miners budget is limited by both the cost of mining equipment as well as the local cost of the electricity they consume
budget = a(p+ey),
where a is the number of mining machines, p is the machine price, e is the total energy consumption over machine lifetime, and y is electricity price.
Note that in locations where mining is not profitable, hashrate is zero.
<img src="bip-0052/sim1.png"></img>
<img src="bip-0052/sim2.png"></img>
<img src="bip-0052/sim3.png"></img>
An interactive version of this diagram can be found [https://www.powx.org/opow here].
=== Why does CAPEX to OPEX shift lead to lower energy consumption? ===
A common misconception about oPoW is that it makes mining “cheaper” by enabling energy-efficient hardware. There is no impact on the dollar cost of mining a block, rather the mix of energy vs. hardware investment changes from about 50/50 to 10/90 or better. We discuss this at length and rigorously in our paper[1].
=== Working Principles of Photonic Processors ===
Photonics accelerators are made by fabricating waveguides in silicon using standard lithography processes. Silicon is transparent to infrared light and can act as a tiny on-chip fiber optical cable. Silicon photonics found its first use during the 2000s in transceivers for sending and receiving optical signals via fiber and has advanced tremendously over the last decade.
By encoding a vector into optical intensities passing through a series of parallel waveguides, interfering these signals in a mesh of tunable interferometers (acting as matrix coefficients), and then detecting the output using on-chip Germanium photodetectors, a matrix-vector multiplication is achieved. A generalized discussion of matrix multiplication setups using photonics/interference can be found in [https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.73.58 Reck et al.] and [https://arxiv.org/abs/1506.06220 Russell et al.] A detailed discussion of several integrated photonic architectures for matrix multiplication and corresponding tuning algorithms can be found in [https://arxiv.org/pdf/1909.06179.pdf Pai et al.]
Below is a conceptual representation of a 3D-packaged oPoW mining chip. Note that the majority of the real estate and cost comes from the photonic die and the laser, with only a small digital SHA3 die needed (as opposed to a conventional miner of the same cost, which would have many copies of this die running in parallel).
<img src="bip-0052/optminer.png"></img>
=== Block Reward Considerations ===
Although it is out of the scope of this proposal, the authors strongly recommend the consideration of a change in the block reward schedule currently implemented in Bitcoin. There is no clear way to incentivize miners with transaction fees only, as has been successfully shown in [https://www.cs.princeton.edu/~smattw/CKWN-CCS16.pdf On the Instability of Bitcoin Without the Block Reward] and other publications, therefore looking a decade or two ahead it will be important to implement a fixed block reward or to slow the decay of the block reward to maintain the security of the network. Given that oPoW miners have low operating costs, once a large number of machines are running the reward level sufficient to keep them in operation and providing robust security can potentially be significantly smaller than in the case of the current SHA256 ASICs securing Bitcoin.
=== Implementation on the Bitcoin Network ===
A hard fork is not necessarily required for the Bitcoin network to test and eventually implement oPoW. Its possible to add oPoW as a dual PoW to Bitcoin as a soft fork. Tuning the parameters to ensure that, for example, 99.9% of the security budget would be earned by miners via the SHA256 Hashcash PoW and 0.1% via oPoW would create sufficient incentive for oPoW to be stress-tested and to incentivize the manufacture of dedicated oPoW miners. If this test is successful, the parameters can be tuned continuously over time, e.g. oPoW share doubling at every halving, such that oPoW accounts for some target percentage (up to 100% in a complete SHA256 phase-out).
==== Reverse compatibility ====
Our understanding is that oPoW will not be reverse compatible.
=== ASICBOOST ===
Any new PoW algorithm carries the risk of hardware developers discovering and patenting an architecture with a significant speedup, as happened in the case of ASICBOOST for SHA256. HeavyHash is comprised of an SHA hash and 4-bit linear matrix-vector operations. The intent is for the matrix-vector multiplications to account for the majority of the work involved in computing a single HeavyHash operation. As we show in the Minimum Effective Hardness section of Towards Optical Proof of Work[1], there is no workaround to performing the matrix operations when computing HeavyHash, and since the SHA hashes are negligible, a true ASICBOOST-type speed up would require a speed up in linear matrix processing. Since matrix-vector multiplication is at the heart of neural networks and many other common computational workloads, it has been optimized very heavily and is generally very well understood. The acceleration of matrix-vector multiplication hardware (e.g. photonic coprocessors, memristors, etc.) is a very general problem and there are dozens of companies working on it, making it very unlikely for a single party to corner the market.
== Endnotes ==
With significant progress in optical and analog matrix-vector-multiplication chipsets over the last year, we hope to demonstrate commercial low-energy mining on our network in the next 6 months. The current generation of optical matrix processors under development is expected to have 10x better energy consumption per MAC operation than digital implementations, and we expect this to improve by another order of magnitude in future generations.
PoWx will also be publishing the designs of the current optical miner prototypes in the near term under an open-source hardware license.
== Changelog ==
* 2026-06-18:
** Updated to Closed after the proposal has not made progress for several years and [https://groups.google.com/g/bitcoindev/c/Vrh7oED9b9Q/m/TrCEKRjNAAAJ attempts to contact the authors] did not succeed.
== Acknowledgments ==
We thank all the members of the Bitcoin community who have already given us feedback over the last several years as well as others in the optical computing community and beyond that have given their input.
[1] M. Dubrovsky et al. Towards Optical Proof of Work, CES conference (2020) https://assets.pubpub.org/xi9h9rps/01581688887859.pdf
[2] https://sciencex.com/news/2020-05-powering-bitcoin-silicon-photonics-power.html
[3] KISS random number generator http://www.cse.yorku.ca/~oz/marsaglia-rng.html

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
bip-0052/btc_energy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
bip-0052/emusk_tweet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 KiB

BIN
bip-0052/optical_chip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

BIN
bip-0052/optminer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
bip-0052/sim1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
bip-0052/sim2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
bip-0052/sim3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

159
bip-0053.mediawiki Normal file
View File

@ -0,0 +1,159 @@
<pre>
BIP: 53
Layer: Consensus (soft fork)
Title: Disallow 64-byte transactions
Authors: Chris Stewart <stewart.chris1234@gmail.com>
Status: Draft
Type: Specification
Assigned: 2025-04-11
License: BSD-3-Clause
</pre>
==Abstract==
This BIP describes the rationale for disallowing transactions that are serialized to 64 bytes without the transaction's witness.
We describe the weaknesses to the Merkle tree included in Bitcoin block headers, and various exploits for those weaknesses.
==Specification==
This BIP disallows Bitcoin transactions that are serialized to 64 bytes in length without their witness.
==Motivation==
Bitcoin block headers include a commitment to the set of transactions in a given
block, which is implemented by constructing a Merkle tree of transaction ids
(double-SHA256 hash of a transaction) and including the root of the tree in the
block header. This in turn allows for proving to a Bitcoin light client that a
given transaction is in a given block by providing a path through the tree to the
transaction. However, Bitcoins particular construction of the Merkle tree has
several security weaknesses, including at least two forms of block malleability
that have an impact on the consensus logic of Bitcoin Core, and an attack on
light clients, where an invalid transaction could be ”proven” to appear in a block
by doing substantially less work than a SHA256 hash collision would require.
This has been mitigated by Bitcoin Core's relay policy and the RPC interface since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR #11423 disallows transactions that are less than 82 bytes in size from Bitcoin Core relay and RPC interface]</ref><ref>[https://github.com/bitcoin/bitcoin/commit/8c5b3646b5afe8a61f5c66478d8e11f0d2ce5108 Reduces the minimum transaction size required for a transaction to be considered standard from 82 bytes to 65 bytes]</ref>.
=== Block malleability ===
64-byte transactions introduce block malleability. Malicious peers can construct consensus valid and invalid 64-byte
transactions that have the same serialization as the concatenation of 2 hashes in the Merkle tree.
Assume we have a valid Bitcoin block with 2 transactions in it with Txid<sub>0</sub> and Txid<sub>1</sub>.
The Merkle root for this block is H(Txid<sub>0</sub>||Txid<sub>1</sub>).
A malicious user could find a 64-byte transaction T<sub>m</sub> that serializes to Txid<sub>0</sub>||Txid<sub>1</sub>.
Next that user relays the block containing the malicious T<sub>m</sub> rather than the
valid Bitcoin transactions that correspond to Txid<sub>0</sub> and Txid<sub>1</sub>.
==== Block malleability with consensus INVALID transactions ====
The peer receiving the malicious block marks the block as invalid, as T<sub>m</sub>
is not a valid transaction according to network consensus rules.
Other peers on the network receive the valid block containing T<sub>0</sub> and T<sub>1</sub>
and add the block to their blockchain. Peers that receive the invalid block before the valid block
will never come to consensus with their peers due to the malicious user finding a collision
within the block's Merkle root. Finding this collision is approximately 22 bits worth of work.<ref>[[bip-0053/2-BitcoinMerkle.pdf|to produce a block having a Merkle root that
is a hash of a 64-byte quantity that deserializes validly, its enough
to just do 8 bits of work to find a workable coinbase (which will hash to the first
32 bytes), plus another ≈22 bits of work ((1/5) 224, so slightly less) to find
a workable second transaction that will hash to the second 32 bytes) a very
small amount of computation.]]</ref>
This attack vector was fixed in Bitcoin Core 0.6.2<ref>[https://bitcoin.org/en/alert/2012-05-14-dos#risks CVE-2012-2459]</ref>, re-introduced in 0.13.x<ref>[https://github.com/bitcoin/bitcoin/pull/7225 #7225]</ref> and patched again in
0.14<ref>[https://github.com/bitcoin/bitcoin/pull/9765 #9765]</ref>.
==== Block malleability with consensus VALID transactions ====
Producing a valid Bitcoin transaction T<sub>m</sub> that adheres to network consensus
rules requires 224 bits of work<ref>[[bip-0053/2-BitcoinMerkle.pdf|Note that the first transaction in a block must be a coinbase, and as discussed
above, that largely constrains the first 32 bytes of the first transaction: only
the 4 version bytes are unconstrained. So it would take at least 28*8= 224 bits
of work to find the first node in a given row of the tree that would match the
first half of a coinbase, in addition to the amount of work required to grind the
second half of the transaction to something meaningful (which is much easier
only 16 bytes or so are constrained, so approximately 128 bits of work to find a collision). Of course, any of the rows in the Merkle tree could be used, but it nevertheless seems clear that this should be computationally infeasible.]]</ref>.
This is computationally and financially expensive but theoretically possible. This can lead to a persistent chain split on the network.
=== Attack on SPV clients ===
BIP37<ref>[https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki BIP37]</ref>provides a partial Merkle tree format<ref>[https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki#partial-merkle-branch-format Partial Merkle Tree Format]</ref>
that allows you to verify that your Bitcoin transaction is included in a Merkle root embedded in a Bitcoin block header.
Notably this format does not commit to the height of the Merkle tree.
Suppose a (valid) 64-byte transaction T is included in a block with the property that the second 32 bytes (which
are less constrained than the first 32 bytes) are constructed so that they collide
with the hash of some other fake, invalid transaction F. The attacker can fool the SPV client into believing that F
was included in a Bitcoin block rather than T with 81 bits<ref>[[bip-0053/2-BitcoinMerkle.pdf|An attacker who can do 81 bits of work (followed by another 40 bits of work, to
construct the funding transaction whose coins will be spent by this one) is able
to fool an SPV client in this way.]]</ref> of work. Disallowing 64-byte transactions reduces implementation complexity for SPV wallets<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/43 The steps needed to make sure a Merkle proof for a 64-byte transaction is secure.]</ref>.
==Rationale==
===SPV clients===
Attacks on SPV clients could be mitigated by knowing the depth of the Merkle tree. Requiring SPV clients to request both the coinbase and payment transaction could mitigate this attack.
To produce a valid coinbase transaction at the same depth that our fake transaction F occurs at would require 224 bits of work.
As mentioned above, this is computationally and financially expensive, but theoretically possible. This design would increase the size
of SPV proofs by 70%.<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/29 Base proof: 80-byte header + 448-byte partial Merkle tree = 528 bytes. Proof with coinbase tx, assuming the coinbase tx is in the left half of the tree and the tx to prove is in the right half of the tree: 80-byte header + 416 bytes partial Merkle tree for coinbase tx + 416 bytes partial Merkle tree for tx = 912 bytes.]</ref>
==Backward compatibility==
There have been 5 64-byte transactions that have occurred in the Bitcoin blockchain as of this
writing <ref>[[bip-0053/64byte-tx-mainnet.txt|64-byte transactions in the Bitcoin blockchain]]</ref>
with the last transaction 7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612<ref>[https://mempool.space/tx/7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612 Last 64-byte transaction in the Bitcoin blockchain]</ref>
occurring at block height 419,606<ref>[https://mempool.space/block/000000000000000000308f1efc24419f34a3bafcc2b53c32dd57e4502865fd84 Block 419,606]</ref>.
====Pre-segwit 64-byte transactions====
Pre-segwit 64-byte transactions cannot spend a UTXO protected by a digital signature.<ref>[https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki After BIP66 was activated on the Bitcoin network, Bitcoin transactions cannot have a digital signature smaller than 9 bytes.]</ref>
The largest scriptSig a pre-segwit 64-byte transaction can have is 4 bytes.<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/73]</ref>
There are 6<ref>[[bip-0053/non-standard-hashlock-utxos.txt|As of block `00000000000000000001194ae6be942619bf61aa70822b9643d01c1a441bf2b7` there exist 6 non-standard hashlock UTXOs that could theoretically have a 0-3 byte pre-image. None of them have a 0-3 byte pre-image.]]</ref>
non standard hashlock UTXOs in the Bitcoin blockchain. None of them have a 0-3 byte pre-image. This means they cannot be spent by a 64-byte transaction.
Pre-segwit 64-byte transactions that spend a non-standard UTXO that are inherently malleable.<ref>[https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#trust-free-unconfirmed-transaction-dependency-chain Details on how to malleate a pre-segwit transaction]</ref>
Policy rules such as CLEANSTACK, MINIMALDATA, PUSHONLY are not consensus rules. If a user has a way to confirm an already non-standard
64-byte transaction - they can malleate the transaction by violating policy rules to change the size of the transaction to a size other than 64 bytes.
====Segwit 64-byte transactions====
This BIP disallows single-input single-output segwit transactions that pay to a 2-byte witness program.<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/73#p-4382-future-segwit-versions-10 BIP141 says witness programs can be 2 bytes in size, which makes the scriptPubKey a total of 4 bytes]</ref>
The only known use case<ref>[https://bitcoin.stackexchange.com/a/110664 Why do we have 2-byte witness programs? The original rationale for the lower end of the range of valid witness program lengths is that 2 bytes is enough to guarantee no ambiguity of how the program would be pushed (some 1-byte values can - and according to standardness, must - be pushed with OP_n, and dealing with those would have complicated the matter).]</ref>
for this type of transaction is ephemeral anchor outputs.<ref>[https://bitcoinops.org/en/topics/ephemeral-anchors/ What are ephemeral anchor outputs? This allows anyone on the network to use that output as the input to a child transaction. This allows anyone to create the fee-paying child, even if they dont receive any of the other outputs from the parent transaction. This allows ephemeral anchors to function as fee sponsorship but without requiring any consensus changes.]</ref>
==Reference implementation==
<source lang="cpp">
/**
* We want to enforce certain rules (specifically the 64-byte transaction check)
* before we call CheckBlock to check the Merkle root. This allows us to enforce
* malleability checks which may interact with other CheckBlock checks.
* This is currently called both in AcceptBlock prior to writing the block to
* disk and in ConnectBlock.
* Note that as this function is called before merkle-tree checks, it must never return a
* non-malleable error condition.
*/
static bool ContextualBlockPreCheck(const CBlock& block, BlockValidationState& state, const ChainstateManager& chainman, const CBlockIndex* pindexPrev)
{
if (DeploymentActiveAfter(pindexPrev, chainman, Consensus::DEPLOYMENT_64BYTETX)) {
for (const auto& tx : block.vtx) {
if (::GetSerializeSize(TX_NO_WITNESS(tx)) == 64) {
return state.Invalid(BlockValidationResult::BLOCK_MUTATED, "64-byte-transaction", strprintf("size of tx %s without witness is 64 bytes", tx->GetHash().ToString()));
}
}
}
return true;
}
</source>
The sample implementation is currently open here:
https://github.com/bitcoin-inquisition/bitcoin/pull/24/files
<references />
==Copyright==
This BIP is licensed under the [https://opensource.org/license/BSD-3-Clause BSD-3-Clause License].
==Acknowledgements==
Suhas Daftuar, AJ Towns, Sergio Demian Lerner, Greg Maxwell, Matt Corallo, Antoine Poinsot, Dave Harding and Eric Voskuil

Binary file not shown.

View File

@ -0,0 +1,5 @@
892f44a49de6f5b212cdbea514d09e692d9fed5d897f37bcef14bd0eedebf193
bbf71454857438c6dfd64c0d92a7c5360a8d8d57c9202f5806449e5b0d26b848
6713d61a83e3d095582211ea8d6db452ac7561e863decba7c4046fb9f6d88aa0
7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612
5302e01dc4b7e34314a34c7c3347107e612b9524be684d388cd4d2ca35ff1ec9

View File

@ -0,0 +1,6 @@
af32bb06f12f2ae5fdb7face7cd272be67c923e86b7a66a76ded02d954c2f94d:0
faf8989ed87c5a667a1ead813aea718727e01767c124193297eaf409ff4645e5:1
c4b46c5d88327d7af6254820562327c5f11b6ee5449da04b7cfd3710b48b6f55:0
702c36851ed202495c2bec1dd0cefb448b50fafd3a5cdd5058c18ca53fc2c3d1:0
6f8a70aac37786b1f619d40250b8bca1a1f6da487146a7e81091f611068a23ef:0
fb01987b540ec286973aac248fab643de82813af452d958056fee8de9f4535ab:0

266
bip-0054.md Normal file
View File

@ -0,0 +1,266 @@
```
BIP: 54
Layer: Consensus (soft fork)
Title: Consensus Cleanup
Authors: Antoine Poinsot <mail@antoinep.com>
Matt Corallo <bips@bluematt.me>
Status: Complete
Type: Specification
Assigned: 2025-04-11
License: CC0-1.0
```
## Abstract
This document proposes new consensus rules in order to fix the timewarp attack, reduce the worst
case block validation time, prevent Merkle tree weaknesses, and avoid duplicate transactions without
[bip-0030][BIP30] validation.
## Motivation
This proposal addresses a number of long-standing vulnerabilities and weaknesses in the Bitcoin
protocol. Bundling these fixes together amortizes the fixed cost of deploying a Bitcoin soft fork.
The [timewarp bug][SE timewarp] makes it possible for a majority-hashrate attacker to arbitrarily
lower mining difficulty, and therefore arbitrarily increase the block rate. In the worst case, an
attacker can bring down the difficulty to its minimum within 38 days of starting the attack. Besides
empowering a 51% attacker, the presence of this bug makes it harder to reason about miners'
incentives. Accelerating the block rate allows an attacker to steal block subsidy from future
miners and increases available block space. It may be in the interest of short-sighted users and
miners to exploit this vulnerability to materially increase the block rate without fatally hurting
the network.
Specially crafted blocks may be expensive to process, [taking up to][Delving worst block] several
minutes to validate even on high-end devices, and up to a few hours on lower-end devices. Long block
validation times are a nuisance to users, increasing the cost to independently fully validate the
consensus rules. In addition they can be used by miners to attack their competition, creating
perverse incentives, centralization pressures and leading to reduced network security.
In computing a block's Merkle root, a transaction with exactly 64 bytes of non-witness data can be
interpreted both as an intermediate node in the tree and as a leaf in the tree. This makes it
possible to trick an SPV verifier into accepting an inclusion proof for a transaction that is not
part of a block, by pretending a 64-byte block transaction is actually an inner node[^9]. Invalidating
64-byte transactions addresses this vulnerability without requiring users of SPV verifiers, or
any other user of Merkle proofs, to rely on one of the available workarounds[^13] or even to know one is
necessary in the first place.
Since [bip-0034][BIP34] activation, explicit [bip-0030][BIP30] validation is not necessary until
block height 1,983,702[^0]. Resuming [bip-0030][BIP30] validation would unnecessarily increase block
validation overhead and preclude alternative full node designs (such as [bip-0182][BIP182] Utreexo).
Enforcing that new coinbase transactions are different from the early [bip-0034][BIP34] violations
makes it possible to get rid of [bip-0030][BIP30] validation forever.
## Specification
For all blocks after activation the following new rules apply.
Given a block at height `N`:
- if `N % 2016` is equal to 0, the timestamp of the block must be set to a value higher than or
equal to the value of the timestamp of block at height `N-1` minus 7200 (T<sub>N</sub> &ge;
T<sub>N1</sub> 7200);
- if `N % 2016` is equal to 2015, the timestamp of the block must be set to a value higher than
or equal to the value of the timestamp of the block at height `N-2015` (T<sub>N</sub> &ge;
T<sub>N2015</sub>).
A limit is set on the number of signature operations present in the scripts used to validate a
transaction. It applies to all transactions in the block except the coinbase transaction[^1]. For
each input in the transaction, count the number of `CHECKSIG` and `CHECKMULTISIG` in the input
scriptSig and previous output's scriptPubKey, including the P2SH redeemScript. If the total summed
over all transaction inputs is strictly higher than 2500, the transaction is invalid. The accounting is the
same as for [bip-0016][BIP16 specs], evaluating the scriptSig, scriptPubKey, and P2SH redeemScript
separately:
1. `CHECKSIG` and `CHECKSIGVERIFY` count as 1 signature operation, whether or not they are evaluated.
2. `CHECKMULTISIG` and `CHECKMULTISIGVERIFY` immediately preceded by `OP_1` through `OP_16` are counted as 1 to 16 signature operations, whether or not they are evaluated.
3. All other `CHECKMULTISIG` and `CHECKMULTISIGVERIFY` are counted as 20 signature operations, whether or not they are evaluated.
Transactions whose witness-stripped serialized size is exactly 64 bytes are invalid.
The coinbase transaction's `nLockTime` field must be set to the height of the block minus 1[^2]
and its `nSequence` field must not be equal to 0xffffffff.
## Rationale
The restrictions on the timestamp of the first and last blocks of a difficulty adjustment period fix
the timewarp and MurchZawy vulnerabilities[^3]. The latter poses mostly theoretical concerns but is
extremely low risk to fix: the duration of an adjustment period has never been, and should never be,
negative. The former is fixed by preventing the timestamp of the first block of a difficulty period
from being lower than the previous block's, with a two-hour grace period. A [previous
proposal][BIP-XXXX] to fix the timewarp attack used a ten-minute grace period instead, and this
approach has been adopted for [testnet4][BIP94 timewarp]. Out of an abundance of caution and because it only trivially worsens the
block rate increase under attack, a two-hour grace period is used here[^4].
Disabling some Script operations and functionalities was [previously proposed][BIP-XXXX] to reduce
the worst case block validation time but was met with resistance due to confiscation concerns[^5]. A
delicate balance needs to be struck between minimizing the confiscation risks of a mitigation, even
if merely theoretical, and bounding the costs one could impose on all other users of the system. To
that end, limiting potentially executed signature operations targets the exact harmful behaviour while
preserving maximal flexibility in Script usage.
Such a limit reduces the worst case block validation time by a factor of 40 and drastically
increases the preparation cost of an attack, making it uneconomical for a miner[^6]. The maximum of
2500 was chosen as the tightest value that did not make any non-pathological standard transaction
invalid[^7].
64-byte transactions can only contain a scriptPubKey that lets anyone spend the funds, or one that
burns them. They have also been non-standard since 2019 and never been used since 2016. Several
alternatives to invalidating them were previously proposed. Some believe the improvements for users
of Merkle proofs are too marginal to be worth introducing a discontinuity in the set of valid
witness-stripped transaction sizes. Others have suggested instead committing to the Merkle
tree depth in the header's version field[^8], which would make one workaround for a known
vulnerability easier to deploy. The authors believe it is preferable to address the root cause by
invalidating 64-byte transactions, fixing the vulnerability without Merkle proof users having to
rely on any workaround or even know one is necessary in the first place. See [this post][64 bytes
debate] for an attempt at summarizing the arguments for both sides of this debate.
The `nLockTime` field of transactions is a natural place to store a block height and is currently
unused in coinbase transactions. Using it to enforce that new coinbase transactions differ from
early [bip-0034][BIP34] violations also allows applications to recover the block height without
having to parse Script. Leveraging the existing timelock mechanism makes the check self-contained:
the same coinbase transaction cannot have been valid in a previous block[^11]. This simplifies both
reasoning and client implementation, since the [bip-0030][BIP30] check can be skipped entirely past
Consensus Cleanup activation, regardless of the [bip-0034][BIP34] activation status[^12]. One person
[raised the concern][miningdev nLockTime] that the `nLockTime` field would be an ideal extranonce
for ASIC controllers if such controllers ever became a bottleneck in mining operations. Others
[replied][miningdev nLockTime] that the same benefits could be achieved by using a dummy output
instead, should that ever become necessary. The authors [believe][ML remaining concerns] the
benefits of using `nLockTime` to differentiate coinbase transactions outweigh the theoretical
cost of making it unavailable for extranonce rolling by ASIC controllers.
## Backward compatibility
This proposal only tightens the block validation rules: there is no block that is valid under the
rules proposed in this BIP but not under the existing Bitcoin consensus rules. As a consequence
these changes are backward-compatible with non-upgraded node software. That said, the authors
strongly encourage node operators to upgrade in order to fully validate all consensus rules.
## Miner forward compatibility
Bitcoin Core version [29.0][Core 29.0] and later will not generate a block template that violates
the timestamp restrictions introduced in this BIP. Although it would be extremely unlikely due to
the grace period used in this proposal, miners should use the `curtime` or `mintime` field from the
`getblocktemplate` result for their block's timestamp to make sure they always create blocks valid
according to this proposal. Note this is not a new requirement: using a timestamp lower than the
`mintime` field from the `getblocktemplate` result already leads to creating an invalid block.
Bitcoin Core version [30.0][Core 30.0] and later will not generate a block template including a
transaction that violates the signature operations limit introduced in this BIP.
Bitcoin Core version [0.16.1][Core 0.16.1] and later will neither relay nor create block templates
that include transactions whose witness-stripped serialized size is exactly 64 bytes.
The coinbase transaction is usually crafted by mining pool software. To the best of the authors'
knowledge, there does not exist an open source reference broadly in use today for such software.
We encourage mining pools to update their software to craft coinbase transactions that are
forward-compatible with the changes proposed in this BIP.
## Reference implementation
An implementation of BIP54 for Bitcoin Core is available [here][Core BIP 54 implem].
## Test vectors
Documented test vectors are available [here](./bip-0054/test_vectors/) for all mitigations
introduced in this BIP.
## Acknowledgements
This document builds upon an [earlier proposal][BIP-XXXX] by Matt Corallo.
The authors would like to thank everyone involved in researching the most appropriate mitigation for
each of these bugs. We would like to thank in particular Anthony Towns and Sjors Provoost for their
direct contributions to this proposal, as well as @0xb10c and Brian Groll for providing the authors
with data to analyze the proposed mitigations. Thanks to Chris Stewart for digging up historical
violations to the new transaction size rule, which are partially reused in this BIP's test vectors.
## Copyright
This document is licensed under the Creative Commons CC0 1.0 Universal license.
## Changelog
* __1.0.0__ (2026-05-22):
* Complete planned work on the BIP.
[^0]: Block 1,983,702 is the earliest future block which could contain a duplicate coinbase
transaction while still respecting [bip-0034][BIP34]. See [this post][Delving duplicable] for a list
of all such future blocks.
[^1]: Technically this limit *cannot* apply to a coinbase transaction as the size of its sole
input's scriptSig is limited.
[^2]: The locktime validation, which is also performed for coinbase transactions, enforces that the
nLockTime value is the last block at which a transaction is invalid, not the first one at which it
is valid.
[^3]: The timewarp attack is described [here][SE timewarp] and the MurchZawy attack [here][Delving
Murch-Zawy].
[^4]: The testnet4 difficulty exception pushed blocks' timestamps in the future when abused,
revealing how some broken pool software may produce blocks that don't respect a 10 minutes grace
period. Some [raised concerns][Sjors grace period] similarly broken software might be used on
mainnet. Using a grace period of 2 hours instead of 10 minutes only reduces the expected block
interval time under attack by ~2.2 seconds. See [this post][grace period debate summary] for more.
[^5]: The argument is about someone having a timelocked presigned transaction using some of those
features in its output script. The transaction cannot be mined before activation. Such outputs would
not be covered by an amnesty for old UTxOs. See for instance [here][O'Connor OP_CODESEPARATOR] and
[here][O'Connor sighash type] for discussions on this topic.
[^6]: It is important to reduce the worst case block validation time as well as the ratio of
validation time imposed over preparation cost. The former is to limit the damages an externally
motivated attacker can do. The latter is to disincentivize miners slowing down their competition by
mining expensive blocks. See [this thread][ML thread validation time] for more.
[^7]: A non-pathological transaction would have a public key per signature operation and at least
one signature per input. Per standardness a single P2SH input may not have more than 15 signature
operations. Even by using 1-of-15 `CHECKMULTISIG`s a transaction would bump against the maximum
standard transaction size before running into the newly introduced limit. To run against the newly
introduced limit but not the transaction size a transaction would need to spend P2SH inputs with a
redeem script similar to `CHECKSIG DROP CHECKSIG DROP ...`. This type of redeem script serves no
purpose beyond increasing its validation cost, which is exactly what this proposal aims to mitigate.
[^8]: By Sergio Demian Lerner in a [blog post][Sergio post].
[^9]: Conversely, pretending that the inner nodes on one level of the tree are the actual block
transactions is another source of complexity for full node implementations, which previously
resulted in consensus bugs. For instance, Bitcoin Core versions between 0.13.0 and 0.13.2
implemented caching that made it vulnerable to this attack. See [this writeup][Suhas Merkle] by
Suhas Daftuar for a detailed explanation. Invalidating 64-byte transactions may avoid this risk, but
the issue is largely orthogonal to this proposal: it is fundamentally about caching validation
status for malleable blocks.
[^11]: Technically it could be argued a duplicate could in principle always be possible before block
31,001 when `nLockTime` enforcement [was originally soft-forked][Harding nLockTime]. But treating
coinbase transactions as not having duplicate past Consensus Cleanup activation would be consistent
for any implementation which enforces `nLockTime` from the genesis block, which is the behaviour
notably of Bitcoin Core but also of all other implementations the authors are aware of.
[^12]: For instance Bitcoin Core only disables [bip-0030][BIP30] validation for a specific chain
where [bip-0034][BIP34] violations have been manually inspected (see [here][Core validation.cpp
BIP34]). Without the guarantee given by enforcing the timelock on coinbase transactions, this would
have to be perpetuated for the Consensus Cleanup.
[^13]: The authors are aware of three workarounds for SPV verifiers. The first is to request a
Merkle proof for the coinbase transaction in addition to the transaction of interest, to infer the
depth of the Merkle tree. The second is to reject Merkle proofs in which any inner node is also a
valid serialisation of a Bitcoin transaction. More details about these are available [here][Sergio
post]. A third workaround is to change the Merkle proof structure by requiring inner nodes to be
provided as the single-SHA256 of their preimage, instead of the double-SHA256. See [here][Sergio
MERKLEBLOCK] for a full description.
[Delving worst block]: https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/93
[BIP30]: https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki
[BIP182]: https://github.com/bitcoin/bips/pull/1923
[BIP-XXXX]: https://github.com/TheBlueMatt/bips/blob/7f9670b643b7c943a0cc6d2197d3eabe661050c2/bip-XXXX.mediawiki
[BIP34]: https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki
[BIP16 specs]: https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki#specification
[SE timewarp]: https://bitcoin.stackexchange.com/questions/75831/what-is-time-warp-attack-and-how-does-it-work-in-general/75834#75834
[Delving Murch-Zawy]: https://delvingbitcoin.org/t/zawy-s-alternating-timestamp-attack/1062#variant-on-zawys-attack-2
[BIP94 timewarp]: https://github.com/bitcoin/bips/blob/master/bip-0094.mediawiki#time-warp-fix
[Sjors grace period]: https://delvingbitcoin.org/t/timewarp-attack-600-second-grace-period/1326
[grace period debate summary]: https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/66
[O'Connor OP_CODESEPARATOR]: https://gnusha.org/pi/bitcoindev/CAMZUoKneArC+YZ36YFwxNTKsDtJhEz5P2cosXKxJS8Rf_3Nyuw@mail.gmail.com
[O'Connor sighash type]: https://gnusha.org/pi/bitcoindev/CAMZUoK=1kgZLR1YZ+cJgzwmEOwrABYFs=2Ri=xGX=BCr+w=VQw@mail.gmail.com
[ML thread validation time]: https://gnusha.org/pi/bitcoindev/VsltJ2PHqWfzG4BU9YETTXjL7fYBbJhjVXKZQyItemySIA1okvNee9kf0zAOyLMeJ4Nqv1VOrYbWns5nP4TANCWvPJYu1ew_yxQSaudizzk=@protonmail.com
[Suhas Merkle]: https://gnusha.org/pi/bitcoindev/CAFp6fsGtEm9p-ZQF_XqfqyQGzZK7BS2SNp2z680QBsJiFDraEA@mail.gmail.com
[Sergio post]: https://bitslog.com/2018/06/09/leaf-node-weakness-in-bitcoin-merkle-tree-design
[Sergio MERKLEBLOCK]: https://bitslog.com/2018/08/21/simple-change-to-the-bitcoin-merkleblock-command-to-protect-from-leaf-node-weakness-in-transaction-merkle-tree/
[64 bytes debate]: https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/41
[Harding nLockTime]: https://bitcoin.stackexchange.com/questions/90229/nlocktime-in-bitcoin-core
[Delving duplicable]: https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/4
[Core 0.16.1]: https://bitcoincore.org/en/releases/0.16.1
[Core 29.0]: https://bitcoincore.org/en/releases/29.0
[Core BIP 54 implem]: https://github.com/darosior/bitcoin/tree/bip54
[Core 30.0]: https://bitcoincore.org/en/releases/30.0
[Core validation.cpp BIP34]: https://github.com/bitcoin/bitcoin/blob/390e7d61bd531505bb3d13f38316c282b85ed1dd/src/validation.cpp#L2401-L2459
[miningdev nLockTime]: https://groups.google.com/g/bitcoinminingdev/c/jlqlNHHNSNk
[ML remaining concerns]: https://gnusha.org/pi/bitcoindev/UsKuvCXXhSAnNVx5a0K2UfP3srAr3slW9mcOjtYk9LnolaOXfWrW9jpqbxsQQPkyQuZogkhz2Hbfwii2VsTm79vRDpgKduxk35hpBu_t7Do=@protonmail.com/

View File

@ -0,0 +1,102 @@
## BIP54 test vectors
This folder contains a set of test vectors for each mitigation introduced in the BIP. This document
presents them in more detail.
The code used to generate half of the test vectors is included with the implementation and available
[here][other-vectors]. The other half requires mining mainnet blocks and is [published
separately][bip54-miner]. In both cases it is implemented as a regular Bitcoin Core unit test, and
the test vectors are persisted as a JSON file if the `UPDATE_JSON_TESTS` preprocessor directive is
set (off by default).
To compile the [header][header-miner] and [block][block-miner] miners you may have to link to
libatomic explicitly. This can be achieved like so:
```
cmake -B atomicbuild -DAPPEND_LDFLAGS="-latomic"
cmake --build atomicbuild/ -j $(nproc)
```
[Premined headers][premined-headers] are also provided along with the header miner to allow changing
some of the last headers without having to re-generate the whole chain.
### Difficulty adjustment exploits
The [`timestamps.json`](./timestamps.json) test vectors exercise the two constraints on block header
timestamps introduced by BIP54 to mitigate the Timewarp and Murch-Zawy attacks. Each test case
features a chain of mainnet headers starting from the genesis block, and whether this header chain
is valid by BIP54 rules. Each test case also contains a comment describing why this particular chain
is (in)valid according to BIP54. All test cases are valid according to current Bitcoin consensus
rules. It is intended to be used to test a BIP54 implementation by feeding the header chain to a
Bitcoin node implementation, enforcing the BIP54 rules on this chain from genesis.
The test vector file features a JSON array of JSON objects, each corresponding to a test case. Each
JSON object features the following entries:
- `header_chain`: a JSON array of strings. An ordered list of hex-encoded mainnet block headers.
- `valid`: a JSON boolean. Whether this chain of headers is valid according to BIP54.
- `comment`: a JSON string. Description of the test case.
For the purpose of testing a Timewarp fix, a Timewarp attack was included early on in the history of
testnet3. An implementer of BIP54 may want to ensure that syncing testnet3 by enforcing BIP54 since
genesis will treat block `00000000118da1e2165a19307b86f87eba814845e8a0f99734dce279ca3fb029` as
invalid.
### Long block validation time
The [`sigops.json`](sigops.json) file contains test vectors for the limit on the number of
potentially-executed legacy signature operations in a single transaction, introduced by BIP54 in
order to mitigate long block validation times. Each test case represents a transaction and whether a
block containing it would be valid according to BIP54. The test cases feature an extensive set of
combinations of inputs and output types, ways to run into the limit, historical violations and some
pathological transactions exhibiting the specific implementation details. All test cases but those
belonging to this last category feature transactions that are valid under current Bitcoin consensus
rules. Each test case also features a comment describing why the transaction is (in)valid according
to BIP54.
The test vector file features a JSON array of JSON objects, each corresponding to a test case. Each
JSON object features the following entries:
- `spent_outputs`: a JSON array of strings. An ordered list of hex-encoded Bitcoin-serialized
transaction outputs spent by each input of this test case's transaction.
- `tx`: a JSON string. A hex-encoded Bitcoin-serialized transaction to be evaluated.
- `valid`: a JSON boolean. Whether this transaction is valid according to current consensus rules
supplemented by BIP54.
- `comment`: a JSON string. Description of the test case.
### Merkle tree malleability with 64-byte transactions
The [`txsize.json`](./txsize.json) file contains test cases exercising the new constraint on
non-witness transaction size introduced in BIP54. Each test case contains a transaction and whether
it would be valid according to BIP54, as well as a comment describing why it is (in)valid. All test
cases are otherwise valid according to current Bitcoin consensus rules.
The test vector file features a JSON array of JSON objects, each corresponding to a test case. Each
JSON object features the following entries:
- `tx`: a JSON string. A hex-encoded Bitcoin-serialized transaction to be evaluated.
- `valid`: a JSON boolean. Whether this transaction is valid according to BIP54.
- `comment`: a JSON string. Description of the test case.
### Possibility of duplicate coinbase transactions
The [`coinbases.json`](./coinbases.json) file contains test cases exercising the new restrictions on
coinbase transactions introduced in BIP54 to prevent duplicate coinbase transactions without
resorting to BIP30 validation. Each test case contains a chain of mainnet blocks (including the
genesis block), and whether this block chain is valid according to BIP54. All test cases are valid
according to current Bitcoin's consensus rules, except one that features a block containing a
coinbase transaction timelocked to a future block height.
The test vector file features a JSON array of JSON objects, each corresponding to a test case. Each
JSON object features the following entries:
- `block_chain`: a JSON array of strings. An ordered list of hex-encoded mainnet blocks.
- `valid`: a JSON boolean. Whether this block chain is valid according to current Bitcoin consensus
rules supplemented by BIP54.
- `comment`: a JSON string. Description of the test case.
[bip54-miner]: https://github.com/darosior/bitcoin/commits/bip54_miner/
[header-miner]: https://github.com/darosior/bitcoin/blob/bip54_miner/src/test/bip54_header_miner.cpp
[block-miner]: https://github.com/darosior/bitcoin/blob/bip54_miner/src/test/bip54_block_miner.cpp
[other-vectors]: https://github.com/darosior/bitcoin/blob/2509_inquisition_consensus_cleanup/src/test/bip54_tests.cpp
[premined-headers]: https://github.com/darosior/bitcoin/blob/bip54_miner/src/test/bip54_premined_headers.h

View File

@ -0,0 +1,80 @@
[
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed99613746000000003e699c73b70d61674235d749cfcc240c91df1b658ab774fce2779679f6867d4189b45f49ffff001dc1adcf010101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff055403e0c810feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac15000000"
],
"valid": false,
"comment": "Block at height 4 with coinbase's nLockTime set to 21 and non-final nSequence."
},
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed996137460000000082cf0907a8dfb0b461f9c3f4a807cff5fb85df8e54fcc5d8b5a6208b1144fac289b45f49ffff001d094390190101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05540320d613921000000100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac04000000"
],
"valid": false,
"comment": "Block at height 4 with coinbase's nLockTime set to 4 and non-final nSequence."
},
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed9961374600000000da08acbf43b797bea5a20bb65f0a02871f6272cd0dbd5d192de0b8b241a285aa89b45f49ffff001d5077290a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff055403400d03feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000"
],
"valid": false,
"comment": "Block at height 4 with coinbase's nLockTime set to 2 and non-final nSequence."
},
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed99613746000000000035fba8f8f05b94463822ffd007213ff095c4b82e5bc166fd51c8ba01e0659189b45f49ffff001d394a4d070101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025400fb4003000100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac03000000"
],
"valid": true,
"comment": "Block at height 4 with coinbase's nLockTime set to 3 and non-final nSequence."
},
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed9961374600000000e7822dba53b0868472211017555701e69bbd9c3e2ec5502347dce64e963cff0989b45f49ffff001dfb8e6e110101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05540360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac03000000"
],
"valid": true,
"comment": "Block at height 4 with coinbase's nLockTime set to 3 and maximum non-final nSequence."
},
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed9961374600000000a392d0e70a32b369e2ec509ec0b5cdfad3db5f78d594f855588d6193d7e5bef889b45f49ffff001d5ec3630c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05540320d613ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac03000000"
],
"valid": false,
"comment": "Block at height 4 with coinbase's nLockTime set to 3 and final nSequence."
},
{
"block_chain": [
"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000068fcdbe419c7d12484fd7e1f7cc22c98e4afab982539e2333ca8ce9a317a592f81ad5f49ffff001d846f5e090101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025100feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000",
"01000000a58a17b4a4487b9c83ab80ed6a9ccbb9de25925193cc084f41872bd700000000462c6597dd11214ae6f20905dc3828c000a693c3e4b17df82469e528dd9eeab8d9af5f49ffff001dd6bbd40a0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05520360ae0afeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac01000000",
"010000005702226e10bfe0b24a41a05f406c73046b9ad6fca09255968d3a954b00000000d72d147d9b46612e6adb7168821448e3eca3231ffce8c812a1503ab30001e3bd31b25f49ffff001d7b1408060101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05530320d613feffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac02000000",
"01000000131cda7ce756b84bd95dd3ee07333f2224e286bb9a5e13ed99613746000000002be83903e9da68744e4da285d3641faf33694531e1717724d415265bc987bfbb89b45f49ffff001dbfe17c1f0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff05540340420ffeffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac88b45f49"
],
"valid": false,
"comment": "Block at height 4 with coinbase's nLockTime set to block's nTime minus 1 and maximum non-final nSequence."
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,67 @@
[
{
"comment": "A 63-byte legacy transaction.",
"tx": "0200000001827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff0100000000000000000300515200000000",
"valid": true
},
{
"comment": "A 61-byte legacy transaction with a witness.",
"tx": "02000000000101827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff01000000000000000000010000000000",
"valid": true
},
{
"comment": "A 64-byte legacy transaction (4 bytes in spk).",
"tx": "0200000001827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff010000000000000000040051525400000000",
"valid": false
},
{
"comment": "A 64-byte legacy transaction (4 bytes in scriptsig).",
"tx": "0200000001827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c883150000000403424242ffffffff010040075af07507000000000000",
"valid": false
},
{
"comment": "A 65-byte legacy transaction.",
"tx": "0200000001827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff01000000000000000005005152545800000000",
"valid": true
},
{
"comment": "A 64-byte Segwit transaction.",
"tx": "02000000000101827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff01000000000000000004005152540108213245576281941200000000",
"valid": false
},
{
"comment": "A 64-byte Segwit transaction (1 p2tr input, 1 p2a output).",
"tx": "02000000000101827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff0100000000000000000451024e7301415a78b5a14a2527feb02c08b8124e74c3b9bcc1bd3dba1fbfa87f1c930f28a46fea2bf375105dfd835e212c9127aad4976c46ef86be02edbb681e6f38f9a9e06f0100000000",
"valid": false
},
{
"comment": "A 64-byte Segwit transaction (1 p2tr input with annex, 1 OP_RETURN output).",
"tx": "02000000000101827da3d85a6547d6b03662d2cb86982d655a6f390547285a3bf9ec9f28e0c8831500000000ffffffff010000000000000000046a02ab0102415a78b5a14a2527feb02c08b8124e74c3b9bcc1bd3dba1fbfa87f1c930f28a46fea2bf375105dfd835e212c9127aad4976c46ef86be02edbb681e6f38f9a9e06f01064242ffab212100000000",
"valid": false
},
{
"comment": "Historical 64-byte transaction 892f44a49de6f5b212cdbea514d09e692d9fed5d897f37bcef14bd0eedebf193",
"tx": "0200000001deb98691723fa71260ffca6ea0a7bc0a63b0a8a366e1b585caad47fb269a2ce401000000030251b201000000010000000000000000016a00000000",
"valid": false
},
{
"comment": "Historical 64-byte transaction bbf71454857438c6dfd64c0d92a7c5360a8d8d57c9202f5806449e5b0d26b848",
"tx": "01000000010d0afe3d74062ee60c0ec55579d691d8c8af5c04eb97b777157a21a8c5fb143d00000000035101b100000000010000000000000000016a01000000",
"valid": false
},
{
"comment": "Historical 64-byte transaction 6713d61a83e3d095582211ea8d6db452ac7561e863decba7c4046fb9f6d88aa0",
"tx": "02000000011658a33df410379bb512206659910c9fbd0e50bfb732f7be9936558ff036919401000000035101b201000000010000000000000000016a00000000",
"valid": false
},
{
"comment": "Historical 64-byte transaction 7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612",
"tx": "02000000011a7a4cf262fb7e53e2e6e0b2ef8b763f6ee97d8681ca968d1938418d56e6c38700000000035101b201000000010000000000000000016a00000000",
"valid": false
},
{
"comment": "Historical 64-byte transaction 5302e01dc4b7e34314a34c7c3347107e612b9524be684d388cd4d2ca35ff1ec9",
"tx": "01000000019222bbb054bb9f94571dfe769af5866835f2a97e883959fa757de4064bed8bca01000000035101b100000000010000000000000000016a01000000",
"valid": false
}
]

View File

@ -1,10 +1,14 @@
<pre>
BIP: 60
Layer: Peer Services
Title: Fixed Length "version" Message (Relay-Transactions Field)
Author: Amir Taaki <genjix@riseup.net>
Status: Draft
Type: Standards Track
Created: 2013-06-16
Authors: Amir Taaki <genjix@riseup.net>
Comments-Summary: Discouraged for implementation (one person)
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0060
Status: Closed
Type: Specification
Assigned: 2013-06-16
License: PD
</pre>
==Abstract==
@ -19,14 +23,14 @@ The implementation is problematic because the RelayTransactions flag is an optio
One property of Bitcoin messages is their fixed number of fields. This keeps the format simple and easily understood. Adding optional fields to messages will cause deserialisation issues when other fields come after the optional one.
As an example, the length of version messages might be checked to ensure the byte stream is consistent. With optional fields, this checking is no longer possible. This is desirable to check for consistency inside internal deserialization code, and proper formatting of version messages originating from other nodes. In the future with diversification of the Bitcoin network, it will become desirable to enforce this kind of strict adherance to standard messages with field length compliance with every protocol version.
As an example, the length of version messages might be checked to ensure the byte stream is consistent. With optional fields, this checking is no longer possible. This is desirable to check for consistency inside internal deserialization code, and proper formatting of version messages originating from other nodes. In the future with diversification of the Bitcoin network, it will become desirable to enforce this kind of strict adherence to standard messages with field length compliance with every protocol version.
Another property of fixed-length field messages is the ability to pass stream operators around for deserialization. This property is also lost, as now the deserialisation code must know the remaining length of bytes to parse. The parser now requires an additional piece of information (remaining size of the stream) for parsing instead of being a dumb reader.
==Specification==
=== version ===
When a node creates an outgoing connection, it will immediately advertise its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.
When a node creates an outgoing connection, it will immediately advertise its version. The remote node will respond with its version. No further communication is possible until both peers have exchanged their version.
Payload:

View File

@ -1,10 +1,13 @@
<pre>
BIP: 61
Layer: Peer Services
Title: Reject P2P message
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2014-06-18
Authors: Gavin Andresen <gavinandresen@gmail.com>
Comments-Summary: Controversial; some recommendation, and some discouragement
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0061
Status: Deployed
Type: Specification
Assigned: 2014-06-18
</pre>
==Abstract==
@ -54,7 +57,7 @@ Every reject message begins with the following fields. Some messages append extr
|}
The human-readable string is intended only for debugging purposes; in particular, different implementations may
use different strings. The string should not be shown to users or used for anthing besides diagnosing
use different strings. The string should not be shown to users or used for anything besides diagnosing
interoperability problems.
The following reject code categories are used; in the descriptions below, "server" is the peer generating
@ -80,7 +83,7 @@ the reject message, "client" is the peer that will receive the message.
==== reject version codes ====
Codes generated during the intial connection process in response to a "version" message:
Codes generated during the initial connection process in response to a "version" message:
{|
| Code || Description
@ -146,7 +149,7 @@ The reject message is backwards-compatible; older peers that do not recognize th
== Implementation notes ==
Implementors must consider what happens if an attacker either sends them
Implementers must consider what happens if an attacker either sends them
reject messages for valid transactions/blocks or sends them random
reject messages, and should beware of possible denial-of-service attacks.
For example, notifying the user of every reject message received

View File

@ -2,17 +2,23 @@
<pre>
BIP: 62
Layer: Consensus (soft fork)
Title: Dealing with malleability
Author: Pieter Wuille <pieter.wuille@gmail.com>
Status: Withdrawn
Type: Standards Track
Created: 2014-03-12
Authors: Pieter Wuille <pieter.wuille@gmail.com>
Status: Closed
Type: Specification
Assigned: 2014-03-12
License: BSD-2-Clause
</pre>
==Abstract==
This document specifies proposed changes to the Bitcoin transaction validity rules in order to make malleability of transactions impossible (at least when the sender doesn't choose to avoid it).
==Copyright==
This BIP is licensed under the 2-clause BSD license.
==Motivation==
As of february 2014, Bitcoin transactions are malleable in multiple ways. This means a (valid) transaction can be modified in-flight, without invalidating it, but without access to the relevant private keys.
@ -26,7 +32,7 @@ Several sources of malleability are known:
# '''Non-DER encoded ECDSA signatures''' Right now, the Bitcoin reference client uses OpenSSL to validate signatures. As OpenSSL accepts more than serializations that strictly adhere to the DER standard, this is a source of malleability. Since v0.8.0, non-DER signatures are no longer relayed already.
# '''Non-push operations in scriptSig''' Any sequence of script operations in scriptSig that results in the intended data pushes, but is not just a push of that data, results in an alternative transaction with the same validity.
# '''Push operations in scriptSig of non-standard size type''' The Bitcoin scripting language has several push operators (OP_0, single-byte pushes, data pushes of up to 75 bytes, OP_PUSHDATA1, OP_PUSHDATA2, OP_PUSHDATA4). As the later ones have the same result as the former ones, they result in additional possibilities.
# '''Push operations in scriptSig of non-standard size type''' The Bitcoin scripting language has several push operators (OP_0, single-byte pushes, data pushes of up to 75 bytes, OP_PUSHDATA1, OP_PUSHDATA2, OP_PUSHDATA4). As the latter ones have the same result as the former ones, they result in additional possibilities.
# '''Zero-padded number pushes''' In cases where scriptPubKey opcodes use inputs that are interpreted as numbers, they can be zero padded.
# '''Inherent ECDSA signature malleability''' ECDSA signatures themselves are already malleable: taking the negative of the number S inside (modulo the curve order) does not invalidate it.
# '''Superfluous scriptSig operations''' Adding extra data pushes at the start of scripts, which are not consumed by the corresponding scriptPubKey, is also a source of malleability.

View File

@ -1,10 +1,11 @@
<pre>
BIP: 64
Layer: Peer Services
Title: getutxo message
Author: Mike Hearn <hearn@vinumeris.com>
Status: Draft
Type: Standards Track
Created: 2014-06-10
Authors: Mike Hearn <hearn@vinumeris.com>
Status: Closed
Type: Specification
Assigned: 2014-06-10
</pre>
==Abstract==
@ -83,7 +84,7 @@ If the requesting client is looking up outputs for a signed transaction that the
client can partly verify the returned output by running the input scripts with it. Currently this
verifies only that the script is correct. A future version of the Bitcoin protocol is likely to also
allow the value to be checked in this way. It does not show that the output is really unspent or was
ever actually created in the block chain however. Additionally, the form of the provided scriptPubKey
ever actually created in the block chain however. Additionally, the form of the provided scriptPubKey
should be checked before execution to ensure the remote peer doesn't just set the script to OP_TRUE.
If the requesting client has a mapping of chain heights to block hashes in the best chain e.g.
@ -100,4 +101,4 @@ results.
==Implementation==
https://github.com/bitcoin/bitcoin/pull/4351/files
https://github.com/bitcoin/bitcoin/pull/4351/files

View File

@ -1,10 +1,12 @@
<pre>
BIP: 65
Layer: Consensus (soft fork)
Title: OP_CHECKLOCKTIMEVERIFY
Author: Peter Todd <pete@petertodd.org>
Status: Final
Type: Standards Track
Created: 2014-10-01
Authors: Peter Todd <pete@petertodd.org>
Status: Deployed
Type: Specification
Assigned: 2014-10-01
License: PD
</pre>
==Abstract==
@ -90,7 +92,7 @@ There exist a number of protocols where a transaction output is created that
requires the co-operation of both parties to spend the output. To ensure the
failure of one party does not result in the funds becoming lost, refund
transactions are setup in advance using nLockTime. These refund transactions
need to be created interactively, and additionaly, are currently vulnerable to
need to be created interactively, and additionally, are currently vulnerable to
transaction malleability. CHECKLOCKTIMEVERIFY can be used in these protocols,
replacing the interactive setup with a non-interactive setup, and additionally,
making transaction malleability a non-issue.
@ -132,7 +134,7 @@ transaction is created, tx3, to ensure that should the payee vanish the payor
can get their deposit back. The process by which the refund transaction is
created is currently vulnerable to transaction malleability attacks, and
additionally, requires the payor to store the refund. Using the same
scriptPubKey from as in the Two-factor wallets example solves both these issues.
scriptPubKey form as in the Two-factor wallets example solves both these issues.
===Trustless Payments for Publishing Data===
@ -166,7 +168,7 @@ Proving the sacrifice of some limited resource is a common technique in a
variety of cryptographic protocols. Proving sacrifices of coins to mining fees
has been proposed as a ''universal public good'' to which the sacrifice could
be directed, rather than simply destroying the coins. However doing so is
non-trivial, and even the best existing technqiue - announce-commit sacrifices
non-trivial, and even the best existing technique - announce-commit sacrifices
- could encourage mining centralization. CHECKLOCKTIMEVERIFY can be used to
create outputs that are provably spendable by anyone (thus to mining fees
assuming miners behave optimally and rationally) but only at a time
@ -201,19 +203,19 @@ transaction output ''can'' be spent.
Refer to the reference implementation, reproduced below, for the precise
semantics and detailed rationale for those semantics.
case OP_NOP2:
{
// CHECKLOCKTIMEVERIFY
//
// (nLockTime -- nLockTime )
if (!(flags & SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY))
break; // not enabled; treat as a NOP
if (stack.size() < 1)
return false;
// Note that elsewhere numeric opcodes are limited to
// operands in the range -2**31+1 to 2**31-1, however it is
// legal for opcodes to produce results exceeding that
@ -229,13 +231,13 @@ semantics and detailed rationale for those semantics.
// to 5-byte bignums, which are good until 2**32-1, the
// same limit as the nLockTime field itself.
const CScriptNum nLockTime(stacktop(-1), 5);
// In the rare event that the argument may be < 0 due to
// some arithmetic being done first, you can always use
// 0 MAX CHECKLOCKTIMEVERIFY.
if (nLockTime < 0)
return false;
// There are two types of nLockTime: lock-by-blockheight
// and lock-by-blocktime, distinguished by whether
// nLockTime < LOCKTIME_THRESHOLD.
@ -248,12 +250,12 @@ semantics and detailed rationale for those semantics.
(txTo.nLockTime >= LOCKTIME_THRESHOLD && nLockTime >= LOCKTIME_THRESHOLD)
))
return false;
// Now that we know we're comparing apples-to-apples, the
// comparison is a simple numeric one.
if (nLockTime > (int64_t)txTo.nLockTime)
return false;
// Finally the nLockTime feature can be disabled and thus
// CHECKLOCKTIMEVERIFY bypassed if every txin has been
// finalized by setting nSequence to maxint. The
@ -266,9 +268,9 @@ semantics and detailed rationale for those semantics.
// required to prove correct CHECKLOCKTIMEVERIFY execution.
if (txTo.vin[nIn].IsFinal())
return false;
break;
}
https://github.com/petertodd/bitcoin/commit/ab0f54f38e08ee1e50ff72f801680ee84d0f1bf4
@ -308,20 +310,24 @@ time.
==References==
PayPub - https://github.com/unsystem/paypub
PayPub
Jeremy Spilman Payment Channels - https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2013-April/002433.html
* https://github.com/unsystem/paypub
Jeremy Spilman Payment Channels
* https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2013-April/002433.html
==Implementations==
Python / python-bitcoinlib
- https://github.com/petertodd/checklocktimeverify-demos
* https://github.com/petertodd/checklocktimeverify-demos
JavaScript / Node.js / bitcore
- https://github.com/mruddy/bip65-demos
* https://github.com/mruddy/bip65-demos
==Copyright==

View File

@ -1,16 +1,22 @@
<pre>
BIP: 66
Layer: Consensus (soft fork)
Title: Strict DER signatures
Author: Pieter Wuille <pieter.wuille@gmail.com>
Status: Final
Type: Standards Track
Created: 2015-01-10
Authors: Pieter Wuille <pieter.wuille@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2015-01-10
License: BSD-2-Clause
</pre>
==Abstract==
This document specifies proposed changes to the Bitcoin transaction validity rules to restrict signatures to strict DER encoding.
==Copyright==
This BIP is licensed under the 2-clause BSD license.
==Motivation==
Bitcoin's reference implementation currently relies on OpenSSL for signature validation, which means it is implicitly defining Bitcoin's block validity rules. Unfortunately, OpenSSL is not designed for consensus-critical behaviour (it does not guarantee bug-for-bug compatibility between versions), and thus changes to it can - and have - affected Bitcoin software.
@ -29,7 +35,7 @@ These operators all perform ECDSA verifications on pubkey/signature pairs, itera
The following code specifies the behaviour of strict DER checking. Note that this function tests a signature byte vector which includes the 1-byte sighash flag that Bitcoin adds, even though that flag falls outside of the DER specification, and is unaffected by this proposal. The function is also not called for cases where the length of sig is 0, in order to provide a simple, short and efficiently-verifiable encoding for deliberately invalid signatures.
DER is specified in http://www.itu.int/rec/T-REC-X.690-200811-I/en .
DER is specified in https://www.itu.int/rec/T-REC-X.690/en .
<pre>
bool static IsValidSignatureEncoding(const std::vector<unsigned char> &sig) {
@ -67,7 +73,7 @@ bool static IsValidSignatureEncoding(const std::vector<unsigned char> &sig) {
// Verify that the length of the signature matches the sum of the length
// of the elements.
if ((size_t)(lenR + lenS + 7) != sig.size()) return false;
// Check whether the R element is an integer.
if (sig[2] != 0x02) return false;
@ -132,5 +138,8 @@ An implementation for the reference client is available at https://github.com/bi
==Acknowledgements==
This document is extracted from the previous BIP62 proposal, which had input from various people, in particular Greg Maxwell and Peter Todd, who gave feedback about this document as well.
This document is extracted from the previous BIP62 proposal, which had input from various people, in particular Greg Maxwell and Peter Todd, who gave feedback about this document as well.
==Disclosures==
* Subsequent to the network-wide adoption and enforcement of this BIP, the author [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-July/009697.html disclosed] that strict DER signatures provided an indirect solution to a consensus bug he had previously discovered.

View File

@ -1,12 +1,14 @@
<pre>
BIP: 67
Layer: Applications
Title: Deterministic Pay-to-script-hash multi-signature addresses through public key sorting
Author: Thomas Kerin <me@thomaskerin.io>
Jean-Pierre Rupp <root@haskoin.com>
Ruben de Vries <ruben@rubensayshi.com>
Status: Draft
Type: Standards Track
Created: 2015-02-08
Authors: Thomas Kerin <me@thomaskerin.io>
Jean-Pierre Rupp <root@haskoin.com>
Ruben de Vries <ruben@rubensayshi.com>
Status: Complete
Type: Specification
Assigned: 2015-02-08
License: PD
</pre>
==Abstract==
@ -15,7 +17,7 @@ This BIP describes a method to deterministically generate multi-signature pay-to
==Motivation==
Pay-to-script-hash (BIP-0011<ref>[https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki BIP-0011]</ref>) is a transaction type that allows funding of arbitrary scripts, where the recipient carries the cost of fee's associated with using longer, more complex scripts.
Pay-to-script-hash (BIP-0011<ref>[https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki BIP-0011]</ref>) is a transaction type that allows funding of arbitrary scripts, where the recipient carries the cost of fee's associated with using longer, more complex scripts.
Multi-signature pay-to-script-hash transactions are defined in BIP-0016<ref>[https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki BIP-0016]</ref>. The redeem script does not require a particular ordering or encoding for public keys. This means that for a given set of keys and number of required signatures, there are as many as 2(n!) possible standard redeem scripts, each with its separate P2SH address. Adhering to an ordering and key encoding would ensure that a multi-signature “account” (set of public keys and required signature count) has a canonical P2SH address.
@ -23,36 +25,36 @@ By adopting a sorting and encoding standard, compliant wallets will always produ
While most web wallets do not presently facilitate the setup of multisignature accounts with users of a different service, conventions which ensure cross-compatibility should make it easier to achieve this.
Many wallet as a service providers use a 2of3 multi-signature schema where the user stores 1 of the keys (offline) as backup while using the other key for daily use and letting the service cosign his transactions.
Many wallet as a service providers use a 2of3 multi-signature schema where the user stores 1 of the keys (offline) as backup while using the other key for daily use and letting the service cosign his transactions.
This standard will help in enabling a party other than the service provider to recover the wallet without any help from the service provider.
==Specification==
For a set of public keys, ensure that they have been received in compressed form:
022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da
03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18
Sort them lexicographically according to their binary representation:
Sort them lexicographically according to their binary representation:
021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18
022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da
03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
..before using the resulting list of keys in a standard multisig redeem script:
OP_2 021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18 022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9 OP_3 OP_CHECKSIG
..before using the resulting list of keys in a standard multisig redeem script:
OP_2 021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18 022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9 OP_3 OP_CHECKMULTISIG
Hash the redeem script according to BIP-0016 to get the P2SH address.
3Q4sF6tv9wsdqu2NtARzNCpQgwifm2rAba
==Compatibility==
* Uncompressed keys are incompatible with this specificiation. A compatible implementation should not automatically compress keys. Receiving an uncompressed key from a multisig participant should be interpreted as a sign that the user has an incompatible implementation.
* P2SH addressses do not reveal information about the script that is receiving the funds. For this reason it is not technically possible to enforce this BIP as a rule on the network. Also, it would cause a hard fork.
* Uncompressed keys are incompatible with this specification. A compatible implementation should not automatically compress keys. Receiving an uncompressed key from a multisig participant should be interpreted as a sign that the user has an incompatible implementation.
* P2SH addresses do not reveal information about the script that is receiving the funds. For this reason it is not technically possible to enforce this BIP as a rule on the network. Also, it would cause a hard fork.
* Implementations that do not conform with this BIP will have compatibility issues with strictly-compliant wallets.
* Implementations which do adopt this standard will be cross-compatible when choosing multisig addressses.
* Implementations which do adopt this standard will be cross-compatible when choosing multisig addresses.
* If a group of users were not entirely compliant, there is the possibility that a participant will derive an address that the others will not recognize as part of the common multisig account.
==Test vectors==
@ -71,11 +73,11 @@ Vector 1
** 39bgKC7RFbpoCRbtD5KEdkYKtNyhpsNa3Z
Vector 2 (Already sorted, no action required)
* List:
* List:
** 02632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0
** 027735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e77
** 02e2cc6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b404
* Sorted:
* Sorted:
** 02632b12f4ac5b1d1b72b2a3b508c19172de44f6f46bcee50ba33f3f9291e47ed0
** 027735a29bae7780a9755fae7a1c4374c656ac6a69ea9f3697fda61bb99a4f3e77
** 02e2cc6bd5f45edd43bebe7cb9b675f0ce9ed3efe613b177588290ad188d11b404
@ -85,12 +87,12 @@ Vector 2 (Already sorted, no action required)
** 3CKHTjBKxCARLzwABMu9yD85kvtm7WnMfH
Vector 3:
* List:
* List:
** 030000000000000000000000000000000000004141414141414141414141414141
** 020000000000000000000000000000000000004141414141414141414141414141
** 020000000000000000000000000000000000004141414141414141414141414140
** 030000000000000000000000000000000000004141414141414141414141414140
* Sorted:
* Sorted:
** 020000000000000000000000000000000000004141414141414141414141414140
** 020000000000000000000000000000000000004141414141414141414141414141
** 030000000000000000000000000000000000004141414141414141414141414140
@ -101,11 +103,11 @@ Vector 3:
** 32V85igBri9zcfBRVupVvwK18NFtS37FuD
Vector 4: (from bitcore)
* List:
* List:
** 022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da
** 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
** 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
** 021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18
* Sorted:
* Sorted:
** 021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18
** 022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da
** 03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9
@ -115,14 +117,19 @@ Vector 4: (from bitcore)
** 3Q4sF6tv9wsdqu2NtARzNCpQgwifm2rAba
==Acknowledgements==
The authors wish to thank BtcDrak and Luke-Jr for their involvement & contributions in the early discussions of this BIP.
The authors wish to thank BtcDrak and Luke-Jr for their involvement & contributions in the early discussions of this BIP.
==Usage & Implementations==
* [[https://github.com/bitcoin/bips/blob/master/bip-0045.mediawiki#address-generation-procedure|BIP-0045]] - Structure for Deterministic P2SH Multisignature Wallets
* [[https://github.com/bitpay/bitcore/blob/50a868cb8cdf2be04bb1c5bf4bcc064cc06f5888/lib/script/script.js#L541|Bitcore]]
* [[https://github.com/haskoin/haskoin/blob/master/Network/Haskoin/Script/Parser.hs#L112-122|Haskoin]] Bitcoin implementation in haskell
* [[https://github.com/etotheipi/BitcoinArmory/blob/268db0f3fa20c989057bd43343a43b2edbe89aeb/armoryengine/ArmoryUtils.py#L1441|Armory]]
* [[https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/script/ScriptBuilder.java#L331|BitcoinJ]]
==Usage & Implementations==
* [[https://github.com/bitcoin/bips/blob/master/bip-0045.mediawiki#address-generation-procedure|BIP-0045]] - Structure for Deterministic P2SH Multisignature Wallets
* [[https://github.com/bitpay/bitcore/blob/50a868cb8cdf2be04bb1c5bf4bcc064cc06f5888/lib/script/script.js#L541|Bitcore]]
* [[https://github.com/haskoin/haskoin-core/blob/b41b1deb0989334a7ead6fc993fb8b02f0c00810/haskoin-core/Network/Haskoin/Script/Parser.hs#L112-L122|Haskoin]] - Bitcoin implementation in Haskell
* [[https://github.com/etotheipi/BitcoinArmory/blob/268db0f3fa20c989057bd43343a43b2edbe89aeb/armoryengine/ArmoryUtils.py#L1441|Armory]]
* [[https://github.com/bitcoinj/bitcoinj/blob/f7ea0b92a619800c143b0142dc70306da33119a9/core/src/main/java/org/bitcoinj/script/ScriptBuilder.java#L331|BitcoinJ]]
== References ==
<references>
== Copyright ==
This document is placed in the public domain.

View File

@ -1,13 +1,14 @@
<pre>
BIP: 68
Layer: Consensus (soft fork)
Title: Relative lock-time using consensus-enforced sequence numbers
Author: Mark Friedenbach <mark@friedenbach.org>
BtcDrak <btcdrak@gmail.com>
Nicolas Dorier <nicolas.dorier@gmail.com>
kinoshitajona <kinoshitajona@gmail.com>
Status: Draft
Type: Standards Track
Created: 2015-05-28
Authors: Mark Friedenbach <mark@friedenbach.org>
BtcDrak <btcdrak@gmail.com>
Nicolas Dorier <nicolas.dorier@gmail.com>
kinoshitajona <kinoshitajona@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2015-05-28
</pre>
==Abstract==
@ -18,7 +19,7 @@ This BIP introduces relative lock-time (RLT) consensus-enforced semantics of the
Bitcoin transactions have a sequence number field for each input. The original idea appears to have been that a transaction in the mempool would be replaced by using the same input with a higher sequence value. Although this was not properly implemented, it assumes miners would prefer higher sequence numbers even if the lower ones were more profitable to mine. However, a miner acting on profit motives alone would break that assumption completely. The change described by this BIP repurposes the sequence number for new use cases without breaking existing functionality. It also leaves room for future expansion and other use cases.
The transaction nLockTime is used to prevent the mining of a transaction until a certain date. nSequence will be repurposed to prevent mining of a transaction until a certain age of the spent output in blocks or timespan. This, among other uses, allows bi-directional payment channels as used in [https://github.com/ElementsProject/lightning/raw/master/doc/deployable-lightning.pdf Hashed Timelock Contracts (HTLCs)] and [https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki#Bidirectional_Payment_Channels BIP112].
The transaction nLockTime is used to prevent the mining of a transaction until a certain date. nSequence will be repurposed to prevent mining of a transaction until a certain age of the spent output in blocks or timespan. This, among other uses, allows bi-directional payment channels as used in [https://github.com/ElementsProject/lightning/raw/master/doc/miscellaneous/deployable-lightning.pdf Hashed Timelock Contracts (HTLCs)] and [https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki#Bidirectional_Payment_Channels BIP112].
==Specification==
@ -30,7 +31,7 @@ If bit (1 << 31) of the sequence number is set, then no consensus meaning is app
If bit (1 << 31) of the sequence number is not set, then the sequence number is interpreted as an encoded relative lock-time.
The sequence number encoding is interpreted as follows:
The sequence number encoding is interpreted as follows:
Bit (1 << 22) determines if the relative lock-time is time-based or block based: If the bit is set, the relative lock-time specifies a timespan in units of 512 seconds granularity. The timespan starts from the median-time-past of the outputs previous block, and ends at the MTP of the previous block. If the bit is not set, the relative lock-time specifies a number of blocks.
@ -43,12 +44,14 @@ This specification only interprets 16 bits of the sequence number as relative lo
For time based relative lock-time, 512 second granularity was chosen because bitcoin blocks are generated every 600 seconds. So when using block-based or time-based, the same amount of time can be encoded with the available number of bits. Converting from a sequence number to seconds is performed by multiplying by 512 = 2^9, or equivalently shifting up by 9 bits.
When the relative lock-time is time-based, it is interpreted as a minimum block-time constraint over the input's age. A relative time-based lock-time of zero indicates an input which can be included in any block. More generally, a relative time-based lock-time n can be included into any block produced 512 * n seconds after the mining date of the output it is spending, or any block thereafter.
The mining date of the output is equals to the median-time-past of the previous block which mined it.
The mining date of the output is equal to the median-time-past of the previous block which mined it.
The block produced time is equal to the median-time-past of its previous block.
When the relative lock-time is block-based, it is interpreted as a minimum block-height constraint over the input's age. A relative block-based lock-time of zero indicates an input which can be included in any block. More generally, a relative block lock-time n can be included n blocks after the mining date of the output it is spending, or any block thereafter.
The new rules are not applied to the nSequence field of the input of the coinbase transaction.
==Implementation==
A reference implementation is provided by the following pull request
@ -60,7 +63,7 @@ enum {
/* Interpret sequence numbers as relative lock-time constraints. */
LOCKTIME_VERIFY_SEQUENCE = (1 << 0),
};
/* Setting nSequence to this value for every input in a transaction
* disables nLockTime. */
static const uint32_t SEQUENCE_FINAL = 0xffffffff;
@ -198,7 +201,7 @@ bool CheckSequenceLocks(const CTransaction &tx, int flags)
return error("%s: Missing input", __func__);
}
if (coins.nHeight == MEMPOOL_HEIGHT) {
// Assume all mempool transaction confirm in the next block
// Assume all mempool transactions are confirmed in the next block
prevheights[txinIndex] = tip->nHeight + 1;
} else {
prevheights[txinIndex] = coins.nHeight;
@ -218,9 +221,13 @@ This BIP was edited by BtcDrak, Nicolas Dorier and kinoshitajona.
==Deployment==
This BIP is to be deployed by either version-bits BIP9 or by isSuperMajority(). Exact details TDB.
This BIP is to be deployed by "versionbits" BIP9 using bit 0.
It is recommended to deploy BIP112 and BIP113 at the same time.
For Bitcoin '''mainnet''', the BIP9 '''starttime''' will be midnight 1st May 2016 UTC (Epoch timestamp 1462060800) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800).
For Bitcoin '''testnet''', the BIP9 '''starttime''' will be midnight 1st March 2016 UTC (Epoch timestamp 1456790400) and BIP9 '''timeout''' will be midnight 1st May 2017 UTC (Epoch timestamp 1493596800).
This BIP must be deployed simultaneously with BIP112 and BIP113 using the same deployment mechanism.
==Compatibility==
@ -233,10 +240,10 @@ Additionally, this BIP specifies only 16 bits to actually encode relative lock-t
The most efficient way to calculate sequence number from relative lock-time is with bit masks and shifts:
<pre>
// 0 <= nHeight < 65,535 blocks (1.25 years)
// 0 <= nHeight <= 65,535 blocks (1.25 years)
nSequence = nHeight;
nHeight = nSequence & 0x0000ffff;
// 0 <= nTime < 33,554,431 seconds (1.06 years)
nSequence = (1 << 22) | (nTime >> 9);
nTime = (nSequence & 0x0000ffff) << 9;
@ -246,9 +253,11 @@ The most efficient way to calculate sequence number from relative lock-time is w
Bitcoin mailing list discussion: https://www.mail-archive.com/bitcoin-development@lists.sourceforge.net/msg07864.html
BIP9: https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki
BIP112: https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki
BIP113: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki
Hashed Timelock Contracts (HTLCs): https://github.com/ElementsProject/lightning/raw/master/doc/deployable-lightning.pdf
Hashed Timelock Contracts (HTLCs): https://github.com/ElementsProject/lightning/raw/master/doc/miscellaneous/deployable-lightning.pdf

View File

@ -1,11 +1,13 @@
<pre>
BIP: 69
Layer: Applications
Title: Lexicographical Indexing of Transaction Inputs and Outputs
Author: Kristov Atlas <kristov@openbitcoinprivacyproject.org>
Authors: Kristov Atlas <kristov@openbitcoinprivacyproject.org>
Editor: Daniel Cousens <bips@dcousens.com>
Status: Draft
Status: Complete
Type: Informational
Created: 2015-06-12
Assigned: 2015-06-12
License: PD
</pre>
==Abstract==
@ -21,11 +23,6 @@ This BIP is in the public domain.
==Motivation==
Currently, there is no clear standard for how wallet clients ought to order transaction inputs and outputs.
Since wallet clients are left to their own devices to determine this ordering, they often leak information about their users finances.
For example, a wallet client might naively order inputs based on when addresses were added to a wallet by the user through importing or random generation.
Many wallets will place spending outputs first and change outputs second, leaking information about both the sender and receivers finances to passive blockchain observers.
Such information should remain private not only for the benefit of consumers, but in higher order financial systems must be kept secret to prevent fraud.
Currently, there is no clear standard for how wallet clients ought to order transaction inputs and outputs.
Since wallet clients are left to their own devices to determine this ordering, they often leak information about their users finances.
For example, a wallet client might naively order inputs based on when addresses were added to a wallet by the user through importing or random generation.
@ -79,7 +76,7 @@ N.B. All comparisons do not need to operate in constant time since they are not
===Transaction Inputs===
Transaction inputs are defined by the hash of a previous transaction, the output index of of a UTXO from that previous transaction, the size of an unlocking script, the unlocking script, and a sequence number. [3]
Transaction inputs are defined by the hash of a previous transaction, the output index of a UTXO from that previous transaction, the size of an unlocking script, the unlocking script, and a sequence number. [3]
For sorting inputs, the hash of the previous transaction and the output index within that transaction are sufficient for sorting purposes; each transaction hash has an extremely high probability of being unique in the blockchain — this is enforced for coinbase transactions by BIP30 — and output indices within a transaction are unique.
For the sake of efficiency, transaction hashes should be compared first before output indices, since output indices from different transactions are often equivalent, while all bytes of the transaction hash are effectively random variables.
@ -88,7 +85,7 @@ In the event of two matching transaction hashes, the respective previous output
If the previous output indices match, the inputs are considered equal.
Transaction malleability will not negatively impact the correctness of this process.
Even if a wallet client follows this process using unconfirmed UTXOs as inputs and an attacker changes modifies the blockchains record of the hash of the previous transaction, the wallet client will include the invalidated previous transaction hash in its input data, and will still correctly sort with respect to that invalidated hash.
Even if a wallet client follows this process using unconfirmed UTXOs as inputs and an attacker modifies the blockchains record of the hash of the previous transaction, the wallet client will include the invalidated previous transaction hash in its input data, and will still correctly sort with respect to that invalidated hash.
===Transaction Outputs===
@ -148,7 +145,7 @@ Outputs:
==References==
* [[https://bitcoinmagazine.com/20273/bitstamp-exchange-activity-trackable-due-multisig-wallet-implementation/|1: Bitstamp Info Leak]]
* [[https://github.com/OpenBitcoinPrivacyProject/wallet-ratings/blob/master/2015-1/criteria.md|2: OBPP Random Indexing as Countermeasure]]
* [[https://github.com/OpenBitcoinPrivacyProject/wallet-ratings/blob/5a7e2e1555e91bb48edeca3aa710272777d98c2a/2015-1/criteria.md|2: OBPP Random Indexing as Countermeasure]]
* [[https://github.com/aantonop/bitcoinbook/blob/develop/ch05.asciidoc|3: Mastering Bitcoin]]
* [[https://en.bitcoin.it/wiki/Script|4: Bitcoin Wiki on Script]]
* [[http://www.cplusplus.com/reference/algorithm/lexicographical_compare|5: std::lexicographical_compare]]
@ -163,7 +160,7 @@ Outputs:
* [[https://github.com/bitcoinjs/bip69/blob/master/test/fixtures.json|BitcoinJS Test Fixtures]]
* [[https://www.npmjs.com/package/bip69|NodeJS]]
* [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/transaction.js#L120-L142|Blockchain.info public beta]]
* [[https://github.com/btcsuite/btcutil/blob/master/txsort/txsort.go|Btcsuite]]
* [[https://github.com/btcsuite/btcd/blob/master/btcutil/txsort/txsort.go|Btcsuite]]
==Acknowledgements==

22
bip-0069/bip-0069_examples.py Normal file → Executable file
View File

@ -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):
@ -29,12 +31,13 @@ def input_cmp(input_tuple1, input_tuple2):
elif (input_tuple1[1] > input_tuple2[1]):
return 1
else:
raise ValueError('Matching previous transaction hash and previous transaction output index for two disinct inputs. Invalid!')
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))
@ -49,12 +52,13 @@ def output_cmp(output_tuple1, output_tuple2):
elif (output_tuple1[0] > output_tuple2[0]):
return 1
#tie-breaker: scriptPubKey_byte_arr
return bytearray_cmp(output_tuple1[1], output_tuple2[1])
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))
@ -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)
@ -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)
@ -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()

View File

@ -1,11 +1,12 @@
<pre>
BIP: 70
Layer: Applications
Title: Payment Protocol
Author: Gavin Andresen <gavinandresen@gmail.com>
Mike Hearn <mhearn@bitcoinfoundation.org>
Status: Final
Type: Standards Track
Created: 2013-07-29
Authors: Gavin Andresen <gavinandresen@gmail.com>
Mike Hearn <mhearn@bitcoinfoundation.org>
Status: Deployed
Type: Specification
Assigned: 2013-07-29
</pre>
==Abstract==
@ -259,7 +260,7 @@ occurs.
Trusted root certificates may be obtained from the operating system;
if validation is done on a device without an operating system, the
[http://www.mozilla.org/projects/security/certs/included/index.html Mozilla root store] is recommended.
[https://www.mozilla.org/about/governance/policies/security-group/certs/policy/ Mozilla root store] is recommended.
==Extensibility==
@ -299,7 +300,7 @@ Protocol Buffers : https://developers.google.com/protocol-buffers/
==Reference implementation==
Create Payment Request generator : https://bitcoincore.org/~gavin/createpaymentrequest.php ([[https://github.com/gavinandresen/paymentrequest|source]])
Create Payment Request generator : https://developer.bitcoin.org/examples/payment_processing.html ([[https://github.com/gavinandresen/paymentrequest|source]])
BitcoinJ : https://bitcoinj.github.io/payment-protocol#introduction
@ -311,7 +312,7 @@ http://datatracker.ietf.org/wg/jose/
Wikipedia's page on Invoices: http://en.wikipedia.org/wiki/Invoice
especially the list of Electronic Invoice standards
sipa's payment protocol proposal: https://gist.github.com/1237788
sipa's payment protocol proposal: https://gist.github.com/sipa/1237788
ThomasV's "Signed Aliases" proposal : http://ecdsa.org/bitcoin_URIs.html

View File

@ -1,10 +1,11 @@
<pre>
BIP: 71
Layer: Applications
Title: Payment Protocol MIME types
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2013-07-29
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2013-07-29
</pre>
==Abstract==

View File

@ -1,10 +1,11 @@
<pre>
BIP: 72
Layer: Applications
Title: bitcoin: uri extensions for Payment Protocol
Author: Gavin Andresen <gavinandresen@gmail.com>
Status: Final
Type: Standards Track
Created: 2013-07-29
Authors: Gavin Andresen <gavinandresen@gmail.com>
Status: Deployed
Type: Specification
Assigned: 2013-07-29
</pre>
==Abstract==
@ -66,4 +67,4 @@ bitcoin:?r=https://merchant.com/pay.php?h%3D2a8628fc2fbe
==References==
[[http://www.w3.org/Protocols/rfc2616/rfc2616.html|RFC 2616]] : Hypertext Transfer Protocol -- HTTP/1.1
[[http://www.w3.org/Protocols/rfc2616/rfc2616.html|RFC 2616]] : Hypertext Transfer Protocol -- HTTP/1.1

View File

@ -1,10 +1,11 @@
<pre>
BIP: 73
Layer: Applications
Title: Use "Accept" header for response type negotiation with Payment Request URLs
Author: Stephen Pair <stephen@bitpay.com>
Status: Final
Type: Standards Track
Created: 2013-08-27
Authors: Stephen Pair <stephen@bitpay.com>
Status: Deployed
Type: Specification
Assigned: 2013-08-27
</pre>
==Abstract==

View File

@ -1,10 +1,14 @@
<pre>
BIP: 74
Layer: Applications
Title: Allow zero value OP_RETURN in Payment Protocol
Author: Toby Padilla <tobypadilla@gmail.com>
Status: Draft
Type: Standards Track
Created: 2016-01-29
Authors: Toby Padilla <tobypadilla@gmail.com>
Comments-Summary: Unanimously Discourage for implementation
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0074
Status: Closed
Type: Specification
Assigned: 2016-01-29
License: PD
</pre>
==Abstract==

428
bip-0075.mediawiki Normal file
View File

@ -0,0 +1,428 @@
<pre>
BIP: 75
Layer: Applications
Title: Out of Band Address Exchange using Payment Protocol Encryption
Authors: Justin Newton <justin@netki.com>
Matt David <mgd@mgddev.com>
Aaron Voisine <voisine@gmail.com>
James MacWhyte <macwhyte@gmail.com>
Comments-Summary: Recommended for implementation (one person)
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0075
Status: Deployed
Type: Specification
Assigned: 2015-11-20
License: CC-BY-4.0
</pre>
==Abstract==
This BIP is an extension to BIP 70 that provides two enhancements to the existing Payment Protocol.
# It allows the requester (Sender) of a PaymentRequest to voluntarily sign the original request and provide a certificate to allow the payee to know the identity of who they are transacting with.
# It encrypts the PaymentRequest that is returned, before handing it off to the SSL/TLS layer to prevent man in the middle viewing of the Payment Request details.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in RFC 2119.
==Copyright==
<img src="https://licensebuttons.net/l/by/4.0/88x31.png">
This work is licensed under a [[http://creativecommons.org/licenses/by/4.0/|Creative Commons Attribution 4.0 International License]].
==Definitions==
{| class="wikitable"
| Sender || Entity wishing to transfer value that they control
|-
| Receiver || Entity receiving a value transfer
|}
==Motivation==
The motivation for defining this extension to the [[bip-0070.mediawiki|BIP70]] Payment Protocol is to allow two parties to exchange payment information in a permissioned and encrypted way, such that wallet address communication can become a more automated process. This extension also expands the types of PKI (public-key infrastructure) data that is supported, and allows it to be shared by both parties (with [[bip-0070.mediawiki|BIP70]], only the receiver could provide PKI information). This allows for automated creation of off-blockchain transaction logs that are human readable, now including information about the sender and not just the recipient.
The motivation for this extension to [[bip-0070.mediawiki|BIP70]] is threefold:
# Ensure that the payment details can only be seen by the participants in the transaction, and not by any third party.
# Enhance the Payment Protocol to allow for store and forward servers in order to allow, for example, mobile wallets to sign and serve Payment Requests.
# Allow a sender of funds the option of sharing their identity with the receiver. This information could then be used to:
#* Make Bitcoin logs (wallet transaction history) more human readable
#* Give the user the ability to decide whether or not they share their Bitcoin address and other payment details when requested
#* Allow for an open standards based way for businesses to keep verifiable records of their financial transactions, to better meet the needs of accounting practices or other reporting and statutory requirements
#* Automate the active exchange of payment addresses, so static addresses and BIP32 X-Pubs can be avoided to maintain privacy and convenience
In short we wanted to make Bitcoin more human, while at the same time improving transaction privacy.
==Example Use Cases==
1. Address Book
A Bitcoin wallet developer would like to offer the ability to store an "address book" of payees, so users could send multiple payments to known entities without having to request an address every time. Static addresses compromise privacy, and address reuse is considered a security risk. BIP32 X-Pubs allow the generation of unique addresses, but watching an X-Pub chain for each person you wish to receive funds from is too resource-intensive for mobile applications, and there is always a risk of unknowingly sending funds to an X-Pub address after the owner has lost access to the corresponding private key.
With this BIP, Bitcoin wallets could maintain an "address book" that only needs to store each payee's public key. Adding an entry to one's address book could be done by using a Wallet Name, scanning a QR code, sending a URI through a text message or e-mail, or searching a public repository. When the user wishes to make a payment, their wallet would do all the work in the background to communicate with the payee's wallet to receive a unique payment address. If the payee's wallet has been lost, replaced, or destroyed, no communication will be possible, and the sending of funds to a "dead" address is prevented.
2. Individual Permissioned Address Release
A Bitcoin wallet developer would like to allow users to view a potential sending party's identifying information before deciding whether or not to share payment information with them. Currently, [[bip-0070.mediawiki|BIP70]] shares the receivers payment address and identity information with anyone who requests it.
With this BIP, Bitcoin wallets could use the senders identifying information to make a determination of whether or not to share their own information. This gives the receiving party more control over who receives their payment and identity information. Additionally, this could be used to automatically provide new payment addresses to whitelisted senders, or to protect users privacy from unsolicited payment requests.
3. Using Store & Forward Servers
A Bitcoin wallet developer would like to use a public Store & Forward service for an asynchronous address exchange. This is a common case for mobile and offline wallets.
With this BIP, returned payment information is encrypted with an ECDH-computed shared key before sending to a Store & Forward service. In this case, a successful attack against a Store & Forward service would not be able to read or modify wallet address or payment information, only delete encrypted messages.
==Modifying BIP70 pki_type==
This BIP adds additional possible values for the pki_type variable in the PaymentRequest message. The complete list is now as follows:
{| class="wikitable"
! pki_type !! Description
|-
| x509+sha256 || A x.509 certificate, as described in BIP70
|-
| pgp+sha256 || An [[https://en.wikipedia.org/wiki/Pretty_Good_Privacy#OpenPGP|OpenPGP]] certificate
|-
| ecdsa+sha256 || A [[https://en.bitcoin.it/wiki/Secp256k1|secp256k1]] [[https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm|ECDSA]] public key
|}
'''NOTE''': Although SHA1 was supported in BIP70, it has been deprecated and BIP75 only supports SHA256. The hashing algorithm is still specified in the values listed above for forward and backwards compatibility.
==New Messages==
Updated [/bip-0075/paymentrequest.proto paymentrequest.proto] contains the existing PaymentRequest Protocol Buffer messages as well as the messages newly defined in this BIP.
'''NOTE''': Public keys from both parties must be known to each other in order to facilitate encrypted communication. Although including both public keys in every message may get redundant, it provides the most flexibility as each message is completely self-contained.
===InvoiceRequest===
The '''InvoiceRequest''' message allows a Sender to send information to the Receiver such that the Receiver can create and return a PaymentRequest.
<pre>
message InvoiceRequest {
required bytes sender_public_key = 1;
optional uint64 amount = 2 [default = 0];
optional string pki_type = 3 [default = "none"];
optional bytes pki_data = 4;
optional string memo = 5;
optional string notification_url = 6;
optional bytes signature = 7;
}
</pre>
{| class="wikitable"
! Field Name !! Description
|-
| sender_public_key || Sender's SEC-encoded EC public key
|-
| amount || amount is integer-number-of-satoshis (default: 0)
|-
| pki_type || none / x509+sha256 / pgp+sha256 / ecdsa+sha256 (default: "none")
|-
| pki_data || Depends on pki_type
|-
| memo || Human-readable description of invoice request for the receiver
|-
| notification_url || Secure (usually TLS-protected HTTP) location where an [[#encryptedprotocolmessage|EncryptedProtocolMessage]] SHOULD be sent when ready
|-
| signature || PKI-dependent signature
|}
===ProtocolMessageType Enum===
This enum is used in the newly defined [[#protocolmessage|ProtocolMessage]] and [[#encryptedprotocolmessage|EncryptedProtocolMessage]] messages to define the serialized message type. The '''ProtocolMessageType''' enum is defined in an extensible way to allow for new message type additions to the Payment Protocol.
<pre>
enum ProtocolMessageType {
UNKNOWN_MESSAGE_TYPE = 0;
INVOICE_REQUEST = 1;
PAYMENT_REQUEST = 2;
PAYMENT = 3;
PAYMENT_ACK = 4;
}
</pre>
===ProtocolMessage===
The '''ProtocolMessage''' message is an encapsulating wrapper for any Payment Protocol message. It allows two-way, non-encrypted communication of Payment Protocol messages. The message also includes a status code and a status message that is used for error communication such that the protocol does not rely on transport-layer error handling.
<pre>
message ProtocolMessage {
required uint64 version = 1
required uint64 status_code = 2;
required ProtocolMessageType message_type = 3;
required bytes serialized_message = 4;
optional string status_message = 5;
required bytes identifier = 6;
}
</pre>
{| class="wikitable"
! Field Name !! Description
|-
|version || Protocol version number (Currently 1)
|-
|status_code || Payment Protocol Status Code
|-
|message_type || Message Type of serialized_message
|-
|serialized_message || Serialized Payment Protocol Message
|-
|status_message || Human-readable Payment Protocol status message
|-
|identifier || Unique key to identify this entire exchange on the server. Default value SHOULD be SHA256(Serialized Initial InvoiceRequest + Current Epoch Time in Seconds as a String)
|}
===Versioning===
This BIP introduces version 1 of this protocol. All messages sent using these base requirements MUST use a value of 1 for the version number. Any future BIPs that modify this protocol (encryption schemes, etc) MUST each increment the version number by 1.
When initiating communication, the version field of the first message SHOULD be set to the highest version number the sender understands. All clients MUST be able to understand all version numbers less than the highest number they support. If a client receives a message with a version number higher than they understand, they MUST send the message back to the sender with a status code of 101 ("version too high") and the version field set to the highest version number the recipient understands. The sender must then resend the original message using the same version number returned by the recipient or abort.
===EncryptedProtocolMessage===
The '''EncryptedProtocolMessage''' message is an encapsulating wrapper for any Payment Protocol message. It allows two-way, authenticated and encrypted communication of Payment Protocol messages in order to keep their contents secret. The message also includes a status code and status message that is used for error communication such that the protocol does not rely on transport-layer error handling.
<pre>
message EncryptedProtocolMessage {
required uint64 version = 1 [default = 1];
required uint64 status_code = 2 [default = 1];
required ProtocolMessageType message_type = 3;
required bytes encrypted_message = 4;
required bytes receiver_public_key = 5;
required bytes sender_public_key = 6;
required uint64 nonce = 7;
required bytes identifier = 8;
optional string status_message = 9;
optional bytes signature = 10;
}
</pre>
{| class="wikitable"
! Field Name !! Description
|-
| version || Protocol version number
|-
| status_code || Payment Protocol Status Code
|-
| message_type || Message Type of Decrypted encrypted_message
|-
| encrypted_message || AES-256-GCM Encrypted (as defined in BIP75) Payment Protocol Message
|-
| receiver_public_key || Receiver's SEC-encoded EC Public Key
|-
| sender_public_key || Sender's SEC-encoded EC Public Key
|-
| nonce || Microseconds since epoch
|-
| identifier || Unique key to identify this entire exchange on the server. Default value SHOULD be SHA256(Serialized Initial InvoiceRequest + Current Epoch Time in Seconds as a String)
|-
| status_message || Human-readable Payment Protocol status message
|-
| signature || DER-encoded Signature over the full EncryptedProtocolMessage with EC Key Belonging to Sender / Receiver, respectively
|}
==Payment Protocol Process with InvoiceRequests==
The full process overview for using '''InvoiceRequests''' in the Payment Protocol is defined below.
<br/><br/>
All Payment Protocol messages MUST be encapsulated in either a [[#protocolmessage|ProtocolMessage]] or [[#encryptedprotocolmessage|EncryptedProtocolMessage]]. Once the process begins using [[#encryptedprotocolmessage|EncryptedProtocolMessage]] messages, all subsequent communications MUST use [[#encryptedprotocolmessage|EncryptedProtocolMessages]].
<br/><br/>
All Payment Protocol messages SHOULD be communicated using [[#encryptedprotocolmessage|EncryptedProtocolMessage]] encapsulating messages with the exception that an [[#invoicerequest|InvoiceRequest]] MAY be communicated using the [[#protocolmessage|ProtocolMessage]] if the receiver's public key is unknown.
<br/><br/>
The process of creating encrypted Payment Protocol messages is enumerated in [[#sending-encrypted-payment-protocol-messages-using-encryptedprotocolmessages|Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages]], and the process of decrypting encrypted messages can be found under [[#validating-and-decrypting-payment-protocol-messages-using-encryptedprotocolmessages|Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages]].
A standard exchange from start to finish would look like the following:
# Sender creates InvoiceRequest
# Sender encapsulates InvoiceRequest in (Encrypted)ProtocolMessage
# Sender sends (Encrypted)ProtocolMessage to Receiver
# Receiver retrieves InvoiceRequest in (Encrypted)ProtocolMessage from Sender
# Receiver creates PaymentRequest
# Receiver encapsulates PaymentRequest in EncryptedProtocolMessage
# Receiver transmits EncryptedProtocolMessage to Sender
# Sender validates PaymentRequest retrieved from the EncryptedProtocolMessage
# The PaymentRequest is processed according to [[bip-0070.mediawiki|BIP70]], including optional Payment and PaymentACK messages encapsulated in EncryptedProtocolMessage messages.
'''NOTE:''' See [[#initial-public-key-retrieval-for-invoicerequest-encryption|Initial Public Key Retrieval for InvoiceRequest Encryption]] for possible options to retrieve Receiver's public key.
<img src="bip-0075/encrypted-invoice-request-process.png" alt="Flow diagram of Encrypted InvoiceRequest">
==Message Interaction Details==
===HTTP Content Types for New Message Types===
When communicated via '''HTTP''', the listed messages MUST be transmitted via TLS-protected HTTP using the appropriate Content-Type header as defined here per message:
<br/>
{| class="wikitable"
! Message Type !! Content Type
|-
| ProtocolMessage || application/bitcoin-paymentprotocol-message
|-
| EncryptedProtocolMessage || application/bitcoin-encrypted-paymentprotocol-message
|}
===Payment Protocol Status Communication===
Every [[#protocolmessage|ProtocolMessage]] or [[#encryptedprotocolmessage|EncryptedProtocolMessage]] MUST include a status code which conveys information about the last message received, if any (for the first message sent, use a status of 1 "OK" even though there was no previous message). In the case of an error that causes the Payment Protocol process to be stopped or requires that message be retried, a ProtocolMessage or EncryptedProtocolMessage SHOULD be returned by the party generating the error. The content of the message MUST contain the same '''serialized_message''' or '''encrypted_message''' and identifier (if present) and MUST have the status_code set appropriately.
<br/><br/>
The status_message value SHOULD be set with a human readable explanation of the status code.
====Payment Protocol Status Codes====
{| class="wikitable"
! Status Code !! Description
|-
| 1 || OK
|-
| 2 || Cancel
|-
| 100 || General / Unknown Error
|-
| 101 || Version Too High
|-
| 102 || Authentication Failed
|-
| 103 || Encrypted Message Required
|-
| 200 || Amount Too High
|-
| 201 || Amount Too Low
|-
| 202 || Amount Invalid
|-
| 203 || Payment Does Not Meet PaymentRequest Requirements
|-
| 300 || Certificate Required
|-
| 301 || Certificate Expired
|-
| 302 || Certificate Invalid for Transaction
|-
| 303 || Certificate Revoked
|-
| 304 || Certificate Not Well Rooted
|-
|}
+==Canceling A Message==+
If a participant to a transaction would like to inform the other party that a previous message should be canceled, they can send the same message with a status code of 2 ("Cancel") and, where applicable, an updated nonce. How recipients make use of the "Cancel" message is up to developers. For example, wallet developers may want to offer users the ability to cancel payment requests they have sent to other users, and have that change reflected in the recipient's UI. Developers using the non-encrypted ProtocolMessage may want to ignore "Cancel" messages, as it may be difficult to authenticate that the message originated from the same user.
===Transport Layer Communication Errors===
Communication errors MUST be communicated to the party that initiated the communication via the communication layer's existing error messaging facilities. In the case of TLS-protected HTTP, this SHOULD be done through standard HTTP Status Code messaging ([https://tools.ietf.org/html/rfc7231 RFC 7231 Section 6]).
==Extended Payment Protocol Process Details==
This BIP extends the Payment Protocol as defined in [[bip-0070.mediawiki|BIP70]].
For the following we assume the Sender already knows the Receiver's public key, and the exchange is being facilitated by a Store & Forward server which requires valid signatures for authentication.
'''nonce''' MUST be set to a non-repeating number '''and''' MUST be chosen by the encryptor. The current epoch time in microseconds SHOULD be used, unless the creating device doesn't have access to a RTC (in the case of a smart card, for example). The service receiving the message containing the '''nonce''' MAY use whatever method to make sure that the '''nonce''' is never repeated.
===InvoiceRequest Message Creation===
* Create an [[#invoicerequest|InvoiceRequest]] message
* '''sender_public_key''' MUST be set to the public key of an EC keypair
* '''amount''' is optional. If the amount is not specified by the [[#invoicerequest|InvoiceRequest]], the Receiver MAY specify the amount in the returned PaymentRequest. If an amount is specified by the [[#invoicerequest|InvoiceRequest]] and a PaymentRequest cannot be generated for that amount, the [[#invoicerequest|InvoiceRequest]] SHOULD return the same [[#invoicerequest|InvoiceRequest]] in a [[#protocolmessage|ProtocolMessage]] or [[#encryptedprotocolmessage|EncryptedProtocolMessage]] with the status_code and status_message fields set appropriately.
* '''memo''' is optional. This MAY be set to a human readable description of the InvoiceRequest
* Set '''notification_url''' to URL that the Receiver will submit completed PaymentRequest (encapsulated in an [[#encryptedprotocolmessage|EncryptedProtocolMessage]]) to
* If NOT including certificate, set '''pki_type''' to "none"
* If including certificate:
** Set '''pki_type''' to "x509+sha256"
** Set '''pki_data''' as it would be set in BIP-0070 ([https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki#Certificates Certificates])
** Sign [[#invoicerequest|InvoiceRequest]] with signature = "" using the X509 Certificate's private key
** Set '''signature''' value to the computed signature
===InvoiceRequest Validation===
* Validate '''sender_public_key''' is a valid EC public key
* Validate '''notification_url''', if set, contains characters deemed valid for a URL (avoiding XSS related characters, etc).
* If '''pki_type''' is None, [[#invoicerequest|InvoiceRequest]] is VALID
* If '''pki_type''' is x509+sha256 and '''signature''' is valid for the serialized [[#invoicerequest|InvoiceRequest]] where signature is set to "", [[#invoicerequest|InvoiceRequest]] is VALID
===Sending Encrypted Payment Protocol Messages using EncryptedProtocolMessages===
* Encrypt the serialized Payment Protocol message using AES-256-GCM setup as described in [[#ecdh-point-generation-and-aes256-gcm-mode-setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]]
* Create [[#encryptedprotocolmessage|EncryptedProtocolMessage]] message
* Set '''encrypted_message''' to be the encrypted value of the Payment Protocol message
* '''version''' SHOULD be set to the highest version number the client understands (currently 1)
* '''sender_public_key''' MUST be set to the public key of the Sender's EC keypair
* '''receiver_public_key''' MUST be set to the public key of the Receiver's EC keypair
* '''nonce''' MUST be set to the nonce used in the AES-256-GCM encryption operation
* Set '''identifier''' to the identifier value received in the originating InvoiceRequest's ProtocolMessage or EncryptedProtocolMessage wrapper message
* Set '''signature''' to ""
* Sign the serialized [[#encryptedprotocolmessage|EncryptedProtocolMessage]] message with the communicating party's EC public key
* Set '''signature''' to the result of the signature operation above
'''SIGNATURE NOTE:''' [[#encryptedprotocolmessage|EncryptedProtocolMessage]] messages are signed with the public keys of the party transmitting the message. This allows a Store & Forward server or other transmission system to prevent spam or other abuses. For those who are privacy conscious and don't want the server to track the interactions between two public keys, the Sender can generate a new public key for each interaction to keep their identity anonymous.
===Validating and Decrypting Payment Protocol Messages using EncryptedProtocolMessages===
* The '''nonce''' MUST not be repeated. The service receiving the [[#encryptedprotocolmessage|EncryptedProtocolMessage]] MAY use whatever method to make sure that the nonce is never repeated.
* Decrypt the serialized Payment Protocol message using AES-256-GCM setup as described in [[#ecdh-point-generation-and-aes256-gcm-mode-setup|ECDH Point Generation and AES-256 (GCM Mode) Setup]]
* Deserialize the serialized Payment Protocol message
===ECDH Point Generation and AES-256 (GCM Mode) Setup===
'''NOTE''': AES-256-GCM is used because it provides authenticated encryption facilities, thus negating the need for a separate message hash for authentication.
* Generate the '''secret point''' using [https://en.wikipedia.org/wiki/Elliptic_curve_DiffieHellman ECDH] using the local entity's private key and the remote entity's public key as inputs
* Initialize [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG]
** Use '''SHA512(secret point's X value in Big-Endian bytes)''' for Entropy
** Use the given message's '''nonce''' field for Nonce, converted to byte string (Big Endian)
* Initialize AES-256 in GCM Mode
** Initialize HMAC_DRBG with Security Strength of 256 bits
** Use HMAC_DRBG.GENERATE(32) as the Encryption Key (256 bits)
** Use HMAC_DRBG.GENERATE(12) as the Initialization Vector (IV) (96 bits)
====AES-256 GCM Authentication Tag Use====
The 16 byte authentication tag resulting from the AES-GCM encrypt operation MUST be prefixed to the returned ciphertext. The decrypt operation will use the first 16 bytes of the ciphertext as the GCM authentication tag and the remainder of the ciphertext as the ciphertext in the decrypt operation.
====AES-256 GCM Additional Authenticated Data====
When either '''status_code''' OR '''status_message''' are present, the AES-256 GCM authenticated data used in both the encrypt and decrypt operations MUST be: STRING(status_code) || status_message. Otherwise, there is no additional authenticated data. This provides that, while not encrypted, the status_code and status_message are authenticated.
===Initial Public Key Retrieval for InvoiceRequest Encryption===
Initial public key retrieval for [[#invoicerequest|InvoiceRequest]] encryption via [[#encryptedprotocolmessage|EncryptedProtocolMessage]] encapsulation can be done in a number of ways including, but not limited to, the following:
# Wallet Name public key asset type resolution - DNSSEC-validated name resolution returns Base64 encoded DER-formatted EC public key via TXT Record [https://www.ietf.org/rfc/rfc5480.txt RFC 5480]
# Key Server lookup - Key Server lookup (similar to PGP's pgp.mit.edu) based on key server identifier (i.e., e-mail address) returns Base64 encoded DER-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480]
# QR Code - Use of QR-code to encode SEC-formatted EC public key [https://www.ietf.org/rfc/rfc5480.txt RFC 5480]
# Address Service Public Key Exposure
==Payment / PaymentACK Messages with a HTTP Store & Forward Server==
If a Store & Forward server wishes to protect themselves from spam or abuse, they MAY enact whatever rules they deem fit, such as the following:
* Once an InvoiceRequest or PaymentRequest is received, all subsequent messages using the same identifier must use the same Sender and Receiver public keys.
* For each unique identifier, only one message each of type InvoiceRequest, PaymentRequest, and PaymentACK may be submitted. Payment messages may be submitted/overwritten multiple times. All messages submitted after a PaymentACK is received will be rejected.
* Specific messages are only saved until they have been verifiably received by the intended recipient or a certain amount of time has passed, whichever comes first.
<br/><br/>
Clients SHOULD keep in mind Receivers can broadcast a transaction without returning an ACK. If a Payment message needs to be updated, it SHOULD include at least one input referenced in the original transaction to prevent the Receiver from broadcasting both transactions and getting paid twice.
==Public Key & Signature Encoding==
* All x.509 certificates included in any message defined in this BIP MUST be DER [ITU.X690.1994] encoded.
* All EC public keys ('''sender_public_key''', '''receiver_public_key''') in any message defined in this BIP MUST be [[SECP256k1|http://www.secg.org/sec2-v2.pdf]] ECDSA Public Key ECPoints encoded using [[SEC 2.3.3 Encoding|http://www.secg.org/sec1-v2.pdf]]. Encoding MAY be compressed.
* All ECC signatures included in any message defined in this BIP MUST use the SHA-256 hashing algorithm and MUST be DER [ITU.X690.1994] encoded.
* All OpenPGP certificates must follow [[https://tools.ietf.org/html/rfc4880|RFC4880]], sections 5.5 and 12.1.
==Implementation==
A reference implementation for a Store & Forward server supporting this proposal can be found here:
[https://github.com/netkicorp/addressimo Addressimo]
A reference client implementation can be found in the InvoiceRequest functional testing for Addressimo here:
[https://github.com/netkicorp/addressimo/blob/master/functest/functest_bip75.py BIP75 Client Reference Implementation]
==BIP70 Extension==
The following flowchart is borrowed from [[bip-0070.mediawiki|BIP70]] and expanded upon in order to visually describe how this BIP is an extension to [[bip-0070.mediawiki|BIP70]].
<img src="bip-0075/bip70-extension.png" alt="Flowchart explaining how this BIP extends BIP 70">
==Mobile to Mobile Examples==
===Full Payment Protocol===
The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client with the use of an InvoiceRequest, a Store & Forward server, PaymentRequest, Payment and PaymentACK. In this case, the PaymentRequest, Payment and PaymentACK messages are encrypted using [[#encryptedprotocolmessage|EncryptedProtocolMessage]] '''and''' the Receiver submits the transaction to the Bitcoin network.
<img src="bip-0075/mobile-sf-ir-with-payment.png" alt="Payment Required flow diagram">
===Encrypting Initial InvoiceRequest via EncryptedProtocolMessage===
The following diagram shows a sample flow in which one mobile client is sending value to a second mobile client using an [[#encryptedprotocolmessage|EncryptedProtocolMessage]] to transmit the InvoiceRequest using encryption, Store & Forward server, and PaymentRequest. In this case, all Payment Protocol messages are encrypting using [[#encryptedprotocolmessage|EncryptedProtocolMessage]] '''and''' the Sender submits the transaction to the Bitcoin network.
<img src="bip-0075/mobile-sf-encrypted-ir-without-payment.png" alt="Encrypted InvoiceRequest without payment">
==References==
* [[bip-0070.mediawiki|BIP70 - Payment Protocol]]
* [https://en.wikipedia.org/wiki/Elliptic_curve_DiffieHellman ECDH]
* [http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf HMAC_DRBG]
* [http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf NIST Special Publication 800-38D - Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC]
* [https://tools.ietf.org/html/rfc6979 RFC6979]
* [https://en.bitcoin.it/wiki/Address_reuse Address Reuse]
* [http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf FIPS 180-4 (Secure Hash Standard)]

BIN
bip-0075/bip70-extension.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Some files were not shown because too many files have changed in this diff Show More