From 170f5dc6e74f5c33a9c9aaddc6d149c5d958af58 Mon Sep 17 00:00:00 2001 From: octopus <912554887@qq.com> Date: Tue, 30 Nov 2021 14:43:29 +0800 Subject: [PATCH] update TopicTools --- .../bcos/sdk/codec/abi/tools/TopicTools.java | 27 +++---- .../org/fisco/bcos/sdk/model/EventLog.java | 35 +++++--- .../bcos/sdk/eventsub/EventSubParams.java | 31 +++++--- .../bcos/sdk/eventsub/EventSubResponse.java | 11 +-- .../bcos/sdk/eventsub/EventSubscribe.java | 1 + .../bcos/sdk/eventsub/EventSubscribeImp.java | 79 ++++++++++++------- 6 files changed, 111 insertions(+), 73 deletions(-) diff --git a/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/abi/tools/TopicTools.java b/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/abi/tools/TopicTools.java index 9c89e02d3..2181b824c 100644 --- a/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/abi/tools/TopicTools.java +++ b/sdk-codec/src/main/java/org/fisco/bcos/sdk/codec/abi/tools/TopicTools.java @@ -2,17 +2,17 @@ import java.math.BigInteger; import java.util.Objects; - import org.fisco.bcos.sdk.codec.abi.TypeEncoder; import org.fisco.bcos.sdk.codec.datatypes.Bytes; import org.fisco.bcos.sdk.crypto.CryptoSuite; import org.fisco.bcos.sdk.utils.AddressUtils; +import org.fisco.bcos.sdk.utils.Hex; import org.fisco.bcos.sdk.utils.Numeric; public class TopicTools { public static final int MAX_NUM_TOPIC_EVENT_LOG = 4; - public static final int TOPIC_LENGTH = 64; + public static final int TOPIC_LENGTH_IN_HEX = 64; private final CryptoSuite cryptoSuite; @@ -20,22 +20,21 @@ public TopicTools(CryptoSuite cryptoSuite) { this.cryptoSuite = cryptoSuite; } - public String integerToTopic(BigInteger i) { - return Numeric.toHexStringWithPrefixZeroPadded(i, 64); - } - public static boolean validTopic(String topic) { if (Objects.isNull(topic)) { return false; } if (topic.startsWith("0x") || topic.startsWith("0X")) { - return topic.length() == (TOPIC_LENGTH + 2); + return topic.length() == (TOPIC_LENGTH_IN_HEX + 2); } - return topic.length() == TOPIC_LENGTH; + return topic.length() == TOPIC_LENGTH_IN_HEX; } + public String integerToTopic(BigInteger i) { + return Numeric.toHexStringWithPrefixZeroPadded(i, 64); + } public String boolToTopic(boolean b) { if (b) { @@ -53,20 +52,20 @@ public String addressToTopic(String s) { return "0x000000000000000000000000" + Numeric.cleanHexPrefix(s); } - public byte[] stringToTopic(String s) { - return this.cryptoSuite.hash(s.getBytes()); + public String stringToTopic(String s) { + return "0x" + Hex.toHexString(this.cryptoSuite.hash(s.getBytes())); } - public byte[] bytesToTopic(byte[] b) { - return this.cryptoSuite.hash(b); + public String bytesToTopic(byte[] b) { + return "0x" + Hex.toHexString(this.cryptoSuite.hash(b)); } - public byte[] byteNToTopic(byte[] b) { + public String byteNToTopic(byte[] b) { // byte[] can't be more than 32 byte if (b.length > 32) { throw new IllegalArgumentException("byteN can't be more than 32 byte"); } Bytes bs = new Bytes(b.length, b); - return TypeEncoder.encode(bs); + return "0x" + Hex.toHexString(TypeEncoder.encode(bs)); } } diff --git a/sdk-core/src/main/java/org/fisco/bcos/sdk/model/EventLog.java b/sdk-core/src/main/java/org/fisco/bcos/sdk/model/EventLog.java index 61d097f91..e25eeea66 100644 --- a/sdk-core/src/main/java/org/fisco/bcos/sdk/model/EventLog.java +++ b/sdk-core/src/main/java/org/fisco/bcos/sdk/model/EventLog.java @@ -18,7 +18,6 @@ import java.math.BigInteger; import java.util.List; import java.util.Objects; - import org.fisco.bcos.sdk.utils.Numeric; public class EventLog { @@ -177,19 +176,33 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(logIndex, transactionIndex, transactionHash, blockNumber, address, data, topics); + return Objects.hash( + logIndex, transactionIndex, transactionHash, blockNumber, address, data, topics); } @Override public String toString() { - return "EventLog{" + - "logIndex='" + logIndex + '\'' + - ", transactionIndex='" + transactionIndex + '\'' + - ", transactionHash='" + transactionHash + '\'' + - ", blockNumber='" + blockNumber + '\'' + - ", address='" + address + '\'' + - ", data='" + data + '\'' + - ", topics=" + topics + - '}'; + return "EventLog{" + + "logIndex='" + + logIndex + + '\'' + + ", transactionIndex='" + + transactionIndex + + '\'' + + ", transactionHash='" + + transactionHash + + '\'' + + ", blockNumber='" + + blockNumber + + '\'' + + ", address='" + + address + + '\'' + + ", data='" + + data + + '\'' + + ", topics=" + + topics + + '}'; } } diff --git a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubParams.java b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubParams.java index 6f9ca9084..91b8b4ad1 100644 --- a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubParams.java +++ b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubParams.java @@ -25,7 +25,15 @@ public class EventSubParams { private BigInteger fromBlock = BigInteger.valueOf(-1); private BigInteger toBlock = BigInteger.valueOf(-1); private List addresses = new ArrayList<>(); - private List> topics = new ArrayList>() {{ add(null); add(null); add(null); add(null);}}; + private List> topics = + new ArrayList>() { + { + add(null); + add(null); + add(null); + add(null); + } + }; public BigInteger getFromBlock() { return fromBlock; @@ -75,9 +83,7 @@ public boolean addTopic(int index, String topic) { return true; } - /** - * @return check params - */ + /** @return check params */ @SuppressWarnings("unchecked") public boolean checkParams() { if (fromBlock.compareTo(BigInteger.ZERO) > 0 && toBlock.compareTo(BigInteger.ZERO) > 0) { @@ -88,12 +94,15 @@ public boolean checkParams() { @Override public String toString() { - return "EventLogParams{" + - "fromBlock=" + fromBlock + - ", toBlock=" + toBlock + - ", addresses=" + addresses + - ", topics=" + topics + - '}'; + return "EventLogParams{" + + "fromBlock=" + + fromBlock + + ", toBlock=" + + toBlock + + ", addresses=" + + addresses + + ", topics=" + + topics + + '}'; } - } diff --git a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubResponse.java b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubResponse.java index 309dc0bdd..e0e6d3f20 100644 --- a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubResponse.java +++ b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubResponse.java @@ -15,9 +15,8 @@ package org.fisco.bcos.sdk.eventsub; -import java.util.List; - import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; import org.fisco.bcos.sdk.model.EventLog; public class EventSubResponse { @@ -29,13 +28,7 @@ public class EventSubResponse { @Override public String toString() { - return "EventLogResponse [result=" - + status - + ", id=" - + id - + ", logs=" - + logs - + "]"; + return "EventLogResponse [result=" + status + ", id=" + id + ", logs=" + logs + "]"; } public int getStatus() { diff --git a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java index 12d115e08..b04ee4b89 100644 --- a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java +++ b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribe.java @@ -66,6 +66,7 @@ static EventSubscribe build(Client client) throws JniException { /** * get all events subscribed by clients + * * @return */ Set getAllSubscribedEvents(); diff --git a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribeImp.java b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribeImp.java index 03a516b51..4f81a58f9 100644 --- a/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribeImp.java +++ b/sdk-service/src/main/java/org/fisco/bcos/sdk/eventsub/EventSubscribeImp.java @@ -15,11 +15,9 @@ package org.fisco.bcos.sdk.eventsub; -import java.util.Set; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.SneakyThrows; +import java.util.Set; import org.fisco.bcos.sdk.client.Client; import org.fisco.bcos.sdk.config.ConfigOption; import org.fisco.bcos.sdk.crypto.CryptoSuite; @@ -44,9 +42,13 @@ public EventSubscribeImp(Client client, ConfigOption configOption) throws JniExc this.groupId = client.getGroup(); this.configOption = configOption; this.cryptoSuite = client.getCryptoSuite(); - this.eventSubscribe = org.fisco.bcos.sdk.jni.event.EventSubscribe.build(configOption.getJniConfig()); + this.eventSubscribe = + org.fisco.bcos.sdk.jni.event.EventSubscribe.build(configOption.getJniConfig()); - logger.info(" EventSub constructor, group: {}, config: {}", groupId, configOption.getJniConfig()); + logger.info( + " EventSub constructor, group: {}, config: {}", + groupId, + configOption.getJniConfig()); } public CryptoSuite getCryptoSuite() { @@ -91,27 +93,44 @@ public void subscribeEvent(EventSubParams params, EventSubCallback callback) { logger.info("EventSub subscribeEvent, params: {}", params); - eventSubscribe.subscribeEvent(groupId, strParams, new EventSubscribeCallback() { - @Override - public void onResponse(Response response) { - if (response.getErrorCode() != 0) { - logger.error("subscribeEvent response error, errorCode: {}, errorMessage: {}", response.getErrorCode(), response.getErrorMessage()); - callback.onReceiveLog("", response.getErrorCode(), null); - return; - } - - String strResp = new String(response.getData()); - logger.debug("subscribeEvent response, errorCode: {}, errorMessage: {}, data: {}", response.getErrorCode(), response.getErrorMessage(), strResp); - - ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper(); - try { - EventSubResponse eventSubResponse = objectMapper.readValue(strResp, EventSubResponse.class); - callback.onReceiveLog(eventSubResponse.getId(), eventSubResponse.getStatus(), eventSubResponse.getLogs()); - } catch (JsonProcessingException e) { - logger.error("subscribeEvent response parser json error, resp: {}, e: {}", strResp, e); - } - } - }); + eventSubscribe.subscribeEvent( + groupId, + strParams, + new EventSubscribeCallback() { + @Override + public void onResponse(Response response) { + if (response.getErrorCode() != 0) { + logger.error( + "subscribeEvent response error, errorCode: {}, errorMessage: {}", + response.getErrorCode(), + response.getErrorMessage()); + callback.onReceiveLog("", response.getErrorCode(), null); + return; + } + + String strResp = new String(response.getData()); + logger.debug( + "subscribeEvent response, errorCode: {}, errorMessage: {}, data: {}", + response.getErrorCode(), + response.getErrorMessage(), + strResp); + + ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper(); + try { + EventSubResponse eventSubResponse = + objectMapper.readValue(strResp, EventSubResponse.class); + callback.onReceiveLog( + eventSubResponse.getId(), + eventSubResponse.getStatus(), + eventSubResponse.getLogs()); + } catch (JsonProcessingException e) { + logger.error( + "subscribeEvent response parser json error, resp: {}, e: {}", + strResp, + e); + } + } + }); } @Override @@ -126,8 +145,12 @@ public Set getAllSubscribedEvents() { } @Override - public void start() { eventSubscribe.start(); } + public void start() { + eventSubscribe.start(); + } @Override - public void stop() { eventSubscribe.stop();} + public void stop() { + eventSubscribe.stop(); + } }