From e46f7a4b435ea2dc51c02bc8ca559ed9ab656b11 Mon Sep 17 00:00:00 2001
From: Robert Martin-Legene <robert@nic.ar>
Date: Sun, 3 Mar 2019 03:10:54 -0300
Subject: [PATCH] Arreglando varias cosas

---
 .gitignore     |   3 +-
 bin/monitor.js | 198 ++++++++++++++++++++++++++-----------------------
 bin/start.sh   |   8 +-
 3 files changed, 116 insertions(+), 93 deletions(-)

diff --git a/.gitignore b/.gitignore
index d94a031..2940230 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,8 @@
 */lastseen
 */status
 cache
-*/cache
+*/*cache
 network*/node
 network*/bootnode
 network*/contracts/*
+network/*.pid
diff --git a/bin/monitor.js b/bin/monitor.js
index 30877d1..228d43e 100755
--- a/bin/monitor.js
+++ b/bin/monitor.js
@@ -4,102 +4,118 @@
 
 "use strict"
 
-const   Libbfa      =   require( process.env.BFAHOME + '/bin/libbfa.js');
-var     bfa         =   new Libbfa();
-var     web3        =   bfa.newweb3();
-var     lastUnlock  =   0;
+const   Libbfa                  =   require( process.env.BFAHOME + '/bin/libbfa.js');
+var     bfa                     =   new Libbfa();
+var     web3                    =   bfa.newweb3();
+var     lastUnlock              =   0;
 
-function    peerlist()
+function readPeersCache()
+{
+    if ( ! bfa.fs.existsSync(  bfa.networkdir + '/peers.cache' ) )
+        return [];
+    var     data                =   bfa.fs.readFileSync( bfa.networkdir + '/peers.cache' ).toString();
+    if ( data.length > 0 )
+        var     p               =   data.split(/\r?\n/);
+    // for some odd reason, I keep seeing empty entries
+    for ( var i = p.length; i > 0; i-- )
+        if ( p[i] == '' )
+            p.splice(i,1);
+    return p;
+}
+
+function writePeersCache( peers )
+{
+    // peers.cache is a list of peers we have connected out to in the past.
+    bfa.fs.writeFileSync(
+        bfa.networkdir + '/peers.cache',
+        peers.join("\n") + "\n",
+        { mode: 0o644 }
+    );
+}
+
+function writeStatus( peers )
 {
-    web3.bfa.admin.peers(
-        function gotAdminPeers( nodelist ) {
-            var         now                 =   new Date();
-            var         nowpeers            =   [];
-            var         peers               =   [];
-            var         newpeers            =   [];
-            if ( bfa.fs.existsSync(  bfa.networkdir + '/peers.cache' ) )
+    // write network/status
+    bfa.fs.writeFileSync(
+        bfa.networkdir + '/status', 
+            "UTC: " + new Date().toUTCString() + "\n"
+            + "BFA peers: " + peers.length + "\n"
+            + peers.sort().join("\n") + "\n",
+        { mode: 0o644 }
+    );
+}
+
+function    parsenode( node )
+{
+    if ( !n || !n.protocols || typeof n.protocols.eth != 'object' )
+        return;
+    // default info - likely to get overwritten.
+    var     n;
+    if ( ! node.network )
+        return { info: "<"+node.id+">" };
+    if ( typeof node.network.inbound == 'boolean' )
+	n.dir	                = 	node.network.inbound ? "in" : "out";
+    if ( typeof node.enode == 'string' )
+        n.info                  =   node.enode;
+    else
+    {
+        if ( node.id )
+            n.info              +=  "<" + node.id + ">";
+        if ( node.network.remoteAddress )
+        {
+            if ( n.info )
+                n.info          +=  "@";
+            n.info              +=  node.network.remoteAddress;
+        }
+    }
+    return n;
+}
+
+function gotAdminPeers( nodelist )
+{
+    var     nowpeers            =   [];
+    var     peers               =   readPeersCache();
+    var     outpeers            =   [];
+    var     candidatenew        =   [];
+    nodelist.forEach(
+        function(node) {
+            var     n           =   parsenode( node );
+            if ( n )
             {
-                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 ( '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 && dir == "out" )
-                                    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 );
-                    }
+                nowpeers.push( "peer " + ( n.dir ? n.dir : '') + ": " + n.info );
+                if ( peers.indexOf( n.info ) == -1 )
+                {
+                    if ( n.dir == 'out' )
+                        outpeers.push( n.info );
+                    candidatenew.push( n.info );
                 }
-            );
-            // write network/status
-            bfa.fs.writeFileSync(
-                bfa.networkdir + '/status', 
-                "UTC: " + now.toUTCString() + "\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" + ( nowpeers.length==1 ? '' : 's' ) + ", so will try to connect to "
-                    + enode
-                );
-                web3.bfa.admin.addPeer( enode );
             }
-            // write network/peers.cache
-            // peers.cache is a list of peers we have connected out to in the past.
-            peers               =   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 }
-            );
         }
     );
+    writeStatus( nowpeers );
+    // write peers.cache (max 100 entries, FIFO)
+    peers                       =   peers.concat( outpeers );
+    if (peers.length > 100)
+        peers.splice( 0, peers.length - 100 );
+    writePeersCache( peers );
+    // Try to connect to a random node if we have very few peers
+    if ( nowpeers.length < 5 && candidatenew.length > 0 )
+    {
+        var     i               =   Math.floor( Math.random() * candidatenew.length );
+        var     enode           =   candidatenew[i];
+        console.log(
+            "We have "
+            + nowpeers.length
+            + " peer" + ( nowpeers.length==1 ? '' : 's' ) + ", so will try to connect to "
+            + enode
+        );
+        web3.bfa.admin.addPeer( enode );
+    }
+}
+
+function    peerlist()
+{
+    web3.bfa.admin.peers( gotAdminPeers );
 }
 
 // Function to determine if our defaultAccount is allowed to seal/mine.
@@ -109,8 +125,8 @@ function    mayseal()
     var me          =   web3.eth.defaultAccount;
     if ( undefined == me )
     {
-        console.log( "Failed to get default account information." );
-        return;
+        // Failed to get default account information.
+        me	    =	'xxxx'
     }
     me              =   me.toLowerCase();
     web3.eth.isMining().
diff --git a/bin/start.sh b/bin/start.sh
index d0aee91..6ac2184 100755
--- a/bin/start.sh
+++ b/bin/start.sh
@@ -101,7 +101,13 @@ function startgeth
             echo '***'
             echo
             # (re)configure parameters (you never know if they changed)
-	    flexargs="$( getsyncmode ) --extradata $( extradata )"
+	    flexargs="$( getsyncmode )"
+	    xtra=$( extradata )
+	    if [ -n "$xtra" ]
+            then
+	        flexargs="${flexargs} --extradata $( extradata )"
+            fi
+	    unset xtra
             if [ "$netport" != 30303 ]
             then
                 flexargs="${flexargs} --net $netport"
-- 
GitLab