|
|
@ -2,6 +2,8 @@ |
|
|
|
var _ = require('lodash'); |
|
|
|
|
|
|
|
var BufferUtil = require('./util/buffer'); |
|
|
|
var networks = []; |
|
|
|
var networkMaps = {}; |
|
|
|
|
|
|
|
/** |
|
|
|
* A network is merely a map containing values that correspond to version |
|
|
@ -16,11 +18,75 @@ Network.prototype.toString = function toString() { |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* @instance |
|
|
|
* @member Network#livenet |
|
|
|
* @function |
|
|
|
* @member Networks#get |
|
|
|
* Retrieves the network associated with a magic number or string. |
|
|
|
* @param {string|number|Network} arg |
|
|
|
* @param {string} key - if set, only check if the magic number associated with this name matches |
|
|
|
* @return Network |
|
|
|
*/ |
|
|
|
var livenet = new Network(); |
|
|
|
_.extend(livenet, { |
|
|
|
function getNetwork(arg, key) { |
|
|
|
if (~networks.indexOf(arg)) { |
|
|
|
return arg; |
|
|
|
} |
|
|
|
if (key) { |
|
|
|
for (var index in networks) { |
|
|
|
if (networks[index][key] === arg) { |
|
|
|
return networks[index]; |
|
|
|
} |
|
|
|
} |
|
|
|
return undefined; |
|
|
|
} |
|
|
|
return networkMaps[arg]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @function |
|
|
|
* @member Networks#add |
|
|
|
* Will add a custom Network |
|
|
|
* @param {Object} data |
|
|
|
* @param {String} data.name - The name of the network |
|
|
|
* @param {String} data.alias - The aliased name of the network |
|
|
|
* @param {Number} data.pubkeyhash - The publickey hash prefix |
|
|
|
* @param {Number} data.privatekey - The privatekey prefix |
|
|
|
* @param {Number} data.scripthash - The scripthash prefix |
|
|
|
* @param {Number} data.xpubkey - The extended public key magic |
|
|
|
* @param {Number} data.xprivkey - The extended private key magic |
|
|
|
* @param {Number} data.networkMagic - The network magic number |
|
|
|
* @param {Number} data.port - The network port |
|
|
|
* @param {Array} data.dnsSeeds - An array of dns seeds |
|
|
|
* @return Network |
|
|
|
*/ |
|
|
|
function addNetwork(data) { |
|
|
|
|
|
|
|
var network = new Network(); |
|
|
|
|
|
|
|
_.extend(network, { |
|
|
|
name: data.name, |
|
|
|
alias: data.alias, |
|
|
|
pubkeyhash: data.pubkeyhash, |
|
|
|
privatekey: data.privatekey, |
|
|
|
scripthash: data.scripthash, |
|
|
|
xpubkey: data.xpubkey, |
|
|
|
xprivkey: data.xprivkey, |
|
|
|
networkMagic: BufferUtil.integerAsBuffer(data.networkMagic), |
|
|
|
port: data.port, |
|
|
|
dnsSeeds: data.dnsSeeds |
|
|
|
}); |
|
|
|
|
|
|
|
_.each(_.values(network), function(value) { |
|
|
|
if (!_.isObject(value)) { |
|
|
|
networkMaps[value] = network; |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
networks.push(network); |
|
|
|
|
|
|
|
return network; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
addNetwork({ |
|
|
|
name: 'livenet', |
|
|
|
alias: 'mainnet', |
|
|
|
pubkeyhash: 0x00, |
|
|
@ -28,7 +94,7 @@ _.extend(livenet, { |
|
|
|
scripthash: 0x05, |
|
|
|
xpubkey: 0x0488b21e, |
|
|
|
xprivkey: 0x0488ade4, |
|
|
|
networkMagic: BufferUtil.integerAsBuffer(0xf9beb4d9), |
|
|
|
networkMagic: 0xf9beb4d9, |
|
|
|
port: 8333, |
|
|
|
dnsSeeds: [ |
|
|
|
'seed.bitcoin.sipa.be', |
|
|
@ -40,12 +106,7 @@ _.extend(livenet, { |
|
|
|
] |
|
|
|
}); |
|
|
|
|
|
|
|
/** |
|
|
|
* @instance |
|
|
|
* @member Network#testnet |
|
|
|
*/ |
|
|
|
var testnet = new Network(); |
|
|
|
_.extend(testnet, { |
|
|
|
addNetwork({ |
|
|
|
name: 'testnet', |
|
|
|
alias: 'testnet', |
|
|
|
pubkeyhash: 0x6f, |
|
|
@ -53,7 +114,7 @@ _.extend(testnet, { |
|
|
|
scripthash: 0xc4, |
|
|
|
xpubkey: 0x043587cf, |
|
|
|
xprivkey: 0x04358394, |
|
|
|
networkMagic: BufferUtil.integerAsBuffer(0x0b110907), |
|
|
|
networkMagic: 0x0b110907, |
|
|
|
port: 18333, |
|
|
|
dnsSeeds: [ |
|
|
|
'testnet-seed.bitcoin.petertodd.org', |
|
|
@ -61,47 +122,23 @@ _.extend(testnet, { |
|
|
|
], |
|
|
|
}); |
|
|
|
|
|
|
|
var networkMaps = {}; |
|
|
|
|
|
|
|
_.each(_.values(livenet), function(value) { |
|
|
|
if (!_.isObject(value)) { |
|
|
|
networkMaps[value] = livenet; |
|
|
|
} |
|
|
|
}); |
|
|
|
_.each(_.values(testnet), function(value) { |
|
|
|
if (!_.isObject(value)) { |
|
|
|
networkMaps[value] = testnet; |
|
|
|
} |
|
|
|
}); |
|
|
|
/** |
|
|
|
* @instance |
|
|
|
* @member Networks#livenet |
|
|
|
*/ |
|
|
|
var livenet = getNetwork('livenet'); |
|
|
|
|
|
|
|
/** |
|
|
|
* @function |
|
|
|
* @member Network#getNetwork |
|
|
|
* Retrieves the network associated with a magic number or string. |
|
|
|
* @param {string|number|Network} arg |
|
|
|
* @param {string} key - if set, only check if the magic number associated with this name matches |
|
|
|
* @return Network |
|
|
|
*/ |
|
|
|
function getNetwork(arg, key) { |
|
|
|
if (arg === livenet || arg === testnet) { |
|
|
|
return arg; |
|
|
|
} |
|
|
|
if (key) { |
|
|
|
var networks = [livenet, testnet]; |
|
|
|
for (var index in networks) { |
|
|
|
if (networks[index][key] === arg) { |
|
|
|
return networks[index]; |
|
|
|
} |
|
|
|
} |
|
|
|
return undefined; |
|
|
|
} |
|
|
|
return networkMaps[arg]; |
|
|
|
} |
|
|
|
* @instance |
|
|
|
* @member Networks#testnet |
|
|
|
*/ |
|
|
|
var testnet = getNetwork('testnet'); |
|
|
|
|
|
|
|
/** |
|
|
|
* @namespace Network |
|
|
|
* @namespace Networks |
|
|
|
*/ |
|
|
|
module.exports = { |
|
|
|
add: addNetwork, |
|
|
|
defaultNetwork: livenet, |
|
|
|
livenet: livenet, |
|
|
|
mainnet: livenet, |
|
|
|