Browse Source

Merge branch 'release/1.1.1'

tags/1.1.1^0
huanghaiquan 4 years ago
parent
commit
863085b923
71 changed files with 311 additions and 134 deletions
  1. +1
    -1
      source/base/pom.xml
  2. +1
    -1
      source/binary-proto/pom.xml
  3. +1
    -1
      source/consensus/consensus-bftsmart/pom.xml
  4. +87
    -13
      source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/service/BftsmartNodeServer.java
  5. +1
    -1
      source/consensus/consensus-framework/pom.xml
  6. +1
    -1
      source/consensus/consensus-mq/pom.xml
  7. +1
    -1
      source/consensus/pom.xml
  8. +1
    -1
      source/contract/contract-framework/pom.xml
  9. +1
    -1
      source/contract/contract-jvm/pom.xml
  10. +1
    -1
      source/contract/contract-maven-plugin/pom.xml
  11. +1
    -1
      source/contract/contract-samples/pom.xml
  12. +1
    -1
      source/contract/pom.xml
  13. +1
    -1
      source/crypto/crypto-adv/pom.xml
  14. +1
    -1
      source/crypto/crypto-classic/pom.xml
  15. +1
    -1
      source/crypto/crypto-framework/pom.xml
  16. +1
    -1
      source/crypto/crypto-pki/pom.xml
  17. +1
    -1
      source/crypto/crypto-sm/pom.xml
  18. +1
    -1
      source/crypto/pom.xml
  19. +1
    -1
      source/deployment/deployment-gateway/pom.xml
  20. +1
    -1
      source/deployment/deployment-peer/pom.xml
  21. +1
    -1
      source/deployment/pom.xml
  22. +1
    -1
      source/gateway/pom.xml
  23. +39
    -1
      source/gateway/src/main/java/com/jd/blockchain/gateway/service/GatewayInterceptServiceHandler.java
  24. +17
    -3
      source/gateway/src/main/java/com/jd/blockchain/gateway/web/BlockBrowserController.java
  25. +1
    -1
      source/ledger/ledger-core/pom.xml
  26. +3
    -3
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQueryService.java
  27. +8
    -21
      source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionBatchProcessor.java
  28. +1
    -1
      source/ledger/ledger-model/pom.xml
  29. +59
    -25
      source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractJarUtils.java
  30. +1
    -1
      source/ledger/ledger-rpc/pom.xml
  31. +1
    -1
      source/ledger/pom.xml
  32. +1
    -1
      source/manager/manager-booter/pom.xml
  33. +1
    -1
      source/manager/manager-model/pom.xml
  34. +1
    -1
      source/manager/manager-service/pom.xml
  35. +1
    -1
      source/manager/manager-web/pom.xml
  36. +14
    -1
      source/manager/pom.xml
  37. +1
    -1
      source/peer/pom.xml
  38. +3
    -3
      source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java
  39. +2
    -2
      source/pom.xml
  40. +1
    -1
      source/runtime/pom.xml
  41. +1
    -1
      source/runtime/runtime-context/pom.xml
  42. +1
    -1
      source/runtime/runtime-context/src/main/java/com/jd/blockchain/runtime/RuntimeContext.java
  43. +1
    -1
      source/runtime/runtime-modular-booter/pom.xml
  44. +1
    -1
      source/runtime/runtime-modular/pom.xml
  45. +1
    -1
      source/sdk/pom.xml
  46. +1
    -1
      source/sdk/sdk-base/pom.xml
  47. +1
    -1
      source/sdk/sdk-client/pom.xml
  48. +1
    -1
      source/sdk/sdk-samples/pom.xml
  49. +1
    -1
      source/storage/pom.xml
  50. +1
    -1
      source/storage/storage-composite/pom.xml
  51. +1
    -1
      source/storage/storage-redis/pom.xml
  52. +1
    -1
      source/storage/storage-rocksdb/pom.xml
  53. +1
    -1
      source/storage/storage-service/pom.xml
  54. +1
    -1
      source/test/pom.xml
  55. +1
    -1
      source/test/test-consensus-client/pom.xml
  56. +2
    -2
      source/test/test-consensus-node/pom.xml
  57. +1
    -1
      source/test/test-integration/pom.xml
  58. +1
    -1
      source/test/test-ledger/pom.xml
  59. +1
    -1
      source/tools/pom.xml
  60. +1
    -1
      source/tools/tools-initializer-booter/pom.xml
  61. +1
    -1
      source/tools/tools-initializer/pom.xml
  62. +1
    -1
      source/tools/tools-keygen-booter/pom.xml
  63. +1
    -1
      source/tools/tools-keygen/pom.xml
  64. +1
    -1
      source/utils/pom.xml
  65. +1
    -1
      source/utils/utils-common/pom.xml
  66. +17
    -0
      source/utils/utils-common/src/main/java/com/jd/blockchain/utils/QueryUtil.java
  67. +1
    -1
      source/utils/utils-http/pom.xml
  68. +1
    -1
      source/utils/utils-serialize/pom.xml
  69. +1
    -1
      source/utils/utils-test/pom.xml
  70. +1
    -1
      source/utils/utils-web-server/pom.xml
  71. +1
    -1
      source/utils/utils-web/pom.xml

