1

我试图通过eth.sendRawTransactionAPI 发送原始 TX,但被卡住了。我正在使用 EthereumJS 生成和签署 TX,实际上,我可以通过 提交 TX eth.sendRawTransactin,但 TX 总是导致排队(不可处理,每个 geth doc)。

eth.sendRawTransactin从一个 geth 控制台调用,它像往常一样返回一个哈希值。我可以通过该哈希获取交易详细信息:

> eth.getTransaction(hash)
{
  blockHash: null,
  blockNumber: null,
  from: "0x89b44e4d3c81ede05d0f5de8d1a68f754d73d997",
  gas: 90000,
  gasPrice: 50000000000,
  hash: "0x69b4a0768e72c3a679a1ae6fb490a831509c3c0a04674b646362d0a3d74689a4",
  input: "0x",
  nonce: 10,
  to: "0xb7e13de69228c37cdff506ea474f31343af33c05",
  transactionIndex: null,
  value: 2000000
}

但是 TX 会永远排队:

> txpool.status
{
  pending: 0,
  queued: 5
}

发送地址也足够丰富来支付gas:

> eth.getBalance("89b44e4d3c81ede05d0f5de8d1a68f754d73d997")
20000000000000000020

比较一下,这是一个有效的交易(由某个客户端创建和发送)

> eth.getTransactionFromBlock(11)
{
  blockHash: "0x41919469d7ed9232adbcacc820e61ad508b30eb5fc4750d3cebd748c22b110b8",
  blockNumber: 11,
  from: "0xb7e13de69228c37cdff506ea474f31343af33c05",
  gas: 90000,
  gasPrice: 50000000000,
  hash: "0xa4d4a22aa1fed291a7da00e24304f7093b4fc09b1c6a18692e4240d6d913d674",
  input: "0x",
  nonce: 4,
  to: "0x89b44e4d3c81ede05d0f5de8d1a68f754d73d997",
  transactionIndex: 0,
  value: 20000000000000000000
}

由于 geth 可以解析它们,因此我的 TX 格式必须正确。我想唯一剩下的就是签名了。但我很确定 TX 已正确签名。

有没有办法获得有关为什么无法处理 TX 的更多信息?我geth在自己的区块链上使用,所以如果有帮助,我可以修改源代码。

4

1 回答 1

1

我曾经遇到过同样的问题,最后发现关键是nonce.

您可能想检查您的 nonce 是否连续并基于您的最新地址。

希望能帮助到你。

于 2016-11-14T09:55:02.470 回答