<p><a href="https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki#deployment" rel="nofollow">BIP-0066</a> compliance requires a Block's <strong>nVersion</strong> to be set to 3 by proposing "to restrict valid signatures to exactly what is mandated by DER, to make the consensus rules not depend on OpenSSL's signature parsing. A change like this is required if implementations would want to remove all of OpenSSL from the consensus code."</p>

CC BY-SA 3.0
2015-07-25T16:34:35.313Z
2015-07-25T16:34:35.313Z
skaht
<p><a href="https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki" rel="nofollow">BIP0034</a> added Version 2 blocks.  It enforces the rule that the transaction version is 1 (this was previously not enforced and there are some weird transaction versions in the block chain).  It also requires the coinbase transaction input script to contain the block height as the first data element.</p>

<p>There has been <a href="https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki" rel="nofollow">discussion</a> about a new Version 3 block and Version 3 transaction which would enforce canonical encoding.  This would be a solution to the transaction malleability problem.  Skipping transaction Version 2 would make the versions the same once more for both blocks and transactions.</p>

<p>You can read the Bitcoin Improvement Proposals <a href="https://github.com/bitcoin/bips" rel="nofollow"><b>here</b></a>.</p>

CC BY-SA 3.0
2014-02-18T14:12:46.530Z
2015-07-25T13:37:13.033Z
2015-07-25T13:37:13.033Z
ScripterRon
<p>If I run command to fetch a block, I see version 2 is returned:</p>

<pre><code>getblock 0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff
</code></pre>

<p><strong>Output</strong></p>

<pre><code>{
"hash" : "0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff",
"confirmations" : 5885,
"size" : 249065,
"height" : 280557,
"version" : 2,
"merkleroot" : "5b4c401a2ad5a82ef26efb1d7ad82a0b6abea18118b50a12b555ea9e8663042b",
"tx" : [    .... snip ...
</code></pre>

<p>and when I run the command to fetch a transaction, I see that version 1 is returned</p>

<pre><code> getrawtransaction 260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1 1
</code></pre>

<p>output </p>

<pre><code>{
"hex" : "01000000027f4e827503d7d52617.. snip ..9763caaf4b6216343fa460b88ac00000000",
"txid" : "260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1",
"version" : 1,
"locktime" : 0,
"vin" : [
</code></pre>

<p><strong>Question</strong></p>

<p>I read somewhere that BIP32 will cause both of them to be <code>version 3</code>.  Can anyone explain: </p>

<ul>
<li><p>Where I can find a concise list of rules of what is expected from each version (it's not on the wiki)</p></li>
<li><p>When that version changed (year and/or block number)</p></li>
<li><p>Are old version banned, or are they still supported?</p></li>
</ul>

<transactions><development><block><bip32-hd-wallets>
What are the differences between the transaction and block versions? (v1, v2, v3, etc..)
makerofthings7
# What are the differences between the transaction and block versions? (v1, v2, v3, etc..)

(Asked by: username_0 on 2014-02-18)

If I run command to fetch a block, I see version 2 is returned:

```
getblock 0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff

```

**Output**

```
{
"hash" : "0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff",
"confirmations" : 5885,
"size" : 249065,
"height" : 280557,
"version" : 2,
"merkleroot" : "5b4c401a2ad5a82ef26efb1d7ad82a0b6abea18118b50a12b555ea9e8663042b",
"tx" : [    .... snip ...

```

and when I run the command to fetch a transaction, I see that version 1 is returned

```
 getrawtransaction 260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1 1

```

output

```
{
"hex" : "01000000027f4e827503d7d52617.. snip ..9763caaf4b6216343fa460b88ac00000000",
"txid" : "260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1",
"version" : 1,
"locktime" : 0,
"vin" : [

```

**Question**

I read somewhere that BIP32 will cause both of them to be `version 3`. Can anyone explain:

* Where I can find a concise list of rules of what is expected from each version (it's not on the wiki)
* When that version changed (year and/or block number)
* Are old version banned, or are they still supported?

**Tags:** transactions, development, block, bip32-hd-wallets


---

## 2 answers

### Answer by username_2 on 2014-02-18. Score: 4 | Accepted answer

[BIP0034](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki) added Version 2 blocks. It enforces the rule that the transaction version is 1 (this was previously not enforced and there are some weird transaction versions in the block chain). It also requires the coinbase transaction input script to contain the block height as the first data element.

There has been [discussion](https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki) about a new Version 3 block and Version 3 transaction which would enforce canonical encoding. This would be a solution to the transaction malleability problem. Skipping transaction Version 2 would make the versions the same once more for both blocks and transactions.

You can read the Bitcoin Improvement Proposals [**here**](https://github.com/bitcoin/bips).


---

### Answer by username_1 on 2015-07-25. Score: 1

[BIP-0066](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki#deployment) compliance requires a Block's **nVersion** to be set to 3 by proposing "to restrict valid signatures to exactly what is mandated by DER, to make the consensus rules not depend on OpenSSL's signature parsing. A change like this is required if implementations would want to remove all of OpenSSL from the consensus code."


---

