* redesigned sync, so no external node is needed

+ allow only once instance of the wallet
+ store txhash and use it as single ID for transactions
This commit is contained in:
Taegus
2018-12-24 21:44:41 +01:00
parent 7d6ba1c1f8
commit 82e988a723
7 changed files with 136 additions and 124 deletions

View File

@@ -145,16 +145,14 @@ $(document).on("render_send", function() {
EthoMainGUI.showGeneralError(error);
},
function(transaction) {
/*
ipcRenderer.send('storeTransaction', {
block: element.block,
fromaddr: element.fromaddr,
block: element.block.toString(),
txhash: element.hash.toLowerCase(),
fromaddr: element.fromaddr.toLowerCase(),
timestamp: element.timestamp,
toaddr: element.toaddr,
value: element.value,
confirmed: "1",
toaddr: element.toaddr.toLowerCase(),
value: element.value
});
*/
}
);
}

View File

@@ -28,7 +28,7 @@ SyncProgress = new ProgressBar.Line('#syncProgress',
});
// set initial value for the progress text
SyncProgress.setText("initializing, please wait...");
SyncProgress.setText("Waiting for blockchain, please wait...");
var peerCountInterval = setInterval(function()
{
@@ -39,61 +39,67 @@ var peerCountInterval = setInterval(function()
function StartSyncProcess() {
var alreadyCatchedUp = false;
var nodeSyncInterval = null;
function keepTheNodeInSync(interval) {
var nodeSyncInterval = setInterval(function()
{
web3Local.eth.isSyncing(function(error, sync)
{
if(!error) {
if(sync == true) {
console.log("start the sync");
} else if(sync) {
SyncProgress.animate(sync.currentBlock / sync.highestBlock);
SyncProgress.setText(vsprintf('%d/%d (%d%%)', [sync.currentBlock, sync.highestBlock, Math.round(sync.currentBlock / sync.highestBlock * 100)]));
} else {
web3Local.eth.getBlock("latest", function(error, localBlock) {
if (localBlock.number > 0) {
web3Remote.eth.getBlock("latest", function(error, remoteBlock) {
if (!EthoTransactions.getIsSyncing()) {
SyncProgress.animate(localBlock.number / remoteBlock.number);
SyncProgress.setText(vsprintf('%d/%d (%d%%)', [localBlock.number, remoteBlock.number, Math.round(localBlock.number / remoteBlock.number * 100)]));
}
if (remoteBlock.number == localBlock.number) {
if (alreadyCatchedUp == false)
{
// clear the repeat interval and render wallets
$(document).trigger("onNewAccountTransaction");
clearInterval(nodeSyncInterval);
alreadyCatchedUp = true;
// sync all the transactions to the current block
EthoTransactions.syncTransactionsForAllAddresses(localBlock.number);
$(document).trigger("onSyncInterval");
// restart with less intensity
keepTheNodeInSync(10000);
}
}
});
}
});
}
var subscription = web3Local.eth.subscribe('syncing', function(error, sync){
if (!error) {
if (!sync) {
if (nodeSyncInterval) {
clearInterval(nodeSyncInterval);
}
});
}, interval);
}
// initial fast syncing
keepTheNodeInSync(2000);
nodeSyncInterval = setInterval(function()
{
web3Local.eth.getBlock("latest", function(error, localBlock) {
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;
// sync all the transactions to the current block
EthoTransactions.syncTransactionsForAllAddresses(localBlock.number);
$(document).trigger("onSyncInterval");
}
}
});
}, 10000);
}
}
}).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.round(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.round(sync.currentBlock / sync.highestBlock * 100)]));
}
});
}, 2000);
} else {
if (nodeSyncInterval) {
clearInterval(nodeSyncInterval);
}
}
});
}
var InitWeb3 = setInterval(function()
{
try {
web3Local = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546'));
web3Remote = new Web3(new Web3.providers.HttpProvider("https://rpc.ether1.org"));
web3Local.eth.net.isListening(function(error, success) {
if (!error) {

View File

@@ -36,13 +36,12 @@ class Transactions {
$.getJSON("https://richlist.ether1.org/transactions_list.php" + params, function( result ) {
result.data.forEach(element => {
ipcRenderer.send('storeTransaction', {
block: element.block,
txhash: element.hash,
fromaddr: element.fromaddr,
block: element.block.toString(),
txhash: element.txhash.toLowerCase(),
fromaddr: element.fromaddr.toLowerCase(),
timestamp: element.timestamp,
toaddr: element.toaddr,
value: element.value,
confirmed: "1"
toaddr: element.toaddr.toLowerCase(),
value: element.value
});
});
@@ -149,11 +148,12 @@ class Transactions {
},
{
"targets": 6,
"defaultContent": "",
"render": function ( data, type, row ) {
if (data == 0) {
return '<i class="fas fa-question"></i>';
} else if (data == 1) {
if (row[1]) {
return '<i class="fas fa-check"></i>';
} else if (data == 1) {
return '<i class="fas fa-question"></i>';
}
}
}
@@ -196,11 +196,11 @@ $(document).on("onSyncInterval", function() {
if ((EthoWallets.getAddressExists(element.from)) || (EthoWallets.getAddressExists(element.to))) {
var Transaction = {
block: element.blockNumber.toString(),
txhash: element.hash.toLowerCase(),
fromaddr: element.from.toLowerCase(),
timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
toaddr: element.to.toLowerCase(),
value: Number(element.value).toExponential(5).toString().replace('+',''),
confirmed: "0",
value: Number(element.value).toExponential(5).toString().replace('+','')
}
// store transaction and notify about new transactions