"mandatory-script-verify-flag-failed (Signatur muss null sein für fehlgeschlagene check(multi)sig Operation)"

Ich habe den Openwallet-Android gegabelt, damit ich meine Münze hinzufügen konnte - (Platzhalter) placeh.io.

Das Openwallet-Android verbindet sich mit dem electrumx-Server. Ich kann meine Kette auf dem electrumx-Server korrekt laden. Das Openwallet liest das Guthaben korrekt aus der Adresse / Eingaben und Sie können Ihr Guthaben über das Wallet sehen.

Wenn ich jedoch versuche, eine Transaktion zu übertragen, erhalte ich die Meldung:

"mandatory-script-verify-flag-failed (signature must be zero for failed check(multi)sig operation)"

Von placehd/placeh-Netzwerk.

Hier sind einige zusätzliche Informationen, dies ist die Rohtransaktion, die veröffentlicht wird. Wenn ich versuche, die Rohtransaktion im placeh-cli-Client zu senden, ist dies nicht erfolgreich und erzeugt den gleichen Fehler, wenn es manuell ausgeführt wird

Rohtransaktion:

placeh-cli decoderawtransaction 

01000000017477f59250a8d8a7d94ba5dcc196222c0b6c92849cad210735b4380b24c03b13010000006a473044022053b17723e8a90846fc341006f5f63d5776df619f33cec82d8065e836508672c6022036298087c2f37c3002c4897b74e7de6af8c608c89cbcef07ada9c5551c85f2810121031dc78b8c254649e204b81641f70497980ca6b5574f837001c962930580d1372dffffffff02c00e1602000000001976a914a117ed0f4e2afe1e1b8d2b0253408a7830f2b55688ac0093e651020000001976a914c472af380586ed1638686731cc1eda3c60363ec788ac00000000
{
  "txid": "de045f2220d0b9f34060336c9ed3badc7c22741fec3aa1d87ff24264c3c1fb5e",
  "hash": "de045f2220d0b9f34060336c9ed3badc7c22741fec3aa1d87ff24264c3c1fb5e",
  "version": 1,
  "size": 225,
  "vsize": 225,
  "locktime": 0,
  "vin": [
    {
      "txid": "133bc0240b38b4350721ad9c84926c0b2c2296c1dca54bd9a7d8a85092f57774",
      "vout": 1,
      "scriptSig": {
        "asm": "3044022053b17723e8a90846fc341006f5f63d5776df619f33cec82d8065e836508672c6022036298087c2f37c3002c4897b74e7de6af8c608c89cbcef07ada9c5551c85f281[ALL] 031dc78b8c254649e204b81641f70497980ca6b5574f837001c962930580d1372d",
        "hex": "473044022053b17723e8a90846fc341006f5f63d5776df619f33cec82d8065e836508672c6022036298087c2f37c3002c4897b74e7de6af8c608c89cbcef07ada9c5551c85f2810121031dc78b8c254649e204b81641f70497980ca6b5574f837001c962930580d1372d"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.35000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 a117ed0f4e2afe1e1b8d2b0253408a7830f2b556 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914a117ed0f4e2afe1e1b8d2b0253408a7830f2b55688ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "FLWtv6SuocTFMozTZvdZAhroJLehVjLKhs"
        ]
      }
    },
    {
      "value": 99.64000000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 c472af380586ed1638686731cc1eda3c60363ec7 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914c472af380586ed1638686731cc1eda3c60363ec788ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "FPjqHpEzdYAbxVG2acxz8GWGAPmJsWj6oP"
        ]
      }
    }
  ]
}

Ich glaube, dass dies etwas damit zu tun haben könnte, wie OpenWallet die Rohtransaktion erstellt. Ich möchte die Bibliotheken aktualisieren, damit sie die Transaktion korrekt übertragen können.

