Расходная транзакция с пользовательским выводом

Я недавно вышел на биткойн-арену, и биткойн-дж был моим выбором инструмента. Экспериментируя в режиме регрессионного тестирования, я смог создать следующую пользовательскую транзакцию. У него модифицированный скрипт блокировки, и ему потребуется модифицированный скрипт разблокировки, ввода и ввода.

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

Здесь я пытаюсь создать эту транзакцию, которая не будет потрачена, пока получатель не предоставит данные, соответствующие «match_me». Половина транзакции успешно тратит монеты из кошелька отправителя, вычитая 25 BTC из wallet2. Однако кошелек3 все еще оставался пустым даже после создания нового блока.

 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

Я предполагаю, что это может быть случай, когда wallet3 не распознает пользовательскую транзакцию, поэтому не включает ее в свой баланс. Ты так думаешь? Если бы я решил провести транзакцию, используя txid, как бы я создал входы для ее разблокировки? как мне создать scriptsig с помощью (.data(matcher).data(sig).data(pubkey))?

Спасибо

Ответы (1)

Обычно кошельки не поддерживают трату монет с любым scriptPubKey, кроме тех, которые они сами раздают (в том смысле, что адрес является сокращением для конкретного scriptPubKey).

Это по уважительным причинам. Кошельки не могут сканировать все возможные комбинации и изменения скриптов с ключами, которые они знают, поэтому в любом случае это будет подмножество. То, что это подмножество, просто создаст неясные ожидания, поскольку отправители могут задаться вопросом, что именно разрешено. Кроме того, не дело отправителя решать, по какому сценарию получатель должен принимать деньги.

Сравните это со сценарием из реальной жизни, когда вас просят заплатить кому-то, просунув конверт под дверь. Вместо этого вы берете конверт и кладете его под половик. Вы также не ожидаете, что это будет исполнением платежа.