Transactions

如何使用 Bitcoinj 創建十六進制格式的原始交易?

  • August 12, 2016

當我得到輸入腳本、輸入索引、輸入 txids、輸出腳本、輸出地址和輸出金額時,如何創建原始交易?下面的方法有效,但它要求方法 Transaction setHash 是公開的,但它不是。我可以在無需對 Bitcoinj 進行任何更改的情況下得到我想要的嗎?

   NetworkParameters params = MainNetParams.get();
   Transaction tx = new Transaction(params);
   tx.addOutput(Coin.ZERO, new Script(HEX.decode(outputScript)));
   try {
       Address addr = new Address(params, toAddress);
       tx.addOutput(Coin.valueOf(toAmount), addr);
   } catch (AddressFormatException name) {
       return null;
   }

   Script script = new Script(HEX.decode(inputScript));
   Address addr = new Address(params, script.getPubKeyHash());

   Transaction parentTx = new Transaction(params);
   for (int j = 0; j < inputIndex; j++) {
       parentTx.addOutput(new TransactionOutput(params, parentTx, Coin.ZERO, addr));
   }
   parentTx.addOutput(new TransactionOutput(params, parentTx, Coin.ZERO, addr));
   parentTx.setHash(Sha256Hash.wrap(txid)); // requires setHash method to be public
   try {
       ECKey key = new DumpedPrivateKey(params, privateKey).getKey();
       tx.addSignedInput(parentTx.getOutput(inputIndex), key);
   } catch (AddressFormatException name) {
       return null;
   }
   return HEX.encode(tx.bitcoinSerialize());

不要建構整個父事務,只需建構 outpoint,這與將事務編碼為十六進制相關。具體使用這個建構子

編輯:更具體地說,除非您擁有該交易的所有相關資訊(輸入、鎖定時間、輸出等),否則無法重新創建父交易。要使用我在下面連結的建構子,您還需要提供您在父交易上花費的輸出的輸出索引。

引用自:https://bitcoin.stackexchange.com/questions/47928