Teilweises Signieren von Multisig-Rohtransaktionen gibt ErlöseScript/WitnessScript zurück, stimmt nicht mit scriptPubKey überein

Ich möchte eine Rohtransaktion mit Bitcoin über RPC teilweise signieren, aber ich stecke fast am Ende des Prozesses fest, wenn ich versuche, meine manuell erstellte Rohtransaktion zu signieren, und ich habe viele Stunden damit verbracht, den Fehler zu finden, aber ich verstehe ihn nicht. Ich werde hier alle Schritte wiederholen, die ich getan habe.

  1. Zuerst erstelle ich eine 2-3 Multisig-Adresse
$user1_pubkey = "03e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb2";
$user2_pubkey = "02df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea2946210";
$user3_pubkey = $this->bitcoin->getaddressinfo("2Msqe8jLEReQpD4CYnRj29cAqQS8c81zidv")['pubkey'];
$keys[] = $user1_pubkey;
$keys[] = $user2_pubkey;
$keys[] = $user3_pubkey;
$multisig_address = $this->bitcoin->addmultisigaddress(2, $keys);

Returned values:

["address"]=>
    string(35) "2NBet88aY57CSYCkH7nXKb2Bxae4K3xdRBT"
    ["redeemScript"]=>
    string(210) "522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae"
  1. Ich habe zwei kleine Transaktionen an die Multisig-Adresse gesendet (eine mit 0,005 und eine mit 0,004).
ef669e71fb08a2dd7b9d2500a86d53ba75e41c3ab67b4ec58435904d87b749c4
8a9e837e94a639cd104631a29b57a86d55b5dc32b8372b7ec3bacdf777ba57e5
  1. Jetzt rufe ich alle Informationen zu diesen txids ab:
$transaction1 = $this->bitcoin->getrawtransaction("ef669e71fb08a2dd7b9d2500a86d53ba75e41c3ab67b4ec58435904d87b749c4", true);
$transaction2 = $this->bitcoin->getrawtransaction("8a9e837e94a639cd104631a29b57a86d55b5dc32b8372b7ec3bacdf777ba57e5", true);

3.1. Ergebnis der vorherigen Variablen:

$transaction1 =>

