区块链之java(六.1) 合约监听

之前写的那一篇呢,好像有点点问题。就是在设定监听的时候,没有编写具体监听的方法。

今天带来一篇新的方式的合约监听

前面的就不赘述了。合约上的监听是一样的。

在java中。根据abi生产的文件,其实在里面是有监听方法的

代码如下:

 public Flowable<StoEventResponse> stoEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(new Function<Log, StoEventResponse>() {
            @Override
            public StoEventResponse apply(Log log) {
                EventValuesWithLog eventValues = extractEventParametersWithLog(STO_EVENT, log);
                StoEventResponse typedResponse = new StoEventResponse();
                typedResponse.log = log;
                typedResponse.number = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                return typedResponse;
            }
        });
    }

实际上呢,在初始化合约后,直接使用合约调取监听。会比后期写监听方便一些。

这里方便的点有如下几点:

1.不用手动转换数据类型,可以拿到直接使用

2.不用装配监听的方法等。(底层已实现)

具体调用如下。(钱包加载,管理器加载,合约地址这些也不赘述了)

 Storage storage = Storage.load(address, web3j, transactionManager, gasPrice, Contract.GAS_LIMIT);
            BigInteger staBlock = web3j.ethBlockNumber().send().getBlockNumber();

            storage.stoEventFlowable(DefaultBlockParameter.valueOf(staBlock),     DefaultBlockParameterName.LATEST).subscribe(tx -> {

                System.out.println(tx.number);

            });

是不是比上一篇方便很多。

猜你喜欢

转载自blog.csdn.net/baidu_39066396/article/details/125524368