diff --git a/core/pom.xml b/core/pom.xml
index cd3024b9..b4e46e1b 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -15,7 +15,7 @@
pom
- 0.3.0.RELEASE
+ 0.4.0.RELEASE
1.2.0-SNAPSHOT
1.1.2.RELEASE
diff --git a/framework/ledger-model/src/main/java/test/com/jd/blockchain/intgr/TestDbFactory.java b/framework/ledger-model/src/main/java/test/com/jd/blockchain/intgr/TestDbFactory.java
deleted file mode 100644
index 0b9c7ed6..00000000
--- a/framework/ledger-model/src/main/java/test/com/jd/blockchain/intgr/TestDbFactory.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package test.com.jd.blockchain.intgr;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.when;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import com.jd.blockchain.storage.service.*;
-import com.jd.blockchain.storage.service.utils.MemoryKVStorage;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-public class TestDbFactory implements DbConnectionFactory{
-
- private DbConnectionFactory innerDbFactory;
-
- private AtomicBoolean errorSetTurnOn = new AtomicBoolean(false);
-
- public TestDbFactory(DbConnectionFactory innerDbFactory) {
- this.innerDbFactory = innerDbFactory;
- }
-
-
- Answer exKVStorageMockedAnswer = new Answer() {
-
- @Override
- public ExPolicyKVStorage answer(InvocationOnMock invocation) throws Throwable {
-
- ExPolicyKVStorage reallyExKVStorage = (ExPolicyKVStorage) invocation.callRealMethod();
-
- ExPolicyKVStorage mockExKVStorage = Mockito.spy(reallyExKVStorage);
-
- //按条件开关触发异常;
- doAnswer(new Answer() {
-
- @Override
- public Boolean answer(InvocationOnMock invocation) throws Throwable {
- if (isErrorSetTurnOn()) {
- return false;
- }
- return (Boolean) invocation.callRealMethod();
- }
- }).when(mockExKVStorage).set(any(), any(), any());
-
- return mockExKVStorage;
- }
- };
-
- Answer verKVStorageMockedAnswer = new Answer() {
-
- @Override
- public VersioningKVStorage answer(InvocationOnMock invocation) throws Throwable {
-
- VersioningKVStorage reallyVerKVStorage = (VersioningKVStorage) invocation.callRealMethod();
-
- VersioningKVStorage mockVerKVStorage = Mockito.spy(reallyVerKVStorage);
-
- //按条件开关触发异常;
- doAnswer(new Answer() {
-
- @Override
- public Long answer(InvocationOnMock invocation) throws Throwable {
- if (isErrorSetTurnOn()) {
- return (long)(-1);
- }
- return (Long) invocation.callRealMethod();
- }
- }).when(mockVerKVStorage).set(any(), any(), anyLong());
-
- return mockVerKVStorage;
- }
- };
-
- Answer storageMockedAnswer = new Answer() {
-
- @Override
- public KVStorageService answer(InvocationOnMock invocation) throws Throwable {
-
- KVStorageService reallyStorage = (KVStorageService) invocation.callRealMethod();
-
- TestMemoryKVStorage testMemoryKVStorage = new TestMemoryKVStorage((MemoryKVStorage)reallyStorage);
-
- KVStorageService mockedStorage = Mockito.spy(testMemoryKVStorage);
-
- doAnswer(exKVStorageMockedAnswer).when(mockedStorage).getExPolicyKVStorage();
-
- doAnswer(verKVStorageMockedAnswer).when(mockedStorage).getVersioningKVStorage();
-
- return mockedStorage;
- }
-
- };
-
-
- @Override
- public String dbPrefix() {
- return innerDbFactory.dbPrefix();
- }
-
- @Override
- public boolean support(String scheme) {
- return innerDbFactory.support(scheme);
- }
-
- @Override
- public DbConnection connect(String dbConnectionString) {
-
- DbConnection reallyDbConn = innerDbFactory.connect(dbConnectionString);
-
- DbConnection mockDbConn = Mockito.spy(reallyDbConn);
-
- when(mockDbConn.getStorageService()).then(storageMockedAnswer);
- return mockDbConn;
- }
-
- @Override
- public DbConnection connect(String dbConnectionString, String password) {
- return connect(dbConnectionString);
- }
-
- @Override
- public void close() {
- innerDbFactory.close();
-
- }
-
- public boolean isErrorSetTurnOn() {
- return errorSetTurnOn.get();
- }
-
- public void setErrorSetTurnOn(boolean errorSetTurnOn) {
- this.errorSetTurnOn.set(errorSetTurnOn);;
- }
-
-
-
-}
diff --git a/framework/ledger-model/src/main/java/test/com/jd/blockchain/intgr/TestMemoryKVStorage.java b/framework/ledger-model/src/main/java/test/com/jd/blockchain/intgr/TestMemoryKVStorage.java
deleted file mode 100644
index 15e99f60..00000000
--- a/framework/ledger-model/src/main/java/test/com/jd/blockchain/intgr/TestMemoryKVStorage.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package test.com.jd.blockchain.intgr;
-
-import com.jd.blockchain.storage.service.ExPolicyKVStorage;
-import com.jd.blockchain.storage.service.VersioningKVStorage;
-import com.jd.blockchain.storage.service.utils.MemoryKVStorage;
-
-public class TestMemoryKVStorage extends MemoryKVStorage {
-
- private MemoryKVStorage memoryKVStorage;
-
- public TestMemoryKVStorage(MemoryKVStorage memoryKVStorage) {
- this.memoryKVStorage = memoryKVStorage;
- }
-
- @Override
- public ExPolicyKVStorage getExPolicyKVStorage() {
- return memoryKVStorage;
- }
-
- @Override
- public VersioningKVStorage getVersioningKVStorage() {
- return memoryKVStorage;
- }
-}
diff --git a/libs/bft-smart b/libs/bft-smart
index 6b5b3c24..765d6909 160000
--- a/libs/bft-smart
+++ b/libs/bft-smart
@@ -1 +1 @@
-Subproject commit 6b5b3c24353536ac6316ff8be1ffb186f8875a86
+Subproject commit 765d6909106afaae966c5c25137d7ad12c44e61f
diff --git a/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/IntegrationTest.java b/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/IntegrationTest.java
index 16fae5c0..73b431a8 100644
--- a/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/IntegrationTest.java
+++ b/test/test-integration/src/main/java/test/com/jd/blockchain/intgr/IntegrationTest.java
@@ -1,704 +1,704 @@
-package test.com.jd.blockchain.intgr;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-import java.util.Random;
-import java.util.concurrent.CountDownLatch;
-
-import org.mockito.Mockito;
-import org.springframework.core.io.ClassPathResource;
-
-import com.jd.blockchain.consensus.ConsensusProvider;
-import com.jd.blockchain.consensus.ConsensusProviders;
-import com.jd.blockchain.consensus.ConsensusSettings;
-import com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider;
-import com.jd.blockchain.consensus.service.NodeServerFactory;
-import com.jd.blockchain.crypto.AddressEncoding;
-import com.jd.blockchain.crypto.AsymmetricKeypair;
-import com.jd.blockchain.crypto.Crypto;
-import com.jd.blockchain.crypto.HashDigest;
-import com.jd.blockchain.crypto.KeyGenUtils;
-import com.jd.blockchain.crypto.PrivKey;
-import com.jd.blockchain.crypto.PubKey;
-import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig;
-import com.jd.blockchain.ledger.BlockchainIdentity;
-import com.jd.blockchain.ledger.BlockchainKeyGenerator;
-import com.jd.blockchain.ledger.BlockchainKeypair;
-import com.jd.blockchain.ledger.BytesValue;
-import com.jd.blockchain.ledger.DataAccountKVSetOperation;
-import com.jd.blockchain.ledger.LedgerBlock;
-import com.jd.blockchain.ledger.LedgerInfo;
-import com.jd.blockchain.ledger.LedgerInitProperties;
-import com.jd.blockchain.ledger.ParticipantNode;
-import com.jd.blockchain.ledger.PreparedTransaction;
-import com.jd.blockchain.ledger.TransactionResponse;
-import com.jd.blockchain.ledger.TransactionTemplate;
-import com.jd.blockchain.ledger.TypedKVEntry;
-import com.jd.blockchain.ledger.UserInfo;
-import com.jd.blockchain.ledger.core.DataAccountQuery;
-import com.jd.blockchain.ledger.core.LedgerManage;
-import com.jd.blockchain.ledger.core.LedgerManager;
-import com.jd.blockchain.ledger.core.LedgerQuery;
-import com.jd.blockchain.sdk.BlockchainService;
-import com.jd.blockchain.sdk.client.GatewayServiceFactory;
-import com.jd.blockchain.storage.service.KVStorageService;
-import com.jd.blockchain.tools.initializer.DBConnectionConfig;
-import com.jd.blockchain.tools.initializer.LedgerBindingConfig;
-import com.jd.blockchain.tools.initializer.Prompter;
-import com.jd.blockchain.utils.Bytes;
-import com.jd.blockchain.utils.codec.HexUtils;
-import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback;
-import com.jd.blockchain.utils.net.NetworkAddress;
-
-import test.com.jd.blockchain.intgr.IntegratedContext.Node;
-import test.com.jd.blockchain.intgr.perf.LedgerInitializeWebTest;
-import test.com.jd.blockchain.intgr.perf.Utils;
-
-public class IntegrationTest {
- // 合约测试使用的初始化数据;
- BlockchainKeypair contractDataKey = BlockchainKeyGenerator.getInstance().generate();
- BlockchainKeypair contractDeployKey = BlockchainKeyGenerator.getInstance().generate();
- private String contractZipName = "AssetContract1.contract";
- private String eventName = "issue-asset";
- HashDigest txContentHash;
- // String userPubKeyVal = "this is user's pubKey";
- // 保存资产总数的键;
- private static final String KEY_TOTAL = "TOTAL";
- // 第二个参数;
- private static final String KEY_ABC = "abc";
-
- private static final String MQ_SERVER = "nats://127.0.0.1:4222";
-
- private static final String MQ_TOPIC = "subject";
-
- private static String memDbConnString = LedgerInitConsensusConfig.memConnectionStrings[0];
-
- // private static final MQConnectionConfig mqConnConfig = new
- // MQConnectionConfig();
- // static {
- // mqConnConfig.setServer(MQ_SERVER);
- // mqConnConfig.setTopic(MQ_TOPIC);
- // }
-
- public static void main_(String[] args) {
- // init ledgers of all nodes ;
- IntegratedContext context = initLedgers();
- Node node0 = context.getNode(0);
- Node node1 = context.getNode(1);
- Node node2 = context.getNode(2);
- Node node3 = context.getNode(3);
-
- BftsmartConsensusProvider csProvider0 = new BftsmartConsensusProvider();
- NodeServerFactory mockedNodeServerFactory0 = Mockito.spy(csProvider0.getServerFactory());
-
- NetworkAddress peerSrvAddr0 = new NetworkAddress("127.0.0.1", 10200);
- PeerTestRunner peer0 = new PeerTestRunner(peerSrvAddr0, node0.getBindingConfig(), node0.getStorageDB());
-
- NetworkAddress peerSrvAddr1 = new NetworkAddress("127.0.0.1", 10210);
- PeerTestRunner peer1 = new PeerTestRunner(peerSrvAddr1, node1.getBindingConfig(), node1.getStorageDB());
-
- NetworkAddress peerSrvAddr2 = new NetworkAddress("127.0.0.1", 10220);
- PeerTestRunner peer2 = new PeerTestRunner(peerSrvAddr2, node2.getBindingConfig(), node2.getStorageDB());
-
- NetworkAddress peerSrvAddr3 = new NetworkAddress("127.0.0.1", 10230);
- PeerTestRunner peer3 = new PeerTestRunner(peerSrvAddr3, node3.getBindingConfig(), node3.getStorageDB());
-
- AsyncCallback