From afb526b6356ee80b4d97aa5ff93950ea8d4d383d Mon Sep 17 00:00:00 2001 From: huanghaiquan Date: Wed, 19 Jun 2019 03:10:08 +0800 Subject: [PATCH] Refactored the args type of ContractEventSendOperation; --- .../main/java/com/jd/blockchain/contract/ContractEventContext.java | 7 ++++--- .../java/com/jd/blockchain/contract/ContractSerializeUtils.java | 3 ++- .../java/com/jd/blockchain/contract/LocalContractEventContext.java | 7 ++++--- .../src/main/java/com/jd/blockchain/ledger/BytesValueList.java | 2 ++ .../java/com/jd/blockchain/ledger/ContractEventSendOperation.java | 4 +++- .../com/jd/blockchain/transaction/BlockchainOperationFactory.java | 5 +++-- .../com/jd/blockchain/transaction/ContractEventSendOpTemplate.java | 7 ++++--- .../blockchain/transaction/ContractEventSendOperationBuilder.java | 5 +++-- .../com/jd/blockchain/transaction/ContractInvocationHandler.java | 6 +++--- .../com/jd/blockchain/mocker/handler/MockerContractExeHandle.java | 3 ++- 10 files changed, 30 insertions(+), 19 deletions(-) diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractEventContext.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractEventContext.java index a24ba26d..e80a34b5 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractEventContext.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractEventContext.java @@ -1,11 +1,12 @@ package com.jd.blockchain.contract; +import java.util.Set; + import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.BlockchainIdentity; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.ledger.TransactionRequest; -import java.util.Set; - public interface ContractEventContext { @@ -42,7 +43,7 @@ public interface ContractEventContext { * * @return */ - byte[] getArgs(); + BytesValueList getArgs(); /** * 账本操作上下文; diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractSerializeUtils.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractSerializeUtils.java index 0a637662..1f73a29f 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractSerializeUtils.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/ContractSerializeUtils.java @@ -14,6 +14,7 @@ import com.jd.blockchain.contract.param.WRAP_LONG; import com.jd.blockchain.contract.param.WRAP_SHORT; import com.jd.blockchain.contract.param.WRAP_STRING; import com.jd.blockchain.ledger.BytesValue; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.utils.io.BytesUtils; public class ContractSerializeUtils { @@ -82,7 +83,7 @@ public class ContractSerializeUtils { return BinaryProtocol.encode(wrapData, serialClass); } - public static byte[] serializeArray(Object[] datas) { + public static BytesValueList serializeArray(Object[] datas) { if (datas == null || datas.length == 0) { return null; } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/LocalContractEventContext.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/LocalContractEventContext.java index abeec3b5..03263a1c 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/LocalContractEventContext.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/contract/LocalContractEventContext.java @@ -4,6 +4,7 @@ import java.util.Set; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.BlockchainIdentity; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.ledger.TransactionRequest; /** @@ -13,7 +14,7 @@ import com.jd.blockchain.ledger.TransactionRequest; public class LocalContractEventContext implements ContractEventContext,Cloneable { private HashDigest ledgeHash; private String event; - private byte[] args; + private BytesValueList args; private TransactionRequest transactionRequest; private Set txSigners; private LedgerContext ledgerContext; @@ -44,7 +45,7 @@ public class LocalContractEventContext implements ContractEventContext,Cloneable } @Override - public byte[] getArgs() { + public BytesValueList getArgs() { return args; } @@ -92,7 +93,7 @@ public class LocalContractEventContext implements ContractEventContext,Cloneable // return this; // } - public LocalContractEventContext setArgs(byte[] args) { + public LocalContractEventContext setArgs(BytesValueList args) { this.args = args; return this; } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BytesValueList.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BytesValueList.java index 7f945e22..e40e27d6 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BytesValueList.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/BytesValueList.java @@ -1,11 +1,13 @@ package com.jd.blockchain.ledger; import com.jd.blockchain.binaryproto.DataContract; +import com.jd.blockchain.binaryproto.DataField; import com.jd.blockchain.consts.DataCodes; @DataContract(code = DataCodes.BYTES_VALUE_LIST) public interface BytesValueList { + @DataField(order = 0, refContract = true, list = true) BytesValue[] getValues(); } 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 1e79ec49..9b6d7d20 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 @@ -7,6 +7,8 @@ import com.jd.blockchain.consts.DataCodes; import com.jd.blockchain.utils.Bytes; /** + * 发送合约事件的操作; + * * @author huanghaiquan * */ @@ -35,6 +37,6 @@ public interface ContractEventSendOperation extends Operation { * @return */ @DataField(order = 4, primitiveType = PrimitiveType.BYTES) - byte[] getArgs(); + BytesValueList getArgs(); } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/BlockchainOperationFactory.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/BlockchainOperationFactory.java index 2820393b..4e7e172d 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/BlockchainOperationFactory.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/BlockchainOperationFactory.java @@ -6,6 +6,7 @@ import java.util.List; import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BytesValue; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.ledger.ContractCodeDeployOperation; import com.jd.blockchain.ledger.ContractEventSendOperation; import com.jd.blockchain.ledger.DataAccountKVSetOperation; @@ -258,12 +259,12 @@ public class BlockchainOperationFactory implements ClientOperator, LedgerInitOpe private class ContractEventSendOperationBuilderFilter implements ContractEventSendOperationBuilder { @Override - public ContractEventSendOperation send(String address, String event, byte[] args) { + public ContractEventSendOperation send(String address, String event, BytesValueList args) { return send(Bytes.fromBase58(address), event, args); } @Override - public synchronized ContractEventSendOperation send(Bytes address, String event, byte[] args) { + public synchronized ContractEventSendOperation send(Bytes address, String event, BytesValueList args) { ContractEventSendOpTemplate op = new ContractEventSendOpTemplate(address, event, args); operationList.add(op); return op; diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOpTemplate.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOpTemplate.java index c6e62933..de304958 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOpTemplate.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOpTemplate.java @@ -1,6 +1,7 @@ package com.jd.blockchain.transaction; import com.jd.blockchain.binaryproto.DataContractRegistry; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.ledger.ContractEventSendOperation; import com.jd.blockchain.utils.Bytes; @@ -11,12 +12,12 @@ public class ContractEventSendOpTemplate implements ContractEventSendOperation { } private Bytes contractAddress; - private byte[] args; + private BytesValueList args; private String event; private ContractInvocation invocation; - public ContractEventSendOpTemplate(Bytes contractAddress, String event, byte[] args) { + public ContractEventSendOpTemplate(Bytes contractAddress, String event, BytesValueList args) { this.contractAddress = contractAddress; this.event = event; this.args = args; @@ -33,7 +34,7 @@ public class ContractEventSendOpTemplate implements ContractEventSendOperation { } @Override - public byte[] getArgs() { + public BytesValueList getArgs() { return args; } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOperationBuilder.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOperationBuilder.java index 7a80a346..675fd8d6 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOperationBuilder.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractEventSendOperationBuilder.java @@ -1,5 +1,6 @@ package com.jd.blockchain.transaction; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.ledger.ContractEventSendOperation; import com.jd.blockchain.utils.Bytes; @@ -11,7 +12,7 @@ public interface ContractEventSendOperationBuilder { * @param args 事件参数; * @return */ - ContractEventSendOperation send(String address, String event, byte[] args); + ContractEventSendOperation send(String address, String event, BytesValueList args); /** * @param address 合约地址; @@ -19,5 +20,5 @@ public interface ContractEventSendOperationBuilder { * @param args 事件参数; * @return */ - ContractEventSendOperation send(Bytes address, String event, byte[] args); + ContractEventSendOperation send(Bytes address, String event, BytesValueList args); } diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationHandler.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationHandler.java index b005e650..313fa9df 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationHandler.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationHandler.java @@ -7,6 +7,7 @@ import java.util.Arrays; import com.jd.blockchain.contract.ContractException; import com.jd.blockchain.contract.ContractSerializeUtils; import com.jd.blockchain.contract.ContractType; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.IllegalDataException; @@ -51,10 +52,9 @@ public class ContractInvocationHandler implements InvocationHandler { method.toString())); } // 序列化调用参数; - byte[] argBytes = serializeArgs(args); + BytesValueList argBytes = serializeArgs(args); // 定义合约调用操作; - @SuppressWarnings("deprecation") ContractEventSendOpTemplate opTemplate = (ContractEventSendOpTemplate) sendOpBuilder.send(contractAddress, event, argBytes); @@ -71,7 +71,7 @@ public class ContractInvocationHandler implements InvocationHandler { return getDefaultValue(method.getReturnType()); } - private byte[] serializeArgs(Object[] args) { + private BytesValueList serializeArgs(Object[] args) { return ContractSerializeUtils.serializeArray(args); } diff --git a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java index 8b31a389..421e1507 100644 --- a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java +++ b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java @@ -12,6 +12,7 @@ import com.jd.blockchain.contract.LedgerContext; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.BlockchainIdentity; import com.jd.blockchain.ledger.BytesValue; +import com.jd.blockchain.ledger.BytesValueList; import com.jd.blockchain.ledger.ContractEventSendOperation; import com.jd.blockchain.ledger.Operation; import com.jd.blockchain.ledger.TransactionRequest; @@ -134,7 +135,7 @@ public class MockerContractExeHandle implements OperationHandle { } @Override - public byte[] getArgs() { + public BytesValueList getArgs() { return null; }