|
| 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