Dies bedeutet, dass die Signatur ungültig war, die Signatur möglicherweise nicht korrekt erstellt wird, die Transaktionsdaten, die sie signiert, möglicherweise nicht übereinstimmen oder der (die) verwendete(n) private(n) Schlüssel nicht in der Lage ist, die vorherige Ausgabe auszugeben.
JBaczuk: Haben Sie Vorschläge, wie ich dieses Problem beheben könnte? Transaktionen, die in placeh-qt erstellt und signiert wurden, scheinen gut zu funktionieren.
Ohne (a) die ausgegebenen Transaktionsausgaben und (b) die Konsensregeln Ihres Altcoins gibt es keine Möglichkeit, dies zu beantworten.
Danke Pieter, ich habe die Altcoin-Quelle hier gepostet, es ist eine "ziemlich neue" Fork von Bitcoin Core. github.com/xagau/placeh
Ihre tatsächliche Signatur ist gültig (zumindest nach meinem Bitcoin-Skript vm). Vielleicht stoßen Sie auf etwas Ähnliches . Sind Sie sicher, dass Openwallet die Beträge beim Signieren korrekt behandelt?
@RaghavSood woher bekommst du das EingabeskriptPubKey, um es zu validieren?
Raghav, ich bin mir nicht sicher. Ich weiß nicht, wie lange es her ist, dass Openwallet "tatsächlich aktualisiert" wurde, aber es scheint mit Bitcoin zu funktionieren, obwohl ich kein echtes Bitcoin zum Testen hineingeschickt habe. Der Openwallet-Fork ist unter github.com/xagau/openwallet-android beendet . Leider muss ich dieses grundlegende Klempnerproblem lösen, bevor ich versuchen kann, darauf aufzubauen, und es ist nur ein bisschen außerhalb meiner Liga. Ich habe Kommentare darüber gesehen, dass sich die Vout-Beträge zu einem genauen Betrag einschließlich der Gebühr summieren müssen, aber ich bin mir etwas unsicher.
@JBaczuk Habe gerade die Adresse des auf der Coin-Site verlinkten Explorers entschlüsselt, um den HASH160 ( 40840b34365502f6fa5f066b137cf5081b7be8f8) zu erhalten, und dann die Opcodes selbst wieder hinzugefügt, um zu erhalten 76a91440840b34365502f6fa5f066b137cf5081b7be8f888ac, was ein Standard-p2pkh-Skript ist
@xagau Deine Beträge unter decoderawtransaction scheinen korrekt zu sein. Es ist möglich, dass die Beträge während des Signiervorgangs nicht korrekt erfasst werden, sodass die Beträge in Ihrem vout im Rohdatensatz von den signierten abweichen. Dies ist jedoch reine Spekulation, die nur auf der Tatsache basiert, dass es im Bitcoin-Kern ein offenes Problem dafür gibt und dass die Signatur selbst gültig ist.
@RaghavSood danke, und dank Pieter, JBaczuk, das gibt mir einen Ort, an dem ich suchen kann. Wenn ich eine Lösung finde, kann ich diesen Thread ändern und einen Kommentar zum offenen Problem zum Bitcoin-Kern hinzufügen. Danke!
@PieterWuille, RaghavSood, JBaczuk: Ich habe herausgefunden, was hier das Problem war, als Referenz. Ich musste eine Signraw-Transaktion durchführen, damit es "funktioniert". Es scheint, dass etwas am Signiervorgang des Clients (Openwallet-Android) den Signiervorgang in 0,12 Bitcoin abgelehnt hat. Nachdem ich die Rohtransaktion mit dem neuesten Altcoin-Client signiert hatte, konnte er eine signierte Transaktion „hex“ erstellen, die vom Netzwerk akzeptiert wurde.

Antworten (1)

Nach einigen zusätzlichen Recherchen und hilfreichen Informationen, die hier gefunden wurden, konnte ich Folgendes feststellen:

Transaktionen, die auf 0.12.X-Bitcoin codiert und dann auf 0.15-Bitcoin übertragen werden, können auf „mandatory-script-verify-flag-failed (signature must be zero for failed check(multi)sig operation)“ stoßen.

Dieses Problem kann wie folgt gelöst werden: Signieren Sie Ihre 0.12.X-Rohtransaktion mit einer 0.15-Signatur. Ich kann das genaue Problem nicht genau bestimmen, aber ich konnte die Rohtransaktion auf 0.12.X codieren und auf 0.15 signieren und erfolgreich senden. Diese Informationen können nützlich sein, wenn jemand versucht herauszufinden, welche Teile seines Signaturprozesses umgestaltet/aktualisiert werden müssen.