net: add priority nodes.
This commit is contained in:
parent
db49f44c8a
commit
f2d092f23c
@ -49,6 +49,7 @@ bip150: false
|
|||||||
identity-key: 74b4147957813b62cc8987f2b711ddb31f8cb46dcbf71502033da66053c8780a
|
identity-key: 74b4147957813b62cc8987f2b711ddb31f8cb46dcbf71502033da66053c8780a
|
||||||
auth-peers: ./authorized-peers
|
auth-peers: ./authorized-peers
|
||||||
known-peers: ./known-peers
|
known-peers: ./known-peers
|
||||||
|
# nodes: 127.0.0.1,127.0.0.2
|
||||||
|
|
||||||
# Miner
|
# Miner
|
||||||
# payout-address: 1111111111111111111114oLvT2
|
# payout-address: 1111111111111111111114oLvT2
|
||||||
|
|||||||
@ -634,6 +634,8 @@ AuthDB.prototype.populate = co(function* populate(addr, key) {
|
|||||||
try {
|
try {
|
||||||
hosts = yield this.resolve(addr.host, this.proxyServer);
|
hosts = yield this.resolve(addr.host, this.proxyServer);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
if (this.logger)
|
||||||
|
this.logger.error(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,8 +36,10 @@ function HostList(options) {
|
|||||||
this.resolve = dns.resolve;
|
this.resolve = dns.resolve;
|
||||||
this.banTime = common.BAN_TIME;
|
this.banTime = common.BAN_TIME;
|
||||||
this.rawSeeds = this.network.seeds;
|
this.rawSeeds = this.network.seeds;
|
||||||
|
this.rawNodes = [];
|
||||||
|
|
||||||
this.seeds = [];
|
this.seeds = [];
|
||||||
|
this.nodes = [];
|
||||||
this.banned = {};
|
this.banned = {};
|
||||||
|
|
||||||
this.map = {};
|
this.map = {};
|
||||||
@ -103,6 +105,11 @@ HostList.prototype._initOptions = function initOptions(options) {
|
|||||||
assert(Array.isArray(options.seeds));
|
assert(Array.isArray(options.seeds));
|
||||||
this.rawSeeds = options.seeds;
|
this.rawSeeds = options.seeds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.nodes) {
|
||||||
|
assert(Array.isArray(options.nodes));
|
||||||
|
this.setNodes(options.nodes);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -665,12 +672,40 @@ HostList.prototype.setSeeds = function setSeeds(seeds) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a preferred seed.
|
* Add a preferred seed.
|
||||||
* @param {String} hostname
|
* @param {String} host
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HostList.prototype.addSeed = function addSeed(host) {
|
HostList.prototype.addSeed = function addSeed(host) {
|
||||||
var addr = IP.parseHost(host, this.network.port);
|
var addr = IP.parseHost(host, this.network.port);
|
||||||
return this.seeds.push(addr);
|
this.seeds.push(addr);
|
||||||
|
return addr;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set priority nodes.
|
||||||
|
* @param {String[]} nodes
|
||||||
|
*/
|
||||||
|
|
||||||
|
HostList.prototype.setNodes = function setNodes(nodes) {
|
||||||
|
var i, node;
|
||||||
|
|
||||||
|
this.rawNodes.length = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < nodes.length; i++) {
|
||||||
|
node = nodes[i];
|
||||||
|
this.addNode(node);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a priority node.
|
||||||
|
* @param {String} host
|
||||||
|
*/
|
||||||
|
|
||||||
|
HostList.prototype.addNode = function addNode(host) {
|
||||||
|
var addr = IP.parseHost(host, this.network.port);
|
||||||
|
this.rawNodes.push(addr);
|
||||||
|
return addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -680,7 +715,12 @@ HostList.prototype.addSeed = function addSeed(host) {
|
|||||||
|
|
||||||
HostList.prototype.discover = co(function* discover() {
|
HostList.prototype.discover = co(function* discover() {
|
||||||
var jobs = [];
|
var jobs = [];
|
||||||
var i, seed;
|
var i, node, seed;
|
||||||
|
|
||||||
|
for (i = 0; i < this.rawNodes.length; i++) {
|
||||||
|
node = this.rawNodes[i];
|
||||||
|
jobs.push(this.lookupNode(node));
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < this.seeds.length; i++) {
|
for (i = 0; i < this.seeds.length; i++) {
|
||||||
seed = this.seeds[i];
|
seed = this.seeds[i];
|
||||||
@ -690,6 +730,22 @@ HostList.prototype.discover = co(function* discover() {
|
|||||||
yield Promise.all(jobs);
|
yield Promise.all(jobs);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lookup node's domain.
|
||||||
|
* @param {Object} addr
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
|
||||||
|
HostList.prototype.lookupNode = co(function* lookupNode(addr) {
|
||||||
|
var addrs = yield this.lookup(addr);
|
||||||
|
|
||||||
|
if (addrs.length === 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.nodes.push(addrs[0]);
|
||||||
|
this.add(addrs[0]);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populate from seed.
|
* Populate from seed.
|
||||||
* @param {Object} seed
|
* @param {Object} seed
|
||||||
@ -697,30 +753,49 @@ HostList.prototype.discover = co(function* discover() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
HostList.prototype.populate = co(function* populate(seed) {
|
HostList.prototype.populate = co(function* populate(seed) {
|
||||||
|
var addrs = yield this.lookup(seed);
|
||||||
|
var i, addr;
|
||||||
|
|
||||||
|
for (i = 0; i < addrs.length; i++) {
|
||||||
|
addr = addrs[i];
|
||||||
|
this.add(addr);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lookup hosts from dns host.
|
||||||
|
* @param {Object} target
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
|
||||||
|
HostList.prototype.lookup = co(function* lookup(target) {
|
||||||
|
var addrs = [];
|
||||||
var i, addr, hosts, host;
|
var i, addr, hosts, host;
|
||||||
|
|
||||||
if (seed.version !== -1) {
|
if (target.version !== -1) {
|
||||||
addr = NetAddress.fromHost(seed.host, seed.port, this.network);
|
addr = NetAddress.fromHost(target.host, target.port, this.network);
|
||||||
this.add(addr);
|
addrs.push(addr);
|
||||||
return;
|
return addrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.logger)
|
if (this.logger)
|
||||||
this.logger.info('Resolving hosts from seed: %s.', seed.host);
|
this.logger.info('Resolving host: %s.', target.host);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
hosts = yield this.resolve(seed.host, this.proxyServer);
|
hosts = yield this.resolve(target.host, this.proxyServer);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (this.logger)
|
if (this.logger)
|
||||||
this.logger.error(e);
|
this.logger.error(e);
|
||||||
return;
|
return addrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < hosts.length; i++) {
|
for (i = 0; i < hosts.length; i++) {
|
||||||
host = hosts[i];
|
host = hosts[i];
|
||||||
addr = NetAddress.fromHost(host, seed.port, this.network);
|
addr = NetAddress.fromHost(host, target.port, this.network);
|
||||||
this.add(addr);
|
addrs.push(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return addrs;
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1295,6 +1295,15 @@ Pool.prototype.getHost = function getHost(unique) {
|
|||||||
var now = this.network.now();
|
var now = this.network.now();
|
||||||
var i, entry, addr;
|
var i, entry, addr;
|
||||||
|
|
||||||
|
for (i = 0; i < this.hosts.nodes.length; i++) {
|
||||||
|
addr = this.hosts.nodes[i];
|
||||||
|
|
||||||
|
if (this.peers.has(addr.hostname))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 100; i++) {
|
for (i = 0; i < 100; i++) {
|
||||||
entry = this.hosts.getHost();
|
entry = this.hosts.getHost();
|
||||||
|
|
||||||
@ -1929,7 +1938,7 @@ function PoolOptions(options) {
|
|||||||
this.feeRate = -1;
|
this.feeRate = -1;
|
||||||
this.noDiscovery = false;
|
this.noDiscovery = false;
|
||||||
this.seeds = this.network.seeds;
|
this.seeds = this.network.seeds;
|
||||||
this.preferredSeed = null;
|
this.nodes = [];
|
||||||
this.invTimeout = 60000;
|
this.invTimeout = 60000;
|
||||||
this.services = common.LOCAL_SERVICES;
|
this.services = common.LOCAL_SERVICES;
|
||||||
this.requiredServices = common.REQUIRED_SERVICES;
|
this.requiredServices = common.REQUIRED_SERVICES;
|
||||||
@ -2116,9 +2125,9 @@ PoolOptions.prototype.fromOptions = function fromOptions(options) {
|
|||||||
this.seeds = options.seeds;
|
this.seeds = options.seeds;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.preferredSeed) {
|
if (options.nodes) {
|
||||||
assert(typeof options.preferredSeed === 'string');
|
assert(Array.isArray(options.nodes));
|
||||||
this.seeds = [options.preferredSeed];
|
this.nodes = options.nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.invTimeout != null) {
|
if (options.invTimeout != null) {
|
||||||
|
|||||||
@ -28,10 +28,12 @@ function config(options) {
|
|||||||
config.alias = {
|
config.alias = {
|
||||||
conf: {},
|
conf: {},
|
||||||
env: {
|
env: {
|
||||||
'seed': 'preferredseed'
|
'seed': 'seeds',
|
||||||
|
'node': 'nodes'
|
||||||
},
|
},
|
||||||
arg: {
|
arg: {
|
||||||
'seed': 'preferredseed',
|
'seed': 'seeds',
|
||||||
|
'node': 'nodes',
|
||||||
'n': 'network'
|
'n': 'network'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -192,7 +194,8 @@ config.parseData = function parseData(data, prefix, dirname) {
|
|||||||
options.bip150 = bool(data.bip150);
|
options.bip150 = bool(data.bip150);
|
||||||
options.identityKey = key(data.identitykey);
|
options.identityKey = key(data.identitykey);
|
||||||
options.proxyServer = str(data.proxyserver);
|
options.proxyServer = str(data.proxyserver);
|
||||||
options.preferredSeed = str(data.preferredseed);
|
options.seeds = list(data.seeds);
|
||||||
|
options.nodes = list(data.nodes);
|
||||||
options.maxOutbound = num(data.maxoutbound);
|
options.maxOutbound = num(data.maxoutbound);
|
||||||
options.maxInbound = num(data.maxinbound);
|
options.maxInbound = num(data.maxinbound);
|
||||||
options.noDiscovery = bool(data.nodiscovery);
|
options.noDiscovery = bool(data.nodiscovery);
|
||||||
@ -635,6 +638,16 @@ function str(value) {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function list(value) {
|
||||||
|
if (!value)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (typeof value !== 'string')
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return value.trim().split(/\s*,\s*/);
|
||||||
|
}
|
||||||
|
|
||||||
function key(value) {
|
function key(value) {
|
||||||
var key;
|
var key;
|
||||||
|
|
||||||
|
|||||||
@ -113,7 +113,8 @@ function FullNode(options) {
|
|||||||
maxOutbound: this.options.maxOutbound,
|
maxOutbound: this.options.maxOutbound,
|
||||||
maxInbound: this.options.maxInbound,
|
maxInbound: this.options.maxInbound,
|
||||||
proxyServer: this.options.proxyServer,
|
proxyServer: this.options.proxyServer,
|
||||||
preferredSeed: this.options.preferredSeed,
|
seeds: this.options.seeds,
|
||||||
|
nodes: this.options.nodes,
|
||||||
noDiscovery: this.options.noDiscovery,
|
noDiscovery: this.options.noDiscovery,
|
||||||
port: this.options.port,
|
port: this.options.port,
|
||||||
listen: this.options.listen
|
listen: this.options.listen
|
||||||
|
|||||||
@ -64,7 +64,8 @@ function SPVNode(options) {
|
|||||||
chain: this.chain,
|
chain: this.chain,
|
||||||
witness: this.options.witness,
|
witness: this.options.witness,
|
||||||
proxyServer: this.options.proxyServer,
|
proxyServer: this.options.proxyServer,
|
||||||
preferredSeed: this.options.preferredSeed,
|
seeds: this.options.seeds,
|
||||||
|
nodes: this.options.nodes,
|
||||||
bip151: this.options.bip151,
|
bip151: this.options.bip151,
|
||||||
bip150: this.options.bip150,
|
bip150: this.options.bip150,
|
||||||
authPeers: this.options.authPeers,
|
authPeers: this.options.authPeers,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user