+ 1
- 1
source/base/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>base</artifactId>



+ 1
- 1
source/binary-proto/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>binary-proto</artifactId>



+ 1
- 1
source/consensus/consensus-bftsmart/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>consensus</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>consensus-bftsmart</artifactId>



+ 87
- 13
source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/service/BftsmartNodeServer.java View File

@@ -359,33 +359,107 @@ public class BftsmartNodeServer extends DefaultRecoverable implements NodeServer
* Used by consensus write phase, pre compute new block hash
*
*/
// public BatchAppResultImpl preComputeAppHash(byte[][] commands) {
// String batchId = messageHandle.beginBatch(realmName);
// List<AsyncFuture<byte[]>> asyncFutureLinkedList = new ArrayList<>(commands.length);
// List<byte[]> responseLinkedList = new ArrayList<>();
// try {
// int msgId = 0;
// for (byte[] txContent : commands) {
// AsyncFuture<byte[]> asyncFuture = messageHandle.processOrdered(msgId++, txContent, realmName, batchId);
// asyncFutureLinkedList.add(asyncFuture);
// }
// StateSnapshot stateSnapshot = messageHandle.completeBatch(realmName, batchId);
// byte[] blockHashBytes = stateSnapshot.getSnapshot();
//
// for (int i = 0; i< asyncFutureLinkedList.size(); i++) {
// responseLinkedList.add(asyncFutureLinkedList.get(i).get());
// }
//
//
// return new BatchAppResultImpl(responseLinkedList, blockHashBytes, batchId);
//
// } catch (Exception e) {
// // todo 需要处理应答码 404
// LOGGER.error("Error occurred while processing ordered messages! --" + e.getMessage(), e);
// messageHandle.rollbackBatch(realmName, batchId, TransactionState.IGNORED_BY_CONSENSUS_PHASE_PRECOMPUTE_ROLLBACK.CODE);
// }
//
// return null;
// }

