diff --git a/src/address.js b/src/address.js index 6f6295d..381515a 100644 --- a/src/address.js +++ b/src/address.js @@ -19,7 +19,7 @@ var Address = function (bytes, version) { } else { this.hash = bytes; - this.version = version || bytes.version || mainnet; + this.version = version || mainnet; } }; diff --git a/src/ecdsa.js b/src/ecdsa.js index 573f25f..c35eac4 100644 --- a/src/ecdsa.js +++ b/src/ecdsa.js @@ -291,11 +291,11 @@ var ECDSA = { */ calcPubkeyRecoveryParam: function (origPubkey, r, s, hash) { - var address = origPubkey.getBitcoinAddress().toString(); + var address = origPubkey.getAddress().toString(); for (var i = 0; i < 4; i++) { var pubkey = ECDSA.recoverPubKey(r, s, hash, i); pubkey.compressed = origPubkey.compressed; - if (pubkey.getBitcoinAddress().toString() == address) { + if (pubkey.getAddress().toString() == address) { return i; } } diff --git a/src/eckey.js b/src/eckey.js index 72321e3..c5a715b 100644 --- a/src/eckey.js +++ b/src/eckey.js @@ -7,25 +7,22 @@ var Address = require('./address'); var ecdsa = require('./ecdsa'); var ECPointFp = require('./jsbn/ec').ECPointFp; var Network = require('./network') -var mainnet = Network.mainnet.addressVersion -var testnet = Network.testnet.addressVersion var ecparams = sec("secp256k1"); // input can be nothing, array of bytes, hex string, or base58 string -var ECKey = function (input,compressed,version) { - if (!(this instanceof ECKey)) { return new ECKey(input,compressed,version); } +var ECKey = function (input,compressed) { + if (!(this instanceof ECKey)) { return new ECKey(input,compressed); } if (!input) { // Generate new key var n = ecparams.getN(); this.priv = ecdsa.getBigRandom(n); this.compressed = compressed || false; - this.version = version || mainnet; } - else this.import(input,compressed,version) + else this.import(input,compressed) }; -ECKey.prototype.import = function (input,compressed,version) { +ECKey.prototype.import = function (input,compressed) { function has(li,v) { return li.indexOf(v) >= 0 } function fromBin(x) { return BigInteger.fromByteArrayUnsigned(x) } this.priv = @@ -55,26 +52,11 @@ ECKey.prototype.import = function (input,compressed,version) { : input.length == 64 ? false : input.length == 65 ? true : null - - this.version = - version !== undefined ? version - : input instanceof ECKey ? input.version - : input instanceof BigInteger ? mainnet - : Array.isArray(input) ? mainnet - : typeof input != "string" ? null - : input.length == 44 ? mainnet - : input.length == 51 && input[0] == '5' ? mainnet - : input.length == 51 && input[0] == '9' ? testnet - : input.length == 52 && has('LK',input[0]) ? mainnet - : input.length == 52 && input[0] == 'c' ? testnet - : input.length == 64 ? mainnet - : input.length == 65 ? mainnet - : null }; ECKey.prototype.getPub = function(compressed) { if (compressed === undefined) compressed = this.compressed - return ECPubKey(ecparams.getG().multiply(this.priv),compressed,this.version) + return ECPubKey(ecparams.getG().multiply(this.priv),compressed) } /** @@ -83,17 +65,22 @@ ECKey.prototype.getPub = function(compressed) { ECKey.prototype['export'] = function(format) { format || (format = 'hex') return this['to' + format.substr(0, 1).toUpperCase() + format.substr(1)]() -}; +} ECKey.prototype.toBin = function() { return convert.bytesToString(this.toBytes()) } -ECKey.prototype.toBase58 = function() { - return base58.checkEncode(this.toBytes(), ECKey.version_bytes[this.version]) +ECKey.version_bytes = { + 0: 128, + 111: 239 } -ECKey.prototype.toWif = ECKey.prototype.toBase58 +ECKey.prototype.toWif = function(version) { + var version = version || Network.mainnet.addressVersion; + + return base58.checkEncode(this.toBytes(), ECKey.version_bytes[version]) +} ECKey.prototype.toHex = function() { return convert.bytesToHex(this.toBytes()) @@ -109,10 +96,10 @@ ECKey.prototype.toBase64 = function() { return convert.bytesToBase64(this.toBytes()) } -ECKey.prototype.toString = ECKey.prototype.toBase58 +ECKey.prototype.toString = ECKey.prototype.toWif -ECKey.prototype.getBitcoinAddress = function() { - return this.getPub().getBitcoinAddress(this.version) +ECKey.prototype.getAddress = function(version) { + return this.getPub().getAddress(version) } ECKey.prototype.add = function(key) { @@ -123,24 +110,18 @@ ECKey.prototype.multiply = function(key) { return ECKey(this.priv.multiply(ECKey(key).priv),this.compressed) } -ECKey.version_bytes = { - 0: 128, - 111: 239 -} - -var ECPubKey = function(input,compressed,version) { - if (!(this instanceof ECPubKey)) { return new ECPubKey(input,compressed,version); } +var ECPubKey = function(input,compressed) { + if (!(this instanceof ECPubKey)) { return new ECPubKey(input,compressed); } if (!input) { // Generate new key var n = ecparams.getN(); this.pub = ecparams.getG().multiply(ecdsa.getBigRandom(n)) this.compressed = compressed || false; - this.version = version || mainnet; } - else this.import(input,compressed,version) + else this.import(input,compressed) } -ECPubKey.prototype.import = function(input,compressed,version) { +ECPubKey.prototype.import = function(input,compressed) { var decode = function(x) { return ECPointFp.decodeFrom(ecparams.getCurve(), x) } this.pub = input instanceof ECPointFp ? input @@ -155,20 +136,14 @@ ECPubKey.prototype.import = function(input,compressed,version) { : input instanceof ECPointFp ? input.compressed : input instanceof ECPubKey ? input.compressed : (this.pub[0] < 4) - - this.version = - version ? version - : input instanceof ECPointFp ? input.version - : input instanceof ECPubKey ? input.version - : mainnet } ECPubKey.prototype.add = function(key) { - return ECPubKey(this.pub.add(ECPubKey(key).pub),this.compressed,this.version) + return ECPubKey(this.pub.add(ECPubKey(key).pub),this.compressed) } ECPubKey.prototype.multiply = function(key) { - return ECPubKey(this.pub.multiply(ECKey(key).priv),this.compressed,this.version) + return ECPubKey(this.pub.multiply(ECKey(key).priv),this.compressed) } ECPubKey.prototype['export'] = function(format) { @@ -189,18 +164,18 @@ ECPubKey.prototype.toBin = function() { return convert.bytesToString(this.toBytes()) } -ECPubKey.prototype.toBase58 = function() { - return base58.checkEncode(this.toBytes(), this.version) +ECPubKey.prototype.toWif = function(version) { + var version = version || Network.mainnet.addressVersion; + + return base58.checkEncode(this.toBytes(), version) } -ECPubKey.prototype.toWif = ECPubKey.prototype.toBase58 +ECPubKey.prototype.toString = ECPubKey.prototype.toWif -ECPubKey.prototype.toString = function() { - return this.getBitcoinAddress().toString() -} +ECPubKey.prototype.getAddress = function(version) { + var version = version || Network.mainnet.addressVersion; -ECPubKey.prototype.getBitcoinAddress = function() { - return new Address(util.sha256ripe160(this.toBytes()), this.version); + return new Address(util.sha256ripe160(this.toBytes()), version); } ECKey.prototype.sign = function (hash) { @@ -214,6 +189,7 @@ ECKey.prototype.verify = function (hash, sig) { /** * Parse an exported private key contained in a string. */ - - -module.exports = { ECKey: ECKey, ECPubKey: ECPubKey }; +module.exports = { + ECKey: ECKey, + ECPubKey: ECPubKey +}; diff --git a/src/hdwallet.js b/src/hdwallet.js index 43207a1..8a7dfac 100644 --- a/src/hdwallet.js +++ b/src/hdwallet.js @@ -21,7 +21,7 @@ var HDWallet = module.exports = function(seed, network) { throw new Error("Unknown network: " + this.network) } - this.priv = new ECKey(I.slice(0, 32).concat([1]), true, this.getKeyVersion()) + this.priv = new ECKey(I.slice(0, 32).concat([1]), true) this.pub = this.priv.getPub() this.index = 0 this.depth = 0 @@ -109,10 +109,10 @@ HDWallet.fromBytes = function(input) { // 33 bytes: the public key or private key data (0x02 + X or 0x03 + X for // public keys, 0x00 + k for private keys) if (type == 'priv') { - hd.priv = new ECKey(input.slice(46, 78).concat([1]), true, hd.getKeyVersion()) + hd.priv = new ECKey(input.slice(46, 78).concat([1]), true) hd.pub = hd.priv.getPub() } else { - hd.pub = new ECPubKey(input.slice(45, 78), true, hd.getKeyVersion()) + hd.pub = new ECPubKey(input.slice(45, 78), true) } return hd @@ -126,7 +126,7 @@ HDWallet.prototype.getFingerprint = function() { return this.getIdentifier().slice(0, 4) } -HDWallet.prototype.getBitcoinAddress = function() { +HDWallet.prototype.getAddress = function() { return new Address(util.sha256ripe160(this.pub.toBytes()), this.getKeyVersion()) } @@ -221,7 +221,7 @@ HDWallet.prototype.derive = function(i) { hd.pub = hd.priv.getPub() } else { // Ki = (IL + kpar)*G = IL*G + Kpar - hd.pub = this.pub.add(new ECKey(IL.concat([1]), true, this.getKeyVersion()).getPub()) + hd.pub = this.pub.add(new ECKey(IL.concat([1]), true).getPub()) } // ci = IR. diff --git a/src/message.js b/src/message.js index 84dd83c..e412b5a 100644 --- a/src/message.js +++ b/src/message.js @@ -60,7 +60,7 @@ Message.verifyMessage = function (address, sig, message) { var pubKey = ecdsa.recoverPubKey(sig.r, sig.s, hash, sig.i); pubKey.compressed = isCompressed; - var expectedAddress = pubKey.getBitcoinAddress().toString(); + var expectedAddress = pubKey.getAddress().toString(); return (address === expectedAddress); }; diff --git a/src/transaction.js b/src/transaction.js index 004b988..6a4978c 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -310,7 +310,7 @@ Transaction.prototype.signWithKeys = function(keys, outputs, type) { key = new ECKey(key); return { key: key, - address: key.getBitcoinAddress().toString() + address: key.getAddress().toString() } }); var hmap = {}; diff --git a/src/wallet.js b/src/wallet.js index cf1be8c..da3aa79 100644 --- a/src/wallet.js +++ b/src/wallet.js @@ -50,13 +50,13 @@ var Wallet = function (seed, options) { this.generateAddress = function() { var key = externalAccount.derive(this.addresses.length) - this.addresses.push(key.getBitcoinAddress().toString()) + this.addresses.push(key.getAddress().toString()) return this.addresses[this.addresses.length - 1] } this.generateChangeAddress = function() { var key = internalAccount.derive(this.changeAddresses.length) - this.changeAddresses.push(key.getBitcoinAddress().toString()) + this.changeAddresses.push(key.getAddress().toString()) return this.changeAddresses[this.changeAddresses.length - 1] } diff --git a/test/hdwallet.js b/test/hdwallet.js index f637535..db9ac6b 100644 --- a/test/hdwallet.js +++ b/test/hdwallet.js @@ -76,7 +76,7 @@ describe('HDWallet', function() { // m assert.equal(b2h(hd.getIdentifier()), '3442193e1bb70916e914552172cd4e2dbc9df811') assert.equal(b2h(hd.getFingerprint()), '3442193e') - assert.equal(hd.getBitcoinAddress().toString(), '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma') + assert.equal(hd.getAddress().toString(), '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma') assert.equal(hd.priv.toHex(), 'e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b3501') assert.equal(hd.priv.toWif(), 'L52XzL2cMkHxqxBXRyEpnPQZGUs3uKiL3R11XbAdHigRzDozKZeW') assert.equal(hd.pub.toHex(), '0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2') @@ -90,7 +90,7 @@ describe('HDWallet', function() { hd = hd.derivePrivate(0) assert.equal(b2h(hd.getIdentifier()), '5c1bd648ed23aa5fd50ba52b2457c11e9e80a6a7') assert.equal(b2h(hd.getFingerprint()), '5c1bd648') - assert.equal(hd.getBitcoinAddress().toString(), '19Q2WoS5hSS6T8GjhK8KZLMgmWaq4neXrh') + assert.equal(hd.getAddress().toString(), '19Q2WoS5hSS6T8GjhK8KZLMgmWaq4neXrh') assert.equal(hd.priv.toHex().slice(0, 64), 'edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea') assert.equal(hd.priv.toWif(), 'L5BmPijJjrKbiUfG4zbiFKNqkvuJ8usooJmzuD7Z8dkRoTThYnAT') assert.equal(hd.pub.toHex(), '035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56') @@ -104,7 +104,7 @@ describe('HDWallet', function() { hd = hd.derive(1) assert.equal(b2h(hd.getIdentifier()), 'bef5a2f9a56a94aab12459f72ad9cf8cf19c7bbe') assert.equal(b2h(hd.getFingerprint()), 'bef5a2f9') - assert.equal(hd.getBitcoinAddress().toString(), '1JQheacLPdM5ySCkrZkV66G2ApAXe1mqLj') + assert.equal(hd.getAddress().toString(), '1JQheacLPdM5ySCkrZkV66G2ApAXe1mqLj') assert.equal(hd.priv.toHex().slice(0, 64), '3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368') assert.equal(hd.priv.toWif(), 'KyFAjQ5rgrKvhXvNMtFB5PCSKUYD1yyPEe3xr3T34TZSUHycXtMM') assert.equal(hd.pub.toHex(), '03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c') @@ -118,7 +118,7 @@ describe('HDWallet', function() { hd = hd.derivePrivate(2) assert.equal(b2h(hd.getIdentifier()), 'ee7ab90cde56a8c0e2bb086ac49748b8db9dce72') assert.equal(b2h(hd.getFingerprint()), 'ee7ab90c') - assert.equal(hd.getBitcoinAddress().toString(), '1NjxqbA9aZWnh17q1UW3rB4EPu79wDXj7x') + assert.equal(hd.getAddress().toString(), '1NjxqbA9aZWnh17q1UW3rB4EPu79wDXj7x') assert.equal(hd.priv.toHex().slice(0, 64), 'cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca') assert.equal(hd.priv.toWif(), 'L43t3od1Gh7Lj55Bzjj1xDAgJDcL7YFo2nEcNaMGiyRZS1CidBVU') assert.equal(hd.pub.toHex(), '0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2') @@ -132,7 +132,7 @@ describe('HDWallet', function() { hd = hd.derive(2) assert.equal(b2h(hd.getIdentifier()), 'd880d7d893848509a62d8fb74e32148dac68412f') assert.equal(b2h(hd.getFingerprint()), 'd880d7d8') - assert.equal(hd.getBitcoinAddress().toString(), '1LjmJcdPnDHhNTUgrWyhLGnRDKxQjoxAgt') + assert.equal(hd.getAddress().toString(), '1LjmJcdPnDHhNTUgrWyhLGnRDKxQjoxAgt') assert.equal(hd.priv.toHex().slice(0, 64), '0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4') assert.equal(hd.priv.toWif(), 'KwjQsVuMjbCP2Zmr3VaFaStav7NvevwjvvkqrWd5Qmh1XVnCteBR') assert.equal(hd.pub.toHex(), '02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29') @@ -146,7 +146,7 @@ describe('HDWallet', function() { hd = hd.derive(1000000000) assert.equal(b2h(hd.getIdentifier()), 'd69aa102255fed74378278c7812701ea641fdf32') assert.equal(b2h(hd.getFingerprint()), 'd69aa102') - assert.equal(hd.getBitcoinAddress().toString(), '1LZiqrop2HGR4qrH1ULZPyBpU6AUP49Uam') + assert.equal(hd.getAddress().toString(), '1LZiqrop2HGR4qrH1ULZPyBpU6AUP49Uam') assert.equal(hd.priv.toHex().slice(0, 64), '471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8') assert.equal(hd.priv.toWif(), 'Kybw8izYevo5xMh1TK7aUr7jHFCxXS1zv8p3oqFz3o2zFbhRXHYs') assert.equal(hd.pub.toHex(), '022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011') @@ -163,7 +163,7 @@ describe('HDWallet', function() { // m assert.equal(b2h(hd.getIdentifier()), 'bd16bee53961a47d6ad888e29545434a89bdfe95') assert.equal(b2h(hd.getFingerprint()), 'bd16bee5') - assert.equal(hd.getBitcoinAddress().toString(), '1JEoxevbLLG8cVqeoGKQiAwoWbNYSUyYjg') + assert.equal(hd.getAddress().toString(), '1JEoxevbLLG8cVqeoGKQiAwoWbNYSUyYjg') assert.equal(hd.priv.toHex().slice(0, 64), '4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e') assert.equal(hd.priv.toWif(), 'KyjXhyHF9wTphBkfpxjL8hkDXDUSbE3tKANT94kXSyh6vn6nKaoy') assert.equal(hd.pub.toHex(), '03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7') @@ -177,7 +177,7 @@ describe('HDWallet', function() { hd = hd.derive(0) assert.equal(b2h(hd.getIdentifier()), '5a61ff8eb7aaca3010db97ebda76121610b78096') assert.equal(b2h(hd.getFingerprint()), '5a61ff8e') - assert.equal(hd.getBitcoinAddress().toString(), '19EuDJdgfRkwCmRzbzVBHZWQG9QNWhftbZ') + assert.equal(hd.getAddress().toString(), '19EuDJdgfRkwCmRzbzVBHZWQG9QNWhftbZ') assert.equal(hd.priv.toHex().slice(0, 64), 'abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e') assert.equal(hd.priv.toWif(), 'L2ysLrR6KMSAtx7uPqmYpoTeiRzydXBattRXjXz5GDFPrdfPzKbj') assert.equal(hd.pub.toHex(), '02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea') @@ -191,7 +191,7 @@ describe('HDWallet', function() { hd = hd.derivePrivate(2147483647) assert.equal(b2h(hd.getIdentifier()), 'd8ab493736da02f11ed682f88339e720fb0379d1') assert.equal(b2h(hd.getFingerprint()), 'd8ab4937') - assert.equal(hd.getBitcoinAddress().toString(), '1Lke9bXGhn5VPrBuXgN12uGUphrttUErmk') + assert.equal(hd.getAddress().toString(), '1Lke9bXGhn5VPrBuXgN12uGUphrttUErmk') assert.equal(hd.priv.toHex().slice(0, 64), '877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93') assert.equal(hd.priv.toWif(), 'L1m5VpbXmMp57P3knskwhoMTLdhAAaXiHvnGLMribbfwzVRpz2Sr') assert.equal(hd.pub.toHex(), '03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b') @@ -205,7 +205,7 @@ describe('HDWallet', function() { hd = hd.derive(1) assert.equal(b2h(hd.getIdentifier()), '78412e3a2296a40de124307b6485bd19833e2e34') assert.equal(b2h(hd.getFingerprint()), '78412e3a') - assert.equal(hd.getBitcoinAddress().toString(), '1BxrAr2pHpeBheusmd6fHDP2tSLAUa3qsW') + assert.equal(hd.getAddress().toString(), '1BxrAr2pHpeBheusmd6fHDP2tSLAUa3qsW') assert.equal(hd.priv.toHex().slice(0, 64), '704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7') assert.equal(hd.priv.toWif(), 'KzyzXnznxSv249b4KuNkBwowaN3akiNeEHy5FWoPCJpStZbEKXN2') assert.equal(hd.pub.toHex(), '03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9') @@ -219,7 +219,7 @@ describe('HDWallet', function() { hd = hd.derivePrivate(2147483646) assert.equal(b2h(hd.getIdentifier()), '31a507b815593dfc51ffc7245ae7e5aee304246e') assert.equal(b2h(hd.getFingerprint()), '31a507b8') - assert.equal(hd.getBitcoinAddress().toString(), '15XVotxCAV7sRx1PSCkQNsGw3W9jT9A94R') + assert.equal(hd.getAddress().toString(), '15XVotxCAV7sRx1PSCkQNsGw3W9jT9A94R') assert.equal(hd.priv.toHex().slice(0, 64), 'f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d') assert.equal(hd.priv.toWif(), 'L5KhaMvPYRW1ZoFmRjUtxxPypQ94m6BcDrPhqArhggdaTbbAFJEF') assert.equal(hd.pub.toHex(), '02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0') @@ -233,7 +233,7 @@ describe('HDWallet', function() { hd = hd.derive(2) assert.equal(b2h(hd.getIdentifier()), '26132fdbe7bf89cbc64cf8dafa3f9f88b8666220') assert.equal(b2h(hd.getFingerprint()), '26132fdb') - assert.equal(hd.getBitcoinAddress().toString(), '14UKfRV9ZPUp6ZC9PLhqbRtxdihW9em3xt') + assert.equal(hd.getAddress().toString(), '14UKfRV9ZPUp6ZC9PLhqbRtxdihW9em3xt') assert.equal(hd.priv.toHex().slice(0, 64), 'bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23') assert.equal(hd.priv.toWif(), 'L3WAYNAZPxx1fr7KCz7GN9nD5qMBnNiqEJNJMU1z9MMaannAt4aK') assert.equal(hd.pub.toHex(), '024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c') diff --git a/test/message.js b/test/message.js index fd00fa9..d48e839 100644 --- a/test/message.js +++ b/test/message.js @@ -12,7 +12,7 @@ describe('Message', function() { describe('verify', function() { it('passes case 1', function() { var key = new ECKey(hexToBytes(priv)); - assert.equal(key.getBitcoinAddress().toString(), addr); + assert.equal(key.getAddress().toString(), addr); var sig = Message.signMessage(key, msg); assert.ok(Message.verifyMessage(addr, sig, msg)); @@ -35,7 +35,7 @@ describe('Message', function() { var key = new ECKey(hexToBytes(priv)); key.compressed = true - var addr = key.getBitcoinAddress().toString() + var addr = key.getAddress().toString() var sig = Message.signMessage(key, msg); assert.ok(Message.verifyMessage(addr, sig, msg));