array(14) {
  ["txid"]=>
  string(64) "ef669e71fb08a2dd7b9d2500a86d53ba75e41c3ab67b4ec58435904d87b749c4"
  ["hash"]=>
  string(64) "e586e88456cef32c01820d94541296aab85d776d890d8879184b8e70344a6353"
  ["version"]=>
  int(2)
  ["size"]=>
  int(247)
  ["vsize"]=>
  int(166)
  ["weight"]=>
  int(661)
  ["locktime"]=>
  int(1891405)
  ["vin"]=>
  array(1) {
    [0]=>
    array(5) {
      ["txid"]=>
      string(64) "9d0c2b8203b1b8f63ac8a8dc17a0e48b36efceee43d38fde50a6b3c92f811830"
      ["vout"]=>
      int(0)
      ["scriptSig"]=>
      array(2) {
        ["asm"]=>
        string(44) "0014839c3b61637073d6aec4c74a5b2e8fe52fcc4d83"
        ["hex"]=>
        string(46) "160014839c3b61637073d6aec4c74a5b2e8fe52fcc4d83"
      }
      ["txinwitness"]=>
      array(2) {
        [0]=>
        string(142) "3044022055bbad9ea94df56180ded2760dd77b0fc959e633b459bc906e6bd4456f72c71302201d9430ac2ed9debc9508442484accac54021c990e8906ebbf7a6b205ec9e827101"
        [1]=>
        string(66) "0326ae8d30a90a6926b81718dfa07b0b5058636f9c86465a1c3f37b0322af023c8"
      }
      ["sequence"]=>
      int(4294967294)
    }
  }
  ["vout"]=>
  array(2) {
    [0]=>
    array(3) {
      ["value"]=>
      float(0.005)
      ["n"]=>
      int(0)
      ["scriptPubKey"]=>
      array(5) {
        ["asm"]=>
        string(60) "OP_HASH160 c9ebaa3be1c12351c9e07ea5758a68eb20ee5098 OP_EQUAL"
        ["hex"]=>
        string(46) "a914c9ebaa3be1c12351c9e07ea5758a68eb20ee509887"
        ["reqSigs"]=>
        int(1)
        ["type"]=>
        string(10) "scripthash"
        ["addresses"]=>
        array(1) {
          [0]=>
          string(35) "2NBet88aY57CSYCkH7nXKb2Bxae4K3xdRBT"
        }
      }
    }
    [1]=>
    array(3) {
      ["value"]=>
      float(0.01040373)
      ["n"]=>
      int(1)
      ["scriptPubKey"]=>
      array(5) {
        ["asm"]=>
        string(60) "OP_HASH160 301c49c04ede304bdef0ab48e2b365a9eef737e4 OP_EQUAL"
        ["hex"]=>
        string(46) "a914301c49c04ede304bdef0ab48e2b365a9eef737e487"
        ["reqSigs"]=>
        int(1)
        ["type"]=>
        string(10) "scripthash"
        ["addresses"]=>
        array(1) {
          [0]=>
          string(35) "2MwdcJyxRAxqQ4tf6TQSubcLMZd21MrTskx"
        }
      }
    }
  }
  ["hex"]=>
  string(494) "020000000001013018812fc9b3a650de8fd343eeceef368be4a017dca8c83af6b8b103822b0c9d0000000017160014839c3b61637073d6aec4c74a5b2e8fe52fcc4d83feffffff0220a107000000000017a914c9ebaa3be1c12351c9e07ea5758a68eb20ee509887f5df0f000000000017a914301c49c04ede304bdef0ab48e2b365a9eef737e48702473044022055bbad9ea94df56180ded2760dd77b0fc959e633b459bc906e6bd4456f72c71302201d9430ac2ed9debc9508442484accac54021c990e8906ebbf7a6b205ec9e827101210326ae8d30a90a6926b81718dfa07b0b5058636f9c86465a1c3f37b0322af023c84ddc1c00"
  ["blockhash"]=>
  string(64) "00000000b1c75e4431f9c23a75779c964fa51cd714f9703781670f1a2c50a8c7"
  ["confirmations"]=>
  int(388)
  ["time"]=>
  int(1605141275)
  ["blocktime"]=>
  int(1605141275)
}


$transaction2 =>

