Currently, commands like decodescript that return an assembly representation of the script will show seemingly valid integers for a number of incorrectly pushed int values of sizes 0 to 4. The purpose of this change is to allow ScriptToAsmStr to return a more accurate representation of the assembly.
In addition, ScriptToAsmStr will not fail on what are considered invalid pushes altogether. This change will make ScriptToAsmStr return an '[error]' string, much like other invalid pushes.
I believe this makes more sense when displaying decoded script. As opposed to showing the valid representation of an int for an incorrectly pushed value, the value is returned either as a number if both the push is minimal and the encoding is correct, or as hex if the push is not minimal. Invalid pushes are shown as '[error]' and end the decoding.
Examples:
Here the first two pushes are valid numbers. The rest are shown as hex data.
$ for i in 52 0152 025200 03520000 0452000000 055200000000; do echo "hex script: ${i}"; bitcoin-cli decodescript ${i} | grep asm; done
hex script: 52
"asm": "2",
hex script: 0152
"asm": "82",
hex script: 025200
"asm": "5200",
hex script: 03520000
"asm": "520000",
hex script: 0452000000
"asm": "52000000",
hex script: 055200000000
"asm": "5200000000",
Pushing -1,[1,16] incorrectly, after and before the patch.
$ for i in 81 {01..09} 0A 0B 0C 0D 0E 0F 10; do echo "hex script: 01${i}"; bitcoin-cli decodescript 01${i} | grep asm; done
After: Before:
hex script: 0181 hex script: 0181
"asm": "[error]", "asm": "-1",
hex script: 0101 hex script: 0101
"asm": "[error]", "asm": "1",
hex script: 0102 hex script: 0102
"asm": "[error]", "asm": "2",
hex script: 0103 hex script: 0103
"asm": "[error]", "asm": "3",
hex script: 0104 hex script: 0104
"asm": "[error]", "asm": "4",
hex script: 0105 hex script: 0105
"asm": "[error]", "asm": "5",
hex script: 0106 hex script: 0106
"asm": "[error]", "asm": "6",
hex script: 0107 hex script: 0107
"asm": "[error]", "asm": "7",
hex script: 0108 hex script: 0108
"asm": "[error]", "asm": "8",
hex script: 0109 hex script: 0109
"asm": "[error]", "asm": "9",
hex script: 010A hex script: 010A
"asm": "[error]", "asm": "10",
hex script: 010B hex script: 010B
"asm": "[error]", "asm": "11",
hex script: 010C hex script: 010C
"asm": "[error]", "asm": "12",
hex script: 010D hex script: 010D
"asm": "[error]", "asm": "13",
hex script: 010E hex script: 010E
"asm": "[error]", "asm": "14",
hex script: 010F hex script: 010F
"asm": "[error]", "asm": "15",
hex script: 0110 hex script: 0110
"asm": "[error]", "asm": "16",
Actual example of how '0' and '0x00' are different. Both pushes are currently shown as '0'. After the patch, the first will be shown as '0' and the second as '00', making the distinction more obvious.
$ bitcoin-cli decodescript 00A820E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B85587 | grep asm
"asm": "0 OP_SHA256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 OP_EQUAL",
$ bitcoin-cli signrawtransaction \
0100000001aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00000000252400a820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85587ffffffff0100000000000000001976a914bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb88ac00000000 \
'[{"txid":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","vout":0,"scriptPubKey":"A914D227B69A4FE6FED60B20CFC31AED65027CF3DAC287","redeemScript":"00A820E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B85587","amount":0}]'
...
"complete": true
vs
bitcoin-cli decodescript 0100A8206E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D87 | grep asm
"asm": "0 OP_SHA256 6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d OP_EQUAL",
bitcoin-cli signrawtransaction \
0100000001aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000026250100a8206e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d87ffffffff0100000000000000001976a914bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb88ac00000000 \
'[{"txid":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","vout":0,"scriptPubKey":"A914CF527A41C9908B23B16F854A15F2B4ECB18D8A7187","redeemScript":"0100A8206E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D87","amount":0}]'
...
"complete": true