sendRawTransaction führt zu TXs in der Warteschlange

Ich habe versucht, rohe TXs über eth.sendRawTransactiondie API zu senden, bin aber hängen geblieben. Ich verwende EthereumJS, um TXs zu generieren und zu signieren, und tatsächlich kann ich TXs über senden eth.sendRawTransactin, aber die TXs führen immer zu einer Warteschlange (nicht verarbeitbar, pro Geth-Dokument).

Ich habe eth.sendRawTransactinvon einer Geth-Konsole aus aufgerufen und es gibt wie üblich einen Hash zurück. Ich kann Transaktionsdetails durch diesen Hash erhalten:

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

Aber die TXs werden für immer in die Warteschlange gestellt:

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

Auch die Absenderadresse ist reich genug, um das Benzin abzuzahlen:

> eth.getBalance("89b44e4d3c81ede05d0f5de8d1a68f754d73d997")
20000000000000000020

Zum Vergleich: Dies ist eine gültige Transaktion (von einem Client erstellt und gesendet).

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

Da Geth sie analysieren kann, muss das Format meiner TXs korrekt sein. Bleibt wohl nur noch die Signatur. Aber ich bin mir ziemlich sicher, dass der TX richtig signiert wurde.

Gibt es eine Möglichkeit, weitere Informationen darüber zu erhalten, warum eine TX nicht verarbeitet werden kann? Ich verwende gethmeine eigene Blockchain, damit ich den Quellcode ändern kann, wenn das hilft.

Antworten (1)

Wenn sich die Transaktion in der Warteschlange befindet, aber nicht ausführbar ist, bedeutet dies, dass zwischen Ihrer zuletzt ausgeführten Transaktion und der nächsten Transaktion, die darauf wartet, ausgeführt zu werden, eine einmalige Lücke besteht.

Wenn Sie eine Entwicklungsversion von geth abrufen, verfügt diese über zwei zusätzliche txpool-API-Endpunkte (txpool.content und txpool.inspect), mit denen Sie den Inhalt von „pending“ und „queue“ auflisten können. Ich vermute, dass Ihr Skript eine Nonce auslässt und nicht ausführbare Transaktionen erzeugt.

Super! Können Sie mich auf die Referenz zu dieser Nonce-Regel verweisen?
gavwood.com/paper.pdf Seite 7, Abschnitt 6, erster Absatz, Aufzählungspunkt 3.