Node.js 发送原始事务以太坊infura nodejs npm

Node.js 发送原始事务以太坊infura nodejs npm,node.js,blockchain,ethereum,web3js,Node.js,Blockchain,Ethereum,Web3js,我目前正在尝试实现与我的Typescript/Node项目的以太坊节点连接 我正在连接到“Infura”节点服务器,在那里我需要在本地签署我的事务。 好吧,不管怎样。我正在使用npm包“Ethereum JS tx”签署我的交易,一切看起来都很棒。 当我从web3使用“sendRawTransaction”时,我的响应是一个tx id,这意味着我的交易应该在区块链中准备就绪。好。。。不是 我的签名交易功能如下。 private-signtransactionlocal(amountnwei:nu

我目前正在尝试实现与我的Typescript/Node项目的以太坊节点连接

我正在连接到“Infura”节点服务器,在那里我需要在本地签署我的事务。 好吧,不管怎样。我正在使用npm包“Ethereum JS tx”签署我的交易,一切看起来都很棒。 当我从web3使用“sendRawTransaction”时,我的响应是一个tx id,这意味着我的交易应该在区块链中准备就绪。好。。。不是

我的签名交易功能如下。
private-signtransactionlocal(amountnwei:number,to:string,privateKey:string=,wallet:string=){
const pKeyBuffer=Buffer.from(私钥,“十六进制”);
常量txParams={
nonce:this.getNonce(真的,钱包),
//gas:this.getGasPrice(正确),
gasLimit:this.getGasLimit2(true),
致:致,,
价值:amountInWei,
数据:“0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000”,
链ID:“0x1”
};
//log(JSON.stringify(txParams));
const tx=新的this.ethereumTx(txParams);
tx.sign(pKeyBuffer);
返回tx.serialize().toString(“十六进制”);

}
在无数次处理这些问题之后;我很确定您发送的当前值太高了

在这些情况下,节点仍将返回事务哈希,但您的事务将保留在节点队列中,并且不会进入内存池或传播到其他节点,,直到您填补当前间隙

您可以尝试以下方法:

  • 使用getTransactionCount(地址“pending”)-包括作为int节点队列和内存池的txs。但是这种方法不可靠,并且不会处理并发请求,因为节点在任何给定时间都需要时间来评估正确的请求量

  • 保留自己的计数器,而不依赖节点(除非检测到一些严重错误)

  • 对于更严肃的项目,在数据库级别使用锁持久化计数器/每个地址,以处理并发性,确保为每个请求提供正确的nonce


Cheers

我也有类似的问题,但在我的例子中,我了解到它仍然可以生成Tx id,但如果nonce错误,它实际上不会处理。