使用 Nodejs 对循环中的多个收件人地址执行 web3.eth.sendRawTransaction()



我正在尝试创建一个程序,将ETH从一个帐户地址发送给许多人。我创建了下面的代码,但是,它只将 ETH 发送到函数_to参数的第一个值。

因此,每次我重新加载页面时,我都希望该函数对参数内定义的所有帐户执行 sendRawTransaction(_to,但它没有。

我是以太坊的新手,任何建议/帮助都非常棒!

function multipleSend(_from, _to, _key) {
    // var x = "";
    var key = new Buffer(_key, 'hex');
    var amount = 1;
    for(var i = 0; i < 3; i++) {
        nonce = balance(_from);
        var rawTx = {
            nonce: web3.toHex(nonce),
            gasPrice: web3.toHex(10),
            gasLimit: web3.toHex(21000),
            to: _to[i],
            value: web3.toHex(amount * 1000000000),
            data: "",
            chainId: i+=1
        }
        var transaction = new tx(rawTx);
        transaction.sign(key);
        var serializedTx = transaction.serialize().toString('hex');
        web3.eth.sendRawTransaction('0x'+serializedTx, function(err, hash){
            if(!err){stat = hash;}
        });
    }
    return stat;
}
multipleSend(accounts[0].toString(),[accounts[1].toString(),accounts[2].toString(),accounts[3].toString()], '1e3f65b1dbfe697255b8d287fbcba2b999ec8520af1ae67c21e3ae825889f557');

这一行看起来非常错误:

chainId: i+=1

每笔交易使用不同的链ID,这不可能是你想要的。此外,i在循环的每次迭代中递增两次,因此您肯定不会发送三个事务。

另一个可疑代码位:

nonce = balance(_from);

balance做什么?对于确定帐户nonce的功能来说,这也是一个非常奇怪的名称。在编写这样的循环时,我建议获取正确的nonce一次,然后随着每个事务的增加而递增,而不是再次确定它。否则,在确定随机数时,您可能没有考虑刚刚发送的交易。

最新更新