2017-12-07 10 views
0

で適切なキーにデータをソートします。は、私はすべてのアドレスのためのすべての取引の記録を作成しようとしている私は(笑全体イーサリアムblockchain)ループ&ソートに</p> <p>を多数のデータをしようとしているオブジェクト

明らかにこれは非常に集中的プロセスであり、私は私が持っているものを越えて、それをより効率的にするかどうかはわかりません(つまり、効率的ではありません)

それは速いから始まりますが、私はそれを今考えていますtxsオブジェクトのアドレスのルックアップのために遅くなりました。

ご意見、ご協力をよろしくお願いいたします。

https://giphy.com/gifs/3o6fJ7KWqxESY9okk8

var txs = {}; 

var i = 0; 
// Loop over blocks 
(function loop() { 
setTimeout(function() { 
    // Get current block 
    var block = web3.eth.getBlock(i, true, (error, block) => { 
    // debugger; 
    // Loop over transactions in block 
    for(var j = 0; j < block.transactions.length; j++) { 
     // debugger; 
     if(txs[block.transactions[j].to]) { 

     txs[block.transactions[j].to].transactions.push(block.transactions[j]); 
     } else if (txs[block.transactions[j].to]) { 
     txs[block.transactions[j].from].transactions.push(block.transactions[j]); 
     } else { 
     txs[block.transactions[j].to] = { 
      transactions: [block.transactions[j]] 
     } 
     txs[block.transactions[j].from] = { 
      transactions: [block.transactions[j]] 
     } 
     } 
    } 
    }); 
    i++ 
    if (i < highestBlock) { 
    loop(); 
    } 
}, 50); 
})(); 

答えて

1

私はあなたのコードは、「他の-IF」にあることに誤りがあると思います、あなたが代わりにtxs[block.transactions[j].to]txs[block.transactions[j].from]プロパティを使用する必要がありますようです。再帰的パターンを達成したい場合は、setImmediate関数またはprocess.nextTickメソッドを使用できます。 node.js v6 +を使用する場合は、オブジェクトの代わりにMapを使用できます。

+0

ありがとうございました。それは静かにエラーを起こしました:P私はあなたに感謝します。ありがとうございます –

+0

それははるかに効率的ではなかった。 –

+0

この例では、私はES6を使用していますが、パフォーマンスは向上しませんが、維持しやすくする必要があります。 https://jsfiddle.net/o7xwg3p4/ – Siggy

関連する問題

 関連する問題