// In renderer process (web page). const {ipcRenderer} = require('electron'); // Set the provider you want from Web3.providers SyncProgress = new ProgressBar.Line('#syncProgress', { strokeWidth: 6, easing: 'easeInOut', duration: 1400, color: "#7A1336", trailColor: '#eee', trailWidth: 1, text: { style: { color: '#bbb', position: "absolute", left: "50%", top: "-1px", transform: "translateX(-50%)", fontSize: "0.9em", LineHeight: "24px", padding: 0 }, autoStyleContainer: false }, from: {color: '#FFEA82'}, to: {color: '#ED6A5A'} }); // set initial value for the progress text SyncProgress.setText("Waiting for blockchain, please wait..."); isFullySynced = false; var peerCountInterval = setInterval(function() { web3Local.eth.net.getPeerCount(function(error, count) { $("#peerCount").html(vsprintf("Peer Count: %d", [count])); }); }, 5000); function StartSyncProcess() { var alreadyCatchedUp = false; var nodeSyncInterval = null; var subscription = web3Local.eth.subscribe('syncing', function(error, sync){ if (!error) { if (!sync) { if (nodeSyncInterval) { clearInterval(nodeSyncInterval); } nodeSyncInterval = setInterval(function() { web3Local.eth.getBlock("latest", function(error, localBlock) { if (!error) { if (localBlock.number > 0) { if (!EthoTransactions.getIsSyncing()) { SyncProgress.animate(1); SyncProgress.setText(vsprintf('%d/%d (100%%)', [localBlock.number, localBlock.number])); } if (alreadyCatchedUp == false) { // clear the repeat interval and render wallets $(document).trigger("onNewAccountTransaction"); alreadyCatchedUp = true; isFullySynced = true; // enable the keep in sync feature EthoTransactions.enableKeepInSync(); // sync all the transactions to the current block EthoTransactions.syncTransactionsForAllAddresses(localBlock.number); // signal that the sync is complete $(document).trigger("onSyncComplete"); } } } else { EthoMainGUI.showGeneralError(error); } }); }, 10000); } } else { EthoMainGUI.showGeneralError(error); } }).on("data", function(sync){ if ((sync) && (sync.HighestBlock > 0)) { SyncProgress.animate(sync.CurrentBlock / sync.HighestBlock); SyncProgress.setText(vsprintf('%d/%d (%d%%)', [sync.CurrentBlock, sync.HighestBlock, Math.floor(sync.CurrentBlock / sync.HighestBlock * 100)])); } }).on("changed", function(isSyncing){ if(isSyncing) { nodeSyncInterval = setInterval(function() { web3Local.eth.isSyncing(function(error, sync){ if ((!error) && (sync)) { SyncProgress.animate(sync.currentBlock / sync.highestBlock); SyncProgress.setText(vsprintf('%d/%d (%d%%)', [sync.currentBlock, sync.highestBlock, Math.floor(sync.currentBlock / sync.highestBlock * 100)])); } else if (error) { EthoMainGUI.showGeneralError(error); } }); }, 2000); } else { if (nodeSyncInterval) { clearInterval(nodeSyncInterval); } } }); } var InitWeb3 = setInterval(function() { try { web3Local = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546')); web3Local.eth.net.isListening(function(error, success) { if (!error) { $(document).trigger("onGethReady"); clearInterval(InitWeb3); StartSyncProcess(); } }); } catch(err) { EthoMainGUI.showGeneralError(err); } }, 2000);