Fail to sign the Segwit Transaction's input in bitcoinj
Fail to sign the Segwit Transaction's input in bitcoinj
Loading saved threads...
Oiiiwk · External communityPost link
External question — Bitcoin Stack Exchange
Author: Oiiiwk
Original post: https://bitcoin.stackexchange.com/questions/93970
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
I want to spend from a segwit address and it has a P2WPH script, I created this transaction just like creating a normal P2PKH transaction, but just changed the address of the input to the segwit address, I don't know if this is correct, and signing this transaction in the following method, but it says script was NOT verified successfully...
Transaction signedtx = signInput(rawtx.getHashAsString(),privkey,rawtx);
public static Transaction signInput(String hash, String prvKey,Transaction spendTx) {
ECKey ecKey = ECKey.fromPrivate(Utils.HEX.decode(prvKey));
ECKey.ECDSASignature signature = ecKey.sign(Sha256Hash.wrap(hash));
TransactionSignature transactionSignature = new TransactionSignature(signature,Transaction.SigHash.ALL,true);
TransactionWitness witness = TransactionWitness.redeemP2WPKH(transactionSignature,ecKey);
TransactionInput input = spendTx.getInput(0);
input.setWitness(witness);
return spendTx;
}
I am not very familiar with bitcoinj, and currently there is very little technical guidance related to segwit, I hope someone can help me!
Quote
Report
Igor Artamonov · External communityPost link
External answer — Bitcoin Stack Exchange
Author: Igor Artamonov
Original post: https://bitcoin.stackexchange.com/a/98901
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
In general is should be like:
// input index to sign
int index = 0;
// amount to sign (must equal to actual input value)
Coin value = Coin.valueOf(123456);
TransactionSignature signature = tx.calculateWitnessSignature(
index,
prvKey,
ScriptBuilder()
.data(ScriptBuilder.createP2PKHOutputScript(prvKey).program)
.build(),
coin,
Transaction.SigHash.ALL,
false
);
tx.getInput(index).setScriptSig(ScriptBuilder.createEmpty());
tx.getInput(index).setWitness(
TransactionWitness.redeemP2WPKH(signature, prvKey)
);
Quote
Report
Post Reply
Checking account access…