diff --git a/_autocrossref.yaml b/_autocrossref.yaml
index 3ec9ec2a..bd8eeb31 100644
--- a/_autocrossref.yaml
+++ b/_autocrossref.yaml
@@ -46,6 +46,9 @@ coinbase: coinbase transaction
coinbase transaction:
coinbase transactions: coinbase transaction
coinbase field:
+compactsize uint: compactsize unsigned integer
+compactsize unsigned integer:
+compactsize unsigned integers: compactsize unsigned integer
confirm:
confirmed:
confirmation:
@@ -168,6 +171,9 @@ public keys: public key
public key infrastructure: pki
'`r`': r
raw format:
+raw transaction: raw format
+raw transactions: raw format
+raw transaction format: raw format
rawtransaction format: raw format
receipt:
recurrent rebilling:
@@ -325,3 +331,5 @@ CVE-2012-2459:
'`walletlock`': rpc walletlock
'`walletpassphrase`': rpc walletpassphrase
'`walletpassphrasechange`': rpc walletpassphrasechange
+
+Bitcoin Core 0.9.3:
diff --git a/_includes/guide_transactions.md b/_includes/guide_transactions.md
index d667704b..267fd3bc 100644
--- a/_includes/guide_transactions.md
+++ b/_includes/guide_transactions.md
@@ -575,7 +575,7 @@ maximum. Since sequence numbers are not used by the network for any
other purpose, setting any sequence number to zero is sufficient to
enable locktime.
-Locktime itself is an unsigned 4-byte number which can be parsed two ways:
+Locktime itself is an unsigned 4-byte integer which can be parsed two ways:
* If less than 500 million, locktime is parsed as a block height. The
transaction can be added to any block which has this height or higher.
diff --git a/_includes/ref_core_rpc_intro.md b/_includes/ref_core_rpc_intro.md
index 719336ed..2705f1c9 100644
--- a/_includes/ref_core_rpc_intro.md
+++ b/_includes/ref_core_rpc_intro.md
@@ -45,8 +45,6 @@ other Bitcoin software, this reversal of hashes has become the standard
way to refer to certain objects. The table below should make clear where
each byte order is used.
-
-
|---------------+---------------------|-----------------|
| Data | Internal Byte Order ("Big Endian") | RPC Byte Order ("Little Endian") |
|---------------|---------------------|-----------------|
@@ -63,8 +61,6 @@ each byte order is used.
| P2SH Hashes: RIPEMD160(SHA256(redeem script)) | Used in both addresses and pubkey scripts | **N/A:** RPCs use addresses which use internal byte order |
|---------------|---------------------|-----------------|
-
-
Note: RPCs which return raw results, such as `getrawtransaction` or the
raw mode of `getblock`, always display hashes as they appear in blocks
(internal byte order).
diff --git a/_includes/ref_transactions.md b/_includes/ref_transactions.md
index d90742e4..f64cc2fe 100644
--- a/_includes/ref_transactions.md
+++ b/_includes/ref_transactions.md
@@ -64,7 +64,8 @@ Page][wiki script], with an authoritative list in the `opcodetype` enum
of the Bitcoin Core [script header file][core script.h]

