Transacción de gastos con salida personalizada

Recientemente ingresé al campo de bitcoin, y bitcoinj fue mi elección de herramienta. Experimentando en el modo de prueba de regresión, pude crear la siguiente transacción personalizada. Tiene un script de bloqueo modificado y necesitaría un script de desbloqueo, entrada, modificado.

 //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);

Aquí, estoy tratando de crear esta transacción que no se gastará hasta que el receptor proporcione datos que coincidan con 'match_me'. La mitad de la transacción gasta con éxito las monedas de la billetera del remitente, restando 25 BTC de la billetera2. Sin embargo, wallet3 todavía estaba vacío incluso después de generar un nuevo bloque.

 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

Especulo que podría darse el caso de que wallet3 no reconozca la transacción personalizada, por lo que no la incluye en su saldo. ¿Crees eso? Si decidiera gastar la transacción usando el txid, ¿cómo crearía las entradas para desbloquearlo? ¿Cómo creo scriptsig con (.data(matcher).data(sig).data(pubkey))?

Gracias

Respuestas (1)

Por lo general, las billeteras no admiten el gasto de monedas con ninguna scriptPubKey, excepto las que entregan ellos mismos (en el sentido de que una dirección es una forma abreviada de una particular scriptPubKey).

Esto es por buenas razones. Es imposible que las billeteras busquen todas las posibles combinaciones y alteraciones de scripts con claves que conocen, por lo que de todos modos sería inherentemente un subconjunto. Ser un subconjunto solo crearía expectativas poco claras, ya que los remitentes pueden preguntarse qué está permitido exactamente. Además, no es asunto del remitente decidir en qué guión el receptor debe aceptar dinero.

Compare esto con un escenario de la vida real en el que se le pide que le pague a alguien deslizando un sobre debajo de su puerta. En cambio, tomas el sobre y lo pones debajo de su felpudo. Tampoco esperaría que esto fuera un cumplimiento del pago.