8

I attempted to send raw TXs via eth.sendRawTransaction API but get stuck. I'm using EthereumJS to generate and sign TXs, and indeed, I can submit TXs through eth.sendRawTransactin, but the TXs always result in queued (non-processable, per geth doc).

I called eth.sendRawTransactin from a geth console, and it returns a hash as usual. I can get transaction details by that hash:

> 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
}

But the TXs are queued forever:

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

Also sending address is rich enough to pay off the gas:

> eth.getBalance("89b44e4d3c81ede05d0f5de8d1a68f754d73d997")
20000000000000000020

To compare, this is a valid transaction (created and sent by some client)

> 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
}

Since geth can parse them, the format of my TXs has to be correct. I guess the only thing left is the signature. But I'm pretty sure the TX has been properly signed.

Is there a way to get more information about why a TX can't be processed? I'm using geth on my own blockchain so I can modify the source code if that helps.

1 Answer 1

10

If the transaction is queued but not executable, that means that there's a nonce gap between your latest executed transaction and the next in line that's waiting to run.

If you pull in a develop version of geth, it has two extra txpool API endpoint (txpool.content and txpool.inspect) that allows you to list the contents of pending and queue. My guess is that your script misses a nonce, producing non-executable transactions.

2
  • Super! Can you point me to the reference about this rule of nonce?
    – qweruiop
    Commented Feb 2, 2016 at 18:39
  • 1
    gavwood.com/paper.pdf Page 7, section 6, first paragraph, bullet point 3. Commented Feb 2, 2016 at 18:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.