fix coinbase parsing.

This commit is contained in:
Christopher Jeffrey 2015-12-23 03:39:47 -08:00
parent 2f6f3e11b1
commit 58d8e3ce53
2 changed files with 21 additions and 5 deletions

View File

@ -1161,6 +1161,10 @@ script.isScripthashInput = function isScripthashInput(s, redeem) {
script.coinbaseBits = function coinbaseBits(s, block) {
var value;
s = s.filter(function(chunk) {
return Array.isArray(chunk) && chunk.length !== 0;
});
if (!Array.isArray(s[0]))
return { type: 'value', value: s[0] };
@ -1198,6 +1202,10 @@ script.coinbaseHeight = function coinbaseHeight(s, block) {
script.coinbase = function coinbase(s, block) {
var coinbase, data, nonce, flags;
s = s.filter(function(chunk) {
return Array.isArray(chunk) && chunk.length !== 0;
});
coinbase = {
script: s,
raw: s._raw || script.encode(s)
@ -1213,7 +1221,7 @@ script.coinbase = function coinbase(s, block) {
coinbase[data.type] = data.value;
coinbase.nonce = nonce;
coinbase.flags = flags;
coinbase.text = utils.array2utf8(flags);
coinbase.text = flags.map(utils.array2utf8);
return coinbase;
};

View File

@ -309,13 +309,21 @@ utils.writeAscii = function writeAscii(dst, str, off) {
return i;
};
utils.readAscii = function readAscii(arr, off, len) {
utils.readAscii = function readAscii(arr, off, len, printable) {
var str = '';
var i = off;
var c;
for (i = off; i < off + len; i++) {
c = String.fromCharCode(arr[i] & 0xff);
if (printable) {
c = arr[i] & 0xff;
if (c === 0x09 || c === 0x0a || c === 0x0d || (c > 0x1f && c < 0x7f))
c = String.fromCharCode(c);
else
c = '';
} else {
c = String.fromCharCode(arr[i] & 0xff);
}
str += c;
}
@ -328,8 +336,8 @@ utils.ascii2array = function ascii2array(str) {
return dst;
};
utils.array2ascii = function array2ascii(arr) {
return utils.readAscii(arr, 0, arr.length);
utils.array2ascii = function array2ascii(arr, printable) {
return utils.readAscii(arr, 0, arr.length, true);
};
utils.array2utf8 = function array2utf8(arr) {