Skip to content

Commit 95df420

Browse files
author
Matt David
committed
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.
2 parents cd9d2d3 + 87cdaa7 commit 95df420

13 files changed

+176
-60
lines changed

README.mediawiki

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,12 +271,12 @@ Those proposing changes should consider that ultimately consent may rest with th
271271
| Thomas Kerin, Jean-Pierre Rupp, Ruben de Vries
272272
| Standard
273273
| Draft
274-
|-
274+
|- style="background-color: #cfffcf"
275275
| [[bip-0068.mediawiki|68]]
276276
| Relative lock-time using consensus-enforced sequence numbers
277277
| Mark Friedenbach, BtcDrak, Nicolas Dorier, kinoshitajona
278278
| Standard
279-
| Draft
279+
| Final
280280
|-
281281
| [[bip-0069.mediawiki|69]]
282282
| Lexicographical Indexing of Transaction Inputs and Outputs
@@ -391,18 +391,18 @@ Those proposing changes should consider that ultimately consent may rest with th
391391
| Matt Corallo, Peter Todd
392392
| Standard
393393
| Draft
394-
|-
394+
|- style="background-color: #cfffcf"
395395
| [[bip-0112.mediawiki|112]]
396396
| CHECKSEQUENCEVERIFY
397397
| BtcDrak, Mark Friedenbach, Eric Lombrozo
398398
| Standard
399-
| Draft
400-
|-
399+
| Final
400+
|- style="background-color: #cfffcf"
401401
| [[bip-0113.mediawiki|113]]
402402
| Median time-past as endpoint for lock-time calculations
403403
| Thomas Kerin, Mark Friedenbach
404404
| Standard
405-
| Draft
405+
| Final
406406
|-
407407
| [[bip-0114.mediawiki|114]]
408408
| Merkelized Abstract Syntax Tree
@@ -446,6 +446,12 @@ Those proposing changes should consider that ultimately consent may rest with th
446446
| Standard
447447
| Draft
448448
|-
449+
| [[bip-0126.mediawiki|126]]
450+
| Best Practices for Heterogeneous Input Script Transactions
451+
| Kristov Atlas
452+
| Informational
453+
| Draft
454+
|-
449455
| [[bip-0130.mediawiki|130]]
450456
| sendheaders message
451457
| Suhas Daftuar

bip-0009/assignments.mediawiki

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ State can be defined, active, failed. Dates are in UTC.
1818
| csv
1919
| 0
2020
| 2016-05-01 00:00:00
21-
| 2017-05-01 00:00:00
22-
| defined
21+
| 2017-05-01 00:00:00
22+
| active since #419328
2323
| 2016-03-01 00:00:00
2424
| 2017-05-01 00:00:00
25-
| active since #770111
25+
| active since #770112
2626
| [[/bip-0068.mediawiki|68]], [[/bip-0112.mediawiki|112]], [[/bip-0113.mediawiki|113]]
2727
|-
2828
| segwit
@@ -32,6 +32,6 @@ State can be defined, active, failed. Dates are in UTC.
3232
| -
3333
| 2016-05-01 00:00:00
3434
| 2017-05-01 00:00:00
35-
| defined
35+
| active since #834624
3636
| [[/bip-0141.mediawiki|141]], [[/bip-0143.mediawiki|143]]
3737
|}

bip-0021.mediawiki

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,6 @@ Characters must be URI encoded properly.
122122
=== Bitcoin clients ===
123123
* Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858.
124124
125+
=== Libraries ===
126+
* Javascript - https://github.com/bitcoinjs/bip21
127+
* https://github.com/SandroMachado/BitcoinPaymentURI Java library to process and generate Bitcoin payment URI's.

bip-0032.mediawiki

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ Two Python implementations exist:
257257

258258
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.
259259

260-
A Java implementation is available at https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java
260+
2 Java implementations exist: https://github.com/bitsofproof/supernode/blob/1.1/api/src/main/java/com/bitsofproof/supernode/api/ExtendedKey.java and https://github.com/bushidowallet/bushido-java-core/tree/master/src/main/java/com/bushidowallet/core/bitcoin/bip32
261261

262262
A C++ implementation is available at https://github.com/ciphrex/mSIGNA/blob/master/deps/CoinCore/src/hdkeys.h
263263

bip-0039.mediawiki

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,18 @@ http://github.com/trezor/python-mnemonic
131131

132132
==Other Implementations==
133133