/**
* Used by consensus write phase, pre compute new block hash
*/
public BatchAppResultImpl preComputeAppHash(byte[][] commands) {
String batchId = messageHandle.beginBatch(realmName);
List<AsyncFuture<byte[]>> asyncFutureLinkedList = new ArrayList<>(commands.length);
List<byte[]> responseLinkedList = new ArrayList<>();
BatchAppResultImpl result;
try {
int msgId = 0;
for (byte[] txContent : commands) {
AsyncFuture<byte[]> asyncFuture = messageHandle.processOrdered(msgId++, txContent, realmName, batchId);
asyncFutureLinkedList.add(asyncFuture);
}
StateSnapshot stateSnapshot = messageHandle.completeBatch(realmName, batchId);
byte[] blockHashBytes = stateSnapshot.getSnapshot();

for (int i = 0; i< asyncFutureLinkedList.size(); i++) {
responseLinkedList.add(asyncFutureLinkedList.get(i).get());
boolean isOK = true;
TransactionState transactionState = TransactionState.IGNORED_BY_BLOCK_FULL_ROLLBACK;

for (int i = 0; i < commands.length; i++) {
byte[] txContent = commands[i];
try {
AsyncFuture<byte[]> asyncFuture = messageHandle.processOrdered(msgId++, txContent, realmName, batchId);
asyncFutureLinkedList.add(asyncFuture);
} catch (BlockRollbackException e) {
LOGGER.error("Error occurred while processing ordered messages! --" + e.getMessage(), e);
isOK = false;
// TODO: handle the BlockRollbackException in detail;
if (e instanceof DataVersionConflictException) {
transactionState = TransactionState.DATA_VERSION_CONFLICT;
}
break;
}
}

if (isOK) {
StateSnapshot stateSnapshot = messageHandle.completeBatch(realmName, batchId);
byte[] blockHashBytes = stateSnapshot.getSnapshot();

for (int i = 0; i < asyncFutureLinkedList.size(); i++) {
responseLinkedList.add(asyncFutureLinkedList.get(i).get());
}

result = new BatchAppResultImpl(responseLinkedList, blockHashBytes, batchId);
result.setErrorCode((byte) 0);

return result;
} else {

for (int i = 0; i < commands.length; i++) {
responseLinkedList.add(createAppResponse(commands[i],transactionState));
}

Random random = new Random();
byte[] rand = new byte[4];
random.nextBytes(rand);

return new BatchAppResultImpl(responseLinkedList, blockHashBytes, batchId);
result = new BatchAppResultImpl(responseLinkedList, rand, batchId);
result.setErrorCode((byte) 1);

return result;
}

} catch (Exception e) {
// todo 需要处理应答码 404
LOGGER.error("Error occurred while processing ordered messages! --" + e.getMessage(), e);
messageHandle.rollbackBatch(realmName, batchId, TransactionState.IGNORED_BY_CONSENSUS_PHASE_PRECOMPUTE_ROLLBACK.CODE);
LOGGER.error("Error occurred while genearte batch app result! --" + e.getMessage(), e);
throw e;
}
}

return null;
public byte[] createAppResponse(byte[] command, TransactionState transactionState) {
TransactionRequest txRequest = BinaryProtocol.decode(command);

TxResponseMessage resp = new TxResponseMessage(txRequest.getTransactionContent().getHash());
// resp.setExecutionState(TransactionState.IGNORED_BY_BLOCK_FULL_ROLLBACK);
resp.setExecutionState(transactionState);

return BinaryProtocol.encode(resp, TransactionResponse.class);
}

/**


+ 1
- 1
source/consensus/consensus-framework/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>consensus</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>consensus-framework</artifactId>



+ 1
- 1
source/consensus/consensus-mq/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>consensus</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>consensus-mq</artifactId>



+ 1
- 1
source/consensus/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>consensus</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/contract/contract-framework/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>contract</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>contract-framework</artifactId>



+ 1
- 1
source/contract/contract-jvm/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>contract</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>contract-jvm</artifactId>



+ 1
- 1
source/contract/contract-maven-plugin/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>contract</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>contract-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>


+ 1
- 1
source/contract/contract-samples/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>contract</artifactId>
<groupId>com.jd.blockchain</groupId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>



+ 1
- 1
source/contract/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>contract</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/crypto/crypto-adv/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>crypto</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>crypto-adv</artifactId>



+ 1
- 1
source/crypto/crypto-classic/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>crypto</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>crypto-classic</artifactId>



+ 1
- 1
source/crypto/crypto-framework/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>crypto</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>crypto-framework</artifactId>



+ 1
- 1
source/crypto/crypto-pki/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>crypto</artifactId>
<groupId>com.jd.blockchain</groupId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>



+ 1
- 1
source/crypto/crypto-sm/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>crypto</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>crypto-sm</artifactId>



+ 1
- 1
source/crypto/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>crypto</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/deployment/deployment-gateway/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>deployment</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>deployment-gateway</artifactId>



+ 1
- 1
source/deployment/deployment-peer/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>deployment</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>deployment-peer</artifactId>



+ 1
- 1
source/deployment/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>deployment</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/gateway/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>gateway</artifactId>



+ 39
- 1
source/gateway/src/main/java/com/jd/blockchain/gateway/service/GatewayInterceptServiceHandler.java View File

@@ -5,15 +5,26 @@ import com.jd.blockchain.gateway.PeerService;
import com.jd.blockchain.ledger.ContractCodeDeployOperation;
import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.TransactionRequest;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.net.URL;

@Service
public class GatewayInterceptServiceHandler implements GatewayInterceptService {

private static String contractsPath;

@Autowired
private PeerService peerService;

static {
contractsPath = jarRootDir();
}

@Override
public void intercept(TransactionRequest txRequest) {
// 当前仅处理合约发布的请求
@@ -29,7 +40,34 @@ public class GatewayInterceptServiceHandler implements GatewayInterceptService {
}

private void contractCheck(final ContractCodeDeployOperation contractOP) {

// 校验chainCode
ContractJarUtils.verify(contractOP.getChainCode());
ContractJarUtils.verify(contractsPath, contractOP.getChainCode());
}

private static String jarRootDir() {

try {
URL url = GatewayInterceptServiceHandler.class.getProtectionDomain().getCodeSource().getLocation();
String currPath = java.net.URLDecoder.decode(url.getPath(), "UTF-8");
if (currPath.contains("!/")) {
currPath = currPath.substring(5, currPath.indexOf("!/"));
}
if (currPath.endsWith(".jar")) {
currPath = currPath.substring(0, currPath.lastIndexOf("/") + 1);
}
File file = new File(currPath);

String homeDir = file.getParent();

String jarRootPath = homeDir + File.separator + "contracts";

FileUtils.forceMkdir(new File(jarRootPath));

return jarRootPath;

} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}

+ 17
- 3
source/gateway/src/main/java/com/jd/blockchain/gateway/web/BlockBrowserController.java View File

@@ -597,7 +597,7 @@ public class BlockBrowserController implements BlockchainExtendQueryService {
public AccountHeader[] getUsers(@PathVariable(name = "ledgerHash") HashDigest ledgerHash,
@RequestParam(name = "fromIndex", required = false, defaultValue = "0") int fromIndex,
@RequestParam(name = "count", required = false, defaultValue = "-1") int count) {
return peerService.getQueryService().getUsers(ledgerHash, fromIndex, count);
return revertAccountHeader(peerService.getQueryService().getUsers(ledgerHash, fromIndex, count));
}

@RequestMapping(method = RequestMethod.GET, path = "ledgers/{ledgerHash}/accounts")
@@ -605,7 +605,7 @@ public class BlockBrowserController implements BlockchainExtendQueryService {
public AccountHeader[] getDataAccounts(@PathVariable(name = "ledgerHash") HashDigest ledgerHash,
@RequestParam(name = "fromIndex", required = false, defaultValue = "0") int fromIndex,
@RequestParam(name = "count", required = false, defaultValue = "-1") int count) {
return peerService.getQueryService().getDataAccounts(ledgerHash, fromIndex, count);
return revertAccountHeader(peerService.getQueryService().getDataAccounts(ledgerHash, fromIndex, count));
}

@RequestMapping(method = RequestMethod.GET, path = "ledgers/{ledgerHash}/contracts")
@@ -613,6 +613,20 @@ public class BlockBrowserController implements BlockchainExtendQueryService {
public AccountHeader[] getContractAccounts(@PathVariable(name = "ledgerHash") HashDigest ledgerHash,
@RequestParam(name = "fromIndex", required = false, defaultValue = "0") int fromIndex,
@RequestParam(name = "count", required = false, defaultValue = "-1") int count) {
return peerService.getQueryService().getContractAccounts(ledgerHash, fromIndex, count);
return revertAccountHeader(peerService.getQueryService().getContractAccounts(ledgerHash, fromIndex, count));
}

/**
* reverse the AccountHeader[] content; the latest record show first;
* @return
*/
private AccountHeader[] revertAccountHeader(AccountHeader[] accountHeaders){
AccountHeader[] accounts = new AccountHeader[accountHeaders.length];
if(accountHeaders!=null && accountHeaders.length>0){
for (int i = 0; i < accountHeaders.length; i++) {
accounts[accountHeaders.length-1-i] = accountHeaders[i];
}
}
return accounts;
}
}

