let batch = new this.web3.BatchRequest();
const arr = [
{name: "test1", att: 100, def: 100},
{name: "test2", att: 100, def: 100},
{name: "test3", att: 100, def: 100},
{name: "test4", att: 100, def: 100},
]
arr.forEach((d) => {
batch.add(this.contract.methods.createCountry(d.name, d.att, d.def, 10, this.account).send.request(this.contractObject, (err, res) => {
if (err) {
throw err;
} else {
console.log(res);
}
}));
});
console.log(batch);
batch.execute();
我知道这不是智能合约的问题,因为我在Remix中进行了彻底的测试并且单独进行了国家推送。我使用web3和Metamask。
合同中的所有值都设置为" test4"
答案 0 :(得分:1)
当连续发送许多事务时,您必须为每个事务设置 nonce ,并将其递增。通常,节点会为您设置nonce,但它不适用于多个顺序事务。
实际上仅发送 last 事务的原因是因为 nonce 可用作覆盖事务之前的事务是开采的(就像你用太少的气体发送它一样)。
我之前已使用代码示例
回答了这个问题答案 1 :(得分:0)
我发现了一个针对此问题的hacky解决方案,并在web3 github上创建了一个问题。
请在此处查看我的问题和解决方案:https://github.com/ethereum/web3.js/issues/1636
我找不到一个简洁的解决方案,但我确信一旦问题得到解决,将会出现一个解决方案。