From a64ab90dd9785df28838154576c17bb196ae81be Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Tue, 7 May 2019 15:38:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=9C=A8transactonContent=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E4=B8=AD=E6=B7=BB=E5=8A=A0txOpTime=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=90=88=E7=BA=A6=E6=97=B6=EF=BC=8C=E5=87=BA=E7=8E=B0contentHa?= =?UTF-8?q?sh=E7=A2=B0=E6=92=9E=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ContractEventSendOperationHandle.java | 2 +- .../blockchain/ledger/TransactionContent.java | 46 ++-- .../ledger/TransactionContentBody.java | 80 +++---- .../jd/blockchain/ledger/data/TxBuilder.java | 177 ++++++++-------- .../blockchain/ledger/data/TxContentBlob.java | 196 ++++++++++-------- .../intgr/IntegrationTest4Bftsmart.java | 2 +- 6 files changed, 264 insertions(+), 239 deletions(-) diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/handles/ContractEventSendOperationHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/handles/ContractEventSendOperationHandle.java index 498457af..9edde458 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/handles/ContractEventSendOperationHandle.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/impl/handles/ContractEventSendOperationHandle.java @@ -42,7 +42,7 @@ public class ContractEventSendOperationHandle implements OperationHandle { contract.getAddress().toBase58(),contract.getChaincodeVersion(),contract.getChainCode()). processEvent(localContractEventContext); } catch (Exception e) { - e.printStackTrace(); + throw new LedgerException("contract processEvent exception. detail:"+e.getMessage()); } } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java index 136ce6e0..a081738f 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java @@ -1,21 +1,25 @@ -package com.jd.blockchain.ledger; - -import com.jd.blockchain.base.data.TypeCodes; -import com.jd.blockchain.binaryproto.DataContract; -import com.jd.blockchain.binaryproto.DataField; -import com.jd.blockchain.crypto.hash.HashDigest; -import com.jd.blockchain.utils.ValueType; - -/** - * 交易内容; - * - * @author huanghaiquan - * - */ -@DataContract(code= TypeCodes.TX_CONTENT) -public interface TransactionContent extends TransactionContentBody, HashObject { - @Override - @DataField(order=1, primitiveType = ValueType.BYTES) - HashDigest getHash(); - -} +package com.jd.blockchain.ledger; + +import com.jd.blockchain.base.data.TypeCodes; +import com.jd.blockchain.binaryproto.DataContract; +import com.jd.blockchain.binaryproto.DataField; +import com.jd.blockchain.crypto.hash.HashDigest; +import com.jd.blockchain.utils.ValueType; + +/** + * 交易内容; + * + * @author huanghaiquan + * + */ +@DataContract(code= TypeCodes.TX_CONTENT) +public interface TransactionContent extends TransactionContentBody, HashObject { + @Override + @DataField(order=1, primitiveType = ValueType.BYTES) + HashDigest getHash(); + + //获得交易操作时间; + @DataField(order=2, primitiveType = ValueType.INT64) + Long getTxOpTime(); + +} diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java index 39a27256..82aaf23f 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java @@ -1,36 +1,44 @@ -package com.jd.blockchain.ledger; - -import com.jd.blockchain.base.data.TypeCodes; -import com.jd.blockchain.binaryproto.DataContract; -import com.jd.blockchain.binaryproto.DataField; -import com.jd.blockchain.crypto.hash.HashDigest; -import com.jd.blockchain.utils.ValueType; - -/** - * 交易内容; - * - * @author huanghaiquan - * - */ -@DataContract(code = TypeCodes.TX_CONTENT_BODY) -public interface TransactionContentBody { - - /** - * 执行交易的账本地址; - * - * 注:除了账本的创世交易之外,任何交易的账本地址都不允许为 null; - * - * @return - */ - @DataField(order = 1, primitiveType = ValueType.BYTES) - HashDigest getLedgerHash(); - - /** - * 操作列表; - * - * @return - */ - @DataField(order = 2, list = true, refContract = true, genericContract = true) - Operation[] getOperations(); - -} +package com.jd.blockchain.ledger; + +import com.jd.blockchain.base.data.TypeCodes; +import com.jd.blockchain.binaryproto.DataContract; +import com.jd.blockchain.binaryproto.DataField; +import com.jd.blockchain.crypto.hash.HashDigest; +import com.jd.blockchain.utils.ValueType; + +/** + * 交易内容; + * + * @author huanghaiquan + * + */ +@DataContract(code = TypeCodes.TX_CONTENT_BODY) +public interface TransactionContentBody { + + /** + * 执行交易的账本地址; + * + * 注:除了账本的创世交易之外,任何交易的账本地址都不允许为 null; + * + * @return + */ + @DataField(order = 1, primitiveType = ValueType.BYTES) + HashDigest getLedgerHash(); + + /** + * 操作列表; + * + * @return + */ + @DataField(order = 2, list = true, refContract = true, genericContract = true) + Operation[] getOperations(); + + /** + * 交易操作时间 + * + * @return + */ + @DataField(order = 3, primitiveType = ValueType.INT64) + Long getTxOpTime(); + +} diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java index fc2680ba..447feb47 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java @@ -1,88 +1,89 @@ -package com.jd.blockchain.ledger.data; - -import com.jd.blockchain.binaryproto.BinaryEncodingUtils; -import com.jd.blockchain.binaryproto.DataContractRegistry; -import com.jd.blockchain.crypto.CryptoAlgorithm; -import com.jd.blockchain.crypto.CryptoUtils; -import com.jd.blockchain.crypto.hash.HashDigest; -import com.jd.blockchain.ledger.TransactionBuilder; -import com.jd.blockchain.ledger.TransactionContent; -import com.jd.blockchain.ledger.TransactionContentBody; -import com.jd.blockchain.ledger.TransactionRequestBuilder; -import com.jd.blockchain.utils.Bytes; - -public class TxBuilder implements TransactionBuilder { - - static { - DataContractRegistry.register(TransactionContentBody.class); - } - - private BlockchainOperationFactory opFactory = new BlockchainOperationFactory(); - - private CryptoAlgorithm defaultHashAlgorithm = CryptoAlgorithm.SHA256; - - private HashDigest ledgerHash; - - public TxBuilder(HashDigest ledgerHash) { - this.ledgerHash = ledgerHash; - } - - @Override - public HashDigest getLedgerHash() { - return ledgerHash; - } - - @Override - public TransactionRequestBuilder prepareRequest() { - TransactionContent txContent = prepareContent(); - return new TxRequestBuilder(txContent); - } - - @Override - public TransactionContent prepareContent() { - TxContentBlob txContent = new TxContentBlob(ledgerHash); - txContent.addOperations(opFactory.getOperations()); - - byte[] contentBodyBytes = BinaryEncodingUtils.encode(txContent, TransactionContentBody.class); - HashDigest contentHash = CryptoUtils.hash(defaultHashAlgorithm).hash(contentBodyBytes); - txContent.setHash(contentHash); - - return txContent; - } - - @Override - public LedgerInitOperationBuilder ledgers() { - return opFactory.ledgers(); - } - - @Override - public UserRegisterOperationBuilder users() { - return opFactory.users(); - } - - @Override - public DataAccountRegisterOperationBuilder dataAccounts() { - return opFactory.dataAccounts(); - } - - @Override - public DataAccountKVSetOperationBuilder dataAccount(String accountAddress) { - return opFactory.dataAccount(accountAddress); - } - - @Override - public DataAccountKVSetOperationBuilder dataAccount(Bytes accountAddress) { - return opFactory.dataAccount(accountAddress); - } - - @Override - public ContractCodeDeployOperationBuilder contracts() { - return opFactory.contracts(); - } - - @Override - public ContractEventSendOperationBuilder contractEvents() { - return opFactory.contractEvents(); - } - -} +package com.jd.blockchain.ledger.data; + +import com.jd.blockchain.binaryproto.BinaryEncodingUtils; +import com.jd.blockchain.binaryproto.DataContractRegistry; +import com.jd.blockchain.crypto.CryptoAlgorithm; +import com.jd.blockchain.crypto.CryptoUtils; +import com.jd.blockchain.crypto.hash.HashDigest; +import com.jd.blockchain.ledger.TransactionBuilder; +import com.jd.blockchain.ledger.TransactionContent; +import com.jd.blockchain.ledger.TransactionContentBody; +import com.jd.blockchain.ledger.TransactionRequestBuilder; +import com.jd.blockchain.utils.Bytes; + +public class TxBuilder implements TransactionBuilder { + + static { + DataContractRegistry.register(TransactionContentBody.class); + } + + private BlockchainOperationFactory opFactory = new BlockchainOperationFactory(); + + private CryptoAlgorithm defaultHashAlgorithm = CryptoAlgorithm.SHA256; + + private HashDigest ledgerHash; + + public TxBuilder(HashDigest ledgerHash) { + this.ledgerHash = ledgerHash; + } + + @Override + public HashDigest getLedgerHash() { + return ledgerHash; + } + + @Override + public TransactionRequestBuilder prepareRequest() { + TransactionContent txContent = prepareContent(); + return new TxRequestBuilder(txContent); + } + + @Override + public TransactionContent prepareContent() { + TxContentBlob txContent = new TxContentBlob(ledgerHash); + txContent.addOperations(opFactory.getOperations()); + txContent.setTxOpTime(System.currentTimeMillis()); + + byte[] contentBodyBytes = BinaryEncodingUtils.encode(txContent, TransactionContentBody.class); + HashDigest contentHash = CryptoUtils.hash(defaultHashAlgorithm).hash(contentBodyBytes); + txContent.setHash(contentHash); + + return txContent; + } + + @Override + public LedgerInitOperationBuilder ledgers() { + return opFactory.ledgers(); + } + + @Override + public UserRegisterOperationBuilder users() { + return opFactory.users(); + } + + @Override + public DataAccountRegisterOperationBuilder dataAccounts() { + return opFactory.dataAccounts(); + } + + @Override + public DataAccountKVSetOperationBuilder dataAccount(String accountAddress) { + return opFactory.dataAccount(accountAddress); + } + + @Override + public DataAccountKVSetOperationBuilder dataAccount(Bytes accountAddress) { + return opFactory.dataAccount(accountAddress); + } + + @Override + public ContractCodeDeployOperationBuilder contracts() { + return opFactory.contracts(); + } + + @Override + public ContractEventSendOperationBuilder contractEvents() { + return opFactory.contractEvents(); + } + +} diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java index d669951f..8ee55cfa 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java @@ -1,92 +1,104 @@ -package com.jd.blockchain.ledger.data; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import com.jd.blockchain.binaryproto.DConstructor; -import com.jd.blockchain.binaryproto.FieldSetter; -import com.jd.blockchain.crypto.hash.HashDigest; -import com.jd.blockchain.ledger.Operation; -import com.jd.blockchain.ledger.TransactionContent; -import com.jd.blockchain.utils.io.NumberMask; - -/** - * 交易内容的数据块; - *

- * - * 包含原始交易请求的数据块; - * - * @author huanghaiquan - * - */ -public class TxContentBlob implements TransactionContent { - - /** - * 操作数量的最大值; - */ - public static final int MAX_OP_COUNT = NumberMask.SHORT.MAX_BOUNDARY_SIZE; - - private List operationList = new ArrayList(); - - private HashDigest hash; - - private HashDigest ledgerHash; - - @DConstructor(name ="TxContentBlob") - public TxContentBlob(@FieldSetter(name="getLedgerHash", type="HashDigest") HashDigest ledgerHash) { - this.ledgerHash = ledgerHash; - } - - /** - * 交易内容的哈希值; - */ - @Override - public HashDigest getHash() { - return this.hash; - } - - /** - * 更新交易内容的哈希值; - *

- * 注:当前对象只充当值对象,不校验指定哈希值的完整性,调用者应该在外部实施完整性校验; - * @param hash - */ - public void setHash(HashDigest hash) { - this.hash = hash; - } - - /** - * 交易请求链的hash - * - * @return - */ - @Override - public HashDigest getLedgerHash() { - return ledgerHash; - } - public void setLedgerHash(HashDigest ledgerHash) { - this.ledgerHash = ledgerHash; - } - - @Override - public Operation[] getOperations() { - return operationList.toArray(new Operation[operationList.size()]); - } - - public void setOperations(Object[] operations) { - //in array's case ,cast will failed! - for (Object operation : operations) { - Operation op = (Operation)operation; - addOperation(op); - } - } - - public void addOperation(Operation operation) { - operationList.add(operation); - } - - public void addOperations(Collection operations) { - operationList.addAll(operations); - } -} +package com.jd.blockchain.ledger.data; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import com.jd.blockchain.binaryproto.DConstructor; +import com.jd.blockchain.binaryproto.FieldSetter; +import com.jd.blockchain.crypto.hash.HashDigest; +import com.jd.blockchain.ledger.Operation; +import com.jd.blockchain.ledger.TransactionContent; +import com.jd.blockchain.utils.io.NumberMask; + +/** + * 交易内容的数据块; + *

+ * + * 包含原始交易请求的数据块; + * + * @author huanghaiquan + * + */ +public class TxContentBlob implements TransactionContent { + + /** + * 操作数量的最大值; + */ + public static final int MAX_OP_COUNT = NumberMask.SHORT.MAX_BOUNDARY_SIZE; + + private List operationList = new ArrayList(); + + private HashDigest hash; + + private HashDigest ledgerHash; + + //交易操作时间; + private Long txOpTime; + + @DConstructor(name ="TxContentBlob") + public TxContentBlob(@FieldSetter(name="getLedgerHash", type="HashDigest") HashDigest ledgerHash) { + this.ledgerHash = ledgerHash; + } + + /** + * 交易内容的哈希值; + */ + @Override + public HashDigest getHash() { + return this.hash; + } + + /** + * 更新交易内容的哈希值; + *

+ * 注:当前对象只充当值对象,不校验指定哈希值的完整性,调用者应该在外部实施完整性校验; + * @param hash + */ + public void setHash(HashDigest hash) { + this.hash = hash; + } + + /** + * 交易请求链的hash + * + * @return + */ + @Override + public HashDigest getLedgerHash() { + return ledgerHash; + } + public void setLedgerHash(HashDigest ledgerHash) { + this.ledgerHash = ledgerHash; + } + + @Override + public Operation[] getOperations() { + return operationList.toArray(new Operation[operationList.size()]); + } + + public void setOperations(Object[] operations) { + //in array's case ,cast will failed! + for (Object operation : operations) { + Operation op = (Operation)operation; + addOperation(op); + } + } + + public void addOperation(Operation operation) { + operationList.add(operation); + } + + public void addOperations(Collection operations) { + operationList.addAll(operations); + } + + @Override + public Long getTxOpTime() { + return txOpTime; + } + + public void setTxOpTime(Long txOpTime) { + this.txOpTime = txOpTime; + } +} diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java index 79b9e189..22aa9b1e 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java @@ -139,7 +139,7 @@ public class IntegrationTest4Bftsmart { } try { - Thread.sleep(60000); + Thread.sleep(60000000); } catch (InterruptedException e) { e.printStackTrace(); } From 384c81393e5ed902f659859a65ce9b2d491348a6 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Wed, 8 May 2019 11:08:58 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=9C=A8transactonContent=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E4=B8=AD=E6=B7=BB=E5=8A=A0txOpTime=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=90=88=E7=BA=A6=E6=97=B6=EF=BC=8C=E5=87=BA=E7=8E=B0contentHa?= =?UTF-8?q?sh=E7=A2=B0=E6=92=9E=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82=20slee?= =?UTF-8?q?p=E6=97=B6=E9=97=B4=E6=81=A2=E5=A4=8D=E5=8E=9F=E5=85=88?= =?UTF-8?q?=E5=80=BC=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java index 22aa9b1e..79b9e189 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java @@ -139,7 +139,7 @@ public class IntegrationTest4Bftsmart { } try { - Thread.sleep(60000000); + Thread.sleep(60000); } catch (InterruptedException e) { e.printStackTrace(); } From dd8e38992c31bb9bdedf3fe3cb76c96ffefb7cb7 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Wed, 8 May 2019 11:22:01 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=8E=BB=E6=8E=89concat=E5=90=88=E5=B9=B6b?= =?UTF-8?q?yte[]=E6=96=B9=E6=B3=95;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/jd/blockchain/utils/ArrayUtils.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/ArrayUtils.java b/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/ArrayUtils.java index bb04964e..c787a014 100644 --- a/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/ArrayUtils.java +++ b/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/ArrayUtils.java @@ -1,14 +1,7 @@ package com.jd.blockchain.utils; import java.lang.reflect.Array; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; +import java.util.*; /** * @author haiq @@ -83,5 +76,4 @@ public abstract class ArrayUtils { } return new ReadonlyArrayListWrapper(array, fromIndex, toIndex); } - } From 5f1a80b08dc6349faedaa4223db01db9ea8110f0 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Wed, 8 May 2019 15:54:39 +0800 Subject: [PATCH 4/6] in bftsmart, fix the exception: Returned object not currently part of this pool. --- .../consensus/bftsmart/client/BftsmartConsensusClient.java | 2 +- .../consensus/bftsmart/service/BftsmartNodeServer.java | 2 +- .../test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/client/BftsmartConsensusClient.java b/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/client/BftsmartConsensusClient.java index 25a995c7..865d0e0a 100644 --- a/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/client/BftsmartConsensusClient.java +++ b/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/client/BftsmartConsensusClient.java @@ -21,7 +21,7 @@ public class BftsmartConsensusClient implements ConsensusClient { this.clientSettings = clientSettings; this.gatewayId = clientSettings.getClientId(); - connect(); +// connect(); } diff --git a/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/service/BftsmartNodeServer.java b/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/service/BftsmartNodeServer.java index f25c8d61..a912b127 100644 --- a/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/service/BftsmartNodeServer.java +++ b/source/consensus/consensus-bftsmart/src/main/java/com/jd/blockchain/consensus/bftsmart/service/BftsmartNodeServer.java @@ -77,10 +77,10 @@ public class BftsmartNodeServer extends DefaultRecoverable implements NodeServer //used later this.stateMachineReplicate = stateMachineReplicate; this.messageHandle = messageHandler; - this.manageService = new BftsmartConsensusManageService(this); createConfig(); serverId = findServerId(); initConfig(serverId, systemConfig, hostsConfig); + this.manageService = new BftsmartConsensusManageService(this); } protected int findServerId() { diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java index 79b9e189..22aa9b1e 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java @@ -139,7 +139,7 @@ public class IntegrationTest4Bftsmart { } try { - Thread.sleep(60000); + Thread.sleep(60000000); } catch (InterruptedException e) { e.printStackTrace(); } From 3d78edd1558413e452d99a1e28e94dcce9116640 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Thu, 9 May 2019 15:32:54 +0800 Subject: [PATCH 5/6] delete the txOpTime in transactionContent.java, now use it in the ContractEventSendOpTemplate, only for contract related; --- .../ledger/ContractEventSendOperation.java | 68 +++++++------ .../blockchain/ledger/TransactionContent.java | 4 - .../ledger/TransactionContentBody.java | 8 -- .../data/ContractEventSendOpTemplate.java | 98 ++++++++++--------- .../jd/blockchain/ledger/data/TxBuilder.java | 1 - .../blockchain/ledger/data/TxContentBlob.java | 12 --- 6 files changed, 88 insertions(+), 103 deletions(-) diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractEventSendOperation.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractEventSendOperation.java index dce287b8..a04c451f 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractEventSendOperation.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/ContractEventSendOperation.java @@ -1,32 +1,36 @@ -package com.jd.blockchain.ledger; - -import com.jd.blockchain.base.data.TypeCodes; -import com.jd.blockchain.binaryproto.DataContract; -import com.jd.blockchain.binaryproto.DataField; -import com.jd.blockchain.utils.Bytes; -import com.jd.blockchain.utils.ValueType; - -/** - * @author huanghaiquan - * - */ -@DataContract(code= TypeCodes.TX_OP_CONTRACT_EVENT_SEND) -public interface ContractEventSendOperation extends Operation { - -// @DataField(order=1, refEnum=true) -// @Override -// default OperationType getType() { -// return OperationType.SEND_CONTRACT_EVENT; -// } - - @DataField(order=2, primitiveType=ValueType.BYTES) - Bytes getContractAddress(); - - @DataField(order=3, primitiveType=ValueType.TEXT) - String getEvent(); - - - @DataField(order=4, primitiveType=ValueType.BYTES) - byte[] getArgs(); - -} +package com.jd.blockchain.ledger; + +import com.jd.blockchain.base.data.TypeCodes; +import com.jd.blockchain.binaryproto.DataContract; +import com.jd.blockchain.binaryproto.DataField; +import com.jd.blockchain.utils.Bytes; +import com.jd.blockchain.utils.ValueType; + +/** + * @author huanghaiquan + * + */ +@DataContract(code= TypeCodes.TX_OP_CONTRACT_EVENT_SEND) +public interface ContractEventSendOperation extends Operation { + +// @DataField(order=1, refEnum=true) +// @Override +// default OperationType getType() { +// return OperationType.SEND_CONTRACT_EVENT; +// } + + @DataField(order=2, primitiveType=ValueType.BYTES) + Bytes getContractAddress(); + + @DataField(order=3, primitiveType=ValueType.TEXT) + String getEvent(); + + + @DataField(order=4, primitiveType=ValueType.BYTES) + byte[] getArgs(); + + //获得交易操作时间; + @DataField(order=5, primitiveType=ValueType.INT64) + Long getTxOpTime(); + +} diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java index a081738f..59f6aa6f 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContent.java @@ -18,8 +18,4 @@ public interface TransactionContent extends TransactionContentBody, HashObject { @DataField(order=1, primitiveType = ValueType.BYTES) HashDigest getHash(); - //获得交易操作时间; - @DataField(order=2, primitiveType = ValueType.INT64) - Long getTxOpTime(); - } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java index 82aaf23f..2f1abc3b 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/TransactionContentBody.java @@ -33,12 +33,4 @@ public interface TransactionContentBody { @DataField(order = 2, list = true, refContract = true, genericContract = true) Operation[] getOperations(); - /** - * 交易操作时间 - * - * @return - */ - @DataField(order = 3, primitiveType = ValueType.INT64) - Long getTxOpTime(); - } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/ContractEventSendOpTemplate.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/ContractEventSendOpTemplate.java index d7d06d85..2751c60b 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/ContractEventSendOpTemplate.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/ContractEventSendOpTemplate.java @@ -1,46 +1,52 @@ -package com.jd.blockchain.ledger.data; - -import com.jd.blockchain.binaryproto.DConstructor; -import com.jd.blockchain.binaryproto.DataContractRegistry; -import com.jd.blockchain.binaryproto.FieldSetter; -import com.jd.blockchain.ledger.ContractEventSendOperation; -import com.jd.blockchain.utils.Bytes; - -public class ContractEventSendOpTemplate implements ContractEventSendOperation { - static { - DataContractRegistry.register(ContractEventSendOperation.class); - } - - private Bytes contractAddress; - private byte[] args; - private String event; - - public ContractEventSendOpTemplate() { - } - - @DConstructor(name="ContractEventSendOpTemplate") - public ContractEventSendOpTemplate(@FieldSetter(name="getContractAddress", type="Bytes") Bytes contractAddress, - @FieldSetter(name="getEvent", type="String") String event, - @FieldSetter(name="getArgs", type="byte[]") byte[] args) { - this.contractAddress = contractAddress; - this.event = event; - this.args = args; - } - - @Override - public Bytes getContractAddress() { - return contractAddress; - } - - @Override - public String getEvent() { - return event; - } - - @Override - public byte[] getArgs() { - return args; - } - - -} +package com.jd.blockchain.ledger.data; + +import com.jd.blockchain.binaryproto.DConstructor; +import com.jd.blockchain.binaryproto.DataContractRegistry; +import com.jd.blockchain.binaryproto.FieldSetter; +import com.jd.blockchain.ledger.ContractEventSendOperation; +import com.jd.blockchain.utils.Bytes; + +public class ContractEventSendOpTemplate implements ContractEventSendOperation { + static { + DataContractRegistry.register(ContractEventSendOperation.class); + } + + private Bytes contractAddress; + private byte[] args; + private String event; + //交易操作时间; + private Long txOpTime; + + public ContractEventSendOpTemplate() { + } + + @DConstructor(name="ContractEventSendOpTemplate") + public ContractEventSendOpTemplate(@FieldSetter(name="getContractAddress", type="Bytes") Bytes contractAddress, + @FieldSetter(name="getEvent", type="String") String event, + @FieldSetter(name="getArgs", type="byte[]") byte[] args) { + this.contractAddress = contractAddress; + this.event = event; + this.args = args; + this.txOpTime = System.currentTimeMillis(); + } + + @Override + public Bytes getContractAddress() { + return contractAddress; + } + + @Override + public String getEvent() { + return event; + } + + @Override + public byte[] getArgs() { + return args; + } + + @Override + public Long getTxOpTime() { + return txOpTime; + } +} diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java index 447feb47..7bba3262 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxBuilder.java @@ -42,7 +42,6 @@ public class TxBuilder implements TransactionBuilder { public TransactionContent prepareContent() { TxContentBlob txContent = new TxContentBlob(ledgerHash); txContent.addOperations(opFactory.getOperations()); - txContent.setTxOpTime(System.currentTimeMillis()); byte[] contentBodyBytes = BinaryEncodingUtils.encode(txContent, TransactionContentBody.class); HashDigest contentHash = CryptoUtils.hash(defaultHashAlgorithm).hash(contentBodyBytes); diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java index 8ee55cfa..d4f5d925 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/data/TxContentBlob.java @@ -33,9 +33,6 @@ public class TxContentBlob implements TransactionContent { private HashDigest ledgerHash; - //交易操作时间; - private Long txOpTime; - @DConstructor(name ="TxContentBlob") public TxContentBlob(@FieldSetter(name="getLedgerHash", type="HashDigest") HashDigest ledgerHash) { this.ledgerHash = ledgerHash; @@ -92,13 +89,4 @@ public class TxContentBlob implements TransactionContent { public void addOperations(Collection operations) { operationList.addAll(operations); } - - @Override - public Long getTxOpTime() { - return txOpTime; - } - - public void setTxOpTime(Long txOpTime) { - this.txOpTime = txOpTime; - } } From 1e044787151f42ca8a72890575280bb5d79c25e1 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Thu, 9 May 2019 16:48:22 +0800 Subject: [PATCH 6/6] delete the txOpTime in transactionContent.java, now use it in the ContractEventSendOpTemplate, only for contract related; --- .../test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java index 22aa9b1e..79b9e189 100644 --- a/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java +++ b/source/test/test-integration/src/test/java/test/com/jd/blockchain/intgr/IntegrationTest4Bftsmart.java @@ -139,7 +139,7 @@ public class IntegrationTest4Bftsmart { } try { - Thread.sleep(60000000); + Thread.sleep(60000); } catch (InterruptedException e) { e.printStackTrace(); }