package jelectrum;
import java.net.Socket;
import java.util.Scanner;
import java.io.PrintStream;
import org.json.JSONObject;
import org.json.JSONArray;
import java.util.TreeMap;
public class ValidateProof
{
public static void main(String args[]) throws Exception
{
if (args.length != 3)
{
System.out.println("Params: host port address");
System.exit(1);
}
String host = args[0];
int port = Integer.parseInt(args[1]);
String addr = args[2];
new ValidateProof(host, port, addr);
}
public ValidateProof(String host, int port, String addr)
throws Exception
{
Socket sock = new Socket(host, port);
Scanner scan = new Scanner(sock.getInputStream());
PrintStream out = new PrintStream(sock.getOutputStream());
String utxo_root=getUtxoHash(scan, out);
System.out.println("utxo_root: " + utxo_root);
TreeMap<String, String> proof_map = getProof(addr, scan, out);
System.out.println("Proof: " + proof_map);
}
private TreeMap<String, String> getProof(String addr, Scanner in, PrintStream out)
throws Exception
{
JSONObject request = new JSONObject();
request.put("id", "proof");
JSONArray arr = new JSONArray();
arr.put(addr);
request.put("params", arr);
request.put("method", "blockchain.address.get_proof");
out.println(request.toString());
String line = in.nextLine();
JSONObject reply = new JSONObject(line);
JSONArray pa = reply.getJSONArray("result");
TreeMap<String, String> proof_map = new TreeMap<String, String>();
for(int i=0; i<pa.length(); i++)
{
JSONArray s = pa.getJSONArray(i);
proof_map.put(s.getString(0), s.getString(1));
}
return proof_map;
}
private String getUtxoHash(Scanner in, PrintStream out)
throws Exception
{
JSONObject o =new JSONObject();
o.put("id","block");
o.put("method","blockchain.headers.subscribe");
out.println(o.toString());
String line = in.nextLine();
JSONObject reply = new JSONObject(line);
return reply.getJSONObject("result").getString("utxo_root");
}
}