more address parsing.

This commit is contained in:
Christopher Jeffrey 2016-06-29 05:41:16 -07:00
parent 718ae3c1aa
commit 38a92ebecf
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 30 additions and 36 deletions

View File

@ -173,19 +173,25 @@ Address.prototype.fromBase58 = function fromBase58(data) {
assert(type != null, 'Unknown address prefix.');
if (data.length > 25) {
assert(network.address.witness[type], 'Non-witness address too long.');
version = p.readU8();
assert(data.length === 27 || data.length === 39);
assert(version >= 0 && version <= 16, 'Bad program version.');
assert(p.readU8() === 0, 'Address version padding is non-zero.');
} else {
assert(data.length === 25, 'Address too short.');
version = -1;
assert(data.length === 25);
}
if (data.length === 39)
hash = p.readBytes(32);
else
hash = p.readBytes(20);
hash = p.readBytes(p.left() - 4);
if (version === -1)
assert(hash.length === 20, 'Hash is the wrong size.');
else if (version === 0 && type === 'witnesspubkeyhash')
assert(hash.length === 20, 'Hash is the wrong size.');
else if (version === 0 && type === 'witnessscripthash')
assert(hash.length === 32, 'Hash is the wrong size.');
else if (version === 1 && type === 'witnessscripthash')
assert(hash.length === 32, 'Hash is the wrong size.');
p.verifyChecksum();

View File

@ -283,8 +283,8 @@ Mnemonic.prototype.fromPhrase = function fromPhrase(phrase) {
for (i = 0; i < cbits; i++) {
bit = i % 8;
oct = (i - bit) / 8;
b = (chk[oct] >>> (7 - bit)) & 1;
j = (ent[oct] >>> (7 - bit)) & 1;
b = (ent[oct] >>> (7 - bit)) & 1;
j = (chk[oct] >>> (7 - bit)) & 1;
if (b !== j)
throw new Error('Invalid checksum.');
}

View File

@ -380,13 +380,13 @@ main.address = {
},
/**
* {@link Base58Address} versions.
* {@link Base58Address} witness types.
* @enum {Number}
*/
versions: {
witnesspubkeyhash: 0,
witnessscripthash: 0
witness: {
witnesspubkeyhash: true,
witnessscripthash: true
}
};
@ -398,14 +398,6 @@ main.address = {
main.address.prefixesByVal = utils.revMap(main.address.prefixes);
/**
* {@link Base58Address} versions by value.
* @type {RevMap}
* @default
*/
main.address.versionsByVal = utils.revMap(main.address.versions);
/**
* Default value for whether the mempool
* accepts non-standard transactions.
@ -598,14 +590,13 @@ testnet.address = {
witnesspubkeyhash: 3,
witnessscripthash: 40
},
versions: {
witnesspubkeyhash: 0,
witnessscripthash: 0
witness: {
witnesspubkeyhash: true,
witnessscripthash: true
}
};
testnet.address.prefixesByVal = utils.revMap(testnet.address.prefixes);
testnet.address.versionsByVal = utils.revMap(testnet.address.versions);
testnet.requireStandard = false;
@ -745,14 +736,13 @@ regtest.address = {
witnesspubkeyhash: 3,
witnessscripthash: 40
},
versions: {
witnesspubkeyhash: 0,
witnessscripthash: 0
witness: {
witnesspubkeyhash: true,
witnessscripthash: true
}
};
regtest.address.prefixesByVal = utils.revMap(regtest.address.prefixes);
regtest.address.versionsByVal = utils.revMap(regtest.address.versions);
regtest.requireStandard = false;
@ -876,14 +866,13 @@ segnet3.address = {
witnesspubkeyhash: 3,
witnessscripthash: 40
},
versions: {
witnesspubkeyhash: 0,
witnessscripthash: 0
witness: {
witnesspubkeyhash: true,
witnessscripthash: true
}
};
segnet3.address.prefixesByVal = utils.revMap(segnet3.address.prefixes);
segnet3.address.versionsByVal = utils.revMap(segnet3.address.versions);
segnet3.requireStandard = false;
@ -1022,14 +1011,13 @@ segnet4.address = {
witnesspubkeyhash: 3,
witnessscripthash: 40
},
versions: {
witnesspubkeyhash: 0,
witnessscripthash: 0
witness: {
witnesspubkeyhash: true,
witnessscripthash: true
}
};
segnet4.address.prefixesByVal = utils.revMap(segnet4.address.prefixes);
segnet4.address.versionsByVal = utils.revMap(segnet4.address.versions);
segnet4.requireStandard = false;