Ausgabentransaktion mit benutzerdefinierter Ausgabe

Ich habe kürzlich die Bitcoin-Arena betreten, und bitcoinj war meine Werkzeugwahl. Beim Experimentieren mit dem Regressionstestmodus konnte ich die folgende benutzerdefinierte Transaktion erstellen. Es hat ein modifiziertes Sperrskript und würde ein modifiziertes Entsperr-, Eingabe-, Skript benötigen.

 //Sender: sig pubk [dup() hash() pubk equ() chksig() OP_VERIFY() match_me eqal()] 
 //Receiver: matcher sig pubk [dup() hash() pubk equ() chksig()]

 Script locking = new ScriptBuilder()
      .op(OP_DUP)
      .op(OP_HASH160)
      .data(address3.getHash160())
      .op(OP_EQUALVERIFY).op(OP_CHECKSIG)
      .op(OP_VERIFY)/*gets rid of the true left by previous checksig*/
      .data(match_me)/*32bytes to be matched in unlocking script*/
      .op(OP_EQUAL)/*checks the equality of match_me with one provided by receiver*/
      .build();

 Transaction contract = new Transaction(params);  

 contract.addOutput(COIN.multiply(25), locking);                           
 SendRequest req = SendRequest.forTx(contract); 
 wallet2.wallet().completeTx(req);
 wallet2.peerGroup().broadcastTransaction(req.tx);

Hier versuche ich, diese Transaktion zu erstellen, die nicht ausgegeben wird, bis der Empfänger Daten bereitstellt, die mit „match_me“ übereinstimmen. Die Hälfte der Transaktion gibt die Münzen erfolgreich aus der Brieftasche des Absenders aus und zieht 25 BTC von Brieftasche2 ab. Wallet3 war jedoch auch nach der Generierung eines neuen Blocks noch leer.

 Transaction:
   bd52d8ef024715096b5177d581121122dc1ce9f8925c105a496bb290691ba1a7
   updated: 2016-10-02T23:19:14Z
      in   PUSHDATA(72)     [3045022100f5664de61bd0c9576d7dd2aaf98f2ba4e60c1013e55a36e62bf1d47c38a0fb5c02206872b35821f05069df5d2302dadc55011e6e6d7569e2e46c655deb9265390f3f01] PUSHDATA(33)[035562c04ff3ddb5a8ba566f4cd84c3e47478997ab8730bd923a4260fc9dfe246e] 50.00 BTC
      outpoint:7738e333b27700e835d3c118444d9f2181033c8d796ca116c66d795140ad64df:1 hash160:67d4ea4c50e80497380b7eb2f901664dc341db4b
 out  DUP HASH160 PUSHDATA(20)[d713cf366138ad0d0aac8c148ca724c18a8c4e4d] EQUALVERIFY CHECKSIG VERIFY PUSHDATA(16)[e04fd020ea3a6910a2d808002b30309d] EQUAL 25.00 BTC
 out  DUP HASH160 PUSHDATA(20)[2515ad4a14c15cc363796684149fd23ae1c3146e] EQUALVERIFY CHECKSIG 24.999877 BTC
 fee  0.00050204 BTC/kB, 0.000123 BTC for 245 bytes
 prps USER_PAYMENT

Ich spekuliere, dass wallet3 die benutzerdefinierte Transaktion nicht erkennt und sie daher nicht in sein Guthaben einbezieht. Denkst du so? Wenn ich mich entscheiden würde, die Transaktion mit der txid auszugeben, wie würde ich die Eingaben erstellen, um sie zu entsperren? wie erstelle ich scriptsig mit (.data(matcher).data(sig).data(pubkey))?

Danke

Antworten (1)

Typischerweise unterstützen Wallets das Ausgeben von Münzen mit keinem scriptPubKey außer denen, die sie selbst ausgeben (in dem Sinne, dass eine Adresse eine Abkürzung für einen bestimmten scriptPubKey ist).

Das hat gute Gründe. Es ist für Wallets unmöglich, alle möglichen Kombinationen und Änderungen von Skripten mit ihnen bekannten Schlüsseln zu scannen, also wäre es sowieso von Natur aus eine Teilmenge. Da es sich um eine Teilmenge handelt, würden nur unklare Erwartungen entstehen, da sich die Absender möglicherweise fragen, was genau zulässig ist. Außerdem ist es nicht Sache des Senders, zu entscheiden, auf welchem ​​Skript der Empfänger Geld entgegennehmen soll.

Vergleichen Sie dies mit einem realen Szenario, in dem Sie aufgefordert werden, jemanden zu bezahlen, indem Sie einen Umschlag unter der Tür durchschieben. Stattdessen nimmst du den Umschlag und legst ihn unter ihre Fußmatte. Sie würden auch nicht erwarten, dass dies eine Erfüllung der Zahlung ist.