Empfang von `error: {"code":-25,"message":""}` bei senddrawtransaction mit v0.9.3

Ich betreibe einen Bitcoin-Regtest-Knoten. Beim Versuch, eine Transaktion (erstellt mit Bitcoin-Ruby) weiterzuleiten, erhalte ich,
error: {"code":-25,"message":""}wenn ich den Knoten neu starte und genau dieselbe Transaktion weiterleite, die er gut weiterleitet. Dieses Verhalten ist konsistent und reproduziert sich jedes Mal.

Meine Ausgabe für decoderawtransactionist:

{
    "txid" : "df91267ed650795245882bc91b8dc104e6c41d2f29ed3221f29151aa60554842",
    "version" : 1,
    "locktime" : 0,
    "vin" : [
        {
            "txid" : "fab40dbf6b95ef2fe5f4aca0668a84edebdf70cfb80565626be80c7af20a525e",
            "vout" : 0,
            "scriptSig" : {
                "asm" : "0 3046022100fb2a69546ea44db3a06cfcf120d1fda135bfde0946f2186a52d8cfee83835705022100c680cc5135174425ce5137a2996fbdcd55463c4acb88bb9fdbdb03f70f0a213b01 30460221008294d1779bfb21240859feccc96104dea574541d41163d2c849846d8e44496fe022100faf00dabba65f22469a1116ea10d5ce34f90bea779ba770ae1ac3af5c432379e01 52210261318d096a7addf67d935076c28dfa4a1c0e8f2ed04a7cb47ac53bd7fe2ebe6d210397866513a1796e75aae6a53d54d0ccc904c56fa12e14ab0ee989a6eed6e29c0352ae",
                "hex" : "00493046022100fb2a69546ea44db3a06cfcf120d1fda135bfde0946f2186a52d8cfee83835705022100c680cc5135174425ce5137a2996fbdcd55463c4acb88bb9fdbdb03f70f0a213b014930460221008294d1779bfb21240859feccc96104dea574541d41163d2c849846d8e44496fe022100faf00dabba65f22469a1116ea10d5ce34f90bea779ba770ae1ac3af5c432379e014c4752210261318d096a7addf67d935076c28dfa4a1c0e8f2ed04a7cb47ac53bd7fe2ebe6d210397866513a1796e75aae6a53d54d0ccc904c56fa12e14ab0ee989a6eed6e29c0352ae"
            },
            "sequence" : 4294967295
        }
    ],
    "vout" : [
        {
            "value" : 1.00000000,
            "n" : 0,
            "scriptPubKey" : {
                "asm" : "OP_HASH160 ee7455fa97980531b90b15f5f18386122a7f6919 OP_EQUAL",
                "hex" : "a914ee7455fa97980531b90b15f5f18386122a7f691987",
                "reqSigs" : 1,
                "type" : "scripthash",
                "addresses" : [
                    "2NEz4B6YtgTCpv6Qv56f7HarXUeHeLmdmih"
                ]
            }
        },
        {
            "value" : 0.99990000,
            "n" : 1,
            "scriptPubKey" : {
                "asm" : "OP_HASH160 0b607311f3db7d2a28b4c6fd259913356a86c302 OP_EQUAL",
                "hex" : "a9140b607311f3db7d2a28b4c6fd259913356a86c30287",
                "reqSigs" : 1,
                "type" : "scripthash",
                "addresses" : [
                    "2MtHNxpeYfFmLTMDnW7DFf9y9ZnM49u4tXW"
                ]
            }
        }
    ]
}

Der referenzierte txout hat 2 BTC. Ich habe auch versucht sendrawtransaction <hex>, true, einige Gebührenprobleme auszuschließen. Gleiches Symptom. Ich habe keine spezielle Debug-Meldung in debug.log gesehen

Meine Ausgabe für getinfoist:

