From a499e066d596a0230321eade26cf04645353ca7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robert=20Martin-Leg=C3=A8ne?= <robert@nic.ar>
Date: Mon, 3 Dec 2018 01:04:43 -0300
Subject: [PATCH] monitor.js will keep trying to unlock locked keys, using an
 empty passphrase.

---
 bin/monitor.js | 51 ++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 43 insertions(+), 8 deletions(-)

diff --git a/bin/monitor.js b/bin/monitor.js
index ca4a629..55a4492 100755
--- a/bin/monitor.js
+++ b/bin/monitor.js
@@ -7,13 +7,7 @@
 const   Libbfa      =   require( process.env.BFAHOME + '/bin/libbfa.js');
 var     bfa         =   new Libbfa();
 var     web3        =   bfa.newweb3();
-
-function pluralEnglish( num, single, plural )
-{
-    if ( num == 1 )
-        return single;
-    return plural;
-}
+var     lastUnlock  =   0;
 
 function    peerlist()
 {
@@ -89,7 +83,7 @@ function    peerlist()
                 console.log(
                     "We have "
                     + nowpeers.length
-                    + " peer" + pluralEnglish(nowpeers.length,'','s') + ", so will try to connect to "
+                    + " peer" + ( nowpeers.length==1 ? '' : 's' ) + ", so will try to connect to "
                     + enode
                 );
                 web3.eth.bfaAdminaddPeer( enode );
@@ -167,10 +161,51 @@ function    mayseal()
     );
 }
 
+function    unlock()
+{
+    var         now                 =   new Date();
+    if ( lastUnlock + 600 > now )
+        return;
+    lastUnlock = now;
+    web3.eth.personal.bfalistWallets()
+    .then(
+        function pushone(x)
+        {
+            var     i           =   x.length;
+            var     wallets     =   new Array();
+            while ( i-- > 0 )
+                if ( x[i].status == "Locked" )
+                    wallets.push( x[i] );
+            i                   =   wallets.length;
+            if ( i == 0 )
+                return;
+            var     promises    =   new Array();
+            while ( i-- > 0 )
+            {
+                var     j       =   wallets[i].accounts.length;
+                while ( j-- > 0 )
+                {
+                    var addr    =   wallets[i].accounts[j].address;
+                    var promise =
+                        web3.eth.personal.unlockAccount( addr, "", 0 )
+                        .catch( error => { } );
+                    promises.push( promise );
+                }
+            }
+        }
+        ,
+        function err(x)
+        {
+            // we don't care?
+        }
+    )
+}
+
 function    timer()
 {
     peerlist();
     mayseal();
+    unlock();
 }
 
 peerlist();
-- 
GitLab