将数据排序到对象中的适当键

时间:2017-12-07 23:19:57

标签: node.js rpc blockchain ethereum

我正在尝试循环播放排序大量数据(整个以太坊区块链lol)

我正在尝试为每个地址创建所有交易的记录。

显然这是一个非常密集的过程,我不知道如何使它超出我的效率(效率不高)

它开始很快但我现在认为它已经因为查找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 个答案:

答案 0 :(得分:1)

我认为您的代码在“else-if”中有错误,您似乎应该使用txs[block.transactions[j].from]属性而不是txs[block.transactions[j].to]。如果您只想完成递归模式,可以使用setImmediate函数或process.nextTick方法。如果您使用node.js v6 +,则可以使用Map而不是对象。