{
    "version" : 90300,
    "protocolversion" : 70002,
    "walletversion" : 60000,
    "balance" : 530.90534322,
    "blocks" : 460,
    "timeoffset" : 0,
    "connections" : 1,
    "proxy" : "",
    "difficulty" : 0.00000000,
    "testnet" : false,
    "keypoololdest" : 1421187525,
    "keypoolsize" : 101,
    "paytxfee" : 0.00000000,
    "relayfee" : 0.00001000,
    "errors" : ""
}

Ich versuche immer noch, v0.10 zum Debuggen in meine Umgebung zu stecken, ich verstehe, dass bitcoin-core bessere Nachrichten für Code -25 hat, aber ich brauche das immer noch, um gut mit einem v0.9-Knoten zu spielen.

Danke, das habe ich mir schon angeschaut. Ich habe versucht, vor dem Relais zu minen, um den Mempool zu leeren, aber das Gleiche passiert, Fehler, es sei denn, ich starte den Knoten neu, danach funktioniert es (dies schließt doppelte Ausgaben aus).
Das Schürfen des Speicherpools schließt doppelte Ausgaben nicht aus: Wenn im Speicherpool ein widersprüchliches TX vorhanden war, wird durch das Schürfen dieses widersprüchliche TX in die Blockkette eingefügt – Ihre Transaktion ist also immer noch ein Konflikt. Können Sie verwenden getrawmempool, um zu überprüfen, ob es keine widersprüchlichen tx im Mempool gibt, und getblockum zu überprüfen, ob es keine widersprüchlichen tx in den Blöcken gibt, die Sie abgebaut haben? Außerdem, gettxoutum sicherzustellen, dass der Input, den Sie auszugeben versuchen, vorhanden ist.
Danke @David, ich habe getrawmempoolnach getblockwidersprüchlichen TX gesucht und keine gefunden. Ich stimme zu, dass Mining doppelte Ausgaben nicht ausschließt, aber die Möglichkeit, den TX weiterzuleiten und ihn nach dem Mining eines Blocks und einem Node-Neustart zu minen, tut dies. Wenn ich das tue gettxout, bekomme ich ein seltsames Verhalten. Ich konstruierte den tx, um Eingang 1 eines tx zu verwenden. Ich sehe einen TXOUT für gettxout <hash> 0 true, aber nicht für gettxout <hash> 1 true. Wenn ich Bitcoin neu starte, sehe ich beide Outpoints 0 und 1.
Außerdem passiert dies nur mit Bitcoin, wenn ich über einen Nicht-Bitcoind-Knoten weiterleite, der mit meinem Bitcoin-Knoten verbunden ist, wird es problemlos weitergeleitet und in den Block aufgenommen.
Außer dem Testen mit 0.10.0 und vielleicht auch dem regulären Testnet fällt mir nichts anderes ein, das Sie ausprobieren könnten. Wenn Sie das Problem auf 0.10.0 reproduzieren können, ist es möglicherweise an der Zeit, das Problem zu melden .

Antworten (1)

Nach dem Verbinden mit Bitcoin-Core (0.10.0rc3) erhielt ich:

ERROR: CScriptCheck() : 620186f101b7db97393af8747923db4cf3f30c3c3c48f4c7cfc23567b6d9ca07:0 VerifySignature failed: Data push larger than necessary
ERROR: AcceptToMemoryPool: : ConnectInputs failed 620186f101b7db97393af8747923db4cf3f30c3c3c48f4c7cfc23567b6d9ca07

(Danke Bitcoin-Entwickler für das Hinzufügen vernünftiger Fehlermeldungen !)

Von hier aus bemerkte ich, dass ich die Transaktion mit einem veralteten Fork von bitcoin-ruby aufbaute , die Aktualisierung auf die neueste bitcoin-ruby behob dieses Problem (sowohl auf 0.9.03 als auch auf 0.10.0). Ich bin mir immer noch nicht sicher, warum es erst nach einem Bitcoin-Neustart weitergeleitet wird. Ich werde diese Antwort bearbeiten, wenn ich das herausfinde.