-**Signature script modification warning:** Signature scripts are not signed, so anyone can modify them. This
+**Signature script modification warning:**
+Signature scripts are not signed, so anyone can modify them. This
means signature scripts should only contain data and data-pushing op
codes which can't be modified without causing the pubkey script to fail.
Placing non-data-pushing op codes in the signature script currently
@@ -189,103 +190,206 @@ against the extracted checksum, and then remove the version byte.
{% autocrossref %}
-Bitcoin transactions are broadcast between peers and stored in the
-block chain in a serialized byte format, called [raw format][]{:#term-raw-format}{:.term}. Bitcoin Core
-and many other tools print and accept raw transactions encoded as hex.
+Bitcoin transactions are broadcast between peers
+in a serialized byte format, called [raw format][]{:#term-raw-format}{:.term}.
+It is this form of a transaction which is SHA256(SHA256()) hashed to create
+the TXID and, ultimately, the merkle root of a block containing the
+transaction---making the transaction format part of the consensus rules.
-The binary form of a raw transaction is SHA256(SHA256()) hashed to create
-its TXID. Bitcoin Core RPCs use a reversed byte order for hashes; see the [subsection about hash byte
-order][section hash byte order] for details.
+Bitcoin Core and many other tools print and accept raw transactions
+encoded as hex.
-A sample raw transaction is the first non-coinbase transaction, made in
-[block 170][block170]. To get the transaction, use the `getrawtransaction` RPC with
-that transaction's txid (provided below):
+As of Bitcoin Core 0.9.3 (October 2014), all transactions use the
+version 1 format described below. (Note: transactions in the block chain
+are allowed to list a higher version number to permit soft forks, but
+they are treated as version 1 transactions by current software.)
+
+A raw transaction has the following top-level format:
+
+| Bytes | Name | Data Type | Description
+|----------|--------------|---------------------|-------------
+| 4 | version | uint32_t | Transaction version number; currently version 1. Programs creating transactions using newer consensus rules may use higher version numbers.
+| *Varies* | tx_in count | compactSize uint | Number of inputs in this transaction.
+| *Varies* | tx_in | txIn | Transaction inputs. See description of txIn below.
+| *Varies* | tx_out count | compactSize uint | Number of outputs in this transaction.
+| *Varies* | tx_out | txOut | Transaction outputs. See description of txOut below.
+| 4 | lock_time | uint32_t | A time (Unix epoch time) or block number. See the [locktime parsing rules][].
+
+A transaction may have multiple inputs and outputs, so the txIn and
+txOut structures may recur within a transaction. CompactSize unsigned
+integers are a form of variable-length integers; they are described in
+the [CompactSize section][CompactSize unsigned integer].
{% endautocrossref %}
-~~~
-> bitcoin-cli getrawtransaction \
- f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
+**TxIn: A Transaction Input (Non-Coinbase)**
-0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423e\
-dce25857fcd3704000000004847304402204e45e16932b8af514961a1d3\
-a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07d\
-e4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff\
-0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f71\
-59b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7\
-303b8a0626f1baded5c72a704f7e6cd84cac00286bee000000004341041\
-1db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a690\
-9a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f\
-656b412a3ac00000000
-~~~
+{% autocrossref %}
-A byte-by-byte analysis by Amir Taaki (Genjix) of this transaction is
-provided below. (Originally from the Bitcoin Wiki
-[OP_CHECKSIG page](https://en.bitcoin.it/wiki/OP_CHECKSIG); Genjix's
-text has been updated to use the terms used in this document.)
+Each non-coinbase input spends an outpoint from a previous transaction.
+(Coinbase inputs are described separately after the example section below.)
-~~~
-01 00 00 00 version number
-01 number of inputs (var_uint)
+| Bytes | Name | Data Type | Description
+|----------|------------------|----------------------|--------------
+| 36 | previous_output | outpoint | The previous outpoint being spent. See description of outpoint below.
+| *Varies* | script bytes | compactSize uint | The number of bytes in the signature script. Maximum is 10,000 bytes.
+| *Varies* | signature script | char[] | A script-language script which satisfies the conditions placed in the outpoint's pubkey script. Should only contain data pushes; see the [signature script modification warning][].
+| 4 | sequence | uint32_t | Sequence number; see [sequence number][]. Default for Bitcoin Core and almost all other programs is 0xffffffff.
-input 0:
-c9 97 a5 e5 6e 10 41 02 previous tx hash (txid)
-fa 20 9c 6a 85 2d d9 06
-60 a2 0b 2d 9c 35 24 23
-ed ce 25 85 7f cd 37 04
-00 00 00 00 previous output index
+{% endautocrossref %}
-48 size of signature script (var_uint)
+**Outpoint: The Specific Part Of A Specific Output**
-Signature script for input 0:
-47 push 71 bytes to stack
-30 44 02 20 4e 45 e1 69
-32 b8 af 51 49 61 a1 d3
-a1 a2 5f df 3f 4f 77 32
-e9 d6 24 c6 c6 15 48 ab
-5f b8 cd 41 02 20 18 15
-22 ec 8e ca 07 de 48 60
-a4 ac dd 12 90 9d 83 1c
-c5 6c bb ac 46 22 08 22
-21 a8 76 8d 1d 09 01
-ff ff ff ff sequence number
+{% autocrossref %}
-02 number of outputs (var_uint)
+Because a single transaction can include multiple outputs, the outpoint
+structure includes both a TXID and an output index number to refer to
+specific output.
-output 0:
-00 ca 9a 3b 00 00 00 00 amount = 10.00000000 BTC
-43 size of pubkey script (var_uint)
+| Bytes | Name | Data Type | Description
+|-------|-------|-----------|--------------
+| 32 | hash | char[32] | The TXID of the transaction holding the output to spend. The TXID is a hash provided here in internal byte order.
+| 4 | index | uint32_t | The output index number of the specific output to spend from the transaction. The first output is 0x00000000.
-Pubkey script for output 0:
-41 push 65 bytes to stack
-04 ae 1a 62 fe 09 c5 f5
-1b 13 90 5f 07 f0 6b 99
-a2 f7 15 9b 22 25 f3 74
-cd 37 8d 71 30 2f a2 84
-14 e7 aa b3 73 97 f5 54
-a7 df 5f 14 2c 21 c1 b7
-30 3b 8a 06 26 f1 ba de
-d5 c7 2a 70 4f 7e 6c d8
-4c
-ac OP_CHECKSIG
+{% endautocrossref %}
-output 1:
-00 28 6b ee 00 00 00 00 amount = 40.00000000 BTC
-43 size of pubkey script (var_uint)
+**TxOut: A Transaction Output**
-Pubkey script for output 1:
-41 push 65 bytes to stack
-04 11 db 93 e1 dc db 8a
-01 6b 49 84 0f 8c 53 bc
-1e b6 8a 38 2e 97 b1 48
-2e ca d7 b1 48 a6 90 9a
-5c b2 e0 ea dd fb 84 cc
-f9 74 44 64 f8 2e 16 0b
-fa 9b 8b 64 f9 d4 c0 3f
-99 9b 86 43 f6 56 b4 12
-a3
-ac OP_CHECKSIG
+{% autocrossref %}
-00 00 00 00 locktime
-~~~
+Each output spends a certain number of satoshis, placing them under
+control of anyone who can satisfy the provided pubkey script.
+| Bytes | Name | Data Type | Description
+|----------|-----------------|------------------|--------------
+| 8 | value | int64_t | Number of satoshis to spend. May be zero; the sum of all outputs may not exceed the sum of satoshis previously spent to the outpoints provided in the input section. (Exception: coinbase transactions spend the block subsidy and collected transaction fees.)
+| 1+ | pk_script bytes | compactSize uint | Number of bytes in the pubkey script. Maximum is 10,000 bytes.
+| *Varies* | pk_script | char[] | Defines the conditions which must be satisfied to spend this output.
+
+**Example**
+
+The sample raw transaction itemized below is the one created in the
+[Simple Raw Transaction section][section simple raw transaction] of the
+Developer Examples. It spends a previous pay-to-pubkey output by paying
+to a new pay-to-pubkey-hash (P2PKH) output.
+
+{% highlight text %}
+01000000 ................................... Version
+
+01 ......................................... Number of inputs
+|
+| 7b1eabe0209b1fe794124575ef807057
+| c77ada2138ae4fa8d6c4de0398a14f3f ......... Outpoint TXID
+| 00000000 ................................. Outpoint index number
+|
+| 49 ....................................... Bytes in sig. script: 73
+| | 48 ..................................... Push 72 bytes as data
+| | | 30450221008949f0cb400094ad2b5eb3
+| | | 99d59d01c14d73d8fe6e96df1a7150de
+| | | b388ab8935022079656090d7f6bac4c9
+| | | a94e0aad311a4268e082a725f8aeae05
+| | | 73fb12ff866a5f01 ..................... Secp256k1 signature
+|
+| ffffffff ................................. Sequence number: UINT32_MAX
+
+01 ......................................... Number of outputs
+| f0ca052a01000000 ......................... Satoshis (49.99990000 BTC)
+|
+| 19 ....................................... Bytes in pubkey script: 25
+| | 76 ..................................... OP_DUP
+| | a9 ..................................... OP_HASH160
+| | 14 ..................................... Push 20 bytes as data
+| | | cbc20a7664f2f69e5355aa427045bc15
+| | | e7c6c772 ............................. PubKey hash
+| | 88 ..................................... OP_EQUALVERIFY
+| | ac ..................................... OP_CHECKSIG
+
+00000000 ................................... locktime: 0 (a block height)
+{% endhighlight %}
+
+
+**Coinbase Input: The Input Of The First Transaction In A Block**
+
+The first transaction in a block, called the coinbase transaction, must
+have exactly one input, called a coinbase. The coinbase input currently
+has the following format.
+
+| Bytes | Name | Data Type | Description
+|----------|--------------------|----------------------|--------------
+| 32 | hash (null) | char[32] | A 32-byte null, as a coinbase has no previous outpoint.
+| 4 | index (UINT32_MAX) | uint32_t | 0xffffffff, as a coinbase has no previous outpoint.
+| *Varies* | script bytes | compactSize uint | The number of bytes in the coinbase script, up to a maximum of 100 bytes.
+| *Varies* (4) | height | script | The block height of this block as required by BIP34. Uses script language: starts with a data-pushing op code that indicates how many bytes to push to the stack followed by the block height as a little-endian unsigned integer. This script must be as short as possible, otherwise it may be rejected.
The data-pushing op code will be 0x03 and the total size four bytes until block 16,777,216 about 300 years from now.
+| *Varies* | coinbase script | *None* | Arbitrary data not exceeding 100 bytes minus the (4) height bytes. Miners commonly place an extra nonce in this field to update the block header merkle root during hashing.
+| 4 | sequence | uint32_t | Sequence number; see [sequence number][].
+
+Most (but not all) blocks prior to block height 227,836 used block
+version 1 which did not require the height parameter to be prefixed to
+the coinbase script. The block height parameter is now required.
+
+Although the coinbase script is arbitrary data, if it includes the
+bytes used by any signature-checking operations such as `OP_CHECKSIG`,
+those signature checks will be counted as signature operations (sigops)
+towards the block's sigop limit. To avoid this, you can prefix all data
+with the appropriate push operation.
+
+An itemized coinbase transaction:
+
+{% highlight text %}
+01000000 .............................. Version
+
+01 .................................... Number of inputs
+| 00000000000000000000000000000000
+| 00000000000000000000000000000000 ... Previous outpoint TXID
+| ffffffff ............................ Previous outpoint index
+|
+| 29 .................................. Bytes in coinbase
+| |
+| | 03 ................................ Bytes in height
+| | | 4e0105 .......................... Height: 328014
+| |
+| | 062f503253482f0472d35454085fffed
+| | f2400000f90f54696d65202620486561
+| | 6c74682021 ........................ Arbitrary data
+| 00000000 ............................ Sequence
+
+01 .................................... Output count
+| 2c37449500000000 .................... Satoshis (25.04275756 BTC)
+| 1976a914a09be8040cbf399926aeb1f4
+| 70c37d1341f3b46588ac ................ P2PKH script
+| 00000000 ............................ Locktime
+{% endhighlight %}
+
+{% endautocrossref %}
+
+### CompactSize Unsigned Integers
+
+{% autocrossref %}
+
+The raw transaction format and several peer-to-peer network messages use
+a type of variable-length integer to indicate the number of bytes in a
+following piece of data.
+
+Bitcoin Core code and this document refers to these variable length
+integers as compactSize. Many other documents refer to them as var_int
+or varInt, but this risks conflation with other variable-length integer
+encodings---such as the CVarInt class used in Bitcoin Core for
+serializing data to disk. Because it's used in the transaction format,
+the format of compactSize unsigned integers is part of the consensus
+rules.
+
+For numbers from 0 to 252, compactSize unsigned integers look like
+regular unsigned integers. For other numbers up to 0xffffffffffffffff, a
+byte is prefixed to the number to indicate its length---but otherwise
+the numbers look like regular unsigned integers in little-endian order.
+
+| Value | Bytes Used | Format
+|-----------------------|------------|-----------------------------------------
+| <= 252 | 1 | uint8_t
+| <= 0xffff | 3 | 0xfd followed by the number as uint16_t
+| <= 0xffffffff | 5 | 0xfe followed by the number as uint32_t
+| <= 0xffffffffffffffff | 9 | 0xff followed by the number as uint64_t
+
+For example, the number 515 is encoded as 0xfd0302.
+
+{% endautocrossref %}
diff --git a/_includes/references.md b/_includes/references.md
index 917d0ecd..b8c0a6fb 100644
--- a/_includes/references.md
+++ b/_includes/references.md
@@ -26,6 +26,7 @@
[child public key]: /en/developer-guide#term-child-public-key "In HD wallets, a public key derived from a parent public key or a corresponding child private key"
[coinbase field]: /en/developer-reference#term-coinbase-field "A special input-like field for coinbase transactions"
[coinbase transaction]: /en/developer-reference#term-coinbase-tx "A special transaction which miners must create when they generate a block"
+[compactsize unsigned integer]: /en/developer-reference#compactsize-unsigned-integers "A type of variable-length integer"
[confirm]: /en/developer-guide#term-confirmation "A transaction included in a block currently on the block chain"
[confirmed]: /en/developer-guide#term-confirmation "A transaction included in a block currently on the block chain"
[confirmed transactions]: /en/developer-guide#term-confirmation "Transactions included in a block currently on the block chain"
@@ -242,6 +243,7 @@
[rpc walletpassphrasechange]: /en/developer-reference#walletpassphrasechange
+[Bitcoin Core 0.9.3]: /en/release/v0.9.3
[bitcoin URI subsection]: /en/developer-guide#bitcoin-uri
[bitcoinpdf]: https://bitcoin.org/bitcoin.pdf
[core executable]: /en/download
@@ -255,14 +257,17 @@
[devguide payment processing]: /en/developer-guide#payment-processing
[devguide wallets]: /en/developer-guide#wallets
[devref wallets]: /en/developer-reference#wallets
+[locktime parsing rules]: /en/developer-guide#locktime_parsing_rules
[Merge Avoidance subsection]: /en/developer-guide#merge-avoidance
[micropayment channel]: /en/developer-guide#term-micropayment-channel
[raw transaction format]: /en/developer-reference#raw-transaction-format
[RPC]: /en/developer-reference#remote-procedure-calls-rpcs
[RPCs]: /en/developer-reference#remote-procedure-calls-rpcs
-[section hash byte order]: /en/developer-reference#hash-byte-order
-[section verifying payment]: /en/developer-guide#verifying-payment
[section detecting forks]: /en/developer-guide#detecting-forks
+[section hash byte order]: /en/developer-reference#hash-byte-order
+[section simple raw transaction]: /en/developer-examples#simple-raw-transaction
+[section verifying payment]: /en/developer-guide#verifying-payment
+[signature script modification warning]: /en/developer-reference#signature_script_modification_warning
[transaction object format]: /en/developer-reference#term-transaction-object-format
[Verification subsection]: /en/developer-guide#verifying-payment
[X509Certificates]: /en/developer-examples#term-x509certificates
diff --git a/_less/screen.less b/_less/screen.less
index 90eed06b..c24514c4 100644
--- a/_less/screen.less
+++ b/_less/screen.less
@@ -755,6 +755,7 @@ table td,table th{
width:600px;
margin:auto 0 auto auto;
position:relative;
+ text-align: left;
}
.toccontent h2{
font-size:150%;