How to extract the signature of a transaction using bitcoinj

1

I am trying to extract the signatures from a transaction. What is the best way to do this given a com.google.bitcoin.core.Transaction object I just received from the network?

Jus12

Posted 2015-02-23T17:18:39.703

Reputation: 1 243

Answers

1

This works for P2PK, and P2PKH, but multisig will not work.

int index = (the index you want);
List<TransactionInput> inputs = Transaction.getInputs()
TransactionInput input = inputs.get(index);
Script scriptSig = input.getScriptSig();
List<ScriptChunk> signature_and_pubkey = scriptSig.getChunks();
ScriptChunk sig_chunk = signature_and_pubkey.get(0);
bytes[] sig_bytes = sig_chunk.data;

If you want a TransactionSignature object instead of raw bytes:

TransactionSignature ts = TransactionSignature.decodeFromBitcoin(sig_bytes, false)

Nick ODell

Posted 2015-02-23T17:18:39.703

Reputation: 26 536

how can I get a TransactionSignature object from this? I tried com.google.bitcoin.crypto.TransactionSignature.decodeFromBitcoin(sig_chunk.data, false) but sometimes it gives an error.Jus12 2015-02-23T18:16:58.227

@Jus12 RuntimeError or VerificationError?Nick ODell 2015-02-23T18:20:52.080

Here is the error I got (happens in few cases only): java.lang.RuntimeException: java.io.IOException: DER length more than 4 bytes: 112 at com.google.bitcoin.core.ECKey$ECDSASignature.decodeFromDER(ECKey.java:358)Jus12 2015-02-23T18:23:25.300