diff --git a/pom.xml b/pom.xml index b2fd4cc..94ca6c6 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,11 @@ 1.13 compile - + + com.fasterxml.jackson.core + jackson-databind + 2.10.4 + diff --git a/src/main/java/info/weboftrust/btctxlookup/bitcoinconnection/BitcoindRPCBitcoinConnection.java b/src/main/java/info/weboftrust/btctxlookup/bitcoinconnection/BitcoindRPCBitcoinConnection.java index 6e2b16c..d71929b 100644 --- a/src/main/java/info/weboftrust/btctxlookup/bitcoinconnection/BitcoindRPCBitcoinConnection.java +++ b/src/main/java/info/weboftrust/btctxlookup/bitcoinconnection/BitcoindRPCBitcoinConnection.java @@ -1,24 +1,15 @@ package info.weboftrust.btctxlookup.bitcoinconnection; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.codec.DecoderException; -import org.apache.commons.codec.binary.Hex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import info.weboftrust.btctxlookup.Chain; import info.weboftrust.btctxlookup.ChainAndLocationData; import info.weboftrust.btctxlookup.ChainAndTxid; import info.weboftrust.btctxlookup.DidBtcrData; +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Hex; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import wf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient; import wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient; import wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Block; @@ -26,6 +17,16 @@ import wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction.In; import wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.RawTransaction.Out; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class BitcoindRPCBitcoinConnection extends AbstractBitcoinConnection implements BitcoinConnection { private static final BitcoindRPCBitcoinConnection instance = new BitcoindRPCBitcoinConnection(); @@ -107,6 +108,8 @@ public DidBtcrData getDidBtcrData(ChainAndTxid chainAndTxid) throws IOException RawTransaction rawTransaction = bitcoindRpcClient.getRawTransaction(chainAndTxid.getTxid()); if (rawTransaction == null) return null; + final ObjectMapper mapper = new ObjectMapper(); + // find input script pub key String inputScriptPubKey = null; @@ -120,7 +123,9 @@ public DidBtcrData getDidBtcrData(ChainAndTxid chainAndTxid) throws IOException if (scriptSig == null) continue; String asm = (String) scriptSig.get("asm"); - List txinwitness = null; // TODO: How to get this with bitcoind ? + + Map mIn = mapper.convertValue(in, new TypeReference>() {}); + List txinwitness = (List) ((Map) mIn.get("m")).get("txinwitness"); if (asm != null && ! asm.trim().isEmpty()) { @@ -135,8 +140,9 @@ public DidBtcrData getDidBtcrData(ChainAndTxid chainAndTxid) throws IOException inputScriptPubKey = matcher.group(1); break; } - } else if (txinwitness != null && txinwitness.size() > 0) { + } else if (txinwitness != null && txinwitness.size() == 2) { + //Get the second witness push -> pubKey inputScriptPubKey = txinwitness.get(1); break; } else {