array(14) {
  ["txid"]=>
  string(64) "8a9e837e94a639cd104631a29b57a86d55b5dc32b8372b7ec3bacdf777ba57e5"
  ["hash"]=>
  string(64) "0e8dfd742d3ea5f12ee7c033112f5e6f585b41e317b3f9d3fef61db4200c4bbd"
  ["version"]=>
  int(2)
  ["size"]=>
  int(247)
  ["vsize"]=>
  int(166)
  ["weight"]=>
  int(661)
  ["locktime"]=>
  int(1891405)
  ["vin"]=>
  array(1) {
    [0]=>
    array(5) {
      ["txid"]=>
      string(64) "ef669e71fb08a2dd7b9d2500a86d53ba75e41c3ab67b4ec58435904d87b749c4"
      ["vout"]=>
      int(1)
      ["scriptSig"]=>
      array(2) {
        ["asm"]=>
        string(44) "0014c7f49ae39660b15632f46a3c69a67ccb4de7dc20"
        ["hex"]=>
        string(46) "160014c7f49ae39660b15632f46a3c69a67ccb4de7dc20"
      }
      ["txinwitness"]=>
      array(2) {
        [0]=>
        string(142) "304402207cc7558274cd9458c44bf7554d0b049bba1388cd82057b3f8d0786bc28690aad022057eea44e01ff11c608e254a844b620f428fb515db6ef33cd199c57d3008ce89c01"
        [1]=>
        string(66) "0303c01176f2db9efaa18e169e0ea7da87784208e05fcb1e0258ccb834805ed02d"
      }
      ["sequence"]=>
      int(4294967294)
    }
  }
  ["vout"]=>
  array(2) {
    [0]=>
    array(3) {
      ["value"]=>
      float(0.004)
      ["n"]=>
      int(0)
      ["scriptPubKey"]=>
      array(5) {
        ["asm"]=>
        string(60) "OP_HASH160 c9ebaa3be1c12351c9e07ea5758a68eb20ee5098 OP_EQUAL"
        ["hex"]=>
        string(46) "a914c9ebaa3be1c12351c9e07ea5758a68eb20ee509887"
        ["reqSigs"]=>
        int(1)
        ["type"]=>
        string(10) "scripthash"
        ["addresses"]=>
        array(1) {
          [0]=>
          string(35) "2NBet88aY57CSYCkH7nXKb2Bxae4K3xdRBT"
        }
      }
    }
    [1]=>
    array(3) {
      ["value"]=>
      float(0.00640207)
      ["n"]=>
      int(1)
      ["scriptPubKey"]=>
      array(5) {
        ["asm"]=>
        string(60) "OP_HASH160 0f670955696f3835ef9204dad881b1c9f3002cc7 OP_EQUAL"
        ["hex"]=>
        string(46) "a9140f670955696f3835ef9204dad881b1c9f3002cc787"
        ["reqSigs"]=>
        int(1)
        ["type"]=>
        string(10) "scripthash"
        ["addresses"]=>
        array(1) {
          [0]=>
          string(35) "2MtefZG3K2Zs38dYntJwJKg1WqSEqNoW9sF"
        }
      }
    }
  }
  ["hex"]=>
  string(494) "02000000000101c449b7874d903584c54e7bb63a1ce475ba536da800259d7bdda208fb719e66ef0100000017160014c7f49ae39660b15632f46a3c69a67ccb4de7dc20feffffff02801a06000000000017a914c9ebaa3be1c12351c9e07ea5758a68eb20ee509887cfc409000000000017a9140f670955696f3835ef9204dad881b1c9f3002cc7870247304402207cc7558274cd9458c44bf7554d0b049bba1388cd82057b3f8d0786bc28690aad022057eea44e01ff11c608e254a844b620f428fb515db6ef33cd199c57d3008ce89c01210303c01176f2db9efaa18e169e0ea7da87784208e05fcb1e0258ccb834805ed02d4ddc1c00"
  ["blockhash"]=>
  string(64) "00000000b1c75e4431f9c23a75779c964fa51cd714f9703781670f1a2c50a8c7"
  ["confirmations"]=>
  int(388)
  ["time"]=>
  int(1605141275)
  ["blocktime"]=>
  int(1605141275)
}

  1. Ich möchte eine Rohtransaktion erstellen, um beide Utxos auszugeben, und ich möchte sie an zwei verschiedenen Adressen ausgeben. In Anbetracht der Gebühr für die Transaktion fahre ich fort, die Transaktion manuell zu erstellen.
        $fee = number_format(floatval($this->bitcoin->estimateSmartFee(6)['feerate'])/5, 8);
        $raw_amount = 0.00000000;
        $txids = [];
        $vouts = [];
        $amounts = [];
        $scriptPubs = [];
        for($i=0; $i<count($transactions); $i++){
            $total_amount+=$transactions[$i]["vout"][0]["value"];
            $txids[] = $transactions[$i]["txid"];
            $vouts[] = $transactions[$i]["vout"][0]["n"];
            $amounts[] = $transactions[$i]["vout"][0]["value"];
            $scriptPubs[] = $transactions[$i]["vout"][0]["scriptPubKey"]["hex"];
        }

        $inputs = '[';
        for($i=0; $i<count($vouts); $i++){
            $inputs.='{
                        "txid": "'.$txids[$i].'",
                        "vout": '.$vouts[$i].'
                      }';
            if($i+1!=count($vouts)){
                $inputs.=',';
            }
        }
        $inputs.=']';

        $minus_fee = $raw_amount-floatval($fee);
        $amount1 = $minus_fee*0.6;
        $amount2 = $minus_fee*0.4;

        $address1 = "tb1qhjcqny2rvaqd7q0700m968e3vuqctmuhhyk9fk";
        $address2 = "tb1q2nrysxf8nwxv8euwtu470wgjruw25guxkal3wd";
        $outputs = '{
                      "'.$address1.'": '.$amount1.',
                      "'.$address2.'": '.$amount2.'
                    }';

        $raw_transaction = $this->bitcoin->createrawtransaction(json_decode($inputs), json_decode($outputs));

4.1. Ergebnis von $raw_transaction ist folgendes:

