package co.gem.round.coinop;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.bitcoinj.core.*;
import org.bitcoinj.script.Script;
import org.bitcoinj.script.ScriptBuilder;
import java.util.ArrayList;
import java.util.List;
/**
* Created by julian on 11/24/14.
*/
public class InputWrapper {
private TransactionInput input;
private String walletPath;
private InputWrapper(TransactionInput input, String walletPath) {
this.input = input;
this.walletPath = walletPath;
}
public static List<InputWrapper> parseInputs(JsonArray inputsJson, Transaction parent) {
List<InputWrapper> inputs = new ArrayList<InputWrapper>();
for (JsonElement element : inputsJson) {
JsonObject inputJson = element.getAsJsonObject();
InputWrapper input = parseInput(inputJson, parent);
inputs.add(input);
parent.addInput(input.input());
}
return inputs;
}
public static InputWrapper parseInput(JsonObject inputJson, Transaction parent) {
JsonObject outputJson = inputJson.get("output").getAsJsonObject();
Sha256Hash txHash = new Sha256Hash(outputJson.get("transaction_hash").getAsString());
Address address = null;
try {
address = new Address(null, outputJson.get("address").getAsString());
} catch (AddressFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
String walletPath = outputJson.get("metadata").getAsJsonObject().get("wallet_path").getAsString();
Script outputScript = ScriptBuilder.createOutputScript(address);
long outputIndex = outputJson.get("index").getAsLong();
Coin value = Coin.valueOf(outputJson.get("value").getAsLong());
NetworkParameters networkParameters = NetworkParameters.fromID(NetworkParameters.ID_TESTNET);
TransactionInput input = new TransactionInput(networkParameters, parent, outputScript.getProgram(),
new TransactionOutPoint(networkParameters, outputIndex, txHash), value);
return new InputWrapper(input, walletPath);
}
public String walletPath() {
return walletPath;
}
public TransactionInput input() {
return input;
}
}