Skip to content

Commit f01ec3f

Browse files
committed
Merge BIP 131: "Coalescing Transaction" Specification (wildcard inputs)
2 parents b882d29 + bcf0ea3 commit f01ec3f

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

README.mediawiki

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,12 @@ Those proposing changes should consider that ultimately consent may rest with th
410410
| Standard
411411
| Draft
412412
|-
413+
| [[bip-0131.mediawiki|131]]
414+
| "Coalescing Transaction" Specification (wildcard inputs)
415+
| Chris Priest
416+
| Standard
417+
| Draft
418+
|-
413419
| [[bip-0140.mediawiki|140]]
414420
| Normalized TXID
415421
| Christian Decker

bip-0131.mediawiki

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<pre>
2+
BIP: 131
3+
Title: "Coalescing Transaction" Specification (wildcard inputs)
4+
Author: Chris Priest <[email protected]>
5+
Status: Draft
6+
Type: Standards Track
7+
Created: 2015-11-30
8+
</pre>
9+
10+
==Abstract==
11+
12+
This specification defines a new type of transaction that supplements (not replaces)
13+
normal "non coalescing" bitcoin transactions.
14+
15+
==Motivation==
16+
17+
Normal "non-coalescing" Bitcoin Transactions have one large inefficiency: When you want to spend
18+
from multiple inputs with the exact same scriptPubKey, you have to list each
19+
input separately, along with the same signature multiple times, even though the signature expresses the same information.
20+
This bloats the transaction size and makes it expensive to spend from small value inputs.
21+
22+
Because small value inputs are expensive to send, they remain in the UTXO pool
23+
which full nodes have to keep around. It is believed that long term increase of the UTXO
24+
set can have negative scaling consequences on the network.
25+
26+
If maximum blocksize is made to increase *slower* than the actual number of transactions bitcoin users are sending
27+
to the network, this problem is projected to get worse. In other words, as transaction
28+
fees increase, the minimum economical value of a spending a UTXO will increase.
29+
30+
==Specification==
31+
32+
=== Redefinition of Transaction version ===
33+
34+
First, this BIP redefines the version field on transactions. The first four bytes
35+
are defined as the version number, while the last four bytes are defined as the
36+
transaction type. Type "0000" denotes normal transactions, and "0001" defines
37+
coalescing transaction.
38+
39+
Examples:
40+
41+
version 1 transaction with normal inputs:
42+
version: 10000000
43+
44+
version 2 transaction with normal inputs:
45+
version: 20000000
46+
47+
version 2 transaction with coalescing inputs:
48+
version: 20000001
49+
50+
Essentially the last bit in the version field is set to 1 to enable wildcard inputs for all
51+
inputs present in the transaction.
52+
53+
=== Wildcard inputs ===
54+
55+
A coalescing transaction is formulated the exact same way as a version 1 transaction
56+
with one exception: each input is treated as a "wildcard input".
57+
58+
A wildcard input beings the value of all inputs with the exact same scriptPubKey
59+
in a block lower or equal to the block the wildcard input is confirmed into.
60+
61+
== Changes needed to implement ==
62+
63+
The bitcoin code needs to be modified in three places in order to handle Coalescing Transactions.
64+
65+
1. <b>Full Node Coalescing validation</b> - When a full node receives a coalescing transaction, it has to
66+
aggregate the value of all the UTXOs in the blockchain older than the input
67+
with the same scriptPubKey. If this value is greater than or equal to the
68+
amount of all outputs, then that coalescing transaction is valid and can be propagated.
69+
70+
2. <b>Full Node Non-Coalescing validation</b> - When a non-coalescing transaction comes in, the code needs to be modified
71+
to check if each input has not been spent by a coalescing transaction. If there exist any
72+
coalescing transaction in the blockchain with the same scriptPubKey found in a block *after* that input,
73+
then the UTXO has been spent and the transaction is invalid.
74+
75+
3. <b>Wallet</b> - The user facing wallet portion of the reference client should notify
76+
the user when their wallet contains many UTXOs that qualify it to benefit from
77+
a coalescing transaction. Wallets should not simply replace non-coalescing transactions
78+
with coalescing transactions in all instances.
79+
80+
==Copyright==
81+
82+
This document is placed in the public domain.

0 commit comments

Comments
 (0)