Fail to sign the Segwit Transaction's input in bitcoinj

Fail to sign the Segwit Transaction's input in bitcoinj

Manage alerts

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…