+ 1
- 1
source/ledger/ledger-core/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>ledger</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>ledger-core</artifactId>



+ 3
- 3
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQueryService.java View File

@@ -392,7 +392,7 @@ public class LedgerQueryService implements BlockchainQueryService {
checkLedgerHash(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotal());
int pages[] = QueryUtil.calFromIndexAndCountDescend(fromIndex, count, (int) userAccountSet.getTotal());
return userAccountSet.getHeaders(pages[0], pages[1]);
}

@@ -401,7 +401,7 @@ public class LedgerQueryService implements BlockchainQueryService {
checkLedgerHash(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotal());
int pages[] = QueryUtil.calFromIndexAndCountDescend(fromIndex, count, (int) dataAccountSet.getTotal());
return dataAccountSet.getHeaders(pages[0], pages[1]);
}

@@ -410,7 +410,7 @@ public class LedgerQueryService implements BlockchainQueryService {
checkLedgerHash(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotal());
int pages[] = QueryUtil.calFromIndexAndCountDescend(fromIndex, count, (int) contractAccountSet.getTotal());
return contractAccountSet.getHeaders(pages[0], pages[1]);
}



+ 8
- 21
source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/TransactionBatchProcessor.java View File

@@ -5,29 +5,11 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import com.jd.blockchain.ledger.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jd.blockchain.crypto.HashDigest;
import com.jd.blockchain.ledger.BlockRollbackException;
import com.jd.blockchain.ledger.BytesValue;
import com.jd.blockchain.ledger.ContractDoesNotExistException;
import com.jd.blockchain.ledger.DataAccountDoesNotExistException;
import com.jd.blockchain.ledger.IllegalTransactionException;
import com.jd.blockchain.ledger.LedgerBlock;
import com.jd.blockchain.ledger.LedgerException;
import com.jd.blockchain.ledger.LedgerPermission;
import com.jd.blockchain.ledger.LedgerSecurityException;
import com.jd.blockchain.ledger.Operation;
import com.jd.blockchain.ledger.OperationResult;
import com.jd.blockchain.ledger.OperationResultData;
import com.jd.blockchain.ledger.ParticipantDoesNotExistException;
import com.jd.blockchain.ledger.TransactionContent;
import com.jd.blockchain.ledger.TransactionRequest;
import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.TransactionRollbackException;
import com.jd.blockchain.ledger.TransactionState;
import com.jd.blockchain.ledger.UserDoesNotExistException;
import com.jd.blockchain.ledger.core.TransactionRequestExtension.Credential;
import com.jd.blockchain.service.TransactionBatchProcess;
import com.jd.blockchain.service.TransactionBatchResult;
@@ -63,7 +45,7 @@ public class TransactionBatchProcessor implements TransactionBatchProcess {

/**
* @param newBlockEditor 新区块的数据编辑器;
* @param ledgerQueryer 账本查询器,只包含新区块的前一个区块的数据集;即未提交新区块之前的经过共识的账本最新数据集;
* @param newBlockEditor 账本查询器,只包含新区块的前一个区块的数据集;即未提交新区块之前的经过共识的账本最新数据集;
* @param opHandles 操作处理对象注册表;
*/
public TransactionBatchProcessor(LedgerSecurityManager securityManager, LedgerEditor newBlockEditor,
@@ -153,6 +135,7 @@ public class TransactionBatchProcessor implements TransactionBatchProcess {

} catch (BlockRollbackException e) {
// 发生区块级别的处理异常,向上重新抛出异常进行处理,整个区块可能被丢弃;
resp = discard(request, e.getState());
LOGGER.error(String.format(
"Ignore transaction caused by BlockRollbackException! --[BlockHeight=%s][RequestHash=%s][TxHash=%s] --%s",
newBlockEditor.getBlockHeight(), request.getHash(), request.getTransactionContent().getHash(),
@@ -287,8 +270,12 @@ public class TransactionBatchProcessor implements TransactionBatchProcess {
newBlockEditor.getBlockHeight(), request.getHash(), request.getTransactionContent().getHash(),
e.getMessage()), e);
} catch (BlockRollbackException e) {
// 回滚整个区块;
// rollback all the block;
// TODO: handle the BlockRollbackException in detail;
result = TransactionState.IGNORED_BY_BLOCK_FULL_ROLLBACK;
if (e instanceof DataVersionConflictException) {
result = TransactionState.DATA_VERSION_CONFLICT;
}
txCtx.rollback();
LOGGER.error(
String.format("Transaction was rolled back! --[BlockHeight=%s][RequestHash=%s][TxHash=%s] --%s",


+ 1
- 1
source/ledger/ledger-model/pom.xml View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>ledger</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>ledger-model</artifactId>


+ 59
- 25
source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractJarUtils.java View File

@@ -110,36 +110,46 @@ public class ContractJarUtils {
return dotClassName;
}

public static void verify(byte[] chainCode) {
public static void verify(String contractPath, byte[] chainCode) {
if (chainCode == null || chainCode.length == 0) {
throw new IllegalStateException("Contract's chaincode is empty !!!");
}
// 首先生成合约文件
File jarFile = newJarFile();
File jarFile = newJarTempFile();
try {
FileUtils.writeByteArrayToFile(jarFile, chainCode);
// 校验合约文件
verify(jarFile);
verify(contractPath, jarFile);
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
// 删除文件
try {
FileUtils.forceDelete(jarFile);
jarFile.deleteOnExit();
} catch (Exception e) {
throw new IllegalStateException(e);
// DO NOTHING
}
}
}

private static void verify(File jarFile) throws Exception {
public static void verify(byte[] chainCode) {
verify(null, chainCode);
}

private static void verify(String contractPath, File jarFile) throws Exception {
// 首先判断jarFile中是否含有META-INF/JDCHAIN.TXT,并将其读出
URL jarUrl = new URL("jar:file:" + jarFile.getPath() + "!/" + CONTRACT_MF);
InputStream inputStream = jarUrl.openStream();
if (inputStream == null) {
throw new IllegalStateException(CONTRACT_MF + " IS NULL !!!");
}
byte[] bytes = IOUtils.toByteArray(inputStream);
byte[] bytes;

try {
bytes = IOUtils.toByteArray(inputStream);
} finally {
inputStream.close();
}
if (bytes == null || bytes.length == 0) {
throw new IllegalStateException(CONTRACT_MF + " IS Illegal !!!");
}
@@ -147,20 +157,25 @@ public class ContractJarUtils {
String txt = new String(bytes, StandardCharsets.UTF_8);

// 生成新的Jar包文件,该文件路径与JarFile基本一致
File tempJar = newJarFile();

// 复制除JDCHAIN.TXT之外的部分
copy(jarFile, tempJar, null, null, CONTRACT_MF);

// 生成新Jar包对应的Hash内容
String verifyTxt = contractMF(FileUtils.readFileToByteArray(tempJar));
File tempJar = newJarTempFile();
try {
// 复制除JDCHAIN.TXT之外的部分
copy(jarFile, tempJar, null, null, CONTRACT_MF);

// 删除临时文件
FileUtils.forceDelete(tempJar);
// 生成新Jar包对应的Hash内容
String verifyTxt = contractMF(FileUtils.readFileToByteArray(tempJar));

// 校验Jar包内容
if (!txt.equals(verifyTxt)) {
throw new IllegalStateException(String.format("Jar [%s] verify Illegal !!!", jarFile.getName()));
// 校验Jar包内容
if (!txt.equals(verifyTxt)) {
throw new IllegalStateException(String.format("Jar [%s] verify Illegal !!!", jarFile.getName()));
}
} finally {
try {
// 删除临时文件
tempJar.deleteOnExit();
} catch (Exception e) {
// DO NOTHING
}
}
}

@@ -218,11 +233,30 @@ public class ContractJarUtils {
}
}

private static File newJarFile() {
return new File("contract-" +
System.currentTimeMillis() + "-" +
System.nanoTime() + "-" +
FILE_RANDOM.nextInt(1024) +
".jar");
private static File newJarTempFile() {

try {
return File.createTempFile("contract-" +
System.currentTimeMillis() + "-" +
System.nanoTime() + "-" +
FILE_RANDOM.nextInt(1024), ".jar");
} catch (Exception e) {
throw new IllegalStateException(e);
}
//
// if (contractPath != null && contractPath.length() > 0) {
// return new File(contractPath + File.separator +
// "contract-" +
// System.currentTimeMillis() + "-" +
// System.nanoTime() + "-" +
// FILE_RANDOM.nextInt(1024) +
// ".jar");
// }
//
// return new File("contract-" +
// System.currentTimeMillis() + "-" +
// System.nanoTime() + "-" +
// FILE_RANDOM.nextInt(1024) +
// ".jar");
}
}

+ 1
- 1
source/ledger/ledger-rpc/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>ledger</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>ledger-rpc</artifactId>



+ 1
- 1
source/ledger/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>ledger</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/manager/manager-booter/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>manager</artifactId>
<groupId>com.jd.blockchain</groupId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>



+ 1
- 1
source/manager/manager-model/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>manager</artifactId>
<groupId>com.jd.blockchain</groupId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>



+ 1
- 1
source/manager/manager-service/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>manager</artifactId>
<groupId>com.jd.blockchain</groupId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>



+ 1
- 1
source/manager/manager-web/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>manager</artifactId>
<groupId>com.jd.blockchain</groupId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>



+ 14
- 1
source/manager/pom.xml View File

@@ -11,8 +11,21 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>manager</artifactId>
<packaging>pom</packaging>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

+ 1
- 1
source/peer/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>peer</artifactId>


+ 3
- 3
source/peer/src/main/java/com/jd/blockchain/peer/web/LedgerQueryController.java View File

@@ -474,7 +474,7 @@ public class LedgerQueryController implements BlockchainQueryService {
LedgerQuery ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
UserAccountQuery userAccountSet = ledger.getUserAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) userAccountSet.getTotal());
int pages[] = QueryUtil.calFromIndexAndCountDescend(fromIndex, count, (int) userAccountSet.getTotal());
return userAccountSet.getHeaders(pages[0], pages[1]);
}

@@ -494,7 +494,7 @@ public class LedgerQueryController implements BlockchainQueryService {
LedgerQuery ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
DataAccountQuery dataAccountSet = ledger.getDataAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) dataAccountSet.getTotal());
int pages[] = QueryUtil.calFromIndexAndCountDescend(fromIndex, count, (int) dataAccountSet.getTotal());
return dataAccountSet.getHeaders(pages[0], pages[1]);
}

@@ -506,7 +506,7 @@ public class LedgerQueryController implements BlockchainQueryService {
LedgerQuery ledger = ledgerService.getLedger(ledgerHash);
LedgerBlock block = ledger.getLatestBlock();
ContractAccountQuery contractAccountSet = ledger.getContractAccountSet(block);
int pages[] = QueryUtil.calFromIndexAndCount(fromIndex, count, (int) contractAccountSet.getTotal());
int pages[] = QueryUtil.calFromIndexAndCountDescend(fromIndex, count, (int) contractAccountSet.getTotal());
return contractAccountSet.getHeaders(pages[0], pages[1]);
}



+ 2
- 2
source/pom.xml View File

@@ -11,7 +11,7 @@

<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
<packaging>pom</packaging>
<description>jdchain</description>

@@ -35,7 +35,7 @@
</modules>

<properties>
<bft-smart.version>0.2.0.RELEASE</bft-smart.version>
<bft-smart.version>0.3.0.RELEASE</bft-smart.version>
<data-explorer.version>1.1.0.RELEASE</data-explorer.version>
<manager-explorer.version>1.1.0.RELEASE</manager-explorer.version>
<commons-io.version>2.4</commons-io.version>


+ 1
- 1
source/runtime/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>runtime</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/runtime/runtime-context/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>runtime</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>runtime-context</artifactId>



+ 1
- 1
source/runtime/runtime-context/src/main/java/com/jd/blockchain/runtime/RuntimeContext.java View File

@@ -240,7 +240,7 @@ public abstract class RuntimeContext {

private static void initBlacks() {
try {
InputStream inputStream = ContractURLClassLoader.class.getResourceAsStream(File.separator + BLACK_CONFIG);
InputStream inputStream = ContractURLClassLoader.class.getResourceAsStream("/"+ BLACK_CONFIG);
String text = FileUtils.readText(inputStream);
String[] textArray = text.split("\n");
for (String setting : textArray) {


+ 1
- 1
source/runtime/runtime-modular-booter/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>runtime</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>runtime-modular-booter</artifactId>
</project>

+ 1
- 1
source/runtime/runtime-modular/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>runtime</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>runtime-modular</artifactId>



+ 1
- 1
source/sdk/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>sdk</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/sdk/sdk-base/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>sdk</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>sdk-base</artifactId>



+ 1
- 1
source/sdk/sdk-client/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>sdk</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>sdk-client</artifactId>


+ 1
- 1
source/sdk/sdk-samples/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>sdk</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>sdk-samples</artifactId>


+ 1
- 1
source/storage/pom.xml View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>storage</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/storage/storage-composite/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>storage</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>storage-composite</artifactId>



+ 1
- 1
source/storage/storage-redis/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>storage</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>storage-redis</artifactId>



+ 1
- 1
source/storage/storage-rocksdb/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>storage</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>storage-rocksdb</artifactId>



+ 1
- 1
source/storage/storage-service/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>storage</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>storage-service</artifactId>



+ 1
- 1
source/test/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>test</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/test/test-consensus-client/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>test</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>test-consensus-client</artifactId>



+ 2
- 2
source/test/test-consensus-node/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>test</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>test-consensus-node</artifactId>
<dependencies>
@@ -38,7 +38,7 @@
<dependency>
<groupId>com.jd.blockchain</groupId>
<artifactId>consensus-bftsmart</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>


+ 1
- 1
source/test/test-integration/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>test</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>test-integration</artifactId>



+ 1
- 1
source/test/test-ledger/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>test</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>test-ledger</artifactId>



+ 1
- 1
source/tools/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>tools</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/tools/tools-initializer-booter/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>tools</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>tools-initializer-booter</artifactId>



+ 1
- 1
source/tools/tools-initializer/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>tools</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>tools-initializer</artifactId>



+ 1
- 1
source/tools/tools-keygen-booter/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>tools</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>tools-keygen-booter</artifactId>



+ 1
- 1
source/tools/tools-keygen/pom.xml View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>tools</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>tools-keygen</artifactId>



+ 1
- 1
source/utils/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>jdchain-root</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>utils</artifactId>
<packaging>pom</packaging>


+ 1
- 1
source/utils/utils-common/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>utils</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>utils-common</artifactId>


+ 17
- 0
source/utils/utils-common/src/main/java/com/jd/blockchain/utils/QueryUtil.java View File

@@ -47,4 +47,21 @@ public class QueryUtil {
rtn[1] = count;
return rtn;
}

/**
* cal the data by descend;
* @param fromIndex
* @param count
* @param maxNum
* @return
*/
public static int[] calFromIndexAndCountDescend(int fromIndex, int count, int maxNum){
int rtn[] = new int[2];
int results[] = calFromIndexAndCount(fromIndex,count,maxNum);

//now use descend; first show the latest record;
rtn[0] = maxNum - results[0] - results[1];
rtn[1] = results[1];
return rtn;
}
}

+ 1
- 1
source/utils/utils-http/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>utils</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<properties>


+ 1
- 1
source/utils/utils-serialize/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>utils</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>utils-serialize</artifactId>


+ 1
- 1
source/utils/utils-test/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>utils</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>utils-test</artifactId>


+ 1
- 1
source/utils/utils-web-server/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>utils</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>utils-web-server</artifactId>


+ 1
- 1
source/utils/utils-web/pom.xml View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.jd.blockchain</groupId>
<artifactId>utils</artifactId>
<version>1.1.0.RELEASE</version>
<version>1.1.1.RELEASE</version>
</parent>
<artifactId>utils-web</artifactId>
<dependencies>


Loading…
Cancel
Save