diff --git a/index.js b/index.js index 447ac87..a6ab75c 100644 --- a/index.js +++ b/index.js @@ -1,19 +1,21 @@ var bitcore = module.exports; -// protocol -bitcore.Constants = require('./lib/protocol/constants'); -bitcore.Base58 = require('./lib/protocol/base58'); -bitcore.Base58Check = require('./lib/protocol/base58check'); -bitcore.BufferReader = require('./lib/protocol/bufferreader'); -bitcore.BufferWriter = require('./lib/protocol/bufferwriter'); -bitcore.Varint = require('./lib/protocol/varint'); // crypto -bitcore.BN = require('./lib/crypto/bn'); -bitcore.ECDSA = require('./lib/crypto/ecdsa'); -bitcore.Hash = require('./lib/crypto/hash'); -bitcore.Random = require('./lib/crypto/random'); -bitcore.Point = require('./lib/crypto/point'); +bitcore.crypto = {}; +bitcore.crypto.BN = require('./lib/crypto/bn'); +bitcore.crypto.ECDSA = require('./lib/crypto/ecdsa'); +bitcore.crypto.Hash = require('./lib/crypto/hash'); +bitcore.crypto.Random = require('./lib/crypto/random'); +bitcore.crypto.Point = require('./lib/crypto/point'); + +// encoding +bitcore.encoding = {}; +bitcore.encoding.Base58 = require('./lib/encoding/base58'); +bitcore.encoding.Base58Check = require('./lib/encoding/base58check'); +bitcore.encoding.BufferReader = require('./lib/encoding/bufferreader'); +bitcore.encoding.BufferWriter = require('./lib/encoding/bufferwriter'); +bitcore.encoding.Varint = require('./lib/encoding/varint'); // main bitcoin library bitcore.Address = require('./lib/address'); @@ -21,6 +23,7 @@ bitcore.BIP32 = require('./lib/bip32'); bitcore.Block = require('./lib/block'); bitcore.Blockheader = require('./lib/blockheader'); bitcore.Keypair = require('./lib/keypair'); +bitcore.Networks = require('./lib/networks'); bitcore.Opcode = require('./lib/opcode'); bitcore.Privkey = require('./lib/privkey'); bitcore.Pubkey = require('./lib/pubkey'); diff --git a/lib/address.js b/lib/address.js index 43369bd..39b993d 100644 --- a/lib/address.js +++ b/lib/address.js @@ -1,7 +1,7 @@ 'use strict'; -var base58check = require('./protocol/base58check'); -var constants = require('./protocol/constants'); +var base58check = require('./encoding/base58check'); +var networks = require('./networks'); var Hash = require('./crypto/hash'); function Address(buf) { @@ -29,16 +29,16 @@ Address.prototype.fromBuffer = function(buf) { if (buf.length !== 1 + 20) throw new Error('Address buffers must be exactly 21 bytes'); var version = buf[0]; - if (version === constants['mainnet']['pubkeyhash']) { + if (version === networks['mainnet']['pubkeyhash']) { this.networkstr = 'mainnet'; this.typestr = 'pubkeyhash'; - } else if (version === constants['mainnet']['scripthash']) { + } else if (version === networks['mainnet']['scripthash']) { this.networkstr = 'mainnet'; this.typestr = 'scripthash'; - } else if (version === constants['testnet']['pubkeyhash']) { + } else if (version === networks['testnet']['pubkeyhash']) { this.networkstr = 'testnet'; this.typestr = 'pubkeyhash'; - } else if (version === constants['testnet']['scripthash']) { + } else if (version === networks['testnet']['scripthash']) { this.networkstr = 'testnet'; this.typestr = 'scripthash'; } else { @@ -98,7 +98,7 @@ Address.prototype.isValid = function() { }; Address.prototype.toBuffer = function() { - var version = new Buffer([constants[this.networkstr][this.typestr]]); + var version = new Buffer([networks[this.networkstr][this.typestr]]); var buf = Buffer.concat([version, this.hashbuf]); return buf; }; diff --git a/lib/bip32.js b/lib/bip32.js index 34bfe5c..dba2b33 100644 --- a/lib/bip32.js +++ b/lib/bip32.js @@ -1,7 +1,7 @@ 'use strict'; -var Base58Check = require('./protocol/base58check'); -var constants = require('./protocol/constants'); +var Base58Check = require('./encoding/base58check'); +var networks = require('./networks'); var Hash = require('./crypto/hash'); var Point = require('./crypto/point'); var Random = require('./crypto/random'); @@ -38,7 +38,7 @@ BIP32.prototype.set = function(obj) { BIP32.prototype.fromRandom = function(networkstr) { if (!networkstr) networkstr = 'mainnet'; - this.version = constants[networkstr].bip32privkey; + this.version = networks[networkstr].bip32privkey; this.depth = 0x00; this.parentfingerprint = new Buffer([0, 0, 0, 0]); this.childindex = new Buffer([0, 0, 0, 0]); @@ -72,7 +72,7 @@ BIP32.prototype.fromSeed = function(bytes, networkstr) { this.parentfingerprint = new Buffer([0, 0, 0, 0]); this.childindex = new Buffer([0, 0, 0, 0]); this.chaincode = hash.slice(32, 64); - this.version = constants[networkstr].bip32privkey; + this.version = networks[networkstr].bip32privkey; this.keypair = new Keypair(); this.keypair.privkey = new Privkey({bn: BN().fromBuffer(hash.slice(0, 32))}); this.keypair.privkey2pubkey(); @@ -99,12 +99,12 @@ BIP32.prototype.initFromBytes = function(bytes) { var keyBytes = bytes.slice(45, 78); var isPrivate = - (this.version == constants.mainnet.bip32privkey || - this.version == constants.testnet.bip32privkey); + (this.version == networks.mainnet.bip32privkey || + this.version == networks.testnet.bip32privkey); var isPublic = - (this.version == constants.mainnet.bip32pubkey || - this.version == constants.testnet.bip32pubkey); + (this.version == networks.mainnet.bip32pubkey || + this.version == networks.testnet.bip32pubkey); if (isPrivate && keyBytes[0] == 0) { this.keypair = new Keypair(); @@ -130,13 +130,13 @@ BIP32.prototype.buildxpubkey = function() { var v = null; switch (this.version) { - case constants.mainnet.bip32pubkey: - case constants.mainnet.bip32privkey: - v = constants.mainnet.bip32pubkey; + case networks.mainnet.bip32pubkey: + case networks.mainnet.bip32privkey: + v = networks.mainnet.bip32pubkey; break; - case constants.testnet.bip32pubkey: - case constants.testnet.bip32privkey: - v = constants.testnet.bip32pubkey; + case networks.testnet.bip32pubkey: + case networks.testnet.bip32privkey: + v = networks.testnet.bip32pubkey; break; default: throw new Error('Unknown version'); @@ -248,8 +248,8 @@ BIP32.prototype.deriveChild = function(i) { var usePrivate = (i & 0x80000000) != 0; var isPrivate = - (this.version == constants.mainnet.bip32privkey || - this.version == constants.testnet.bip32privkey); + (this.version == networks.mainnet.bip32privkey || + this.version == networks.testnet.bip32privkey); if (usePrivate && (!this.hasprivkey || !isPrivate)) throw new Error('Cannot do private key derivation without private key'); @@ -316,8 +316,8 @@ BIP32.prototype.deriveChild = function(i) { BIP32.prototype.toString = function() { var isPrivate = - (this.version == constants.mainnet.bip32privkey || - this.version == constants.testnet.bip32privkey); + (this.version == networks.mainnet.bip32privkey || + this.version == networks.testnet.bip32privkey); if (isPrivate) return this.xprivkeyString(); diff --git a/lib/block.js b/lib/block.js index bf09b00..f465fbb 100644 --- a/lib/block.js +++ b/lib/block.js @@ -1,9 +1,9 @@ 'use strict'; var Hash = require('./crypto/hash'); -var BufferReader = require('./protocol/bufferreader'); -var BufferWriter = require('./protocol/bufferwriter'); -var Varint = require('./protocol/varint'); +var BufferReader = require('./encoding/bufferreader'); +var BufferWriter = require('./encoding/bufferwriter'); +var Varint = require('./encoding/varint'); var Transaction = require('./transaction'); var Blockheader = require('./blockheader'); diff --git a/lib/blockheader.js b/lib/blockheader.js index 81d7308..3dcad36 100644 --- a/lib/blockheader.js +++ b/lib/blockheader.js @@ -1,7 +1,7 @@ 'use strict'; -var BufferReader = require('./protocol/bufferreader'); -var BufferWriter = require('./protocol/bufferwriter'); +var BufferReader = require('./encoding/bufferreader'); +var BufferWriter = require('./encoding/bufferwriter'); var Blockheader = function Blockheader(version, prevblockidbuf, merklerootbuf, time, bits, nonce) { if (!(this instanceof Blockheader)) diff --git a/lib/protocol/base58.js b/lib/encoding/base58.js similarity index 100% rename from lib/protocol/base58.js rename to lib/encoding/base58.js diff --git a/lib/protocol/base58check.js b/lib/encoding/base58check.js similarity index 100% rename from lib/protocol/base58check.js rename to lib/encoding/base58check.js diff --git a/lib/protocol/bufferreader.js b/lib/encoding/bufferreader.js similarity index 100% rename from lib/protocol/bufferreader.js rename to lib/encoding/bufferreader.js diff --git a/lib/protocol/bufferwriter.js b/lib/encoding/bufferwriter.js similarity index 100% rename from lib/protocol/bufferwriter.js rename to lib/encoding/bufferwriter.js diff --git a/lib/protocol/varint.js b/lib/encoding/varint.js similarity index 100% rename from lib/protocol/varint.js rename to lib/encoding/varint.js diff --git a/lib/protocol/constants.js b/lib/networks.js similarity index 87% rename from lib/protocol/constants.js rename to lib/networks.js index f358816..97afe9c 100644 --- a/lib/protocol/constants.js +++ b/lib/networks.js @@ -22,7 +22,4 @@ exports.testnet = { bip32privkey: 0x04358394, }; -exports.ephemeral = { - prefix: 0x0f, - identity: 0x02 -}; +exports.livenet = exports.mainnet; diff --git a/lib/privkey.js b/lib/privkey.js index a7ed870..96b5ae7 100644 --- a/lib/privkey.js +++ b/lib/privkey.js @@ -3,8 +3,8 @@ var BN = require('./crypto/bn'); var Point = require('./crypto/point'); var Random = require('./crypto/random'); -var constants = require('./protocol/constants'); -var base58check = require('./protocol/base58check'); +var networks = require('./networks'); +var base58check = require('./encoding/base58check'); var Privkey = function Privkey(bn) { if (!(this instanceof Privkey)) @@ -50,7 +50,7 @@ Privkey.prototype.fromRandom = function() { Privkey.prototype.validate = function() { if (!this.bn.lt(Point.getN())) throw new Error('Number must be less than N'); - if (typeof constants[this.networkstr] === undefined) + if (typeof networks[this.networkstr] === undefined) throw new Error('Must specify the networkstr ("mainnet" or "testnet")'); if (typeof this.compressed !== 'boolean') throw new Error('Must specify whether the corresponding public key is compressed or not (true or false)'); @@ -68,9 +68,9 @@ Privkey.prototype.toWIF = function() { var privbuf = this.bn.toBuffer({size: 32}); var buf; if (compressed) - buf = Buffer.concat([new Buffer([constants[networkstr].privkey]), this.bn.toBuffer({size: 32}), new Buffer([0x01])]); + buf = Buffer.concat([new Buffer([networks[networkstr].privkey]), this.bn.toBuffer({size: 32}), new Buffer([0x01])]); else - buf = Buffer.concat([new Buffer([constants[networkstr].privkey]), this.bn.toBuffer({size: 32})]); + buf = Buffer.concat([new Buffer([networks[networkstr].privkey]), this.bn.toBuffer({size: 32})]); return base58check.encode(buf); }; @@ -85,9 +85,9 @@ Privkey.prototype.fromWIF = function(str) { else throw new Error('Length of buffer must be 33 (uncompressed) or 34 (compressed)'); - if (buf[0] === constants.mainnet.privkey) + if (buf[0] === networks.mainnet.privkey) this.networkstr = 'mainnet'; - else if (buf[0] === constants.testnet.privkey) + else if (buf[0] === networks.testnet.privkey) this.networkstr = 'testnet'; else throw new Error('Invalid networkstr'); diff --git a/lib/script.js b/lib/script.js index 377c41a..95a6ac4 100644 --- a/lib/script.js +++ b/lib/script.js @@ -1,7 +1,7 @@ 'use strict'; -var BufferReader = require('./protocol/bufferreader'); -var BufferWriter = require('./protocol/bufferwriter'); +var BufferReader = require('./encoding/bufferreader'); +var BufferWriter = require('./encoding/bufferwriter'); var Opcode = require('./opcode'); var Script = function Script(buf) { diff --git a/lib/transaction.js b/lib/transaction.js index 4959b8f..21b40d2 100644 --- a/lib/transaction.js +++ b/lib/transaction.js @@ -1,8 +1,8 @@ 'use strict'; -var BufferWriter = require('./protocol/bufferwriter'); -var BufferReader = require('./protocol/bufferreader'); -var Varint = require('./protocol/varint'); +var BufferWriter = require('./encoding/bufferwriter'); +var BufferReader = require('./encoding/bufferreader'); +var Varint = require('./encoding/varint'); var Hash = require('./crypto/hash'); var Txin = require('./txin'); var Txout = require('./txout'); diff --git a/lib/txin.js b/lib/txin.js index 0b70857..75d2a05 100644 --- a/lib/txin.js +++ b/lib/txin.js @@ -1,8 +1,8 @@ 'use strict'; -var BufferReader = require('./protocol/bufferreader'); -var BufferWriter = require('./protocol/bufferwriter'); -var Varint = require('./protocol/varint'); +var BufferReader = require('./encoding/bufferreader'); +var BufferWriter = require('./encoding/bufferwriter'); +var Varint = require('./encoding/varint'); var Script = require('./script'); var Txin = function Txin(txidbuf, txoutnum, scriptvi, script, seqnum) { diff --git a/lib/txout.js b/lib/txout.js index 05a825d..22a688d 100644 --- a/lib/txout.js +++ b/lib/txout.js @@ -1,9 +1,9 @@ 'use strict'; var BN = require('./crypto/bn'); -var BufferReader = require('./protocol/bufferreader'); -var BufferWriter = require('./protocol/bufferwriter'); -var Varint = require('./protocol/varint'); +var BufferReader = require('./encoding/bufferreader'); +var BufferWriter = require('./encoding/bufferwriter'); +var Varint = require('./encoding/varint'); var Script = require('./script'); var Txout = function Txout(valuebn, scriptvi, script) { diff --git a/test/bip32.js b/test/bip32.js index 3464338..a1d0e0a 100644 --- a/test/bip32.js +++ b/test/bip32.js @@ -2,7 +2,6 @@ var should = require('chai').should(); var bitcore = require('..'); -var constants = bitcore.constants; var BIP32 = bitcore.BIP32; describe('BIP32', function() { diff --git a/test/block.js b/test/block.js index 6daeccf..39332bd 100644 --- a/test/block.js +++ b/test/block.js @@ -2,10 +2,10 @@ var should = require('chai').should(); var bitcore = require('..'); +var Varint = bitcore.encoding.Varint; +var BufferReader = bitcore.encoding.BufferReader; var Blockheader = bitcore.Blockheader; var Block = bitcore.Block; -var BufferReader = bitcore.BufferReader; -var Varint = bitcore.Varint; var Transaction = bitcore.Transaction; describe('Block', function() { diff --git a/test/blockheader.js b/test/blockheader.js index 6647f0e..b675807 100644 --- a/test/blockheader.js +++ b/test/blockheader.js @@ -2,8 +2,8 @@ var should = require('chai').should(); var bitcore = require('..'); +var BufferReader = bitcore.encoding.BufferReader; var Blockheader = bitcore.Blockheader; -var BufferReader = bitcore.BufferReader; describe('Blockheader', function() { diff --git a/test/protocol/base58.js b/test/encoding/base58.js similarity index 100% rename from test/protocol/base58.js rename to test/encoding/base58.js diff --git a/test/protocol/base58check.js b/test/encoding/base58check.js similarity index 100% rename from test/protocol/base58check.js rename to test/encoding/base58check.js diff --git a/test/protocol/bufferreader.js b/test/encoding/bufferreader.js similarity index 100% rename from test/protocol/bufferreader.js rename to test/encoding/bufferreader.js diff --git a/test/protocol/bufferwriter.js b/test/encoding/bufferwriter.js similarity index 100% rename from test/protocol/bufferwriter.js rename to test/encoding/bufferwriter.js diff --git a/test/protocol/varint.js b/test/encoding/varint.js similarity index 100% rename from test/protocol/varint.js rename to test/encoding/varint.js diff --git a/test/keypair.js b/test/keypair.js index 0d9c23f..0804e51 100644 --- a/test/keypair.js +++ b/test/keypair.js @@ -2,7 +2,7 @@ var should = require('chai').should(); var bitcore = require('..'); -var bn = bitcore.BN; +var bn = bitcore.crypto.BN; var Privkey = bitcore.Privkey; var Pubkey = bitcore.Pubkey; var Keypair = bitcore.Keypair; diff --git a/test/networks.js b/test/networks.js new file mode 100644 index 0000000..fefd335 --- /dev/null +++ b/test/networks.js @@ -0,0 +1,24 @@ +'use strict'; + +var should = require('chai').should(); +var bitcore = require('..'); +var Networks = bitcore.Networks; + +describe('Networks', function() { + + it('should contain all Networks', function() { + should.exist(Networks.livenet); + should.exist(Networks.testnet); + should.exist(Networks.mainnet); + }); + describe('contain all constants for livenet and testnet', function() { + for (var key in Networks.livenet) { + if (Networks.livenet.hasOwnProperty(key)) { + it('all should contain '+key, function() { + Networks.testnet.hasOwnProperty(key).should.equal(true); + }); + } + } + }); + +}); diff --git a/test/privkey.js b/test/privkey.js index d972687..fc8bd71 100644 --- a/test/privkey.js +++ b/test/privkey.js @@ -2,9 +2,9 @@ var should = require('chai').should(); var bitcore = require('..'); +var BN = bitcore.crypto.BN; +var Point = bitcore.crypto.Point; var Privkey = bitcore.Privkey; -var BN = bitcore.BN; -var Point = bitcore.Point; describe('Privkey', function() { var hex = '96c132224121b509b7d0a16245e957d9192609c5637c6228311287b1be21627a'; diff --git a/test/protocol/constants.js b/test/protocol/constants.js deleted file mode 100644 index e5604d5..0000000 --- a/test/protocol/constants.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var should = require('chai').should(); -var bitcore = require('../../'); -var constants = bitcore.Constants; - -describe('Constants', function() { - - it('should contain all constants for livenet and testnet', function() { - for (var key in constants.livenet) { - if (constants.livenet.hasOwnProperty(key)) { - constants.testnet.hasOwnProperty(key).should.equal(true); - } - } - - }); - -}); diff --git a/test/pubkey.js b/test/pubkey.js index 3feb58e..be96a16 100644 --- a/test/pubkey.js +++ b/test/pubkey.js @@ -2,9 +2,9 @@ var should = require('chai').should(); var bitcore = require('..'); +var Point = bitcore.crypto.Point; +var BN = bitcore.crypto.BN; var Pubkey = bitcore.Pubkey; -var Point = bitcore.Point; -var Bn = bitcore.BN; var Privkey = bitcore.Privkey; describe('Pubkey', function() { @@ -128,7 +128,7 @@ describe('Pubkey', function() { describe('#fromX', function() { it('should create this known public key', function() { - var x = Bn.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); + var x = BN.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); var pk = new Pubkey(); pk.fromX(true, x); pk.point.getX().toString(16).should.equal('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a'); @@ -140,7 +140,7 @@ describe('Pubkey', function() { describe('#toBuffer', function() { it('should return this compressed DER format', function() { - var x = Bn.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); + var x = BN.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); var pk = new Pubkey(); pk.fromX(true, x); pk.toBuffer().toString('hex').should.equal('031ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a'); @@ -151,14 +151,14 @@ describe('Pubkey', function() { describe('#toDER', function() { it('should return this compressed DER format', function() { - var x = Bn.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); + var x = BN.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); var pk = new Pubkey(); pk.fromX(true, x); pk.toDER(true).toString('hex').should.equal('031ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a'); }); it('should return this uncompressed DER format', function() { - var x = Bn.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); + var x = BN.fromBuffer(new Buffer('1ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a', 'hex')); var pk = new Pubkey(); pk.fromX(true, x); pk.toDER(false).toString('hex').should.equal('041ff0fe0f7b15ffaa85ff9f4744d539139c252a49710fb053bb9f2b933173ff9a7baad41d04514751e6851f5304fd243751703bed21b914f6be218c0fa354a341'); diff --git a/test/signature.js b/test/signature.js index 9bf32f5..87ddd7a 100644 --- a/test/signature.js +++ b/test/signature.js @@ -2,7 +2,7 @@ var should = require('chai').should(); var bitcore = require('..'); -var BN = bitcore.BN; +var BN = bitcore.crypto.BN; var Signature = bitcore.Signature; describe('Signature', function() { diff --git a/test/transaction.js b/test/transaction.js index f797e06..41ca481 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -2,11 +2,11 @@ var should = require('chai').should(); var bitcore = require('..'); -var Varint = bitcore.Varint; +var Varint = bitcore.encoding.Varint; +var BufferReader = bitcore.encoding.BufferReader; var Transaction = bitcore.Transaction; var Txin = bitcore.Txin; var Txout = bitcore.Txout; -var BufferReader = bitcore.BufferReader; describe('Transaction', function() { diff --git a/test/txin.js b/test/txin.js index e9738e9..7641f14 100644 --- a/test/txin.js +++ b/test/txin.js @@ -2,10 +2,10 @@ var should = require('chai').should(); var bitcore = require('..'); +var Varint = bitcore.encoding.Varint; +var BufferReader = bitcore.encoding.BufferReader; var Script = bitcore.Script; var Txin = bitcore.Txin; -var Varint = bitcore.Varint; -var BufferReader = bitcore.BufferReader; describe('Txin', function() { diff --git a/test/txout.js b/test/txout.js index 5af9028..0d1f13b 100644 --- a/test/txout.js +++ b/test/txout.js @@ -2,11 +2,11 @@ var should = require('chai').should(); var bitcore = require('..'); -var BN = bitcore.BN; +var BN = bitcore.crypto.BN; +var Varint = bitcore.encoding.Varint; +var BufferReader = bitcore.encoding.BufferReader; var Txout = bitcore.Txout; var Script = bitcore.Script; -var Varint = bitcore.Varint; -var BufferReader = bitcore.BufferReader; describe('Txout', function() {