public static CallMessage fromJson(String json) throws JSONException { return new CallMessage(json); }
@Override public void getBlock(final int height, final TransactionEventListener<BitTransaction> listener) { checkNotNull(stratumClient); final CallMessage message = new CallMessage("blockchain.block.get_header", height); final ListenableFuture<ResultMessage> result = stratumClient.call(message); Futures.addCallback(result, new FutureCallback<ResultMessage>() { @Override public void onSuccess(ResultMessage result) { try { BlockHeader header = parseBlockHeader(type, result.getResult().getJSONObject(0)); listener.onBlockUpdate(header); } catch (JSONException e) { log.error("Unexpected JSON format", e); } } @Override public void onFailure(Throwable t) { if (t instanceof CancellationException) { log.debug("Canceling {} call", message.getMethod()); } else { log.error("Could not get reply for blockchain.block.get_header", t); } } }, Threading.USER_THREAD); }
final CallMessage pingMsg = new CallMessage("server.version", ImmutableList.of(versionString, CLIENT_PROTOCOL)); ListenableFuture<ResultMessage> pong = stratumClient.call(pingMsg);
@Override public void broadcastTx(final BitTransaction tx, @Nullable final TransactionEventListener<BitTransaction> listener) { checkNotNull(stratumClient); CallMessage message = new CallMessage("blockchain.transaction.broadcast", Arrays.asList(Utils.HEX.encode(tx.bitcoinSerialize()))); final ListenableFuture<ResultMessage> result = stratumClient.call(message); Futures.addCallback(result, new FutureCallback<ResultMessage>() { @Override public void onSuccess(ResultMessage result) { try { String txId = result.getResult().getString(0); // FIXME could return {u'message': u'', u'code': -25} log.info("got tx {} =?= {}", txId, tx.getHash()); checkState(tx.getHash().toString().equals(txId)); if (listener != null) listener.onTransactionBroadcast(tx); } catch (Exception e) { onFailure(e); } } @Override public void onFailure(Throwable t) { log.error("Could not get reply for blockchain.transaction.broadcast", t); if (listener != null) listener.onTransactionBroadcastError(tx); } }, Threading.USER_THREAD); }
final CallMessage callMessage = new CallMessage("blockchain.headers.subscribe", (List)null); ListenableFuture<ResultMessage> reply = stratumClient.subscribe(callMessage, blockchainHeaderHandler);
@Override public boolean broadcastTxSync(final BitTransaction tx) { checkNotNull(stratumClient); CallMessage message = new CallMessage("blockchain.transaction.broadcast", Arrays.asList(Utils.HEX.encode(tx.bitcoinSerialize()))); try { ResultMessage result = stratumClient.call(message).get(); String txId = result.getResult().getString(0); // FIXME could return {u'message': u'', u'code': -25} log.info("got tx {} =?= {}", txId, tx.getHash()); checkState(tx.getHash().toString().equals(txId)); return true; } catch (Exception e) { log.error("Could not get reply for blockchain.transaction.broadcast", e); } return false; }
private void getTransactionFromNetwork(final Sha256Hash txHash, final TransactionEventListener<BitTransaction> listener) { checkNotNull(stratumClient); final CallMessage message = new CallMessage("blockchain.transaction.get", txHash.toString());
@Override public void getUnspentTx(final AddressStatus status, final BitTransactionEventListener listener) { checkNotNull(stratumClient); CallMessage message = new CallMessage("blockchain.address.listunspent", Arrays.asList(status.getAddress().toString())); final ListenableFuture<ResultMessage> result = stratumClient.call(message); Futures.addCallback(result, new FutureCallback<ResultMessage>() { @Override public void onSuccess(ResultMessage result) { JSONArray resTxs = result.getResult(); ImmutableList.Builder<UnspentTx> utxes = ImmutableList.builder(); try { for (int i = 0; i < resTxs.length(); i++) { utxes.add(new UnspentTx(resTxs.getJSONObject(i))); } } catch (JSONException e) { onFailure(e); return; } listener.onUnspentTransactionUpdate(status, utxes.build()); } @Override public void onFailure(Throwable t) { log.error("Could not get reply for blockchain.address.listunspent", t); } }, Threading.USER_THREAD); }
checkNotNull(stratumClient); final CallMessage message = new CallMessage("blockchain.address.get_history", Arrays.asList(status.getAddress().toString())); final ListenableFuture<ResultMessage> result = stratumClient.call(message);
checkNotNull(stratumClient); final CallMessage callMessage = new CallMessage("blockchain.address.subscribe", (List)null);
@Test public void testCallMessageSubscribe() { CallMessage call = new CallMessage("blockchain.headers.subscribe", new ArrayList()); Assert.assertEquals(call.getMethod(), "blockchain.headers.subscribe"); Assert.assertEquals("{\"id\":null,\"method\":\"blockchain.headers.subscribe\",\"params\":[]}\n", call.toString()); }
@Test public void testCallMessage3() { CallMessage call = new CallMessage("blockchain.address.listunspent", (List) null); call.setParam("npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf"); Assert.assertEquals("{\"id\":null,\"method\":\"blockchain.address.listunspent\"," + "\"params\":[\"npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf\"]}\n", call.toString()); }
@Test public void testCallMessage2() { CallMessage call = new CallMessage(1L, "blockchain.address.listunspent", "npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf"); Assert.assertEquals(call.getMethod(), "blockchain.address.listunspent"); Assert.assertEquals("{\"id\":1,\"method\":\"blockchain.address.listunspent\"," + "\"params\":[\"npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf\"]}\n", call.toString()); }
@Test public void testCallMessage() { CallMessage call = new CallMessage(1L, "blockchain.address.listunspent", Arrays.asList("npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf")); Assert.assertEquals(call.getId(), 1L); Assert.assertEquals(call.getMethod(), "blockchain.address.listunspent"); Assert.assertEquals("{\"id\":1,\"method\":\"blockchain.address.listunspent\"," + "\"params\":[\"npF3ApeWwMS8kwXJyybPZ76vNbv5txVjDf\"]}\n", call.toString()); }
@Test public void testCallCommand() throws Exception { client.startAsync(); client.awaitRunning(5, TimeUnit.SECONDS); CallMessage call = new CallMessage("blockchain.address.get_history", Arrays.asList("mrx4EmF6zHXky3zDoeJ1K7KvYcuNn8Mmc4")); final ListenableFuture<ResultMessage> futureReply = client.call(call); // Check if server got the correct message Assert.assertEquals(call.toString(), new String(serverInput.toByteArray())); // Reply to the client String resultJson = "{\"id\": 0, \"result\": [{" + "\"tx_hash\": \"3aa2a5a9825ca767e092bcc19487aa13969eeb217fd0fba8492543bbb8c30954\", " + "\"height\": 260144}]}"; final ResultMessage serverResult = ResultMessage.fromJson(resultJson); serverResult.setId(call.getId()); serverOutput.write(serverResult.toString().getBytes()); ResultMessage result = futureReply.get(3, TimeUnit.SECONDS); Assert.assertEquals(serverResult.toString(), result.toString()); serverOutput.close(); }
CallMessage call = new CallMessage("blockchain.address.subscribe", Arrays.asList("mrx4EmF6zHXky3zDoeJ1K7KvYcuNn8Mmc4"));