Transactions
如何使用 Bitcoinj 創建十六進制格式的原始交易?
當我得到輸入腳本、輸入索引、輸入 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,這與將事務編碼為十六進制相關。具體使用這個建構子
編輯:更具體地說,除非您擁有該交易的所有相關資訊(輸入、鎖定時間、輸出等),否則無法重新創建父交易。要使用我在下面連結的建構子,您還需要提供您在父交易上花費的輸出的輸出索引。