134-
Objective-C - https://github.com/nybex/NYMnemonic
134+
Objective-C:
135+
* https://github.com/nybex/NYMnemonic
135136
136-
Haskell - https://github.com/haskoin/haskoin
137+
Haskell:
138+
* https://github.com/haskoin/haskoin
137139
138-
.NET C# (PCL) - https://github.com/Thashiznets/BIP39.NET
140+
.NET C# (PCL):
141+
* https://github.com/Thashiznets/BIP39.NET
139142
140-
.NET C# (PCL) - https://github.com/NicolasDorier/NBitcoin
143+
.NET C# (PCL):
144+
* https://github.com/NicolasDorier/NBitcoin
141145
142-
JavaScript - https://github.com/bitpay/bitcore-mnemonic, https://github.com/bitcoinjs/bip39
146+
JavaScript:
147+
* https://github.com/bitpay/bitcore-mnemonic
148+
* https://github.com/bitcoinjs/bip39 (used by [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/hd-wallet.js#L121-L146|blockchain.info]])

bip-0050.mediawiki

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ This would be an issue even if the entire network was running version 0.7.2. It
4141
===Immediately===
4242

4343
'''Done''': Release a version 0.8.1, forked directly from 0.8.0, that, for the next two months has the following new rules:
44-
# Reject blocks that would probably could cause more than 10,000 locks to be taken.
44+
# Reject blocks that would probably cause more than 10,000 locks to be taken.
4545
# Limit the maximum block-size created to 500,000 bytes
4646
# Release a patch for older versions that implements the same rules, but also increases the maximum number of locks to 537,000
4747
# 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.

bip-0068.mediawiki

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
Nicolas Dorier <[email protected]>
77
kinoshitajona <[email protected]>
8-
Status: Draft
8+
Status: Final
99
Type: Standards Track
1010
Created: 2015-05-28
1111
</pre>

bip-0112.mediawiki

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Author: BtcDrak <[email protected]>
55
Mark Friedenbach <[email protected]>
66
Eric Lombrozo <[email protected]>
7-
Status: Draft
7+
Status: Final
88
Type: Standards Track
99
Created: 2015-08-10
1010
</pre>

bip-0113.mediawiki

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Title: Median time-past as endpoint for lock-time calculations
44
Author: Thomas Kerin <[email protected]>
55
Mark Friedenbach <[email protected]>
6-
Status: Draft
6+
Status: Final
77
Type: Standards Track
88
Created: 2015-08-10
99
</pre>