0200000002c449b7874d903584c54e7bb63a1ce475ba536da800259d7bdda208fb719e66ef0000000000ffffffffe557ba77f7cdbac37e2b37b832dcb5556da8579ba2314610cd39a6947e839e8a0000000000ffffffff02e83c080000000000160014bcb00991436740df01fe7bf65d1f31670185ef97f07d050000000000160014b92b9f7f7bf6e4e1cdd73d3d23a1dbc98aa57d4e00000000
  1. Ich entschlüssele $raw_transaction
$decoded = $this->bitcoin->decoderawtransaction($raw_transaction);

Inhalt von $decoded:

array(9) {
  ["txid"]=>
  string(64) "ba11b2caf11d79c1f4bc349f40895c380218e9ab91ec4c1d52aaee8284749549"
  ["hash"]=>
  string(64) "ba11b2caf11d79c1f4bc349f40895c380218e9ab91ec4c1d52aaee8284749549"
  ["version"]=>
  int(2)
  ["size"]=>
  int(154)
  ["vsize"]=>
  int(154)
  ["weight"]=>
  int(616)
  ["locktime"]=>
  int(0)
  ["vin"]=>
  array(2) {
    [0]=>
    array(4) {
      ["txid"]=>
      string(64) "ef669e71fb08a2dd7b9d2500a86d53ba75e41c3ab67b4ec58435904d87b749c4"
      ["vout"]=>
      int(0)
      ["scriptSig"]=>
      array(2) {
        ["asm"]=>
        string(0) ""
        ["hex"]=>
        string(0) ""
      }
      ["sequence"]=>
      int(4294967295)
    }
    [1]=>
    array(4) {
      ["txid"]=>
      string(64) "8a9e837e94a639cd104631a29b57a86d55b5dc32b8372b7ec3bacdf777ba57e5"
      ["vout"]=>
      int(0)
      ["scriptSig"]=>
      array(2) {
        ["asm"]=>
        string(0) ""
        ["hex"]=>
        string(0) ""
      }
      ["sequence"]=>
      int(4294967295)
    }
  }
  ["vout"]=>
  array(2) {
    [0]=>
    array(3) {
      ["value"]=>
      float(0.0053988)
      ["n"]=>
      int(0)
      ["scriptPubKey"]=>
      array(5) {
        ["asm"]=>
        string(42) "0 bcb00991436740df01fe7bf65d1f31670185ef97"
        ["hex"]=>
        string(44) "0014bcb00991436740df01fe7bf65d1f31670185ef97"
        ["reqSigs"]=>
        int(1)
        ["type"]=>
        string(18) "witness_v0_keyhash"
        ["addresses"]=>
        array(1) {
          [0]=>
          string(42) "tb1qhjcqny2rvaqd7q0700m968e3vuqctmuhhyk9fk"
        }
      }
    }
    [1]=>
    array(3) {
      ["value"]=>
      float(0.0035992)
      ["n"]=>
      int(1)
      ["scriptPubKey"]=>
      array(5) {
        ["asm"]=>
        string(42) "0 b92b9f7f7bf6e4e1cdd73d3d23a1dbc98aa57d4e"
        ["hex"]=>
        string(44) "0014b92b9f7f7bf6e4e1cdd73d3d23a1dbc98aa57d4e"
        ["reqSigs"]=>
        int(1)
        ["type"]=>
        string(18) "witness_v0_keyhash"
        ["addresses"]=>
        array(1) {
          [0]=>
          string(42) "tb1qhy4e7lmm7mjwrnwh857j8gwmex922l2wwc830y"
        }
      }
    }
  }
}
  1. Jetzt fahre ich fort, die zuvor erstellte Transaktion teilweise zu signieren.
        $private_key = $this->bitcoin->dumpprivkey("2Msqe8jLEReQpD4CYnRj29cAqQS8c81zidv"); // cS6e5CojfNy2ELWcsB4tLFVQV9wSSQUw1PU4YrSwRSjYLaC8ikrU
        $redeemScript = "522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae";
        $vin = $raw_transaction["vin"];
        $vout = $raw_transaction["vout"];

        $prevtxs = '[';
        for($i=0; $i<count($txids); $i++){
            $prevtxs .= '{
                    "txid": "'.$txids[$i].'",
                    "vout": '.$vouts[$i].',
                    "scriptPubKey": "'.$scriptPubs[$i].'", 
                    "redeemScript": "'.$redeemScript.'",
                    "amount": '.$amounts[$i].'
                  }';
            if($i+1!=count($txids)){
                $json2.=',';
            }
        }
        $prevtxs.=']';

        $partially_signed = $this->bitcoin->signrawtransactionwithkey($raw_transaction, json_decode($private_key), json_decode($prevtxs));
  1. Und im vorherigen Schritt schlägt der Prozess fehl. Die Transaktion ist nicht signiert und die Bitcoin gibt diesen Fehler zurück:
