Java源码示例:org.fisco.bcos.web3j.protocol.core.methods.response.BlockNumber

示例1
/**
 * scheduled task to sync Monitor Info per 5s
 * 
 * @throws ExecutionException
 * @throws InterruptedException
 */
@Scheduled(cron = "0/5 * * * * ?")
public void syncMonitorInfo() throws ExecutionException, InterruptedException {
    log.debug("begin sync chain data");
    if (!constants.isMonitorEnabled()) {
        return;
    }
    Long currentTime = System.currentTimeMillis();
    // to do add more group
    for (Map.Entry<Integer, Web3j> entry : web3jMap.entrySet()) {
        Monitor monitor = new Monitor();
        CompletableFuture<BlockNumber> blockHeightFuture =
                entry.getValue().getBlockNumber().sendAsync();
        CompletableFuture<PbftView> pbftViewFuture = entry.getValue().getPbftView().sendAsync();
        CompletableFuture<PendingTxSize> pendingTxSizeFuture =
                entry.getValue().getPendingTxSize().sendAsync();

        monitor.setBlockHeight(blockHeightFuture.get().getBlockNumber());
        monitor.setPbftView(pbftViewFuture.get().getPbftView());
        monitor.setPendingTransactionCount(pendingTxSizeFuture.get().getPendingTxSize());
        monitor.setTimestamp(currentTime);
        monitor.setGroupId(entry.getKey());
        monitorRepository.save(monitor);
        log.debug("insert success =  " + monitor.getId());
    }
}
 
示例2
public void run() {
    System.out.println("MyRunnable.run()," + new Date());

    System.out.println("begin sync chain data");
    Long currentTime = System.currentTimeMillis();
    //to do  add  more group
    Monitor monitor = new Monitor();
    CompletableFuture<BlockNumber> blockHeightFuture = web3j.getBlockNumber().sendAsync();
    CompletableFuture<PbftView> pbftViewFuture = web3j.getPbftView().sendAsync();
    CompletableFuture<PendingTxSize> pendingTxSizeFuture = web3j.getPendingTxSize().sendAsync();
    try {
        monitor.setBlockHeight(blockHeightFuture.get().getBlockNumber());
        monitor.setPbftView(pbftViewFuture.get().getPbftView());
        monitor.setPendingTransactionCount(pendingTxSizeFuture.get().getPendingTxSize());
        monitor.setTimestamp(currentTime);
        monitor.setGroupId(1);
        System.out.println(monitor);
    }catch (ExecutionException | InterruptedException e){
        System.out.println("sync chain data error " + e.getMessage());
    }
    System.out.println("insert success =  " + monitor.getId());

}
 
示例3
public static Long getBlockHeight(Web3j web3j, int timeout) throws BrokerException {
    try {
        BlockNumber blockNumber = web3j.getBlockNumber().sendAsync().get(timeout, TimeUnit.MILLISECONDS);
        // Web3sdk's rpc return null in "get".
        if (blockNumber == null) {
            return 0L;
        }
        Long blockHeight = blockNumber.getBlockNumber().longValue();
        log.debug("current block height: {}", blockHeight);
        return blockHeight;
    } catch (InterruptedException | ExecutionException | TimeoutException e) {
        log.error("get block height failed due to InterruptedException|ExecutionException|TimeoutException", e);
        throw new BrokerException(ErrorCode.GET_BLOCK_HEIGHT_ERROR);
    }
}
 
示例4
@Override
public BigInteger getBlockNumberCache() {
    if (getLocalBlockNumber().intValue() == 1) {
        try {
            BlockNumber blockNumber = getBlockNumber().sendAsync().get();
            setBlockNumber(blockNumber.getBlockNumber());
        } catch (Exception e) {
            logger.error("Exception: " + e);
        }
    }
    return getLocalBlockNumber().add(new BigInteger(BlockLimit.blockLimit.toString()));
}
 
示例5
@Test
public void getBlockNumber() throws IOException, InterruptedException, ExecutionException {
  BlockNumber blockNumber = web3j.getBlockNumber().send();
  assertNotNull(blockNumber.getBlockNumber());
  blockNumber = web3j.getBlockNumber().sendAsync().get();
  assertNotNull(blockNumber.getBlockNumber());
}
 
示例6
@SuppressWarnings("unchecked")
void prepareBlockNumberRequest() throws IOException {
    BlockNumber ethBlockNumber = new BlockNumber();
    ethBlockNumber.setResult("0x1");

    Request<?, BlockNumber> ethBlockNumberRequest = mock(Request.class);
    when(ethBlockNumberRequest.send()).thenReturn(ethBlockNumber);
    when(web3j.getBlockNumber()).thenReturn((Request) ethBlockNumberRequest);
    when(web3j.getBlockNumberCache()).thenReturn(new BigInteger("1"));
}
 
示例7
private void queryBlockNumber(ChannelHandlerContext ctx) throws JsonProcessingException {

        final String host = ChannelHandlerContextHelper.getPeerHost(ctx);

        String seq = channelService.newSeq();

        BcosMessage bcosMessage = new BcosMessage();
        bcosMessage.setType((short) ChannelMessageType.CHANNEL_RPC_REQUEST.getType());
        bcosMessage.setSeq(seq);
        ChannelEthereumService channelEthereumService = new ChannelEthereumService();
        channelEthereumService.setChannelService(channelService);

        Request<Integer, BlockNumber> request =
                new Request<>(
                        "getBlockNumber",
                        Arrays.asList(channelService.getGroupId()),
                        channelEthereumService,
                        BlockNumber.class);

        bcosMessage.setData(ObjectMapperFactory.getObjectMapper().writeValueAsBytes(request));
        ByteBuf byteBuf = ctx.alloc().buffer();
        bcosMessage.writeHeader(byteBuf);
        bcosMessage.writeExtra(byteBuf);
        ctx.writeAndFlush(byteBuf);

        String content = new String(bcosMessage.getData());
        logger.info(" query block number host: {}, seq: {}, content: {}", host, seq, content);

        channelService
                .getSeq2Callback()
                .put(
                        seq,
                        new BcosResponseCallback() {
                            @Override
                            public void onResponse(BcosResponse response) {
                                try {
                                    BlockNumber blockNumber =
                                            ObjectMapperFactory.getObjectMapper()
                                                    .readValue(
                                                            response.getContent(),
                                                            BlockNumber.class);

                                    SocketChannel socketChannel = (SocketChannel) ctx.channel();
                                    InetSocketAddress socketAddress = socketChannel.remoteAddress();
                                    channelService
                                            .getNodeToBlockNumberMap()
                                            .put(
                                                    socketAddress.getAddress().getHostAddress()
                                                            + socketAddress.getPort(),
                                                    blockNumber.getBlockNumber());

                                    logger.info(
                                            " query blocknumer, host:{}, blockNumber: {} ",
                                            host,
                                            blockNumber.getBlockNumber());
                                } catch (Exception e) {
                                    logger.error(
                                            " query blocknumer failed, host: {}, message: {} ",
                                            host,
                                            e.getMessage());

                                    throw new MessageDecodingException(response.getContent());
                                }
                            }
                        });
    }
 
示例8
@Override
public synchronized Request<?, BlockNumber> getBlockNumber() {
    return new Request<>(
            "getBlockNumber", Arrays.asList(groupId), web3jService, BlockNumber.class);
}
 
示例9
Request<?, BlockNumber> getBlockNumber();