bip-0126.mediawiki

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<pre>
2+
BIP: 126
3+
Title: Best Practices for Heterogeneous Input Script Transactions
4+
Author: Kristov Atlas <[email protected]>
5+
Status: Draft
6+
Type: Informational
7+
Created: 2016-02-10
8+
</pre>
9+
10+
==Abstract==
11+
12+
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 to the natural fragmentation of wallet balances over time.
13+
14+
This document 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.
15+
16+
==Copyright==
17+
18+
This BIP is in the public domain.
19+
20+
==Definitions==
21+
22+
* '''Heterogenous input script transaction (HIT)''': A transaction containing multiple inputs where the scripts of the previous transaction outputs being consumed are not identical (e.g. a transaction spending outputs which were sent to more than one Bitcoin address)
23+
* '''Unavoidable heterogenous input script transaction''': A HIT created as a result of a user’s desire to create a new output with a value larger than the value of his wallet's largest existing unspent output
24+
* '''Intentional heterogenous input script transaction''': A HIT created as part of a user protection protocol for reducing uncontrolled disclosure of personally-identifying information (PII)
25+
26+
Throughout this procedure, when input scripts are evaluated for uniqueness, "input script" should be interpreted to mean, "the script of the previous output referenced by an input to a transaction".
27+
28+
==Motivations==
29+
30+
The recommendations in this document are designed to accomplish three goals:
31+
32+
# Maximise the effectiveness of user-protecting protocols: Users may find that protection protocols are counterproductive if such transactions have a distinctive fingerprint which renders them ineffective.
33+
# Minimise the adverse consequences of unavoidable heterogenous input transactions: If unavoidable HITs are indistinguishable from intentional HITs, a user creating an unavoidable HIT benefits from ambiguity with respect to graph analysis.
34+
# Limiting the effect on UTXO set growth: To date, non-standardized intentional HITs tend to increase the network's UTXO set with each transaction; this standard attempts to minimize this effect by standardizing unavoidable and intentional HITs to limit UTXO set growth.
35+
36+
In order to achieve these goals, this specification proposes a set of best practices for heterogenous input script transaction creation. These practices accommodate all applicable requirements of both intentional and unavoidable HITs while maximising the effectiveness of both in terms of preventing uncontrolled disclosure of PII.
37+
38+
In order to achieve this, two forms of HIT are proposed: Standard form and alternate form.
39+
40+
==Standard form heterogenous input script transaction==
41+
42+
===Rules===
43+
44+
A HIT is Standard form if it adheres to all of the following rules:
45+
46+
# The number of unique output scripts must be equal to the number of unique inputs scripts (irrespective of the number of inputs and outputs).
47+
# All output scripts must be unique.
48+
# At least one pair of outputs must be of equal value.
49+
# The largest output in the transaction is a member of a set containing at least two identically-sized outputs.
50+
51+
===Rationale===
52+
53+
The requirement for equal numbers of unique input/output scripts instead of equal number of inputs/outputs accommodates user-protecting UTXO selection behavior. Wallets may contain spendable outputs with identical scripts due to intentional or accidental address reuse, or due to dusting attacks. In order to minimise the adverse consequences of address reuse, any time a UTXO is included in a transaction as an input, all UTXOs with the same spending script should also be included in the transaction.
54+
55+
The requirement that all output scripts are unique prevents address reuse. Restricting the number of outputs to the number of unique input scripts prevents this policy from growing the network’s UTXO set. A standard form HIT transaction will always have a number of inputs greater than or equal to the number of outputs.
56+
57+
The requirement for at least one pair of outputs in an intentional HIT to be of equal value results in optimal behavior, and causes intentional HITs to resemble unavoidable HITs.
58+
59+
==Alternate form heterogenous input script transactions==
60+
61+
The formation of a standard form HIT is not possible in the following cases:
62+
63+
# The HIT is unavoidable, and the user’s wallet contains an insufficient number or size of UTXOs to create a standard form HIT.
64+
# The user wishes to reduce the number of utxos in their wallet, and does not have any sets of utxos with identical scripts.
65+
66+
When one of the following cases exist, a compliant implementation may create an alternate form HIT by constructing a transaction as follows:
67+
68+
===Procedure===
69+
70+
# Find the smallest combination of inputs whose value is at least the value of the desired spend.
71+
## Add these inputs to the transaction.
72+
## Add a spend output to the transaction.
73+
## Add a change output to the transaction containing the difference between the current set of inputs and the desired spend.
74+
# Repeat step 1 to create a second pair of outputs, where one output has the same value as the spend output of the previous step.
75+
# (optional) Repeat step 2 until the desired number of inputs have been consumed and/or the desired number outputs have been created.
76+
# Adjust the change outputs as necessary to pay the desired transaction fee.
77+
78+
Clients which create intentional HITs must have the capability to form alternate form HITs, and must do so for a non-zero fraction of the transactions they create.
79+
80+
===Rules===
81+
82+
An HIT formed via the preceding procedure will adhere to the following conditions:
83+
84+
# The number of unique inputs scripts must exceed the number of output scripts.
85+
# All output scripts must be unique.
86+
# At least one pair of outputs must be of equal value.
87+
## "Standard outputs" refers to the set of outputs with equal value
88+
## "Standard value" refers to the value of the standard outputs
89+
## "Change outputs" refers to all outputs which are not standard outputs
90+
# For a HIT containing n standard outputs, there must exist at least one possible way to organize the inputs and outputs into n sets, where all sets satisfy the following:
91+
## The set contains one or more inputs, exactly one standard output, and exactly one change output
92+
## An input or output that appears in one set must not appear in any other set
93+
## The sum of the inputs in the set minus the value of the change output is equal to the standard value with a tolerance equal to the transaction fee.
94+
## Change outputs with a value of zero (virtual change outputs) are permitted. The are defined for the purpose of testing whether or not a HIT adheres to this specification but are not present in the version of the transaction which is broadcast to the network.
95+
96+
==Non-compliant heterogenous input script transactions==
97+
98+
If a user wishes to create an output that is larger than half the total size of their spendable outputs, or if their inputs are not distributed in a manner in which the alternate form procedure can be completed, then the user can not create a transaction which is compliant with this procedure.

0 commit comments

Comments
 (0)