Pay-to-Script-Hash-Adresstransaktion wird von Minern nicht akzeptiert

Ich habe meine anfänglichen Transaktionen repariert und konnte Coins an eine p2sh-Adresse senden

Jetzt möchte ich diese Coins ausgeben, aber wenn ich versuche, meine Transaktionen zu übertragen, akzeptiert entweder die Website (Blockcypher) sie und sie wird dann später von Minern nicht akzeptiert oder abgelehnt (Blockstream) mit:

senddrawtransaction RPC-Fehler: {"code":-26,"message":"non-mandatory-script-verify-flag (Extra items left on stack after execute)"}

Ich glaube, ich habe das richtige ScriptSig für das 2 von 2 Multisig (OP_0, sig1, sig2, Einlöseskript) erstellt, daher bin ich mir meines Fehlers nicht sicher:

OP_0 3045022100e91708339615eb38326a5c513b5dcc040bf59a1b97faef2c1f59a7b16426519a02200a4ca9d8c9f05ec824c70d1564ae2952650bc0ddc8bce92f081dd7d29d33d7ea01 3045022100ca0e751242a6d33ab2e895a9b1d9e5dce18426f2d11e69009e794ebc1004ba1a0220022a95a3f335fd84b380d6482948c24817a9f021f0dea75689eccf59e1540ae901 2d5214a175b609a7c37011420585f1fcf392fdda9a025414b1e9f0fa01914ff497607f99bf90dbd8a41bd8bb52ae

Und hier ist mein vollständiger TX:

0100000001f51f20dce174d1a894151bdbdf397317b97ec342c4068a6b96d95babb34baa7400000000c200483045022100e91708339615eb38326a5c513b5dcc040bf59a1b97faef2c1f59a7b16426519a02200a4ca9d8c9f05ec824c70d1564ae2952650bc0ddc8bce92f081dd7d29d33d7ea01483045022100ca0e751242a6d33ab2e895a9b1d9e5dce18426f2d11e69009e794ebc1004ba1a0220022a95a3f335fd84b380d6482948c24817a9f021f0dea75689eccf59e1540ae9012e2d5214a175b609a7c37011420585f1fcf392fdda9a025414b1e9f0fa01914ff497607f99bf90dbd8a41bd8bb52aeffffffff01401f0000000000001976a914a175b609a7c37011420585f1fcf392fdda9a025488ac00000000

und der Code, den ich verwende, um es zu erstellen:

https://pastebin.com/c0EvKjPH

Ich denke, Sie haben möglicherweise die Länge des Einlösungsskripts vorangestellt. Das Einlöseskript muss mit „52“ beginnen und nicht mit „2d“. Da sich dadurch der tx ändert, sind die Signaturen nicht mehr gültig. Versuchen Sie, den TX erneut ohne das "2d" zu signieren.

Antworten (1)

Ihrem Einlösungsskript wird die Länge des Skripts vorangestellt ( 2d), was dazu führt, dass die Stack-Ausführung mit dem Einlösungsskript im Stack als Daten abgeschlossen wird, anstatt es als ein anderes Skript zu interpretieren.

Das Skript interpretiert das 2dso, als ob Sie beabsichtigten, Daten mit einer Länge von 45 Bytes in den Stack zu legen, anstatt Ihr Einlöseskript tatsächlich als Skript zu interpretieren. Daher muss Ihr Einlösungsskript mit 52und nicht mit der Länge des Skripts beginnen, die 0x2d ist.

Nachdem Sie das 2daus dem Einlösungsskript gelöscht haben, signieren Sie das TX erneut, da dieses zusätzliche Byte auch das gesamte TX in Sign ändert.

Wenn Sie dieses Einlösungsskript zur Berechnung Ihrer p2sh-Adresse verwendet haben, ist es außerdem möglich, dass Sie das Geld an die falsche Adresse gesendet haben.

Es ist lustig, als ich online nach Hilfe suchte, dass ich von hier aus auf eine Ihrer Fragen gestoßen bin. Ich werde meinen Code ändern und dann den gesamten Vorgang wiederholen, wie Sie es raten, zum Glück sind das keine echten Bitcoins
Lol nice. Lassen Sie mich wissen, wie es geht.