| | |
| | | import io.reactivex.Flowable; |
| | | import io.reactivex.functions.Function; |
| | | import org.web3j.abi.EventEncoder; |
| | | import org.web3j.abi.EventValues; |
| | | import org.web3j.abi.FunctionReturnDecoder; |
| | | import org.web3j.abi.TypeReference; |
| | | import org.web3j.abi.datatypes.*; |
| | | import org.web3j.abi.datatypes.generated.Uint256; |
| | |
| | | * { |
| | | * "indexed": false, |
| | | * "internalType": "uint256", |
| | | * "name": "sameCoin", |
| | | * "name": "usdtTarget", |
| | | * "type": "uint256" |
| | | * }, |
| | | * { |
| | | * "indexed": false, |
| | | * "internalType": "uint256", |
| | | * "name": "finxMineCoin", |
| | | * "name": "coinTarget", |
| | | * "type": "uint256" |
| | | * }, |
| | | * { |
| | | * "indexed": false, |
| | | * "internalType": "uint256", |
| | | * "name": "usdtCoin", |
| | | * "type": "uint256" |
| | | * }, |
| | | * { |
| | | * "indexed": false, |
| | | * "internalType": "uint256", |
| | | * "name": "lastMineTime", |
| | | * "type": "uint256" |
| | | * }, |
| | | * { |
| | | * "indexed": false, |
| | | * "internalType": "uint256", |
| | | * "name": "thisMineTime", |
| | | * "type": "uint256" |
| | | * } |
| | | * ], |
| | |
| | | return web3j.ethLogFlowable(filter).map(new Function<Log, CoinRewardEventResponse>() { |
| | | @Override |
| | | public CoinRewardEventResponse apply(Log log) { |
| | | final List<String> topics = log.getTopics(); |
| | | String encodedEventSignature = EventEncoder.encode(COINREWARD_EVENT); |
| | | if (topics == null || topics.size() == 0 || !topics.get(0).equals(encodedEventSignature)) { |
| | | return null; |
| | | } |
| | | |
| | | List<Type> indexedValues = new ArrayList<>(); |
| | | List<Type> nonIndexedValues = |
| | | FunctionReturnDecoder.decode(log.getData(), COINREWARD_EVENT.getNonIndexedParameters()); |
| | | |
| | | List<TypeReference<Type>> indexedParameters = COINREWARD_EVENT.getIndexedParameters(); |
| | | for (int i = 0; i < indexedParameters.size(); i++) { |
| | | Type value = |
| | | FunctionReturnDecoder.decodeIndexedValue( |
| | | topics.get(i + 1), indexedParameters.get(i)); |
| | | indexedValues.add(value); |
| | | } |
| | | final EventValues eventValues = new EventValues(indexedValues, nonIndexedValues); |
| | | // EventValuesWithLog eventValues = extractEventParametersWithLog(COINREWARD_EVENT, log); |
| | | // final List<String> topics = log.getTopics(); |
| | | // String encodedEventSignature = EventEncoder.encode(COINREWARD_EVENT); |
| | | // if (topics == null || topics.size() == 0 || !topics.get(0).equals(encodedEventSignature)) { |
| | | // return null; |
| | | // } |
| | | // |
| | | // List<Type> indexedValues = new ArrayList<>(); |
| | | // List<Type> nonIndexedValues = |
| | | // FunctionReturnDecoder.decode(log.getData(), COINREWARD_EVENT.getNonIndexedParameters()); |
| | | // |
| | | // List<TypeReference<Type>> indexedParameters = COINREWARD_EVENT.getIndexedParameters(); |
| | | // for (int i = 0; i < indexedParameters.size(); i++) { |
| | | // Type value = |
| | | // FunctionReturnDecoder.decodeIndexedValue( |
| | | // topics.get(i + 1), indexedParameters.get(i)); |
| | | // indexedValues.add(value); |
| | | // } |
| | | // final EventValues eventValues = new EventValues(indexedValues, nonIndexedValues); |
| | | EventValuesWithLog eventValues = extractEventParametersWithLog(COINREWARD_EVENT, log); |
| | | CoinRewardEventResponse typedResponse = new CoinRewardEventResponse(); |
| | | if(eventValues!=null){ |
| | | typedResponse.adr = (String) eventValues.getNonIndexedValues().get(0).getValue(); |
| | | typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue(); |
| | | typedResponse.price = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue(); |
| | | typedResponse.sameCoin = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue(); |
| | | typedResponse.finxMineCoin = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue(); |
| | | typedResponse.lastMineTime = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue(); |
| | | typedResponse.thisMineTime = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue(); |
| | | typedResponse.usdtTarget = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue(); |
| | | typedResponse.coinTarget = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue(); |
| | | typedResponse.usdtCoin = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue(); |
| | | typedResponse.lastMineTime = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue(); |
| | | typedResponse.blockHash = log.getTransactionHash(); |
| | | } |
| | | |
| | | return typedResponse; |
| | |
| | | |
| | | public Flowable<CoinRewardEventResponse> coinRewardEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) { |
| | | EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress()); |
| | | filter.addSingleTopic(EventEncoder.encode(TRANSFER_EVENT)); |
| | | filter.addSingleTopic(EventEncoder.encode(COINREWARD_EVENT)); |
| | | return coinRewardEventFlowable(filter); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | public static class CoinRewardEventResponse extends BaseEventResponse { |
| | | public String adr; |
| | | public String adr;//地址 |
| | | |
| | | public BigInteger amount; |
| | | public BigInteger price; |
| | | public BigInteger sameCoin; |
| | | public BigInteger finxMineCoin; |
| | | public BigInteger lastMineTime; |
| | | public BigInteger thisMineTime; |
| | | public BigInteger amount;//总挖矿币量 |
| | | public BigInteger price;//挖矿时价格 |
| | | public BigInteger usdtTarget;//金本位多少USDT,单位USDT |
| | | public BigInteger coinTarget;//币本位多少币 |
| | | public BigInteger usdtCoin;//金本位换算后多少币 |
| | | public BigInteger lastMineTime;//上一次挖矿时间 |
| | | public String blockHash;//上一次挖矿时间 |
| | | } |
| | | } |