Browse Source

change address version to 28/40 + fix address tests

master
matiu 7 years ago
parent
commit
fffde308c7
  1. 15
      lib/networks.js
  2. 80
      test/address.js
  3. 8
      test/data/bitcoind/base58_keys_invalid.json
  4. 28
      test/data/bitcoind/base58_keys_valid.json

15
lib/networks.js

@ -129,20 +129,19 @@ function removeNetwork(network) {
addNetwork({ addNetwork({
name: 'livenet', name: 'livenet',
alias: 'mainnet', alias: 'mainnet',
pubkeyhash: 0x00, pubkeyhash: 28,
privatekey: 0x80, privatekey: 0x80,
scripthash: 0x05, scripthash: 40,
xpubkey: 0x0488b21e, xpubkey: 0x0488b21e,
xprivkey: 0x0488ade4, xprivkey: 0x0488ade4,
networkMagic: 0xf9beb4d9, networkMagic: 0xf9beb4d9,
port: 8333, port: 8333,
dnsSeeds: [ dnsSeeds: [
'seed.bitcoin.sipa.be', 'seed.bitcoinabc.org',
'dnsseed.bluematt.me', 'seed-abc.bitcoinforks.org',
'dnsseed.bitcoin.dashjr.org', 'seed.bitcoinunlimited.info',
'seed.bitcoinstats.com', 'seed.bitprim.org ',
'seed.bitnodes.io', 'seed.deadalnix.me'
'bitseed.xf2.org'
] ]
}); });

80
test/address.js

@ -18,8 +18,8 @@ var invalidbase58 = require('./data/bitcoind/base58_keys_invalid.json');
describe('Address', function() { describe('Address', function() {
var pubkeyhash = new Buffer('3c3fa3d4adcaf8f52d5b1843975e122548269937', 'hex'); var pubkeyhash = new Buffer('3c3fa3d4adcaf8f52d5b1843975e122548269937', 'hex');
var buf = Buffer.concat([new Buffer([0]), pubkeyhash]); var buf = Buffer.concat([new Buffer([28]), pubkeyhash]);
var str = '16VZnHwRhwrExfeHFHGjwrgEMq8VcYPs9r'; var str = 'CMxTMLHVazpmroYhw2bfXNJFyxLuX4srpv';
it('can\'t build without data', function() { it('can\'t build without data', function() {
(function() { (function() {
@ -68,20 +68,20 @@ describe('Address', function() {
// livenet valid // livenet valid
var PKHLivenet = [ var PKHLivenet = [
'15vkcKf7gB23wLAnZLmbVuMiiVDc1Nm4a2', 'CMPeBN1BZDzaqU5DF66X5QykLcS1voucT9',
'1A6ut1tWnUq1SEQLMr4ttDh24wcbJ5o9TT', 'CRZoT4EafXoYLNJm3bPpTjK3h4q1FSxet4',
'1BpbpfLdY7oBS9gK7aDXgvMgr1DPvNhEB2', 'CTHVPhghRAmiLHajoKYTGRyiU8RomQmAfZ',
'1Jz2yCRd5ST1p2gUqFB5wsSQfdm3jaFfg7', 'CaSvYEmgxVRYiAauWzW1XP4SHkyTiS78yy',
' 1Jz2yCRd5ST1p2gUqFB5wsSQfdm3jaFfg7 \t\n' ' CaSvYEmgxVRYiAauWzW1XP4SHkyTiS78yy \t\n'
]; ];
// livenet p2sh // livenet p2sh
var P2SHLivenet = [ var P2SHLivenet = [
'342ftSRCvFHfCeFFBuz4xwbeqnDw6BGUey', 'H8rnMErHmZWKpp8H3beDwL8BsSEwzDFSjJ',
'33vt8ViH5jsr115AGkW6cEmEz9MpvJSwDk', 'H8kzbJ9Mw46WdAxC8SAFadHn1oNqp6jEsu',
'37Sp6Rv3y4kVd1nQ1JV5pfqXccHNyZm1x3', 'HCGvZEM8pNyAFBfRrz9Eo4N4eGJPuFahd9',
'3QjYXhTkvuj8qPaXHTTWb5wjXhdsLAAWVy', 'HVZezVtqnDwoTZTZ997fZUUGZMetDFUDLf',
'\t \n3QjYXhTkvuj8qPaXHTTWb5wjXhdsLAAWVy \r' '\tHVZezVtqnDwoTZTZ997fZUUGZMetDFUDLf \n \r'
]; ];
// testnet p2sh // testnet p2sh
@ -94,18 +94,18 @@ describe('Address', function() {
//livenet bad checksums //livenet bad checksums
var badChecksums = [ var badChecksums = [
'15vkcKf7gB23wLAnZLmbVuMiiVDc3nq4a2', 'C5vkcKf7gB23wLAnZLmbVuMiiVDc3nq4a2',
'1A6ut1tWnUq1SEQLMr4ttDh24wcbj4w2TT', 'CA6ut1tWnUq1SEQLMr4ttDh24wcbj4w2TT',
'1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2', 'CBpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2',
'1Jz2yCRd5ST1p2gUqFB5wsSQfdmEJaffg7' 'CJz2yCRd5ST1p2gUqFB5wsSQfdmEJaffg7'
]; ];
//livenet non-base58 //livenet non-base58
var nonBase58 = [ var nonBase58 = [
'15vkcKf7g#23wLAnZLmb$uMiiVDc3nq4a2', 'C5vkcKf7g#23wLAnZLmb$uMiiVDc3nq4a2',
'1A601ttWnUq1SEQLMr4ttDh24wcbj4w2TT', 'CA601ttWnUq1SEQLMr4ttDh24wcbj4w2TT',
'1BpbpfLdY7oBS9gK7aIXgvMgr1DpvNH3B2', 'CBpbpfLdY7oBS9gK7aIXgvMgr1DpvNH3B2',
'1Jz2yCRdOST1p2gUqFB5wsSQfdmEJaffg7' 'CJz2yCRdOST1p2gUqFB5wsSQfdmEJaffg7'
]; ];
//testnet valid //testnet valid
@ -119,17 +119,17 @@ describe('Address', function() {
describe('validation', function() { describe('validation', function() {
it('getValidationError detects network mismatchs', function() { it('getValidationError detects network mismatchs', function() {
var error = Address.getValidationError('37BahqRsFrAd3qLiNNwLNV3AWMRD7itxTo', 'testnet'); var error = Address.getValidationError('HC1hAdrx7APHg1DkE4bVLsZhY1SE5Dik1r', 'testnet');
should.exist(error); should.exist(error);
}); });
it('isValid returns true on a valid address', function() { it('isValid returns true on a valid address', function() {
var valid = Address.isValid('37BahqRsFrAd3qLiNNwLNV3AWMRD7itxTo', 'livenet'); var valid = Address.isValid('HC1hAdrx7APHg1DkE4bVLsZhY1SE5Dik1r', 'livenet');
valid.should.equal(true); valid.should.equal(true);
}); });
it('isValid returns false on network mismatch', function() { it('isValid returns false on network mismatch', function() {
var valid = Address.isValid('37BahqRsFrAd3qLiNNwLNV3AWMRD7itxTo', 'testnet'); var valid = Address.isValid('HC1hAdrx7APHg1DkE4bVLsZhY1SE5Dik1r', 'testnet');
valid.should.equal(false); valid.should.equal(false);
}); });
@ -214,10 +214,10 @@ describe('Address', function() {
}); });
it('addresses with whitespace are validated correctly', function() { it('addresses with whitespace are validated correctly', function() {
var ws = ' \r \t \n 1A6ut1tWnUq1SEQLMr4ttDh24wcbJ5o9TT \t \n \r'; var ws = ' \r \t \n CRZoT4EafXoYLNJm3bPpTjK3h4q1FSxet4 \t \n \r';
var error = Address.getValidationError(ws); var error = Address.getValidationError(ws);
should.not.exist(error); should.not.exist(error);
Address.fromString(ws).toString().should.equal('1A6ut1tWnUq1SEQLMr4ttDh24wcbJ5o9TT'); Address.fromString(ws).toString().should.equal('CRZoT4EafXoYLNJm3bPpTjK3h4q1FSxet4');
}); });
}); });
@ -332,7 +332,7 @@ describe('Address', function() {
it('should make this address from a compressed pubkey', function() { it('should make this address from a compressed pubkey', function() {
var pubkey = new PublicKey('0285e9737a74c30a873f74df05124f2aa6f53042c2fc0a130d6cbd7d16b944b004'); var pubkey = new PublicKey('0285e9737a74c30a873f74df05124f2aa6f53042c2fc0a130d6cbd7d16b944b004');
var address = Address.fromPublicKey(pubkey, 'livenet'); var address = Address.fromPublicKey(pubkey, 'livenet');
address.toString().should.equal('19gH5uhqY6DKrtkU66PsZPUZdzTd11Y7ke'); address.toString().should.equal('CR9Aex3uR9Brm2etmqio8u6bG7g2uF5ewo');
}); });
it('should use the default network for pubkey', function() { it('should use the default network for pubkey', function() {
@ -345,24 +345,24 @@ describe('Address', function() {
var pubkey = new PublicKey('0485e9737a74c30a873f74df05124f2aa6f53042c2fc0a130d6cbd7d16b944b00' + var pubkey = new PublicKey('0485e9737a74c30a873f74df05124f2aa6f53042c2fc0a130d6cbd7d16b944b00' +
'4833fef26c8be4c4823754869ff4e46755b85d851077771c220e2610496a29d98'); '4833fef26c8be4c4823754869ff4e46755b85d851077771c220e2610496a29d98');
var a = Address.fromPublicKey(pubkey, 'livenet'); var a = Address.fromPublicKey(pubkey, 'livenet');
a.toString().should.equal('16JXnhxjJUhxfyx4y6H4sFcxrgt8kQ8ewX'); a.toString().should.equal('CMmRMkJoBXgVa7rVeqbzSmEzUp6YgVBuaV');
var b = new Address(pubkey, 'livenet', 'pubkeyhash'); var b = new Address(pubkey, 'livenet', 'pubkeyhash');
b.toString().should.equal('16JXnhxjJUhxfyx4y6H4sFcxrgt8kQ8ewX'); b.toString().should.equal('CMmRMkJoBXgVa7rVeqbzSmEzUp6YgVBuaV');
}); });
it('should classify from a custom network', function() { it('should classify from a custom network', function() {
var custom = { var custom = {
name: 'customnetwork', name: 'customnetwork',
pubkeyhash: 0x1c, pubkeyhash: 10,
privatekey: 0x1e, privatekey: 0x1e,
scripthash: 0x28, scripthash: 15,
xpubkey: 0x02e8de8f, xpubkey: 0x02e8de8f,
xprivkey: 0x02e8da54, xprivkey: 0x02e8da54,
networkMagic: 0x0c110907, networkMagic: 0x0c110907,
port: 7333 port: 7333
}; };
var addressString = 'CX4WePxBwq1Y6u7VyMJfmmitE7GiTgC9aE';
Networks.add(custom); Networks.add(custom);
var addressString = '57gZdnwcQHLirKLwDHcFiWLq9jTZwRaxaE';
var network = Networks.get('customnetwork'); var network = Networks.get('customnetwork');
var address = Address.fromString(addressString); var address = Address.fromString(addressString);
address.type.should.equal(Address.PayToPublicKeyHash); address.type.should.equal(Address.PayToPublicKeyHash);
@ -382,26 +382,26 @@ describe('Address', function() {
'0xc8e11b0eb0d2ad5362d894f048908341fa61b6e1 OP_EQUALVERIFY OP_CHECKSIG'); '0xc8e11b0eb0d2ad5362d894f048908341fa61b6e1 OP_EQUALVERIFY OP_CHECKSIG');
var buf = s.toBuffer(); var buf = s.toBuffer();
var a = Address.fromScript(s, 'livenet'); var a = Address.fromScript(s, 'livenet');
a.toString().should.equal('1KK9oz4bFH8c1t6LmighHaoSEGx3P3FEmc'); a.toString().should.equal('Can3P2Qf8L78v1zmTU1cs6RTrQATGLYZY4');
var b = new Address(s, 'livenet'); var b = new Address(s, 'livenet');
b.toString().should.equal('1KK9oz4bFH8c1t6LmighHaoSEGx3P3FEmc'); b.toString().should.equal('Can3P2Qf8L78v1zmTU1cs6RTrQATGLYZY4');
}); });
it('should make this address from a p2sh input script', function() { it('should make this address from a p2sh input script', function() {
var s = Script.fromString('OP_HASH160 20 0xa6ed4af315271e657ee307828f54a4365fa5d20f OP_EQUAL'); var s = Script.fromString('OP_HASH160 20 0xa6ed4af315271e657ee307828f54a4365fa5d20f OP_EQUAL');
var a = Address.fromScript(s, 'livenet'); var a = Address.fromScript(s, 'livenet');
a.toString().should.equal('3GueMn6ruWVfQTN4XKBGEbCbGLwRSUhfnS'); a.toString().should.equal('HMjkpaXwkpiL2dF6NzqRCyj8HzxSEGPGr3');
var b = new Address(s, 'livenet'); var b = new Address(s, 'livenet');
b.toString().should.equal('3GueMn6ruWVfQTN4XKBGEbCbGLwRSUhfnS'); b.toString().should.equal('HMjkpaXwkpiL2dF6NzqRCyj8HzxSEGPGr3');
}); });
it('returns the same address if the script is a pay to public key hash out', function() { it('returns the same address if the script is a pay to public key hash out', function() {
var address = '16JXnhxjJUhxfyx4y6H4sFcxrgt8kQ8ewX'; var address = 'CMmRMkJoBXgVa7rVeqbzSmEzUp6YgVBuaV';
var script = Script.buildPublicKeyHashOut(new Address(address)); var script = Script.buildPublicKeyHashOut(new Address(address));
Address(script, Networks.livenet).toString().should.equal(address); Address(script, Networks.livenet).toString().should.equal(address);
}); });
it('returns the same address if the script is a pay to script hash out', function() { it('returns the same address if the script is a pay to script hash out', function() {
var address = '3BYmEwgV2vANrmfRymr1mFnHXgLjD6gAWm'; var address = 'HGNshk7ZtEP3UwYTqTWAjeJpZLMk3BWkJt';
var script = Script.buildScriptHashOut(new Address(address)); var script = Script.buildScriptHashOut(new Address(address));
Address(script, Networks.livenet).toString().should.equal(address); Address(script, Networks.livenet).toString().should.equal(address);
}); });
@ -487,7 +487,7 @@ describe('Address', function() {
describe('#inspect', function() { describe('#inspect', function() {
it('should output formatted output correctly', function() { it('should output formatted output correctly', function() {
var address = new Address(str); var address = new Address(str);
var output = '<Address: 16VZnHwRhwrExfeHFHGjwrgEMq8VcYPs9r, type: pubkeyhash, network: livenet>'; var output = '<Address: CMxTMLHVazpmroYhw2bfXNJFyxLuX4srpv, type: pubkeyhash, network: livenet>';
address.inspect().should.equal(output); address.inspect().should.equal(output);
}); });
}); });
@ -535,9 +535,9 @@ describe('Address', function() {
it('can create an address from a set of public keys', function() { it('can create an address from a set of public keys', function() {
var address = Address.createMultisig(publics, 2, Networks.livenet); var address = Address.createMultisig(publics, 2, Networks.livenet);
address.toString().should.equal('3FtqPRirhPvrf7mVUSkygyZ5UuoAYrTW3y'); address.toString().should.equal('HLiwrE9wYi9XHHeXL8R8fN5cWZpBUN8Kme');
address = new Address(publics, 2, Networks.livenet); address = new Address(publics, 2, Networks.livenet);
address.toString().should.equal('3FtqPRirhPvrf7mVUSkygyZ5UuoAYrTW3y'); address.toString().should.equal('HLiwrE9wYi9XHHeXL8R8fN5cWZpBUN8Kme');
}); });
it('works on testnet also', function() { it('works on testnet also', function() {

8
test/data/bitcoind/base58_keys_invalid.json

@ -5,6 +5,12 @@
[ [
"x" "x"
], ],
[
"19dcawoKcZdQz365WpXWMhX6QCUpR9SY4r"
],
[
"37Sp6Rv3y4kVd1nQ1JV5pfqXccHNyZm1x3"
],
[ [
"37qgekLpCCHrQuSjvX3fs496FWTGsHFHizjJAs6NPcR47aefnnCWECAhHV6E3g4YN7u7Yuwod5Y" "37qgekLpCCHrQuSjvX3fs496FWTGsHFHizjJAs6NPcR47aefnnCWECAhHV6E3g4YN7u7Yuwod5Y"
], ],
@ -102,7 +108,7 @@
"dB7cwYdcPSgiyAwKWL3JwCVwSk6epU2txw" "dB7cwYdcPSgiyAwKWL3JwCVwSk6epU2txw"
], ],
[ [
"HPhFUhUAh8ZQQisH8QQWafAxtQYju3SFTX" "1PhFUhUAh8ZQQisH8QQWafAxtQYju3SFTX"
], ],
[ [
"4ctAH6AkHzq5ioiM1m9T3E2hiYEev5mTsB" "4ctAH6AkHzq5ioiM1m9T3E2hiYEev5mTsB"

28
test/data/bitcoind/base58_keys_valid.json

@ -1,6 +1,6 @@
[ [
[ [
"1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", "CRjG93RdHa96NpA9X3Mdh4eF1bEhzApax4",
"65a16059864a2fdbc7c99a4723a8395bc6f188eb", "65a16059864a2fdbc7c99a4723a8395bc6f188eb",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -9,7 +9,7 @@
} }
], ],
[ [
"3CMNFxN1oHBc4R1EpboAL5yzHGgE611Xou", "HHBUiko6ebQGgatGgHTKJUWXJvhF19L2GP",
"74f209f6ea907e2ea48f74fae05782ae8a665257", "74f209f6ea907e2ea48f74fae05782ae8a665257",
{ {
"addrType": "script", "addrType": "script",
@ -72,7 +72,7 @@
} }
], ],
[ [
"1Ax4gZtb7gAit2TivwejZHYtNNLT18PUXJ", "CSQxFcEezj9FnAN9cgyf8oAuzVYrv6bJ9P",
"6d23156cbbdcc82a5a47eee4c2c7c583c18b6bf4", "6d23156cbbdcc82a5a47eee4c2c7c583c18b6bf4",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -81,7 +81,7 @@
} }
], ],
[ [
"3QjYXhTkvuj8qPaXHTTWb5wjXhdsLAAWVy", "HVZezVtqnDwoTZTZ997fZUUGZMetDFUDLf",
"fcc5460dd6e2487c7d75b1963625da0e8f4c5975", "fcc5460dd6e2487c7d75b1963625da0e8f4c5975",
{ {
"addrType": "script", "addrType": "script",
@ -144,7 +144,7 @@
} }
], ],
[ [
"1C5bSj1iEGUgSTbziymG7Cn18ENQuT36vv", "CTYV1mMn7KTDLbWRQj6BgiQ2kMaptRX8TP",
"7987ccaa53d02c8873487ef919677cd3db7a6912", "7987ccaa53d02c8873487ef919677cd3db7a6912",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -153,7 +153,7 @@
} }
], ],
[ [
"3AnNxabYGoTxYiTEZwFEnerUoeFXK2Zoks", "HFcVRP2d87gdAtLGRcuPm3P1qJGYEYwN5r",
"63bcc565f9e68ee0189dd5cc67f1b0e5f02f45cb", "63bcc565f9e68ee0189dd5cc67f1b0e5f02f45cb",
{ {
"addrType": "script", "addrType": "script",
@ -216,7 +216,7 @@
} }
], ],
[ [
"1Gqk4Tv79P91Cc1STQtU3s1W6277M2CVWu", "CYJddWGB2S7Y6jus9ADPdNdXi9KXHavv7U",
"adc1cc2081a27206fae25792f28bbc55b831549d", "adc1cc2081a27206fae25792f28bbc55b831549d",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -225,7 +225,7 @@
} }
], ],
[ [
"33vt8ViH5jsr115AGkW6cEmEz9MpvJSwDk", "H8kzbJ9Mw46WdAxC8SAFadHn1oNqp6jEsu",
"188f91a931947eddd7432d6e614387e32b244709", "188f91a931947eddd7432d6e614387e32b244709",
{ {
"addrType": "script", "addrType": "script",
@ -288,7 +288,7 @@
} }
], ],
[ [
"1JwMWBVLtiqtscbaRHai4pqHokhFCbtoB4", "CaQF5DqQmmpRmkW172udeLTKRsufArS4wS",
"c4c1b72491ede1eedaca00618407ee0b772cad0d", "c4c1b72491ede1eedaca00618407ee0b772cad0d",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -297,7 +297,7 @@
} }
], ],
[ [
"3QCzvfL4ZRvmJFiWWBVwxfdaNBT8EtxB5y", "HV37PTm9Qk9RvRbYMsA6w4A7PqU98b2bxJ",
"f6fe69bcb548a829cce4c57bf6fff8af3a5981f9", "f6fe69bcb548a829cce4c57bf6fff8af3a5981f9",
{ {
"addrType": "script", "addrType": "script",
@ -360,7 +360,7 @@
} }
], ],
[ [
"19dcawoKcZdQz365WpXWMhX6QCUpR9SY4r", "CR6W9z9PVcbwtAzWCZrRwD982KhEEGCjcq",
"5eadaf9bb7121f0f192561a5a62f5e5f54210292", "5eadaf9bb7121f0f192561a5a62f5e5f54210292",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -369,7 +369,7 @@
} }
], ],
[ [
"37Sp6Rv3y4kVd1nQ1JV5pfqXccHNyZm1x3", "HCGvZEM8pNyAFBfRrz9Eo4N4eGJPuFahd9",
"3f210e7277c899c3a155cc1c90f4106cbddeec6e", "3f210e7277c899c3a155cc1c90f4106cbddeec6e",
{ {
"addrType": "script", "addrType": "script",
@ -432,7 +432,7 @@
} }
], ],
[ [
"13p1ijLwsnrcuyqcTvJXkq2ASdXqcnEBLE", "CKGuHmh1kqq9p7k39fdTLLeC4kkFb672zQ",
"1ed467017f043e91ed4c44b4e8dd674db211c4e6", "1ed467017f043e91ed4c44b4e8dd674db211c4e6",
{ {
"addrType": "pubkey", "addrType": "pubkey",
@ -441,7 +441,7 @@
} }
], ],
[ [
"3ALJH9Y951VCGcVZYAdpA3KchoP9McEj1G", "HFAQjwyDvKhrtnNbPrHy8Rr9jTQAFnYkeY",
"5ece0cadddc415b1980f001785947120acdb36fc", "5ece0cadddc415b1980f001785947120acdb36fc",
{ {
"addrType": "script", "addrType": "script",

Loading…
Cancel
Save