Skip to content
Snippets Groups Projects
Commit e9837ab5 authored by Robert Martin-Legene's avatar Robert Martin-Legene
Browse files

issue#4 resuelto + fastconnect

parent 38eefbfd
No related branches found
No related tags found
No related merge requests found
......@@ -107,6 +107,13 @@ module.exports = class Libbfa
params: 0
}]
});
w3.eth.extend({
methods: [{
name: 'bfaAdminaddPeer',
call: 'admin_addPeer',
params: 1
}]
});
w3.eth.personal.extend({
methods: [{
name: 'bfalistWallets',
......
......@@ -7,29 +7,101 @@
const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js');
var bfa = new Libbfa();
var web3 = bfa.newweb3();
var now;
function monitor()
function pluralEnglish( num, single, plural )
{
if ( num == 1 )
return single;
return plural;
}
function peerlist()
{
web3.eth.bfaAdminpeers().then(
function gotAdminPeers( nodelist ) {
var peers = [];
var now = new Date();
var nowpeers = [];
var peers = [];
var newpeers = [];
if ( bfa.fs.existsSync( bfa.networkdir + '/peers.cache' ) )
{
var data = bfa.fs.readFileSync( bfa.networkdir + '/peers.cache' ).toString();
if ( data.length > 0 )
peers = data.split(/\r?\n/);
var i = peers.length;
// for some odd reason, I keep seeing empty entries
while ( i-- > 0 )
if ( peers[i] == '' )
peers.splice(i,1);
}
nodelist.forEach(
function(node) {
if ( typeof(node.protocols.eth) == 'object' )
{
var dir = "out";
if ( node.network.inbound )
dir = "in";
peers.push( "peer "+dir+": "+node.enode );
if ( 'object' == typeof(node.protocols.eth) )
{
// default info - likely to get overwritten.
var info = "<" + node.id + ">";
var dir = "";
if ( undefined != node.network )
{
if ( 'boolean' == typeof(node.network.inbound) )
{
if ( node.network.inbound )
dir = "in";
else
dir = "out";
}
if ( 'string' == typeof(node.enode) )
{
info = node.enode;
if (peers.indexOf( node.enode ) == -1 )
newpeers.push( node.enode );
}
else
{
info = "";
if ( undefined != node.id )
info += "<" + node.id + ">";
if ( undefined != node.network.remoteAddress )
{
if ( info != "" )
info+= "@";
info += node.network.remoteAddress;
}
}
}
nowpeers.push( "peer " + dir + ": " + info );
}
}
);
// write network/status
bfa.fs.writeFileSync(
bfa.networkdir + '/status',
"UTC: " + now.toUTCString() + "\n"
+ "BFA peers: " + peers.length + "\n"
+ peers.sort().join("\n") + "\n",
+ "BFA peers: " + nowpeers.length + "\n"
+ nowpeers.sort().join("\n") + "\n",
{ mode: 0o644 }
);
// Try to connect to a random node if we have very few peers
if ( nowpeers.length < 5 && peers.length > 0 )
{
var i = Math.floor( Math.random() * peers.length );
var enode = peers[i];
console.log(
"We have "
+ nowpeers.length
+ " peer" + pluralEnglish(nowpeers.length,'','s') + ", so will try to connect to "
+ enode
);
web3.eth.bfaAdminaddPeer( enode );
}
// write network/peers.cache
// peers.cache is a list of peers we have connected out to in the past.
peers.concat( newpeers );
if (peers.length > 100)
peers.splice( 0, peers.length - 100 );
bfa.fs.writeFileSync(
bfa.networkdir + '/peers.cache',
peers.join("\n") + "\n",
{ mode: 0o644 }
);
},
......@@ -97,9 +169,9 @@ function mayseal()
function timer()
{
now = new Date();
monitor();
peerlist();
mayseal();
}
peerlist();
setInterval( timer, 60 * 1000 );
......@@ -68,9 +68,11 @@ function startmonitor
echo "A monitor is already running."
false
) || exit
monitor.js &
echo $! > $pidfile
wait
(
monitor.js &
echo $! > $pidfile
wait
) 2>&1 | ${BFAHOME}/bin/log.sh ${BFANODEDIR}/log &
) 9>> $pidfile
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment