address work.
This commit is contained in:
parent
203294029c
commit
755d0a2c64
@ -155,11 +155,13 @@ Address.prototype.inspect = function inspect() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Address.prototype.fromBase58 = function fromBase58(data) {
|
Address.prototype.fromBase58 = function fromBase58(data) {
|
||||||
var i, prefix, type, version, hash, network, p;
|
var i, p, prefix, network, type, version, hash;
|
||||||
|
|
||||||
if (typeof data === 'string')
|
if (typeof data === 'string')
|
||||||
data = utils.fromBase58(data);
|
data = utils.fromBase58(data);
|
||||||
|
|
||||||
|
assert(Buffer.isBuffer(data));
|
||||||
|
|
||||||
p = new BufferReader(data, true);
|
p = new BufferReader(data, true);
|
||||||
prefix = p.readU8();
|
prefix = p.readU8();
|
||||||
|
|
||||||
@ -173,34 +175,17 @@ Address.prototype.fromBase58 = function fromBase58(data) {
|
|||||||
assert(type != null, 'Unknown address prefix.');
|
assert(type != null, 'Unknown address prefix.');
|
||||||
|
|
||||||
if (data.length > 25) {
|
if (data.length > 25) {
|
||||||
assert(network.address.witness[type], 'Non-witness address too long.');
|
|
||||||
version = p.readU8();
|
version = p.readU8();
|
||||||
assert(version >= 0 && version <= 16, 'Bad program version.');
|
|
||||||
assert(p.readU8() === 0, 'Address version padding is non-zero.');
|
assert(p.readU8() === 0, 'Address version padding is non-zero.');
|
||||||
} else {
|
} else {
|
||||||
assert(data.length === 25, 'Address too short.');
|
|
||||||
version = -1;
|
version = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
hash = p.readBytes(p.left() - 4);
|
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();
|
p.verifyChecksum();
|
||||||
|
|
||||||
this.network = network.type;
|
return this.fromHash(hash, type, version, network.type);
|
||||||
this.type = type;
|
|
||||||
this.hash = hash;
|
|
||||||
this.version = version;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -366,17 +351,14 @@ Address.fromScript = function fromScript(script) {
|
|||||||
* @param {Buffer|Hash} hash
|
* @param {Buffer|Hash} hash
|
||||||
* @param {AddressType} type
|
* @param {AddressType} type
|
||||||
* @param {Number} [version=-1]
|
* @param {Number} [version=-1]
|
||||||
|
* @param {(Network|NetworkType)?} network
|
||||||
* @throws on bad hash size
|
* @throws on bad hash size
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Address.prototype.fromHash = function fromHash(hash, type, version, network) {
|
Address.prototype.fromHash = function fromHash(hash, type, version, network) {
|
||||||
var prefix;
|
|
||||||
|
|
||||||
if (typeof hash === 'string')
|
if (typeof hash === 'string')
|
||||||
hash = new Buffer(hash, 'hex');
|
hash = new Buffer(hash, 'hex');
|
||||||
|
|
||||||
assert(Buffer.isBuffer(hash));
|
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
type = 'pubkeyhash';
|
type = 'pubkeyhash';
|
||||||
|
|
||||||
@ -384,18 +366,25 @@ Address.prototype.fromHash = function fromHash(hash, type, version, network) {
|
|||||||
version = -1;
|
version = -1;
|
||||||
|
|
||||||
network = bcoin.network.get(network);
|
network = bcoin.network.get(network);
|
||||||
prefix = network.address.prefixes[type];
|
|
||||||
|
|
||||||
assert(prefix != null, 'Not a valid address prefix.');
|
assert(Buffer.isBuffer(hash));
|
||||||
|
assert(typeof type === 'string');
|
||||||
|
assert(utils.isNumber(version));
|
||||||
|
assert(network.address.prefixes[type] != null, 'Not a valid address prefix.');
|
||||||
|
|
||||||
if (version === -1)
|
if (version === -1) {
|
||||||
|
assert(!network.address.witness[type], 'Wrong version (witness)');
|
||||||
assert(hash.length === 20, 'Hash is the wrong size.');
|
assert(hash.length === 20, 'Hash is the wrong size.');
|
||||||
else if (version === 0 && type === 'witnesspubkeyhash')
|
} else {
|
||||||
assert(hash.length === 20, 'Hash is the wrong size.');
|
assert(network.address.witness[type], 'Wrong version (non-witness).');
|
||||||
else if (version === 0 && type === 'witnessscripthash')
|
assert(version >= 0 && version <= 16, 'Bad program version.');
|
||||||
assert(hash.length === 32, 'Hash is the wrong size.');
|
if (version === 0 && type === 'witnesspubkeyhash')
|
||||||
else if (version === 1 && type === 'witnessscripthash')
|
assert(hash.length === 20, 'Hash is the wrong size.');
|
||||||
assert(hash.length === 32, '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.');
|
||||||
|
}
|
||||||
|
|
||||||
this.hash = hash;
|
this.hash = hash;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@ -410,6 +399,7 @@ Address.prototype.fromHash = function fromHash(hash, type, version, network) {
|
|||||||
* @param {Buffer|Hash} hash
|
* @param {Buffer|Hash} hash
|
||||||
* @param {AddressType} type
|
* @param {AddressType} type
|
||||||
* @param {Number} [version=-1]
|
* @param {Number} [version=-1]
|
||||||
|
* @param {(Network|NetworkType)?} network
|
||||||
* @returns {Address}
|
* @returns {Address}
|
||||||
* @throws on bad hash size
|
* @throws on bad hash size
|
||||||
*/
|
*/
|
||||||
@ -423,6 +413,7 @@ Address.fromHash = function fromHash(hash, type, version, network) {
|
|||||||
* @param {Hash|Buffer} hash
|
* @param {Hash|Buffer} hash
|
||||||
* @param {AddressType?} type
|
* @param {AddressType?} type
|
||||||
* @param {Number?} version - Witness program version.
|
* @param {Number?} version - Witness program version.
|
||||||
|
* @param {(Network|NetworkType)?} network
|
||||||
* @throws on bad hash size
|
* @throws on bad hash size
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -444,6 +435,7 @@ Address.prototype.fromData = function fromData(data, type, version, network) {
|
|||||||
* @param {Buffer} data - Data to be hashed.
|
* @param {Buffer} data - Data to be hashed.
|
||||||
* @param {AddressType} type
|
* @param {AddressType} type
|
||||||
* @param {Number} [version=-1]
|
* @param {Number} [version=-1]
|
||||||
|
* @param {(Network|NetworkType)?} network
|
||||||
* @returns {Address}
|
* @returns {Address}
|
||||||
* @throws on bad hash size
|
* @throws on bad hash size
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user