Ich habe versucht, rohe TXs über eth.sendRawTransaction
die 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.sendRawTransactin
von 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 geth
meine eigene Blockchain, damit ich den Quellcode ändern kann, wenn das hilft.
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.
qweruiop
Peter Szilágyi