diff --git a/README.md b/README.md index b2a1ff1..d9e9e83 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ WeCross Java SDK提供操作跨链资源的Java API,开发者通过SDK可以 gradle ``` -compile ('com.webank:wecross-java-sdk:1.3.1') +compile ('com.webank:wecross-java-sdk:1.4.0') ``` maven diff --git a/build.gradle b/build.gradle index a45bac7..9fd5c7a 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ apply plugin: 'jacoco' group = 'com.webank' sourceCompatibility = '1.8' -version = '1.3.1' +version = '1.4.0-SNAPSHOT' task sourcesJar(type: Jar) { from sourceSets.main.allJava classifier = 'sources' @@ -87,18 +87,24 @@ dependencies { compile 'com.moandjiezana.toml:toml4j:0.7.2' compile 'com.google.code.gson:gson:2.8.9' compile 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - compile 'org.springframework.boot:spring-boot-starter-web:2.7.13' - compile 'org.springframework.boot:spring-boot-starter-aop:2.7.13' - compile 'org.springframework.boot:spring-boot-starter-security:2.7.13' - compile 'org.springframework:spring-aspects:5.3.13' - compile 'org.springframework:spring-aop:5.3.13' - compile 'org.asynchttpclient:async-http-client:2.12.3' - compile 'io.netty:netty-codec-http:4.1.89.Final' - compile 'io.netty:netty-buffer:4.1.89.Final' - compile 'io.netty:netty-handler:4.1.89.Final' - compile 'com.google.guava:guava:30.1-jre' + compile ('org.springframework.boot:spring-boot-starter-web:2.7.18'){ + exclude group: 'org.springframework', module: 'spring-core' + exclude group: 'org.springframework', module: 'spring-web' + exclude group: 'org.springframework', module: 'spring-webmvc' + exclude group: 'org.yaml', module: 'snakeyaml' + } + compile 'org.springframework.boot:spring-boot-starter-aop:2.7.18' + compile 'org.springframework.boot:spring-boot-starter-security:2.7.18' + compile 'org.springframework:spring-aspects:5.3.32' + compile 'org.springframework:spring-core:5.3.32' + compile 'org.springframework:spring-aop:5.3.32' + implementation ('org.asynchttpclient:async-http-client:2.12.3'){ + exclude group : 'io.netty' + } + compile 'io.netty:netty-all:4.1.101.Final' + compile 'com.google.guava:guava:32.0.1-jre' compile 'commons-codec:commons-codec:1.14' - compile 'org.bouncycastle:bcprov-jdk15on:1.69' + compile 'org.bouncycastle:bcprov-jdk18on:1.77' compile 'junit:junit:4.13.1' compile 'org.aspectj:aspectjrt:1.9.7' compile 'org.aspectj:aspectjweaver:1.9.7' diff --git a/release_note.txt b/release_note.txt index 7574079..0d0c52f 100644 --- a/release_note.txt +++ b/release_note.txt @@ -1 +1 @@ -v1.3.1 +v1.4.0 diff --git a/src/main/java/com/webank/wecrosssdk/common/Constant.java b/src/main/java/com/webank/wecrosssdk/common/Constant.java index 2cb1680..fac4a40 100644 --- a/src/main/java/com/webank/wecrosssdk/common/Constant.java +++ b/src/main/java/com/webank/wecrosssdk/common/Constant.java @@ -2,7 +2,6 @@ public class Constant { public static final String APPLICATION_CONFIG_FILE = "classpath:application.toml"; - public static final String TEMPLATE_URL = "http://127.0.0.1:8250/"; public static final String XA_TRANSACTION_ID_KEY = "XA_TRANSACTION_ID"; public static final String XA_TRANSACTION_SEQ_KEY = "XA_TRANSACTION_SEQ"; /** alphabet(upper or lower case) + digit + character("_-") ,length in (4,16) */ diff --git a/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPC.java b/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPC.java index a49a9b6..3911902 100644 --- a/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPC.java +++ b/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPC.java @@ -3,6 +3,7 @@ import com.webank.wecrosssdk.rpc.common.account.ChainAccount; import com.webank.wecrosssdk.rpc.methods.Response; import com.webank.wecrosssdk.rpc.methods.response.*; +import java.math.BigInteger; public interface WeCrossRPC { @@ -47,6 +48,8 @@ RemoteCall autoCommitXATransaction( RemoteCall listXATransactions(int size); + RemoteCall listXATransactions(int size, String chainPath); + RemoteCall register(String name, String password) throws Exception; RemoteCall login(String name, String password) throws Exception; @@ -63,5 +66,7 @@ RemoteCall autoCommitXATransaction( RemoteCall setDefaultChainAccount(String chainName, Integer keyID); + RemoteCall getBlock(String path, BigInteger blockNumber); + String getCurrentTransactionID(); } diff --git a/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPCRest.java b/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPCRest.java index b0e83ac..1069eee 100644 --- a/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPCRest.java +++ b/src/main/java/com/webank/wecrosssdk/rpc/WeCrossRPCRest.java @@ -14,6 +14,7 @@ import com.webank.wecrosssdk.rpc.methods.request.UARequest; import com.webank.wecrosssdk.rpc.methods.response.*; import com.webank.wecrosssdk.rpc.service.WeCrossService; +import java.math.BigInteger; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -246,7 +247,13 @@ public RemoteCall customCommand(String command, String path, Ob @Override public RemoteCall listXATransactions(int size) { - ListXATransactionsRequest listXATransactionsRequest = new ListXATransactionsRequest(size); + return listXATransactions(size, null); + } + + @Override + public RemoteCall listXATransactions(int size, String chainPath) { + ListXATransactionsRequest listXATransactionsRequest = + new ListXATransactionsRequest(size, chainPath); Request request = new Request<>(listXATransactionsRequest); return new RemoteCall<>( weCrossService, @@ -335,6 +342,14 @@ public String getCurrentTransactionID() { return txID; } + @Override + public RemoteCall getBlock(String path, BigInteger blockNumber) { + String uri = "/trans/getBlock"; + BlockRequest blockRequest = new BlockRequest(blockNumber, path); + Request request = new Request<>(blockRequest); + return new RemoteCall<>(weCrossService, "GET", uri, CommandResponse.class, request); + } + private RemoteCall buildSendTransactionRequest( String path, TransactionRequest transactionRequest) { String uri = "/resource/" + path.replace('.', '/') + "/sendTransaction"; diff --git a/src/main/java/com/webank/wecrosssdk/rpc/common/Block.java b/src/main/java/com/webank/wecrosssdk/rpc/common/Block.java new file mode 100644 index 0000000..07a573b --- /dev/null +++ b/src/main/java/com/webank/wecrosssdk/rpc/common/Block.java @@ -0,0 +1,48 @@ +package com.webank.wecrosssdk.rpc.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +public class Block { + @JsonIgnore public byte[] rawBytes; + public BlockHeader blockHeader; + public List transactionsHashes = new LinkedList<>(); + + public BlockHeader getBlockHeader() { + return blockHeader; + } + + public void setBlockHeader(BlockHeader blockHeader) { + this.blockHeader = blockHeader; + } + + public List getTransactionsHashes() { + return transactionsHashes; + } + + public void setTransactionsHashes(List transactionsHashes) { + this.transactionsHashes = transactionsHashes; + } + + public byte[] getRawBytes() { + return rawBytes; + } + + public void setRawBytes(byte[] rawBytes) { + this.rawBytes = rawBytes; + } + + @Override + public String toString() { + return "Block{" + + "rawBytes=" + + Arrays.toString(rawBytes) + + ", blockHeader=" + + blockHeader + + ", transactionsHashes=" + + Arrays.toString(transactionsHashes.toArray()) + + '}'; + } +} diff --git a/src/main/java/com/webank/wecrosssdk/rpc/common/BlockHeader.java b/src/main/java/com/webank/wecrosssdk/rpc/common/BlockHeader.java new file mode 100644 index 0000000..2bb1996 --- /dev/null +++ b/src/main/java/com/webank/wecrosssdk/rpc/common/BlockHeader.java @@ -0,0 +1,81 @@ +package com.webank.wecrosssdk.rpc.common; + +public class BlockHeader { + private long number; + private String prevHash; + private String hash; + private String stateRoot; + private String transactionRoot; + private String receiptRoot; + + public long getNumber() { + return number; + } + + public void setNumber(long number) { + this.number = number; + } + + public String getPrevHash() { + return prevHash; + } + + public void setPrevHash(String prevHash) { + this.prevHash = prevHash; + } + + public String getHash() { + return hash; + } + + public void setHash(String hash) { + this.hash = hash; + } + + public String getStateRoot() { + return stateRoot; + } + + public void setStateRoot(String stateRoot) { + this.stateRoot = stateRoot; + } + + public String getTransactionRoot() { + return transactionRoot; + } + + public void setTransactionRoot(String transactionRoot) { + this.transactionRoot = transactionRoot; + } + + public String getReceiptRoot() { + return receiptRoot; + } + + public void setReceiptRoot(String receiptRoot) { + this.receiptRoot = receiptRoot; + } + + @Override + public String toString() { + return "BlockHeader{" + + "number=" + + number + + ", prevHash='" + + prevHash + + '\'' + + ", hash='" + + hash + + '\'' + + ", stateRoot='" + + stateRoot + + '\'' + + ", transactionRoot='" + + transactionRoot + + '\'' + + ", receiptRoot='" + + receiptRoot + + '\'' + + '}'; + } +} diff --git a/src/main/java/com/webank/wecrosssdk/rpc/common/CommandList.java b/src/main/java/com/webank/wecrosssdk/rpc/common/CommandList.java index 1cc0ab9..08825c2 100644 --- a/src/main/java/com/webank/wecrosssdk/rpc/common/CommandList.java +++ b/src/main/java/com/webank/wecrosssdk/rpc/common/CommandList.java @@ -27,7 +27,8 @@ public class CommandList { "supportedStubs", "listResources", "status", - "detail"); + "detail", + "getBlock"); public static final List normalCommands = Arrays.asList("register", "login"); } diff --git a/src/main/java/com/webank/wecrosssdk/rpc/common/RequestUtility.java b/src/main/java/com/webank/wecrosssdk/rpc/common/RequestUtility.java index 6bffc41..4f9cf9c 100644 --- a/src/main/java/com/webank/wecrosssdk/rpc/common/RequestUtility.java +++ b/src/main/java/com/webank/wecrosssdk/rpc/common/RequestUtility.java @@ -26,11 +26,9 @@ public static String buildLoginParams(WeCrossRPC weCrossRPC, String username, St String confusedPassword = DigestUtils.sha256Hex(LoginSalt.LoginSalt + password); if (logger.isDebugEnabled()) { - logger.debug( - "login username: {}, pub: {}, randomToken: {}", - username, - pub, - authCode.getRandomToken()); + username = username.replace("\n", ""); + username = username.replace("\r", ""); + logger.debug("login username: {}", username); } LoginRequest loginRequest = new LoginRequest(); @@ -56,11 +54,9 @@ public static String buildRegisterParams( String confusedPassword = DigestUtils.sha256Hex(LoginSalt.LoginSalt + password); if (logger.isDebugEnabled()) { - logger.debug( - "register username: {}, pub: {}, randomToken: {}", - username, - pub, - authCode.getRandomToken()); + username = username.replace("\n", ""); + username = username.replace("\r", ""); + logger.debug("login username: {}", username); } RegisterRequest registerRequest = new RegisterRequest(); diff --git a/src/main/java/com/webank/wecrosssdk/rpc/methods/request/BlockRequest.java b/src/main/java/com/webank/wecrosssdk/rpc/methods/request/BlockRequest.java new file mode 100644 index 0000000..156e15f --- /dev/null +++ b/src/main/java/com/webank/wecrosssdk/rpc/methods/request/BlockRequest.java @@ -0,0 +1,31 @@ +package com.webank.wecrosssdk.rpc.methods.request; + +import java.math.BigInteger; + +public class BlockRequest { + private BigInteger blockNumber; + private String path; + + public BlockRequest() {} + + public BlockRequest(BigInteger blockNumber, String path) { + this.blockNumber = blockNumber; + this.path = path; + } + + public BigInteger getBlockNumber() { + return blockNumber; + } + + public void setBlockNumber(BigInteger blockNumber) { + this.blockNumber = blockNumber; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } +} diff --git a/src/main/java/com/webank/wecrosssdk/rpc/methods/request/ListXATransactionsRequest.java b/src/main/java/com/webank/wecrosssdk/rpc/methods/request/ListXATransactionsRequest.java index b9d4921..ec14b30 100644 --- a/src/main/java/com/webank/wecrosssdk/rpc/methods/request/ListXATransactionsRequest.java +++ b/src/main/java/com/webank/wecrosssdk/rpc/methods/request/ListXATransactionsRequest.java @@ -9,10 +9,17 @@ public class ListXATransactionsRequest { private Map offsets = new HashMap<>(); + private String chainPath; + public ListXATransactionsRequest(int size) { this.size = size; } + public ListXATransactionsRequest(int size, String chainPath) { + this.size = size; + this.chainPath = chainPath; + } + public int getSize() { return size; } @@ -28,4 +35,12 @@ public Map getOffsets() { public void setOffsets(Map offsets) { this.offsets = offsets; } + + public String getChainPath() { + return chainPath; + } + + public void setChainPath(String chainPath) { + this.chainPath = chainPath; + } } diff --git a/src/main/java/com/webank/wecrosssdk/rpc/methods/response/BlockResponse.java b/src/main/java/com/webank/wecrosssdk/rpc/methods/response/BlockResponse.java new file mode 100644 index 0000000..9a22c1b --- /dev/null +++ b/src/main/java/com/webank/wecrosssdk/rpc/methods/response/BlockResponse.java @@ -0,0 +1,19 @@ +package com.webank.wecrosssdk.rpc.methods.response; + +import com.webank.wecrosssdk.rpc.common.Block; +import com.webank.wecrosssdk.rpc.methods.Response; + +public class BlockResponse extends Response { + + public BlockResponse() { + super(); + } + + public Block getBlock() { + return getData(); + } + + public void setBlock(Block block) { + setData(block); + } +} diff --git a/src/main/java/com/webank/wecrosssdk/rpc/service/WeCrossRPCService.java b/src/main/java/com/webank/wecrosssdk/rpc/service/WeCrossRPCService.java index ea4285e..269c553 100644 --- a/src/main/java/com/webank/wecrosssdk/rpc/service/WeCrossRPCService.java +++ b/src/main/java/com/webank/wecrosssdk/rpc/service/WeCrossRPCService.java @@ -191,8 +191,8 @@ public void asyncSend( } else { url = server + uri; } - if (logger.isDebugEnabled()) { - logger.debug("request: {}; url: {}", objectMapper.writeValueAsString(request), url); + if (logger.isTraceEnabled()) { + logger.trace("request: {}; url: {}", objectMapper.writeValueAsString(request), url); } checkRequest(request); diff --git a/src/main/java/com/webank/wecrosssdk/utils/RPCUtils.java b/src/main/java/com/webank/wecrosssdk/utils/RPCUtils.java index a5d4645..8f70424 100644 --- a/src/main/java/com/webank/wecrosssdk/utils/RPCUtils.java +++ b/src/main/java/com/webank/wecrosssdk/utils/RPCUtils.java @@ -1,9 +1,7 @@ package com.webank.wecrosssdk.utils; -import com.webank.wecrosssdk.common.Constant; import com.webank.wecrosssdk.exception.ErrorCode; import com.webank.wecrosssdk.exception.WeCrossSDKException; -import java.net.URL; import java.util.UUID; import java.util.regex.Pattern; import org.slf4j.Logger; @@ -18,13 +16,6 @@ public static void checkPath(String path) throws WeCrossSDKException { if (!path.matches("^[A-Za-z]*.[A-Za-z0-9_-]*.[A-Za-z0-9_-]*$") || sp.length != 3) { throw new WeCrossSDKException(ErrorCode.RESOURCE_ERROR, "Invalid iPath: " + path); } - String templateUrl = Constant.TEMPLATE_URL + path.replace('.', '/'); - - try { - new URL(templateUrl); - } catch (Exception e) { - throw new WeCrossSDKException(ErrorCode.ILLEGAL_SYMBOL, "Invalid iPath: " + path); - } } public static String uriToUrl(String protocol, String prefix, String path) { diff --git a/src/test/java/com/webank/wecrosssdk/rpc/CallRPCTest.java b/src/test/java/com/webank/wecrosssdk/rpc/CallRPCTest.java index 1476f94..22bf76e 100644 --- a/src/test/java/com/webank/wecrosssdk/rpc/CallRPCTest.java +++ b/src/test/java/com/webank/wecrosssdk/rpc/CallRPCTest.java @@ -112,7 +112,7 @@ public void customCommandTest() throws Exception { @Test public void listXATransactionsTest() throws Exception { XATransactionListResponse xaTransactionListResponse = - weCrossRPC.listXATransactions(0).send(); + weCrossRPC.listXATransactions(0, null).send(); Assert.assertNotNull(xaTransactionListResponse.getRawXATransactionListResponse()); }