redeemScript/witnessScript does not match scriptPubKey

Ich verwende Bitcoin Testnet, um es zu testen, und ich denke, dass ich alle Informationen hinzugefügt habe. Wenn jemand weiß, wo der Fehler liegt, bitte melden. Ich habe nach Informationen gesucht, um das Problem zu beheben, aber ich konnte keine Lösung für mein Problem finden.

Bearbeitet: Ich habe das nächste Tutorial befolgt , in dem ich feststellen konnte, dass ich den falschen Skriptpub verwendet habe, und ich habe Finanzierungseingaben mit getrawtransaction abgerufen, indem ich das zweite Argument (true) übergab, um die decodierte Transaktion zu erhalten. Und nun, jetzt ist der vorherige Fehler weg, aber jetzt wird ein neuer Fehler ausgegeben:redeemScript/witnessScript does not match scriptPubKey

Danke

Antworten (2)

Ihr Einlösungsskript-Hash sollte sein:

RIPEMD160(SHA256(0x522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae)) = 0bf37781383277cbb4e544c402f5265a51f4d828

Was ergibt diese Adresse:

2MtLR5mKgWRZBYtCYiSuaKpTUSuney9Cg2V

Irgendwie landen Sie jedoch bei diesem Hash:

c9ebaa3be1c12351c9e07ea5758a68eb20ee5098

Was ergibt diese Adresse:

2NBet88aY57CSYCkH7nXKb2Bxae4K3xdRBT
Vielen Dank für Ihre Antwort! Ich wusste nicht, dass ich das Einlöseskript hashen sollte, also versuche ich, die Schritte zu replizieren, denen Sie gefolgt sind: hash('ripemd160', hash('sha256', '0x522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae'))aber es hat )``` 3ad9a694cd5881032106e839f834600141b533e3)``` anstelle Ihres Hashs zurückgegeben. Ich benutze PHP, aber ich glaube nicht, dass es mein Problem ist. Irgendeine Idee?
Über diesen Hash c9ebaa3be1c12351c9e07ea5758a68eb20ee5098und die Adresse 2NBet88aY57CSYCkH7nXKb2Bxae4K3xdRBTscheint es, dass es aus den Informationen von Transaktionen in der Multisig-Adresse stammt
„3ad9a694cd5881032106e839f834600141b533e3“ ist das Ergebnis des Digests der Zeichenfolgennachricht. Setzen Sie „raw_output“ auf „true“, um den Digest der Hex-Nachricht zu berechnen. php.net/manual/en/function.hash.php
Entschuldigen Sie die erneute Störung, aber ich sehe es immer noch nicht. Zuerst bin ich Ihrem Rat gefolgt und habe raw_out aktiviert, was mir die binäre Ausgabe gegeben hat, dann habe ich sie in Hex konvertiert: bin2hex(hash('ripemd160', hash('sha256', '0x522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae', true), true));aber es hat nicht den gewünschten Wert zurückgegeben, ich habe auch versucht, "0x" aus dem redeen-Skript hinzuzufügen und zu entfernen, aber es hat nicht funktioniert .
Und ich habe alle Kombinationen mit sha256 mit raw_out und dem anderen nicht usw. ausprobiert. Andererseits habe ich meinen aktuellen Einlösungsskriptwert durch den ersetzt, den Sie mir gegeben haben, 0bf37781383277cbb4e544c402f5265a51f4d828aber ich erhalte immer noch den gleichen Fehler
Try: hash('ripemd160', hex2bin(hash('sha256', hex2bin('522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae'))));
Perfekt! Es gibt denselben Hash zurück, den Sie gepostet haben! :) Aber leider, wenn ich den neuen Hash als Redescript an die Funktion signtransaction übergebe, gibt es den gleichen Fehler zurück. Ich habe einfach den gleichen Prozess befolgt, den ich hier beschrieben habe, aber nur den Inhalt von $redeemScript von zu 522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253aegeändert0bf37781383277cbb4e544c402f5265a51f4d828

2MtLR5mKgWRZBYtCYiSuaKpTUSuney9Cg2V ist Ihre neue Adresse, die von scriptHash abgeleitet wird 0x0bf37781383277cbb4e544c402f5265a51f4d8289. Gehen Sie ganz zurück zu Schritt 2 und senden Sie 0,005 & 0,004 an 2MtLR5mKgWRZBYtCYiSuaKpTUSuney9Cg2V . scriptPubKey dieser Transaktionen sind beide OP_HASH160 0bf37781383277cbb4e544c402f5265a51f4d828 OP_EQUAL.

Rufen Sie diese txids wie in Schritt 3 ab, um eine neue Ausgabentransaktion zu erstellen. Die Ausgabentransaktion hat zwei Eingaben. Eine entsperrt 0,005 BTC, eine andere entsperrt 0,004 BTC. Sie müssen entsprechende scriptSigs jeder Eingabe einschließen, die die Entsperrbedingungen erfüllt. Ihre Entsperrbedingung war 2-3 Multisig, also sollte Ihre scriptSig wie folgt aussehen:

OP_0 <First Signature> <Second Signature> < OP_2 <First PublicKey> <Second PublicKey> <Third PublicKey> OP_3 OP_CHECKMULTISIG >
  1. OP_0ist kodiert wie 0x00in hex.

  2. Angenommen, Ihre erste DER-codierte Signatur ist 72 Byte lang, plus Ein-Byte-Hashcodetyp am Ende, plus Ein-Byte-Längenpräfix am Anfang, lautet wie folgt:

49 30460221AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0221BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 01

  1. Angenommen, Ihre zweite DER-codierte Signatur ist ebenfalls 72 Byte lang, plus Ein-Byte-Hashcodetyp am Ende, plus Ein-Byte-Längenpräfix am Anfang lautet wie folgt:

49 30460221CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0221DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 01

  1. < OP_2 <First PublicKey> <Second PublicKey> <Third PublicKey> OP_3 OP_CHECKMULTISIG >plus Präfix mit einer Länge von einem Byte wird in Hex kodiert:

69 522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae

Ihre scriptSig in Hex sieht folgendermaßen aus:

0x004930460221AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0221BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB014930460221CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0221DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD0169522103e33af80b92e4efd64852166d6126e10aafdcc741579c67c6aa9eb89080cebeb22102df4bf6a54f79b333b7796d2941de13b1755c00c09f4dbf696c7729aea29462102102c099a12b6cba679ad56d8e793847f422634bc84b42cb3fae0b00a6943f56921253ae

Erstellen Sie scriptSig auch für die andere Eingabe. Sie müssen Ihren PHP-Code anpassen, um all dies zu erreichen.

Nochmals vielen Dank, dass Sie sich die Zeit für eine ausführliche Antwort genommen haben. Ich habe meine Frage bearbeitet, weil ich einem Tutorial gefolgt bin (ich habe den Link am Ende hinzugefügt), in dem erklärt wird, wie ich mein gewünschtes Ergebnis erreiche, ohne manuelle Skripte zu berechnen. Ich habe ein paar Fehler gefunden, das Einlösungsskript wird jetzt richtig berechnet, aber wenn ich es versuche unterschreibe die Transaktion, es heißt, dass das Einlösungsskript/Witnessscript nicht mit scriptPubKey übereinstimmt ... Um ehrlich zu sein, ist es auch schwierig, den Prozess mit Bitcoin-Skript und DER-Codierung zu verfolgen, da ich neu darin bin, aber ich habe den ganzen Tag darüber gelesen offizielle Website
Übrigens, haben Sie eine E-Mail oder eine andere externe Möglichkeit, Sie zu kontaktieren? Wenn Sie Spenden annehmen, möchte ich Ihnen eine Spende zukommen lassen, sobald es funktioniert
Sie erreichen mich unter burak@credentialsapp.org