- 4.0.0
-
- com.jd.blockchain
- sdk
- 1.1.4.RELEASE
-
- sdk-samples
-
-
-
- com.jd.blockchain
- sdk-client
- ${project.version}
-
-
- com.jd.blockchain
- ledger-model
- ${project.version}
-
-
- com.jd.blockchain
- tools-initializer
- ${project.version}
-
-
- com.jd.blockchain
- contract-samples
- ${project.version}
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-deploy-plugin
-
- true
-
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ 4.0.0
+
+ com.jd.blockchain
+ jdchain-samples
+ 1.2.0.RELEASE
+
+ sdk-samples
+
+
+
+ com.jd.blockchain
+ sdk-client
+
+
+ com.jd.blockchain
+ ledger-model
+
+
+ com.jd.blockchain
+ contract-samples
+ ${project.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/ContractConfigure.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/contract/ContractConfigure.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/ContractConfigure.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/contract/ContractConfigure.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract2.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract2.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract2.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContract2.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_ConfigureSecurity.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_ConfigureSecurity.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_ConfigureSecurity.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_ConfigureSecurity.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Contract.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_DataAccount.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_EventListener.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_EventListener.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_EventListener.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_EventListener.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_InsertData.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Params.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Params.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Params.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Params.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_PrivilegeSetting.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_PrivilegeSetting.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_PrivilegeSetting.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_PrivilegeSetting.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Query.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterAccount.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterAccount.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterAccount.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterAccount.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterTest.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterTest.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterTest.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterTest.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterUser.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterUser.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterUser.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_RegisterUser.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Tx_Persistance.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Tx_Persistance.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Tx_Persistance.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Tx_Persistance.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_User.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Base_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Base_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Base_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Base_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Check_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Check_Demo.java
similarity index 88%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Check_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Check_Demo.java
index 7d521776..c99b9a6b 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Check_Demo.java
+++ b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Check_Demo.java
@@ -1,14 +1,17 @@
package com.jd.blockchain.sdk.samples;
-import com.jd.blockchain.contract.TransferContract;
-import com.jd.blockchain.ledger.*;
+import static com.jd.blockchain.sdk.samples.SDKDemo_Constant.readChainCodes;
+import static com.jd.blockchain.transaction.ContractReturnValue.decode;
+
+import com.jd.blockchain.ledger.BlockchainKeyGenerator;
+import com.jd.blockchain.ledger.BlockchainKeypair;
+import com.jd.blockchain.ledger.PreparedTransaction;
+import com.jd.blockchain.ledger.TransactionResponse;
+import com.jd.blockchain.ledger.TransactionTemplate;
import com.jd.blockchain.transaction.GenericValueHolder;
import com.jd.blockchain.utils.Bytes;
import com.jd.chain.contracts.ContractTestInf;
-import static com.jd.blockchain.sdk.samples.SDKDemo_Constant.readChainCodes;
-import static com.jd.blockchain.transaction.ContractReturnValue.decode;
-
public class SDK_Contract_Check_Demo extends SDK_Base_Demo {
public static void main(String[] args) {
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Demo.java
index caae0d6d..0574cf51 100644
--- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Demo.java
+++ b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Demo.java
@@ -6,12 +6,12 @@ import static com.jd.blockchain.transaction.ContractReturnValue.decode;
import com.jd.blockchain.contract.TransferContract;
import com.jd.blockchain.ledger.BlockchainKeyGenerator;
import com.jd.blockchain.ledger.BlockchainKeypair;
-import com.jd.blockchain.ledger.TypedKVEntry;
import com.jd.blockchain.ledger.PreparedTransaction;
import com.jd.blockchain.ledger.TransactionResponse;
import com.jd.blockchain.ledger.TransactionTemplate;
-import com.jd.blockchain.transaction.LongValueHolder;
+import com.jd.blockchain.ledger.TypedKVEntry;
import com.jd.blockchain.transaction.GenericValueHolder;
+import com.jd.blockchain.transaction.LongValueHolder;
import com.jd.blockchain.utils.Bytes;
public class SDK_Contract_Demo extends SDK_Base_Demo {
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Random_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Random_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Random_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Contract_Random_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_DataAccount_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_DataAccount_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_DataAccount_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_DataAccount_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_RoleConfig_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_RoleConfig_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_RoleConfig_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_RoleConfig_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Threads_KvInsert_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Threads_KvInsert_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Threads_KvInsert_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_Threads_KvInsert_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_User2Role_Demo.java b/samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_User2Role_Demo.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_User2Role_Demo.java
rename to samples/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_User2Role_Demo.java
diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/chain/contracts/ContractTestInf.java b/samples/sdk-samples/src/main/java/com/jd/chain/contracts/ContractTestInf.java
similarity index 100%
rename from source/sdk/sdk-samples/src/main/java/com/jd/chain/contracts/ContractTestInf.java
rename to samples/sdk-samples/src/main/java/com/jd/chain/contracts/ContractTestInf.java
diff --git a/source/sdk/sdk-samples/src/main/resources/contract-jdchain.jar b/samples/sdk-samples/src/main/resources/contract-jdchain.jar
similarity index 100%
rename from source/sdk/sdk-samples/src/main/resources/contract-jdchain.jar
rename to samples/sdk-samples/src/main/resources/contract-jdchain.jar
diff --git a/source/sdk/sdk-samples/src/main/resources/transfer.jar b/samples/sdk-samples/src/main/resources/transfer.jar
similarity index 100%
rename from source/sdk/sdk-samples/src/main/resources/transfer.jar
rename to samples/sdk-samples/src/main/resources/transfer.jar
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test_.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDKDemo_Contract_Test_.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_Contract_Test.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_Contract_Test.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_Contract_Test.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_Contract_Test.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_BatchInsertData_Test_.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_DataAccount_Test_.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_InsertData_Test_.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_KeyPair_Para.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_KeyPair_Para.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_KeyPair_Para.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_KeyPair_Para.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_Regist_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_Regist_Test_.java
similarity index 79%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_Regist_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_Regist_Test_.java
index 77157f0d..77c1e62e 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_Regist_Test_.java
+++ b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_Regist_Test_.java
@@ -1,17 +1,32 @@
package test.com.jd.blockchain.sdk.test;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.*;
-import com.jd.blockchain.ledger.*;
+import com.jd.blockchain.crypto.AddressEncoding;
+import com.jd.blockchain.crypto.AsymmetricKeypair;
+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.ledger.BlockchainKeypair;
+import com.jd.blockchain.ledger.EndpointRequest;
+import com.jd.blockchain.ledger.NodeRequest;
+import com.jd.blockchain.ledger.ParticipantRegisterOperation;
+import com.jd.blockchain.ledger.ParticipantStateUpdateOperation;
+import com.jd.blockchain.ledger.PreparedTransaction;
+import com.jd.blockchain.ledger.TransactionContent;
+import com.jd.blockchain.ledger.TransactionContentBody;
+import com.jd.blockchain.ledger.TransactionRequest;
+import com.jd.blockchain.ledger.TransactionResponse;
+import com.jd.blockchain.ledger.TransactionTemplate;
import com.jd.blockchain.sdk.BlockchainService;
import com.jd.blockchain.sdk.client.GatewayServiceFactory;
import com.jd.blockchain.sdk.samples.SDKDemo_Constant;
-import com.jd.blockchain.tools.keygen.KeyGenCommand;
import com.jd.blockchain.utils.net.NetworkAddress;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
/**
* 注册参与方测试
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_State_Update_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_State_Update_Test_.java
similarity index 78%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_State_Update_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_State_Update_Test_.java
index 4fb229ce..d1ffb9e6 100644
--- a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_State_Update_Test_.java
+++ b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Participant_State_Update_Test_.java
@@ -1,17 +1,33 @@
package test.com.jd.blockchain.sdk.test;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+
import com.jd.blockchain.binaryproto.DataContractRegistry;
-import com.jd.blockchain.crypto.*;
-import com.jd.blockchain.ledger.*;
+import com.jd.blockchain.crypto.AddressEncoding;
+import com.jd.blockchain.crypto.AsymmetricKeypair;
+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.ledger.BlockchainKeypair;
+import com.jd.blockchain.ledger.EndpointRequest;
+import com.jd.blockchain.ledger.NodeRequest;
+import com.jd.blockchain.ledger.ParticipantNodeState;
+import com.jd.blockchain.ledger.ParticipantRegisterOperation;
+import com.jd.blockchain.ledger.ParticipantStateUpdateOperation;
+import com.jd.blockchain.ledger.PreparedTransaction;
+import com.jd.blockchain.ledger.TransactionContent;
+import com.jd.blockchain.ledger.TransactionContentBody;
+import com.jd.blockchain.ledger.TransactionRequest;
+import com.jd.blockchain.ledger.TransactionResponse;
+import com.jd.blockchain.ledger.TransactionTemplate;
import com.jd.blockchain.sdk.BlockchainService;
import com.jd.blockchain.sdk.client.GatewayServiceFactory;
import com.jd.blockchain.sdk.samples.SDKDemo_Constant;
-import com.jd.blockchain.tools.keygen.KeyGenCommand;
import com.jd.blockchain.utils.net.NetworkAddress;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
/**
* 参与方状态更新测试
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_Query_Test_.java
diff --git a/source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java b/samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java
similarity index 100%
rename from source/sdk/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java
rename to samples/sdk-samples/src/test/java/test/com/jd/blockchain/sdk/test/SDK_GateWay_User_Test_.java
diff --git a/source/sdk/sdk-samples/src/test/resources/contract.jar b/samples/sdk-samples/src/test/resources/contract.jar
similarity index 100%
rename from source/sdk/sdk-samples/src/test/resources/contract.jar
rename to samples/sdk-samples/src/test/resources/contract.jar
diff --git a/source/sdk/sdk-samples/src/test/resources/sys-contract.properties b/samples/sdk-samples/src/test/resources/sys-contract.properties
similarity index 100%
rename from source/sdk/sdk-samples/src/test/resources/sys-contract.properties
rename to samples/sdk-samples/src/test/resources/sys-contract.properties
diff --git a/source/sdk/sdk-samples/src/test/resources/transfer.jar b/samples/sdk-samples/src/test/resources/transfer.jar
similarity index 100%
rename from source/sdk/sdk-samples/src/test/resources/transfer.jar
rename to samples/sdk-samples/src/test/resources/transfer.jar
diff --git a/tools/compile-latest.sh b/scripts/compile-latest.sh
similarity index 100%
rename from tools/compile-latest.sh
rename to scripts/compile-latest.sh
diff --git a/tools/start.sh b/scripts/start.sh
similarity index 100%
rename from tools/start.sh
rename to scripts/start.sh
diff --git a/tools/stop.sh b/scripts/stop.sh
similarity index 100%
rename from tools/stop.sh
rename to scripts/stop.sh
diff --git a/tools/sync-to-all.sh b/scripts/sync-to-all.sh
similarity index 100%
rename from tools/sync-to-all.sh
rename to scripts/sync-to-all.sh
diff --git a/tools/sync-to-remote.sh b/scripts/sync-to-remote.sh
similarity index 100%
rename from tools/sync-to-remote.sh
rename to scripts/sync-to-remote.sh
diff --git a/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java b/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java
deleted file mode 100644
index cd1da3d5..00000000
--- a/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.jd.blockchain.consts;
-
-/**
- * A const registeration of codes of all data contracts in ledger model;
- *
- * @author huanghaiquan
- *
- */
-public interface DataCodes {
-
- public static final int MERKLE_SNAPSHOT = 0x070;
-
- public static final int BYTES_VALUE = 0x080;
-
- public static final int BYTES_VALUE_LIST = 0x081;
-
- public static final int BLOCK_CHAIN_IDENTITY = 0x090;
-
- public static final int BLOCK = 0x100;
-
- public static final int BLOCK_BODY = 0x110;
-
- public static final int BLOCK_GENESIS = 0x120;
-
- public static final int DATA_SNAPSHOT = 0x130;
-
- public static final int LEDGER_ADMIN_INFO = 0x131;
-
- public static final int TX = 0x200;
-
- public static final int TX_LEDGER = 0x201;
-
- public static final int TX_CONTENT = 0x210;
-
- public static final int TX_CONTENT_BODY = 0x220;
-
- public static final int TX_RETURN_MESSAGE = 0x230;
-
- public static final int TX_OP = 0x300;
-
- public static final int TX_OP_LEDGER_INIT = 0x301;
-
- public static final int TX_OP_USER_REG = 0x310;
- public static final int TX_OP_USER_INFO_SET = 0x311;
- public static final int TX_OP_USER_INFO_SET_KV = 0x312;
-
- public static final int TX_OP_DATA_ACC_REG = 0x320;
- public static final int TX_OP_DATA_ACC_SET = 0x321;
- public static final int TX_OP_DATA_ACC_SET_KV = 0x322;
-
- public static final int TX_OP_CONTRACT_DEPLOY = 0x330;
- public static final int TX_OP_CONTRACT_UPDATE = 0x331;
-
- public static final int TX_OP_CONTRACT_EVENT_SEND = 0x340;
-
- public static final int TX_OP_PARTICIPANT_REG = 0x350;
- public static final int TX_OP_PARTICIPANT_STATE_UPDATE = 0x351;
-
- public static final int TX_RESPONSE = 0x360;
-
- public static final int TX_OP_RESULT = 0x370;
-
- public static final int TX_OP_ROLE_CONFIGURE = 0x371;
-
- public static final int TX_OP_ROLE_CONFIGURE_ENTRY = 0x372;
-
- public static final int TX_OP_USER_ROLES_AUTHORIZE = 0x373;
-
- public static final int TX_OP_USER_ROLE_AUTHORIZE_ENTRY = 0x374;
-
- // enum types of permissions;
- public static final int ENUM_TX_PERMISSION = 0x401;
- public static final int ENUM_LEDGER_PERMISSION = 0x402;
- public static final int ENUM_MULTI_ROLES_POLICY = 0x403;
-
- public static final int PRIVILEGE_SET = 0x410;
-
- public static final int ROLE_SET = 0x411;
-
- public static final int SECURITY_INIT_SETTING = 0x420;
-
- public static final int SECURITY_ROLE_INIT_SETTING = 0x421;
-
- public static final int SECURITY_USER_AUTH_INIT_SETTING = 0x422;
-
- // contract types of metadata;
- public static final int METADATA = 0x600;
- public static final int METADATA_V2 = 0x601;
-
- public static final int METADATA_INIT_SETTING = 0x610;
-
- public static final int METADATA_INIT_PROPOSAL = 0x611;
-
- public static final int METADATA_INIT_DECISION = 0x612;
-
- public static final int METADATA_LEDGER_SETTING = 0x620;
-
- public static final int METADATA_CONSENSUS_PARTICIPANT = 0x621;
-
-// public static final int METADATA_CONSENSUS_NODE = 0x630;
-//
-// public static final int METADATA_CONSENSUS_SETTING = 0x631;
-//
-// public static final int METADATA_PARTICIPANT_INFO = 0x640;
-//
-// public static final int METADATA_CRYPTO_SETTING = 0x642;
-
- // public static final int METADATA_CONSENSUS_NODE = 0x630;
-
- public static final int METADATA_CONSENSUS_SETTING = 0x631;
-
- public static final int METADATA_PARTICIPANT_INFO = 0x640;
-
- public static final int METADATA_PARTICIPANT_STATE_INFO = 0x641;
-
- public static final int METADATA_CRYPTO_SETTING = 0x642;
-
- public static final int METADATA_CRYPTO_SETTING_PROVIDER = 0x643;
-
-// public static final int ACCOUNT = 0x700;
-
- public static final int ACCOUNT_HEADER = 0x710;
-
- public static final int USER_ACCOUNT_HEADER = 0x800;
-
- public static final int USER_INFO = 0x801;
-
- public static final int DATA = 0x900;
-
- // contract related;
- public static final int CONTRACT_ACCOUNT_HEADER = 0xA00;
-
- public static final int CONTRACT_INFO = 0xA01;
-
- // ...0xA19
- public static final int HASH = 0xB00;
-
- public static final int HASH_OBJECT = 0xB10;
-
- public static final int ENUM_TYPE = 0xB20;
-
- public static final int CRYPTO_ALGORITHM = 0xB21;
-
- public static final int ENUM_TYPE_TRANSACTION_STATE = 0xB22;
-
- public static final int ENUM_TYPE_BYTES_VALUE_TYPE = 0xB23;
-
- public static final int ENUM_TYPE_PARTICIPANT_NODE_STATE = 0xB24;
-
- public static final int DIGITALSIGNATURE = 0xB30;
-
- public static final int DIGITALSIGNATURE_BODY = 0xB31;
-
- public static final int CLIENT_IDENTIFICATION = 0xC00;
-
- public static final int CLIENT_IDENTIFICATIONS = 0xC10;
-
- public static final int REQUEST = 0xD00;
-
- public static final int REQUEST_NODE = 0xD10;
-
- public static final int REQUEST_ENDPOINT = 0xD20;
-
- // ------------------ 共识相关 ----------------
-
- public static final int CONSENSUS = 0x1000;
-
- public static final int CONSENSUS_ACTION_REQUEST = CONSENSUS | 0x01;
-
- public static final int CONSENSUS_ACTION_RESPONSE = CONSENSUS | 0x02;
-
- public static final int CONSENSUS_SETTINGS = CONSENSUS | 0x03;
-
- public static final int CONSENSUS_NODE_SETTINGS = CONSENSUS | 0x04;
-
- public static final int CONSENSUS_CLI_INCOMING_SETTINGS = CONSENSUS | 0x05;
-
- // ------------------ 共识相关(BFTSMART) ----------------
- public static final int CONSENSUS_BFTSMART = 0x1100;
-
- public static final int CONSENSUS_BFTSMART_SETTINGS = CONSENSUS_BFTSMART | 0x01;
-
- public static final int CONSENSUS_BFTSMART_NODE_SETTINGS = CONSENSUS_BFTSMART | 0x02;
-
- public static final int CONSENSUS_BFTSMART_CLI_INCOMING_SETTINGS = CONSENSUS_BFTSMART | 0x03;
-
- public static final int CONSENSUS_BFTSMART_BLOCK_SETTINGS = CONSENSUS_BFTSMART | 0x04;
-
- // ------------------ 共识相关(MSGQUEUE) ----------------
- public static final int CONSENSUS_MSGQUEUE = 0x1200;
-
- public static final int CONSENSUS_MSGQUEUE_SETTINGS = CONSENSUS_MSGQUEUE | 0x01;
-
- public static final int CONSENSUS_MSGQUEUE_NODE_SETTINGS = CONSENSUS_MSGQUEUE | 0x02;
-
- public static final int CONSENSUS_MSGQUEUE_CLI_INCOMING_SETTINGS = CONSENSUS_MSGQUEUE | 0x03;
-
- public static final int CONSENSUS_MSGQUEUE_NETWORK_SETTINGS = CONSENSUS_MSGQUEUE | 0x04;
-
- public static final int CONSENSUS_MSGQUEUE_BLOCK_SETTINGS = CONSENSUS_MSGQUEUE | 0x05;
-
-}
diff --git a/source/base/src/main/java/com/jd/blockchain/consts/Global.java b/source/base/src/main/java/com/jd/blockchain/consts/Global.java
deleted file mode 100644
index b508e833..00000000
--- a/source/base/src/main/java/com/jd/blockchain/consts/Global.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.jd.blockchain.consts;
-
-import java.util.TimeZone;
-
-public class Global {
-
- public static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSSZ";
-
- public static final String DEFAULT_TIME_ZONE = "GMT+08:00";
-
- static {
- initialize();
- }
-
- public static void initialize() {
- TimeZone.setDefault(TimeZone.getTimeZone(DEFAULT_TIME_ZONE));
- }
-
-}
diff --git a/source/base/src/main/java/com/jd/blockchain/provider/NamedProvider.java b/source/base/src/main/java/com/jd/blockchain/provider/NamedProvider.java
deleted file mode 100644
index a1e08b27..00000000
--- a/source/base/src/main/java/com/jd/blockchain/provider/NamedProvider.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.jd.blockchain.provider;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Mark a class as a named service provider;
- *
- * @author huanghaiquan
- *
- */
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface NamedProvider {
-
- String value() default "";
-
-}
diff --git a/source/base/src/main/java/com/jd/blockchain/provider/Provider.java b/source/base/src/main/java/com/jd/blockchain/provider/Provider.java
deleted file mode 100644
index 6843a1a6..00000000
--- a/source/base/src/main/java/com/jd/blockchain/provider/Provider.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.jd.blockchain.provider;
-
-public interface Provider {
-
- String getShortName();
-
- String getFullName();
-
- S getService();
-
-}
diff --git a/source/base/src/main/java/com/jd/blockchain/provider/ProviderException.java b/source/base/src/main/java/com/jd/blockchain/provider/ProviderException.java
deleted file mode 100644
index 68840e59..00000000
--- a/source/base/src/main/java/com/jd/blockchain/provider/ProviderException.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.jd.blockchain.provider;
-
-public class ProviderException extends RuntimeException {
-
- private static final long serialVersionUID = 6422628637835262811L;
-
- public ProviderException(String message) {
- super(message);
- }
-
-}
diff --git a/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java b/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java
deleted file mode 100644
index 98584de4..00000000
--- a/source/base/src/main/java/com/jd/blockchain/provider/ProviderManager.java
+++ /dev/null
@@ -1,272 +0,0 @@
-package com.jd.blockchain.provider;
-
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The ProviderManager manages all serivce providers in the system.
- *
- *
- * The service is represented by an interface, and the provider is
- * implementation class of the service.
- *
- *
- * One service can have multiple providers in the system.
- *
- *
- * A provider must have a name, and implementor can use the annotation
- * {@link NamedProvider} to specify a short name, otherwise the system defaults
- * to the full name of the implementation class.
- *
- *
- * @author huanghaiquan
- *
- */
-public final class ProviderManager {
-
- private final Logger LOGGER = LoggerFactory.getLogger(ProviderManager.class);
-
- private final Object mutex = new Object();
-
- private ConcurrentHashMap, NamedProviders>> serviceProviders = new ConcurrentHashMap<>();
-
- /**
- * 返回指定提供者的服务;
- *
- * @param serviceClazz
- * @param providerName
- * @return
- */
- public S getService(Class serviceClazz, String providerName) {
- NamedProviders providers = getNamedProviders(serviceClazz);
- return providers.getService(providerName);
- }
-
- public Provider getProvider(Class serviceClazz, String providerName) {
- @SuppressWarnings("unchecked")
- NamedProviders providers = (NamedProviders) serviceProviders.get(serviceClazz);
- if (providers == null) {
- return null;
- }
- return providers.getProvider(providerName);
- }
-
- public Collection> getAllProviders(Class serviceClazz) {
- @SuppressWarnings("unchecked")
- NamedProviders providers = (NamedProviders) serviceProviders.get(serviceClazz);
- if (providers == null) {
- return Collections.emptyList();
- }
- return providers.getProviders();
- }
-
- public S installProvider(Class serviceClazz, String providerFullName) {
- NamedProviders providers = getNamedProviders(serviceClazz);
- return providers.install(providerFullName);
- }
-
- public S installProvider(Class service, String providerFullName, ClassLoader classLoader) {
- NamedProviders providers = getNamedProviders(service);
- return providers.install(providerFullName, classLoader);
- }
-
- public void installAllProviders(Class serviceClazz, ClassLoader classLoader) {
- NamedProviders providers = getNamedProviders(serviceClazz);
- providers.installAll(classLoader);
- }
-
- @SuppressWarnings("unchecked")
- private NamedProviders getNamedProviders(Class serviceClazz) {
- NamedProviders providers = (NamedProviders) serviceProviders.get(serviceClazz);
- if (providers == null) {
- synchronized (mutex) {
- providers = (NamedProviders) serviceProviders.get(serviceClazz);
- if (providers == null) {
- providers = new NamedProviders(serviceClazz);
- serviceProviders.put(serviceClazz, providers);
- }
- }
- }
- return providers;
- }
-
- /**
- * @author huanghaiquan
- *
- * @param
- * Type of Service
- */
- private class NamedProviders {
-
- private Class serviceClazz;
-
- private Map shortNames = new HashMap<>();
- private Map> namedProviders = new LinkedHashMap<>();
-
- private AccessControlContext acc;
-
- public NamedProviders(Class serviceClazz) {
- this.serviceClazz = serviceClazz;
- this.acc = (System.getSecurityManager() != null) ? AccessController.getContext() : null;
- installAll();
- }
-
- public void installAll(ClassLoader classLoader) {
- ServiceLoader sl = ServiceLoader.load(serviceClazz, classLoader);
- installAll(sl);
- }
-
- public void installAll() {
- // 默认采用线程上下文的类加载器;避免直接采用系统的类加载器: ClassLoader.getSystemClassLoader() ;
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- installAll(classLoader);
- }
-
- private synchronized void installAll(ServiceLoader sl) {
- for (S provider : sl) {
- install(provider);
- }
- }
-
- /**
- * 安装指定的服务提供者;
- *
- * 如果同名的服务提供者已经存在(包括ShortName和FullName任意之一存在),则返回 false;
- *
- * 如果同名的服务提供者不存在,则返回 false;
- *
- * @param service
- * 提供者的服务实现;
- * @return
- */
- private synchronized boolean install(S service) {
- String fullName = service.getClass().getName();
- if (namedProviders.containsKey(fullName)) {
- LOGGER.warn(String.format("The provider[%s] already exists.", fullName));
- return false;
- }
- String shortName = null;
- NamedProvider annoNP = service.getClass().getAnnotation(NamedProvider.class);
- if (annoNP != null && annoNP.value() != null) {
- String n = annoNP.value().trim();
- if (n.length() > 0) {
- shortName = n;
- }
- }
- if (shortName != null && shortNames.containsKey(shortName)) {
- return false;
- }
- ProviderInfo provider = new ProviderInfo<>(shortName, fullName, service);
- if (shortName != null) {
- shortNames.put(shortName, fullName);
- }
- namedProviders.put(fullName, provider);
- return true;
- }
-
- public S install(String providerFullName) {
- return install(providerFullName, null);
- }
-
- public S install(String providerFullName, ClassLoader classLoader) {
- // 默认采用线程上下文的类加载器;避免直接采用系统的类加载器: ClassLoader.getSystemClassLoader() ;
- ClassLoader cl = (classLoader == null) ? Thread.currentThread().getContextClassLoader() : classLoader;
- S p = null;
- if (acc == null) {
- p = instantiate(providerFullName, cl);
- } else {
- PrivilegedAction action = new PrivilegedAction() {
- public S run() {
- return instantiate(providerFullName, cl);
- }
- };
- p = AccessController.doPrivileged(action, acc);
- }
- if (!install(p)) {
- throw new ProviderException(
- "[" + serviceClazz.getName() + "] Provider " + providerFullName + " already exist!");
- }
- return p;
- }
-
- public Collection> getProviders() {
- return namedProviders.values();
- }
-
-
- public Provider getProvider(String providerFullName) {
- return namedProviders.get(providerFullName);
- }
-
- public S getService(String name) {
- String fullName = shortNames.get(name);
- if (fullName == null) {
- fullName = name;
- }
- Provider pd = namedProviders.get(fullName);
- return pd == null ? null : pd.getService();
- }
-
- private S instantiate(String className, ClassLoader classLoader) {
- Class> c = null;
- try {
- c = Class.forName(className, false, classLoader);
- } catch (ClassNotFoundException x) {
- throw new ProviderException("[" + serviceClazz.getName() + "] Provider " + className + " not found");
- }
- if (!serviceClazz.isAssignableFrom(c)) {
- throw new ProviderException(
- "[" + serviceClazz.getName() + "] Provider " + className + " not a subtype");
- }
- try {
- S provider = serviceClazz.cast(c.newInstance());
- return provider;
- } catch (Throwable e) {
- throw new ProviderException("[" + serviceClazz.getName() + "] Provider " + className
- + " could not be instantiated! --" + e.getMessage());
- }
- }
- }
-
- private static class ProviderInfo implements Provider {
-
- private final String shortName;
-
- private final String fullName;
-
- private final S service;
-
- public ProviderInfo(String shortName, String fullName, S service) {
- this.shortName = shortName;
- this.fullName = fullName;
- this.service = service;
- }
-
- @Override
- public String getShortName() {
- return shortName;
- }
-
- @Override
- public String getFullName() {
- return fullName;
- }
-
- @Override
- public S getService() {
- return service;
- }
-
- }
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BaseType.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BaseType.java
deleted file mode 100644
index f649171e..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BaseType.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-/**
- * 基础类型标志;
- *
- * @author huanghaiquan
- *
- */
-public interface BaseType {
-
- /**
- * 空值;
- */
- public static final byte NIL = (byte) 0x00;
-
- /**
- * 布尔;
- */
- public static final byte BOOLEAN = (byte) 0x01;
-
- /**
- * 整数;
- */
- public static final byte INTEGER = (byte) 0x10;
-
- /**
- * 8位整数;
- */
- public static final byte INT8 = (byte) (INTEGER | 0x01);
-
- /**
- * 16位整数;
- */
- public static final byte INT16 = (byte) (INTEGER | 0x02);
-
- /**
- * 32位整数;
- */
- public static final byte INT32 = (byte) (INTEGER | 0x03);
-
- /**
- * 64位整数;
- */
- public static final byte INT64 = (byte) (INTEGER | 0x04);
-
- /**
- * 文本
- */
- public static final byte TEXT = (byte) 0x20;
-
- /**
- * 字节序列;
- */
- public static final byte BYTES = (byte) 0x40;
-
- /**
- * 扩展类型;
- *
- * 最高位为1,用作保留字段;
- */
- public static final byte EXT = (byte) 0x80;
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BinarySegmentHeader.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BinarySegmentHeader.java
deleted file mode 100644
index 82eba875..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BinarySegmentHeader.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//package com.jd.blockchain.binaryproto;
-//
-//import java.io.ByteArrayOutputStream;
-//import java.io.InputStream;
-//import java.io.OutputStream;
-//import java.util.Arrays;
-//import java.util.Collections;
-//import java.util.List;
-//
-//import my.utils.io.BytesUtils;
-//
-///**
-// * 二进制数据段的头部;
-// *
-// * @author huanghaiquan
-// *
-// */
-//public class BinarySegmentHeader {
-//
-// public static final BinarySliceSpec CODE_SLICE_SPEC = new BinarySliceSpec(4, false, "Code", "Data Contract Code");
-//
-// public static final BinarySliceSpec VERSION_SLICE_SPEC = new BinarySliceSpec(8, false, "Version", "Data Contract Version");
-//
-// public static final List HEADER_SLICES = Collections.unmodifiableList(Arrays.asList(CODE_SLICE_SPEC, VERSION_SLICE_SPEC));
-//
-// private int code;
-//
-// private long version;
-//
-// public int getCode() {
-// return code;
-// }
-//
-// public long getVersion() {
-// return version;
-// }
-//
-// public BinarySegmentHeader(int code, long version) {
-// this.code = code;
-// this.version = version;
-// }
-//
-// public static int resolveCode(InputStream in) {
-// return BytesUtils.readInt(in);
-// }
-//
-//
-// public static long resolveVersion(InputStream in) {
-// return BytesUtils.readLong(in);
-// }
-//
-// public static BinarySegmentHeader resolveFrom(InputStream in) {
-// int code = resolveCode(in);
-// long version = resolveVersion(in);
-// return new BinarySegmentHeader(code, version);
-// }
-//
-// public static void writeCode(int code, OutputStream out) {
-// BytesUtils.writeInt(code, out);
-// }
-//
-// public static void writeVersion(long version, OutputStream out) {
-// BytesUtils.writeLong(version, out);
-// }
-//
-// public void writeTo(OutputStream out) {
-// writeCode(code, out);
-// writeVersion(version, out);
-// }
-//
-//
-// public byte[] toBytes() {
-// ByteArrayOutputStream out =new ByteArrayOutputStream();
-// writeTo(out);
-// return out.toByteArray();
-// }
-//
-//
-//
-//}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BinarySliceSpec.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BinarySliceSpec.java
deleted file mode 100644
index c98ffcc8..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/BinarySliceSpec.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-/**
- * 表示一个二进制数据片段的格式标准;
- *
- *
- * 一个数据契约的实例输出生成的二进制数据段{@link BinarySegmentHeader}是由一系列小的标准化的数据片段组成;
- *
- * @author huanghaiquan
- *
- */
-public class BinarySliceSpec {
-
- private boolean repeatable;
-
- private int length;
-
- private boolean dynamic;
-
- private String name;
-
- private String description;
-
- /**
- * 是否重复多次;true 表示以一个头部表示接下来的片段将重复的次数;
- *
- * @return
- */
- public boolean isRepeatable() {
- return repeatable;
- }
-
- /**
- * 字节长度;
- *
- * @return
- */
- public int getLength() {
- return length;
- }
-
- /**
- * 长度是动态扩展的;
- *
- * @return
- */
- public boolean isDynamic() {
- return dynamic;
- }
-
- public String getName() {
- return name;
- }
-
- public String getDescription() {
- return description;
- }
-
- private BinarySliceSpec(String name, String description, boolean repeatable, int length, boolean dynamic) {
- this.name = name;
- this.description = description;
- this.repeatable = repeatable;
- this.length = length;
- this.dynamic = dynamic;
- }
-
- public static BinarySliceSpec newFixedSlice(int length, String name, String description) {
- return new BinarySliceSpec(name, description, false, length, false);
- }
-
- public static BinarySliceSpec newRepeatableFixedSlice(int length, String name, String description) {
- return new BinarySliceSpec(name, description, true, length, false);
- }
-
- public static BinarySliceSpec newDynamicSlice(String name, String description) {
- return new BinarySliceSpec(name, description, false, -1, true);
- }
-
- public static BinarySliceSpec newRepeatableDynamicSlice(String name, String description) {
- return new BinarySliceSpec(name, description, true, -1, true);
- }
-}
\ No newline at end of file
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContract.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContract.java
deleted file mode 100644
index 6c0fc8e2..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContract.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * {@link DataContract} 表示数据契约,用于把一个接口类型声明为一份标准化“数据契约”;
- *
- * “数据契约”的定义由类型编码({@link #code()})和属性列表(由标注
- * {@link DataField}定义)构成,其中属性列表中有唯一一个“主键字段”, 主键字段的值用于标识数据契约实例的唯一性;
- *
- * “数据契约”通过属性可以引用其它的“数据契约”(由 {@link DataField#refContract()} = true
- * 定义),这样便构成了“数据契约”嵌套定义的关系图;
- *
- * 当对一个“数据契约”进行二进制序列化输出时,从根对象出发,对关系图中的每一个“数据契约”实例都输出为一个单独的二进制数据段{@link BinarySegmentHeader},
- *
- * 父的数据段中会将子数据段的内容合并输出到对应字段的位置;
- *
- *
- * 在序列化输出数据段时,将按顺序先后输出类型编号({@link #code()})、版本标识、属性值列表;
- * 其中,“版本标识”是根据类型编号和属性列表(由 {@link DataField} 顺序和类型决定,与名称无关) 进行 SHA256 哈希后映射到 64
- * 位值空间的值,占用 8 字节空间;
- * “版本标识” 用于在反序列化时校验数据格式的版本是否匹配,并允许数据契约升级后多版本数据并存;
- *
- * @author huanghaiquan
- *
- */
-@Target({ ElementType.TYPE, ElementType.PARAMETER })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface DataContract {
-
- /**
- * 类型编号;
- *
- * 不同类型不能声明相同的编号;
- *
- *
- * @return
- */
- int code();
-
- String name() default "";
-
- String description() default "";
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractEncoder.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractEncoder.java
deleted file mode 100644
index 179f7d76..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractEncoder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import com.jd.blockchain.utils.io.BytesInputStream;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-
-/**
- * 二进制编码器;
- *
- * @author huanghaiquan
- *
- */
-public interface DataContractEncoder {
-
- /**
- * 数据契约的格式标准;
- *
- * @return
- */
- DataSpecification getSepcification();
-
- /**
- * 数据契约的接口类型;
- *
- * @return
- */
- Class> getContractType();
-
- /**
- * 按照数据格式标准序列化输出指定的数据对象;
- *
- * @param dataContract
- * 数据对象;
- * @param buffer
- * 要写入的缓冲区;
- * @return 返回写入的字节数;
- */
- int encode(Object dataContract, BytesOutputBuffer buffer);
-
- /**
- * 按照数据格式标准将指定的二进制输入流反序列化生成数据对象;
- *
- * @param bytesStream
- * @return
- */
- T decode(BytesInputStream bytesStream);
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractException.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractException.java
deleted file mode 100644
index ae7e57c3..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-public class DataContractException extends RuntimeException {
-
- private static final long serialVersionUID = 5069307301932155810L;
-
- public DataContractException(String message) {
- super(message);
- }
- public DataContractException(String message, Throwable cause) {
- super(message, cause);
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractRegistry.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractRegistry.java
deleted file mode 100644
index 08dcc76f..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataContractRegistry.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import com.jd.blockchain.binaryproto.impl.DataContractContext;
-
-/**
- * 数据实体注册表;
- *
- * @author huanghaiquan
- *
- */
-public class DataContractRegistry {
-
- private DataContractRegistry() {
- }
-
-
- //TODO: Refactor contract type registering in service provider mode;
-
- public static DataContractEncoder register(Class> contractType) {
- DataContractEncoder encoder = DataContractContext.resolve(contractType);
- return encoder;
- }
-
- public static DataContractEncoder getEncoder(Class> contractType) {
- return DataContractContext.ENCODER_LOOKUP.lookup(contractType);
- }
-
- public static DataContractEncoder getEncoder(int contractCode, long version) {
- return DataContractContext.ENCODER_LOOKUP.lookup(contractCode, version);
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataField.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataField.java
deleted file mode 100644
index 1829eed6..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataField.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 标记一个接口的字段作为数据契约的字段;
- *
- *
- * 字段的数据类型需要需要显式通过
- * {@link #primitiveType()}、{@link #refEnum()}、{@link #refContract()}
- * 3个属性之一标注(只能标记一种);
- *
- * @author huanghaiquan
- *
- */
-@Target({ ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface DataField {
-
- /**
- * 字段顺序;
- *
- *
- * 顺序编号实际并不会输出,仅用于对字段进行升序排列;
- *
- *
- * 注:对于已经发布使用的数据契约,都不应该调整顺序,否则会导致无法正确解析已有数据;
- *
- * @return
- */
- int order();
-
- /**
- * 基本数据类型;
- *
- *
- * 如果字段的类型属于 {@link PrimitiveType} 枚举中的基本数据类型,则需要显式指定一种具体的类型;
- *
- * @return
- */
- PrimitiveType primitiveType() default PrimitiveType.NIL;
-
- /**
- * 是否是枚举类型;
- *
- * 如果为 true,则属性的声明类型必须是枚举类型,且该枚举类型已经标记 {@link EnumContract};
- *
- * @return
- */
- boolean refEnum() default false;
-
- /**
- * 嵌套的数据契约类型;
- *
- * 如果为 true,则属性的声明类型必须是接口类型,且该类型已经标记了 {@link DataContract};
- *
- * @return
- */
- boolean refContract() default false;
-
- /**
- * 嵌套的契约类型是否根据实际的对象实现的契约接口动态写入;
- *
- * @return
- */
- boolean genericContract() default false;
-
- /**
- * 列表;
- *
- * @return
- */
- boolean list() default false;
-
- /**
- * 最大长度,单位为“byte”
- *
- * 仅对于文本、字节数组、大整数等相关的数据类型有效(即:{@link PrimitiveType} 枚举中编码大于等于 0x20
- * {@link PrimitiveType#TEXT}的数据类型);
- *
- * @return
- */
- int maxSize() default -1;
-
- /**
- * 名称;
- *
- * 默认为属性的名称;
- *
- * @return
- */
- String name() default "";
-
- /**
- * 关于字段的说明;
- *
- *
- * 说明内容将输出到数据段的数据结构描述文件;
- *
- * @return
- */
- String decription() default "";
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataSpecification.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataSpecification.java
deleted file mode 100644
index 9577d69e..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/DataSpecification.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import java.util.List;
-
-/**
- * {@link DataSpecification} 表示数据契约的格式标准;
- *
- * {@link DataSpecification} 提供了数据契约的格式描述(通过属性 {@link #getCode()}、
- * {@link #getVersion()}、
- * {@link #getFields()}),以及二进制数据片段序列的格式描述({@link #getSlices()});
- *
- *
- * 其中,数据片段列表({@link #getSlices()})反映了数据契约实际输出的二进制序列:
- * 1、首个数据片段是数据契约的类型编码({@link #getCode()});
- * 2、接下来是数据契约的版本({@link #getVersion()});
- * 3、再接下来是与字段列表({@link #getFields()})一一对应的数据分片;
- *
- *
- *
- *
- * @author huanghaiquan
- *
- */
-public interface DataSpecification {
-
- /**
- * 数据契约的类型编码;
- *
- * @return
- */
- int getCode();
-
- /**
- * 数据契约的版本;
- *
- *
- * 由类型编码{@link #getCode()}和字段列表{@link #getFields()} 进行哈希生成的 64 位整数;
- *
- * @return
- */
- long getVersion();
-
- String getName();
-
- String getDescription();
-
- /**
- * 按定义顺序排列的字段格式标准的列表;
- *
- * 字段的顺序由 {@link DataField#order()} 定义;
- *
- * @return
- */
- List getFields();
-
- /**
- * 按顺序定义的二进制数据片段的格式标准的列表;
- *
- * @return
- */
- List getSlices();
-
- String toHtml();
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumContract.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumContract.java
deleted file mode 100644
index d8e8c452..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumContract.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface EnumContract {
-
- /**
- * 类型编号;
- *
- *
- * 而且,不同类型不能声明相同的编号;
- *
- * @return
- */
- int code() ;
-
- String name() default "";
-
- String decription() default "";
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumField.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumField.java
deleted file mode 100644
index f7c588f1..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumField.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ ElementType.FIELD, ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface EnumField {
-
- /**
- * 枚举值的类型;
- *
- *
- * 注:只支持 {@link PrimitiveType#INT8} ~ {@link PrimitiveType#INT32} 这几种类型;
- *
- *
- * @return
- */
- PrimitiveType type();
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumSpecification.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumSpecification.java
deleted file mode 100644
index 6c4e73ce..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/EnumSpecification.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-public interface EnumSpecification {
-
- int getCode();
-
- String getName();
-
- String getDescription();
-
- long getVersion();
-
- PrimitiveType getValueType();
-
- int[] getItemValues();
-
- String[] getItemNames();
-
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/FieldSpec.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/FieldSpec.java
deleted file mode 100644
index 315e6580..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/FieldSpec.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.jd.blockchain.binaryproto;
-
-/**
- * 表示数据契约字段的格式标准;
- *
- * @author huanghaiquan
- *
- */
-public interface FieldSpec {
-
-// /**
-// * 字段值的类型编码;
-// *
-// *
-// * 该编码是对{@link #getPrimitiveType()}、{@link #getRefEnum()}、{@link #getRefContract()}
-// * 3个属性的联合编码,通过首字节标识出类型为这3中类型中的一种;
-// * 其中:
-// * 1、首字节为 0 表示为基本类型 {@link #getPrimitiveType()};
-// * 2、首字节为 1 表示为枚举类型 {@link #getRefEnum()},紧接其后是枚举类型的编码
-// * 3、首字节为 2 表示为数据契约类型 {@link #getRefContract()};
-// * 4、首字节为 3 表示为基本类型的数组类型 {@link #isRepeatable()} ()};
-// * 5、首字节为 4 表示为PubKey类型 {@link #isRefPubKey()};
-// * 6、首字节为 5 表示为PrivKey类型 {@link #isRefPrivKey()};
-// * 7、首字节为 6 表示为HashDigest类型 {@link #isRefHashDigest()};
-// * 8、首字节为 7 表示为数据契约类型数组 {@link #isList(), @link #getRefContract()};
-// * 9、首字节为 8 表示为BlockChainIdentity数据类型 {@link #isRefIdentity()}
-// * 10、首字节为9 表示为NetworkAddress数据类型 {@link #isRefNetworkAddr()};
-// * @return
-// */
-// long getTypeCode();
-
- /**
- * 字段的值的类型;
- *
- * 如果不是字段的值不是基本类型,则返回 null(即: {@link DataField#primitiveType()} 设置为
- * {@link PrimitiveType#NIL});
- *
- * @return
- */
- PrimitiveType getPrimitiveType();
-
- /**
- * 字段的值引用的枚举契约;
- *
- * 如果字段的值不是枚举契约类型,则返回 null;
- *
- * @return
- */
- EnumSpecification getRefEnum();
-
- /**
- * 字段的值引用的数据契约;
- *
- * 如果字段的值不是数据契约类型,则返回 null;
- *
- * @return
- */
- DataSpecification getRefContract();
-
- boolean isRepeatable();
-
-// /**
-// * 字段的值引用的PubKey;
-// *
-// * 如果字段的值不是PubKey,则返回 false;
-// *
-// * @return
-// */
-// boolean isRefPubKey();
-// /**
-// * 字段的值引用的PrivKey;
-// *
-// * 如果字段的值不是PrivKey,则返回 false;
-// *
-// * @return
-// */
-// boolean isRefPrivKey();
-// /**
-// * 字段的值引用的HashDigest;
-// *
-// * 如果字段的值不是HashDigest,则返回 false;
-// *
-// * @return
-// */
-// boolean isRefHashDigest();
-// /**
-// * 字段的值引用的SignatureDigest;
-// *
-// * 如果字段的值不是SignatureDigest,则返回 false;
-// *
-// * @return
-// */
-// boolean isRefSignatureDigest();
-// /**
-// * 字段的值引用的BlockChainIdentity;
-// *
-// * 如果字段的值不是HashDigest,则返回 false;
-// *
-// * @return
-// */
-// boolean isRefIdentity();
-// /**
-// * 字段的值引用的NetworkAddress;
-// *
-// * 如果字段的值不是NetworkAddress,则返回 false;
-// *
-// * @return
-// */
-// boolean isRefNetworkAddr();
- /**
- * 最大长度;单位为“byte”;
- *
- * @return
- * @see {@link DataField#maxSize()}
- */
- int getMaxSize();
-
- String getName();
-
- String getDescription();
-
- /**
- * 是否引用了一个通用数据契约类型,实际的类型需要根据实际的对象实例来定;
- * @return
- */
- boolean isGenericContract();
-// Class> getContractTypeResolver();
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/AbstractDynamicValueConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/AbstractDynamicValueConverter.java
deleted file mode 100644
index 53c8161e..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/AbstractDynamicValueConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.utils.io.BytesInputStream;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.NumberMask;
-
-public abstract class AbstractDynamicValueConverter implements DynamicValueConverter {
-
- protected Class> valueType;
-
- private static final NumberMask SIZE_HEAD = NumberMask.NORMAL;
-
- private static final byte[] NULL_HEAD = new byte[1];
-
- static {
- SIZE_HEAD.writeMask(0, NULL_HEAD, 0);
- }
-
- public AbstractDynamicValueConverter(Class> valueType) {
- this.valueType = valueType;
- }
-
- @Override
- public Class> getValueType() {
- return valueType;
- }
-
- @Override
- public Object getDefaultValue() {
- return null;
- }
-
- protected int writeSize(int size, BytesOutputBuffer buffer) {
- int len = SIZE_HEAD.getMaskLength(size);
- byte[] headerBytes = new byte[len];
- SIZE_HEAD.writeMask(size, headerBytes, 0);
- buffer.write(headerBytes);
- return len;
- }
-
- protected int readSize(BytesInputStream bytesStream) {
- return SIZE_HEAD.resolveMaskedNumber(bytesStream);
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/AbstractFieldEncoder.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/AbstractFieldEncoder.java
deleted file mode 100644
index 597d3e2e..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/AbstractFieldEncoder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import com.jd.blockchain.binaryproto.BinarySliceSpec;
-import com.jd.blockchain.binaryproto.FieldSpec;
-
-public abstract class AbstractFieldEncoder implements FieldEncoder {
-
- protected BinarySliceSpec sliceSpec;
-
- protected FieldSpec fieldSpec;
-
- protected Method reader;
-
- public AbstractFieldEncoder(BinarySliceSpec sliceSpec, FieldSpec fieldSpec, Method reader) {
- this.sliceSpec = sliceSpec;
- this.fieldSpec = fieldSpec;
- this.reader = reader;
- }
-
- @Override
- public BinarySliceSpec getSliceSpecification() {
- return sliceSpec;
- }
-
- @Override
- public FieldSpec getFieldSpecification() {
- return fieldSpec;
- }
-
- @Override
- public Method getReader() {
- return reader;
- }
-
-
- protected Object readValue(Object dataContract) {
- try {
- return reader.invoke(dataContract);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- protected Object[] readArrayValue(Object dataContract) {
- return (Object[]) readValue(dataContract);
- }
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BoolConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BoolConverter.java
deleted file mode 100644
index c6c9c0f6..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BoolConverter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.utils.io.BytesSlice;
-
-public class BoolConverter implements FixedValueConverter{
-
- @Override
- public Class> getValueType() {
- return boolean.class;
- }
-
- @Override
- public Object getDefaultValue() {
- return false;
- }
-
- @Override
- public int encodeValue(Object value, byte[] buffer, int offset) {
- buffer[offset] = ((Boolean)value).booleanValue() ? (byte)1 : (byte)0;
- return 1;
- }
-
- @Override
- public Object decodeValue(BytesSlice dataSlice) {
- return dataSlice.getByte() == 1 ? Boolean.TRUE : Boolean.FALSE;
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BoolWrapperConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BoolWrapperConverter.java
deleted file mode 100644
index f4eff751..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BoolWrapperConverter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.utils.io.BytesSlice;
-
-public class BoolWrapperConverter implements FixedValueConverter{
-
- @Override
- public Class> getValueType() {
- return Boolean.class;
- }
-
- @Override
- public Object getDefaultValue() {
- return null;
- }
-
- @Override
- public int encodeValue(Object value, byte[] buffer, int offset) {
- buffer[offset] = ((Boolean)value).booleanValue() ? (byte)1 : (byte)0;
- return 1;
- }
-
- @Override
- public Object decodeValue(BytesSlice dataSlice) {
- return dataSlice.getByte() == 1 ? Boolean.TRUE : Boolean.FALSE;
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BytesSerializableValueConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BytesSerializableValueConverter.java
deleted file mode 100644
index 6ac29b9b..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BytesSerializableValueConverter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import com.jd.blockchain.binaryproto.DataContractException;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSerializable;
-import com.jd.blockchain.utils.io.BytesSlice;
-import com.jd.blockchain.utils.io.BytesUtils;
-
-public class BytesSerializableValueConverter extends AbstractDynamicValueConverter {
-
- private Constructor> constructor;
-
- public BytesSerializableValueConverter(Class> valueType) {
- super(valueType);
- if (!BytesSerializable.class.isAssignableFrom(valueType)) {
- throw new IllegalArgumentException("The specified type cann't be assigned as BytesSerializable!");
- }
- // 检查是否存在以 byte[] 为参数的构造器;
- try {
- constructor = valueType.getConstructor(byte[].class);
- constructor.setAccessible(true);
- } catch (NoSuchMethodException e) {
- throw new DataContractException("No constructor with byte's array argument! --" + e.getMessage(), e);
- } catch (SecurityException e) {
- throw new DataContractException(e.getMessage(), e);
- }
- }
-
- @Override
- public Object decodeValue(BytesSlice dataSlice) {
- if (dataSlice.getSize() == 0) {
- return null;
- }
- byte[] bytes = dataSlice.getBytesCopy();
- try {
- return constructor.newInstance(bytes);
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
- | InvocationTargetException e) {
- throw new DataContractException(e.getMessage(), e);
- }
- }
-
- @Override
- public int encodeDynamicValue(Object value, BytesOutputBuffer buffer) {
- byte[] bytes = value == null ? BytesUtils.EMPTY_BYTES : ((BytesSerializable) value).toBytes();
- int size = bytes.length;
- size += writeSize(size, buffer);
- buffer.write(bytes);
- return size;
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BytesValueConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BytesValueConverter.java
deleted file mode 100644
index 071fdeaa..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/BytesValueConverter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlice;
-import com.jd.blockchain.utils.io.BytesUtils;
-
-public class BytesValueConverter extends AbstractDynamicValueConverter {
-
- public BytesValueConverter() {
- super(byte[].class);
- }
-
- @Override
- public int encodeDynamicValue(Object value, BytesOutputBuffer buffer) {
- byte[] bytes =value == null ? BytesUtils.EMPTY_BYTES : (byte[]) value;
- int size = bytes.length;
- size += writeSize(size, buffer);
-
- buffer.write(bytes);
- return size;
- }
-
- @Override
- public Object decodeValue(BytesSlice dataSlice) {
- return dataSlice.getBytesCopy();
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractContext.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractContext.java
deleted file mode 100644
index ae923b4e..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractContext.java
+++ /dev/null
@@ -1,790 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.jd.blockchain.binaryproto.BinarySliceSpec;
-import com.jd.blockchain.binaryproto.DataContract;
-import com.jd.blockchain.binaryproto.DataContractEncoder;
-import com.jd.blockchain.binaryproto.DataContractException;
-import com.jd.blockchain.binaryproto.DataField;
-import com.jd.blockchain.binaryproto.DataSpecification;
-import com.jd.blockchain.binaryproto.PrimitiveType;
-import com.jd.blockchain.binaryproto.EnumContract;
-import com.jd.blockchain.binaryproto.EnumField;
-import com.jd.blockchain.binaryproto.EnumSpecification;
-import com.jd.blockchain.binaryproto.FieldSpec;
-import com.jd.blockchain.binaryproto.impl.EnumSpecificationInfo.EnumConstant;
-import com.jd.blockchain.utils.io.BytesSerializable;
-import com.jd.blockchain.utils.io.BytesUtils;
-import com.jd.blockchain.utils.security.SHA256Hash;
-import com.jd.blockchain.utils.security.ShaUtils;
-
-public class DataContractContext {
-
- public static DataContractEncoderLookup ENCODER_LOOKUP;
-
- private static final Object MUTEX = new Object();
-
- private static final BinarySliceSpec HEAD_SLICE = BinarySliceSpec.newFixedSlice(HeaderEncoder.HEAD_BYTES, "HEAD",
- "The code and version of data contract.");
-
- private static final byte SINGLE_TYPE = 0;
- private static final byte REPEATABLE_TYPE = 1;
-
- /**
- * 基本类型的字段;
- */
- private static final byte PRIMITIVE_TYPE_FIELD = 0;
-
- /**
- * 枚举类型的字段;
- */
- private static final byte ENUM_CONTRACT_FIELD = 1;
-
- /**
- * 引用一个具体的数据契约类型的字段;
- */
- private static final byte DATA_CONTRACT_FIELD = 2;
-
- /**
- * 动态的数据契约类型的字段;
- */
- private static final byte DYNAMIC_CONTRACT_FIELD = 3;
-
- private static Map codeMap = new ConcurrentHashMap<>();
- private static Map, DataContractEncoder> typeMap = new ConcurrentHashMap<>();
-
- private static Map, EnumSpecification> enumContractSpecMap = new ConcurrentHashMap<>();
-
- private static Map, ValueConverter>> primitiveTypeConverters = new HashMap<>();
-
- static {
- addConverterMapping(PrimitiveType.BOOLEAN, boolean.class, new BoolConverter());
- addConverterMapping(PrimitiveType.BOOLEAN, Boolean.class, new BoolWrapperConverter());
- addConverterMapping(PrimitiveType.INT8, byte.class, new Int8ByteConverter());
- addConverterMapping(PrimitiveType.INT8, Byte.class, new Int8ByteWrapperConverter());
- addConverterMapping(PrimitiveType.INT16, short.class, new Int16ShortConverter());
- addConverterMapping(PrimitiveType.INT16, Short.class, new Int16ShortWrapperConverter());
- addConverterMapping(PrimitiveType.INT16, char.class, new Int16CharConverter());
- addConverterMapping(PrimitiveType.INT16, Character.class, new Int16CharWrapperConverter());
- addConverterMapping(PrimitiveType.INT32, int.class, new Int32IntConverter());
- addConverterMapping(PrimitiveType.INT32, Integer.class, new Int32IntWrapperConverter());
- addConverterMapping(PrimitiveType.INT64, long.class, new Int64LongConverter());
- addConverterMapping(PrimitiveType.INT64, Long.class, new Int64LongWrapperConverter());
- addConverterMapping(PrimitiveType.TEXT, String.class, new StringValueConverter());
- addConverterMapping(PrimitiveType.BYTES, byte[].class, new BytesValueConverter());
-
- ENCODER_LOOKUP = new DataContractEncoderLookup() {
- @Override
- public DataContractEncoder lookup(int code, long version) {
- ContractTypeVersionContext ctx = codeMap.get(code);
- if (ctx == null) {
- return null;
- }
- // TODO: 未实现多个版本的处理;
- return ctx.contractEncoder;
- }
-
- @Override
- public DataContractEncoder lookup(Class> contractType) {
- return typeMap.get(contractType);
- }
- };
- }
-
- private static void addConverterMapping(PrimitiveType protocalType, Class> javaType, ValueConverter converter) {
- Map, ValueConverter> converterMap = primitiveTypeConverters.get(protocalType);
- if (converterMap == null) {
- converterMap = new HashMap<>();
- primitiveTypeConverters.put(protocalType, converterMap);
- }
- converterMap.put(javaType, converter);
- }
-
- private static ValueConverter getPrimitiveTypeConverter(PrimitiveType protocalType, Class> javaType) {
- Map, ValueConverter> converterMap = primitiveTypeConverters.get(protocalType);
- if (converterMap != null) {
- ValueConverter converter = converterMap.get(javaType);
- if (converter != null) {
- return converter;
- }
- if (PrimitiveType.BYTES == protocalType && BytesSerializable.class.isAssignableFrom(javaType)) {
- converter = new BytesSerializableValueConverter(javaType);
- converterMap.put(javaType, converter);
- return converter;
- }
- }
- throw new IllegalArgumentException(String.format("Unsupport types mapping: [PrimitiveType=%s]-[JavaType=%s]",
- protocalType.toString(), javaType.toString()));
- }
-
- public static DataContractEncoder resolve(Class> contractType) {
- DataContractEncoder encoder = typeMap.get(contractType);
- if (encoder != null) {
- return encoder;
- }
- synchronized (MUTEX) {
- encoder = typeMap.get(contractType);
- if (encoder != null) {
- return encoder;
- }
- ContractTypeVersionContext ctx = resolveContract(contractType);
- encoder = ctx.contractEncoder;
- }
-
- return encoder;
- }
-
- /**
- * 解析数据契约;
- *
- * @param contractType
- * @return
- */
- private static ContractTypeVersionContext resolveContract(Class> contractType) {
- // TODO: 未处理可能存在的循环依赖问题,这会导致解析方法陷入死循环;
- if (!contractType.isInterface()) {
- throw new IllegalArgumentException(
- "The specified contractType [" + contractType.toString() + "] is not a interface!");
- }
- DataContract annoContract = contractType.getAnnotation(DataContract.class);
- if (annoContract == null) {
- throw new IllegalArgumentException(
- "Class[" + contractType.toString() + "] isn't annotated as DataContract!");
- }
- int contractCode = annoContract.code();
- ContractTypeVersionContext ctx = codeMap.get(contractCode);
- if (ctx != null) {
- if (ctx.contractType == contractType) {
- return ctx;
- } else {
- throw new IllegalStateException(String.format(
- "Contract Code[%s] has been registered by type[%s]! Cann't register again with type[%s]!",
- contractCode, ctx.contractType.getName(), contractType.getName()));
- }
- }
-
- DataContractEncoder contractEncoder = resolveEncoder(contractType, annoContract);
-
- ctx = new ContractTypeVersionContext(contractType, contractEncoder);
-
- codeMap.put(contractCode, ctx);
- typeMap.put(contractType, contractEncoder);
-
- return ctx;
- }
-
- /**
- * @param contractType
- * @param annoContract
- * @return
- */
- private static DataContractEncoder resolveEncoder(Class> contractType, DataContract annoContract) {
- DataContractEncoder encoder = typeMap.get(contractType);
- if (encoder != null) {
- return encoder;
- }
-
- if (!contractType.isInterface()) {
- throw new IllegalArgumentException(
- "The registering contract type is not a interface! --" + contractType.getName());
- }
-
- // 解析获得数据契约的有序的字段列表;
- List allFields = resolveContractFields(contractType, annoContract);
-
- // 解析每一个字段,生成字段的编码器和二进制片段描述符;
- FieldSpecInfo[] fieldSpecs = new FieldSpecInfo[allFields.size()];
- BinarySliceSpec[] dataSliceSpecs = new BinarySliceSpec[allFields.size() + 1];
- FieldEncoder[] fieldEncoders = new FieldEncoder[allFields.size()];
-
- dataSliceSpecs[0] = HEAD_SLICE;
-
- SHA256Hash versionHash = ShaUtils.hash_256();// 用于计算 DataContract 的版本号的哈希生成器;
- int i = 0;
- for (FieldDeclaredInfo fieldInfo : allFields) {
- fieldSpecs[i] = fieldInfo.fieldSpec;
-
- // 构建二进制片段;
- dataSliceSpecs[i + 1] = buildSlice(fieldInfo.fieldSpec);
-
- fieldEncoders[i] = buildFieldEncoder(fieldInfo, dataSliceSpecs[i + 1]);
-
- // 按顺序计算字段类型,
- byte[] fieldType = generateFieldTypeCode(fieldInfo.fieldSpec);
- versionHash.update(fieldType);
-
- i++;
- }
-
- // 数据契约的版本号取自对所有字段的数据类型的哈希前 8 位;
- byte[] allFieldTypesHash = versionHash.complete();
- long version = BytesUtils.toLong(allFieldTypesHash);
-
- HeaderEncoder headerEncoder = new HeaderEncoder(HEAD_SLICE, annoContract.code(), version, annoContract.name(),
- annoContract.description());
-
- DataContractSpecification spec = new DataContractSpecification(annoContract.code(), version,
- annoContract.name(), annoContract.description(), dataSliceSpecs, fieldSpecs);
-
- DataContractEncoderImpl contractEncoder = new DataContractEncoderImpl(contractType, spec, headerEncoder,
- fieldEncoders);
-
- return contractEncoder;
- }
-
- /**
- * 解析获得数据契约的有序的字段列表;
- *
- * @param contractType
- * @param annoContract
- * @return
- */
- private static List resolveContractFields(Class> contractType, DataContract annoContract) {
- // 解析每一个方法,获得标注的合约字段,并按照声明的合约类型进行分组;
- Map, DeclaredFieldGroup> declaredFielGroups = new HashMap<>();
- Method[] methods = contractType.getMethods();
- for (Method method : methods) {
- DataField annoField = method.getAnnotation(DataField.class);
- if (annoField == null) {
- continue;
- }
- Class> declaredType = method.getDeclaringClass();
- DeclaredFieldGroup group = declaredFielGroups.get(declaredType);
- if (group != null) {
- FieldSpecInfo fieldSpec = resolveFieldSpec(method, annoField);
- group.addField(method, annoField, fieldSpec);
- continue;
- }
- if (declaredType == contractType) {
- // 字段是由当前的数据契约类型所声明;
- FieldSpecInfo fieldSpec = resolveFieldSpec(method, annoField);
- group = new DeclaredFieldGroup(contractType, annoContract, method, annoField, fieldSpec);
- declaredFielGroups.put(contractType, group);
- continue;
- }
- // 字段由父接口声明,所以取父接口上的标注定义进行解析;
- DataContract declaredContractAnnotation = declaredType.getAnnotation(DataContract.class);
- if (declaredContractAnnotation == null) {
- throw new DataContractException("Declare data contract field in a non-data-contract type! --[Type="
- + declaredType.getName() + "]");
- }
-
- FieldSpecInfo fieldSpec = resolveFieldSpec(method, annoField);
- group = new DeclaredFieldGroup(declaredType, declaredContractAnnotation, method, annoField, fieldSpec);
- declaredFielGroups.put(declaredType, group);
- }
-
- DeclaredFieldGroup[] groups = declaredFielGroups.values()
- .toArray(new DeclaredFieldGroup[declaredFielGroups.size()]);
- for (DeclaredFieldGroup group : groups) {
- // 计算继承距离;
- int extendsionDistance = computeExtendsionDistance(contractType, group.declaredContractType);
- if (extendsionDistance < 0) {
- // 实际不会进入此分支;
- throw new IllegalStateException("Illegal state that isn't expected to occur!");
- }
- group.setExtendsionDistance(extendsionDistance);
- }
-
- // 按继承距离和数据契约的编码进行倒序排序,如果继承距离相同,则编码小的在前;
- // 达到的效果:父接口声明的字段在前,子接口声明的字段在后;同一个继承级别,则编码小的在前;
- Arrays.sort(groups,
- (g1, g2) -> (g2.extendsionDistance == g1.extendsionDistance
- ? g1.declaredContractAnnotation.code() - g2.declaredContractAnnotation.code()
- : g2.extendsionDistance - g1.extendsionDistance));
-
- List allFields = new ArrayList<>();
- for (DeclaredFieldGroup grp : groups) {
- allFields.addAll(grp.getFields());
- }
-
- return allFields;
- }
-
- /**
- * 创建字段的编码器;
- *
- * @param fieldInfo
- * @param sliceSpec
- * @return
- */
- private static FieldEncoder buildFieldEncoder(FieldDeclaredInfo fieldInfo, BinarySliceSpec sliceSpec) {
- FieldSpecInfo fieldSpec = fieldInfo.fieldSpec;
- if (fieldSpec.getPrimitiveType() != null) {
- return buildPrimitiveFieldEncoder(fieldInfo, sliceSpec);
- } else if (fieldSpec.getRefEnum() != null) {
- return buildEnumFieldEncoder(fieldInfo, sliceSpec);
- } else if (fieldSpec.getRefContract() != null) {
- return buildContractFieldEncoder(fieldInfo, sliceSpec);
- } else {
- throw new IllegalStateException("Illegal states that has no type definition for field! --[ReadMethod="
- + fieldInfo.reader.toString() + "");
- }
- }
-
- /**
- * 创建数据契约引用字段的编码器;
- *
- * @param fieldInfo
- * @param sliceSpec
- * @return
- */
- private static FieldEncoder buildContractFieldEncoder(FieldDeclaredInfo fieldInfo, BinarySliceSpec sliceSpec) {
- ValueConverter valueConverter;
- if (fieldInfo.fieldSpec.isGenericContract()) {
- Class> contractType = fieldInfo.fieldSpec.getDataType();
- valueConverter = new DataContractGenericRefConverter(contractType, ENCODER_LOOKUP);
- } else {
- Class> contractType = fieldInfo.fieldSpec.getDataType();
- DataContractEncoder encoder = typeMap.get(contractType);
- valueConverter = new DataContractValueConverter(encoder);
- }
-
- return createFieldEncoder(sliceSpec, fieldInfo.fieldSpec, fieldInfo.reader, valueConverter);
- }
-
- /**
- * 创建枚举类型的字段编码器;
- *
- * @param fieldInfo
- * @param sliceSpec
- * @return
- */
- private static FieldEncoder buildEnumFieldEncoder(FieldDeclaredInfo fieldInfo, BinarySliceSpec sliceSpec) {
- // 枚举类型的值转换器是由枚举值的范围检查加上一个基本类型的值转换器组成;
- Class> enumType = fieldInfo.fieldSpec.getDataType();
- EnumSpecificationInfo enumSpec = (EnumSpecificationInfo) fieldInfo.fieldSpec.getRefEnum();
- int[] values = enumSpec.getItemValues();
- Object[] constants = enumSpec.getConstants();
- PrimitiveType codeType = enumSpec.getValueType();
-
- ValueConverter baseConverter = getPrimitiveTypeConverter(codeType, enumSpec.getDataType());
-
- EnumValueConverter valueConverter = new EnumValueConverter(enumType, codeType, values, constants,
- (FixedValueConverter) baseConverter);
-
- return createFieldEncoder(sliceSpec, fieldInfo.fieldSpec, fieldInfo.reader, valueConverter);
- }
-
- /**
- * 创建基本类型字段的编码器;
- *
- * @param fieldInfo
- * @param sliceSpec
- * @return
- */
- private static FieldEncoder buildPrimitiveFieldEncoder(FieldDeclaredInfo fieldInfo, BinarySliceSpec sliceSpec) {
- ValueConverter valueConverter = getPrimitiveTypeConverter(fieldInfo.fieldSpec.getPrimitiveType(),
- fieldInfo.fieldSpec.getDataType());
- return createFieldEncoder(sliceSpec, fieldInfo.fieldSpec, fieldInfo.reader, valueConverter);
- }
-
- private static FieldEncoder createFieldEncoder(BinarySliceSpec sliceSpec, FieldSpec fieldSpec, Method reader,
- ValueConverter valueConverter) {
- if (sliceSpec.isRepeatable()) {
- if (sliceSpec.isDynamic()) {
- return new DynamicArrayFieldEncoder(sliceSpec, fieldSpec, reader,
- (DynamicValueConverter) valueConverter);
- } else {
- return new FixedArrayFieldEncoder(sliceSpec, fieldSpec, reader, (FixedValueConverter) valueConverter);
- }
- } else {
- if (sliceSpec.isDynamic()) {
- return new DynamicFieldEncoder(sliceSpec, fieldSpec, reader, (DynamicValueConverter) valueConverter);
- } else {
- return new FixedFieldEncoder(sliceSpec, fieldSpec, reader, (FixedValueConverter) valueConverter);
- }
- }
- }
-
- private static BinarySliceSpec buildSlice(FieldSpecInfo fieldSpec) {
- boolean fixed = false;
- int len = -1;
- PrimitiveType fixedValueType = null;
- if (fieldSpec.getPrimitiveType() != null && fieldSpec.getPrimitiveType() != PrimitiveType.NIL) {
- fixedValueType = fieldSpec.getPrimitiveType();
- } else if (fieldSpec.getRefEnum() != null) {
- fixedValueType = fieldSpec.getRefEnum().getValueType();
- }
-
- if (fixedValueType != null) {
- switch (fixedValueType) {
- case BOOLEAN:
- fixed = true;
- len = 1;
- break;
- case INT8:
- fixed = true;
- len = 1;
- break;
- case INT16:
- fixed = true;
- len = 2;
- break;
- case INT32:
- fixed = true;
- len = 4;
- break;
- case INT64:
- fixed = true;
- len = 8;
- break;
- default:
- break;
- }
- }
- if (fieldSpec.isRepeatable()) {
- if (fixed) {
- return BinarySliceSpec.newRepeatableFixedSlice(len, fieldSpec.getName(), fieldSpec.getDescription());
- } else {
- return BinarySliceSpec.newRepeatableDynamicSlice(fieldSpec.getName(), fieldSpec.getDescription());
- }
- } else {
- if (fixed) {
- return BinarySliceSpec.newFixedSlice(len, fieldSpec.getName(), fieldSpec.getDescription());
- } else {
- return BinarySliceSpec.newDynamicSlice(fieldSpec.getName(), fieldSpec.getDescription());
- }
- }
- }
-
- private static byte[] generateFieldTypeCode(FieldSpecInfo fieldSpec) {
- byte repeatable = fieldSpec.isRepeatable() ? REPEATABLE_TYPE : SINGLE_TYPE;
- byte[] codeBytes;
- if (fieldSpec.getPrimitiveType() != null) {
- // repeatable + type indicator + code of primitive type;
- // 1 + 1 + 4;
- codeBytes = new byte[6];
- codeBytes[0] = repeatable;
- codeBytes[1] = PRIMITIVE_TYPE_FIELD;
- BytesUtils.toBytes(fieldSpec.getPrimitiveType().CODE, codeBytes, 2);
- } else if (fieldSpec.getRefEnum() != null) {
- // repeatable + type indicator + code of enum contract + version of enum
- // contract;
- // 1+ 1 + 4 + 8;
- codeBytes = new byte[14];
- codeBytes[0] = repeatable;
- codeBytes[1] = ENUM_CONTRACT_FIELD;
- EnumSpecification enumSpec = fieldSpec.getRefEnum();
- BytesUtils.toBytes(enumSpec.getCode(), codeBytes, 2);
- BytesUtils.toBytes(enumSpec.getVersion(), codeBytes, 6);
- } else if (fieldSpec.getRefContract() != null) {
- // repeatable + type indicator + code of enum contract + version of enum
- // contract;
- // 1+ 1 + 4 + 8;
- DataSpecification dataSpec = fieldSpec.getRefContract();
- codeBytes = new byte[14];
- codeBytes[0] = repeatable;
- if (fieldSpec.isGenericContract()) {
- codeBytes[1] = DYNAMIC_CONTRACT_FIELD;
- } else {
- codeBytes[1] = DATA_CONTRACT_FIELD;
- }
- BytesUtils.toBytes(dataSpec.getCode(), codeBytes, 2);
- BytesUtils.toBytes(dataSpec.getVersion(), codeBytes, 6);
- } else {
- throw new DataContractException("Unknow field type!");
- }
- return codeBytes;
- }
-
- /**
- * 计算指定两个接口类型之间的继承距离;
- *
- * 如果不具有继承关系,则返回 -1;
- *
- * @param subsTypes
- * 子类型;
- * @param superType
- * 父类型;
- * @return
- */
- private static int computeExtendsionDistance(Class> subsTypes, Class> superType) {
- if (subsTypes == superType) {
- return 0;
- }
- Class>[] superIntfs = subsTypes.getInterfaces();
- for (Class> si : superIntfs) {
- int dis = computeExtendsionDistance(si, superType);
- if (dis > -1) {
- return dis + 1;
- }
- }
- return -1;
- }
-
- private static FieldSpecInfo resolveFieldSpec(Method accessor, DataField annoField) {
- String name = annoField.name();
- name = name == null ? null : name.trim();
- if (name == null || name.length() > 0) {
- name = accessor.getName();
- }
- String desc = annoField.decription();
- desc = desc == null ? null : desc.trim();
-
- int order = annoField.order();
-
- boolean repeatable = annoField.list();
- Class> dataType = accessor.getReturnType();
-
- if (repeatable) {
- if (!dataType.isArray()) {
- throw new DataContractException("The annotated repeatable type mismatch non-array type["
- + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- dataType = dataType.getComponentType();
- }
-
- int maxSize = annoField.maxSize();
- PrimitiveType primitiveType = annoField.primitiveType();
- if (primitiveType != null) {
- primitiveType = verifyPrimitiveType(primitiveType, dataType, accessor);
- }
-
- boolean refEnum = annoField.refEnum();
- EnumSpecification enumSpecification = null;
- if (refEnum) {
- EnumContract annoEnumContract = dataType.getAnnotation(EnumContract.class);
- if (annoEnumContract == null) {
- throw new DataContractException("The data type of annotated enum field is not a EnumContract! --[Field="
- + accessor.toString() + "]");
- }
- enumSpecification = resolveEnumContract(dataType, annoEnumContract);
- }
-
- boolean refContract = annoField.refContract();
- DataSpecification contractSpecification = null;
- // Class> contractTypeResolverClazz = null;
- if (refContract) {
- // DataContract annoContract = dataType.getAnnotation(DataContract.class);
- // if (annoContract == null) {
- // throw new DataContractException(
- // "The data type of annotated contract field is not a DataContract! --[Field="
- // + accessor.toString() + "]");
- // }
-
- ContractTypeVersionContext contractContext = resolveContract(dataType);
- DataContractEncoder encoder = contractContext.contractEncoder;
- contractSpecification = encoder.getSepcification();
- // contractTypeResolverClazz = annoField.contractTypeResolver();
- // if (contractTypeResolverClazz != null
- // && (!ContractTypeResolver.class.isAssignableFrom(contractTypeResolverClazz)))
- // {
- // throw new DataContractException(
- // "The contract type resolver of contract field doesn't implement
- // ContractTypeResolver interface! --[Field="
- // + accessor.toString() + "]");
- // }
- }
-
- if (primitiveType == null && enumSpecification == null && contractSpecification == null) {
- throw new DataContractException(
- "Miss data type definition of field! --[Field=" + accessor.toString() + "]");
- }
-
- FieldSpecInfo fieldSpec = null;
- if (primitiveType != null) {
- fieldSpec = new FieldSpecInfo(order, name, desc, primitiveType, repeatable, maxSize, dataType);
- } else if (enumSpecification != null) {
- fieldSpec = new FieldSpecInfo(order, name, desc, enumSpecification, repeatable, dataType);
- } else {
- fieldSpec = new FieldSpecInfo(order, name, desc, contractSpecification, repeatable, dataType,
- annoField.genericContract());
- }
- return fieldSpec;
- }
-
- private static EnumSpecification resolveEnumContract(Class> dataType, EnumContract annoEnumContract) {
- EnumSpecificationInfo enumSpec = (EnumSpecificationInfo) enumContractSpecMap.get(dataType);
- if (enumSpec != null) {
- return enumSpec;
- }
- try {
- if (!dataType.isEnum()) {
- throw new DataContractException("Field's type is not a enum type! --[" + dataType.toString() + "]");
- }
- // TODO:暂时硬编码检索 code 字段;
- Field codeField = dataType.getField("CODE");
- if (codeField == null) {
- throw new DataContractException("Enum type miss the 'CODE' field! --[" + dataType.toString() + "]");
- }
- EnumField fieldAnno = codeField.getAnnotation(EnumField.class);
- if (fieldAnno == null) {
- throw new DataContractException("Enum's 'CODE' field is not annotated with @EnumField !");
- }
- // TODO: 暂时未实现枚举契约的版本号计算;
- long version = 0;
- enumSpec = new EnumSpecificationInfo(fieldAnno.type(), annoEnumContract.code(), version,
- annoEnumContract.name(), annoEnumContract.decription(), codeField.getType());
- // get enum constants and CODE
- Object[] enumItems = dataType.getEnumConstants();
- for (Object item : enumItems) {
- int code = codeField.getInt(item);
- EnumConstant constant = new EnumConstant(code, item.toString(), item);
- enumSpec.addConstant(constant);
- // enumSpec.setVersion(); if need
- }
- enumContractSpecMap.put(dataType, enumSpec);
- return enumSpec;
- } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
- throw new DataContractException(e.getMessage(), e);
- }
- }
-
- /**
- * 解析指定的类型是否匹配;
- *
- * 要求必须是显式地声明类型,因此不会根据 Java 语言的声明类型做自动转换;
- *
- * @param primitiveType
- * @param dataType
- * @return
- */
- private static PrimitiveType verifyPrimitiveType(PrimitiveType primitiveType, Class> dataType, Method accessor) {
- switch (primitiveType) {
- case NIL:
- return null;
- case BOOLEAN:
- if (dataType != Boolean.class && dataType != boolean.class) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- case INT8:
- if (dataType != Byte.class && dataType != byte.class) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- case INT16:
- if (dataType != Character.class && dataType != char.class && dataType != short.class) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- case INT32:
- if (dataType != Integer.class && dataType != int.class) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- case INT64:
- if (dataType != Long.class && dataType != long.class) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- case TEXT:
- if (dataType != String.class) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- case BYTES:
- if (dataType != byte[].class && (!BytesSerializable.class.isAssignableFrom(dataType))) {
- throw new DataContractException("The annotated primitive type[" + primitiveType.toString()
- + "] mismatch java type[" + dataType.getName() + "]! --[Field=" + accessor.toString() + "]");
- }
- break;
- default:
- throw new DataContractException("Unsupported primitive type[" + primitiveType.toString() + "] ! --[Field="
- + accessor.toString() + "]");
- }
-
- return primitiveType;
- }
-
- private static class DeclaredFieldGroup {
-
- /**
- * 声明的合约类型;
- */
- public Class> declaredContractType;
-
- /**
- *
- */
- public DataContract declaredContractAnnotation;
-
- /**
- * 声明类型距离要解析的类型的继承距离;直接继承的父接口的距离为 1,父接口的父接口为 2,以此类推;
- */
- private int extendsionDistance;
-
- private TreeMap orderedFields = new TreeMap<>();
-
- public Collection getFields() {
- return orderedFields.values();
- }
-
- public DeclaredFieldGroup(Class> declaredContractType, DataContract declaredContractAnnotation,
- Method accessor, DataField fieldAnnotation, FieldSpecInfo fieldSpec) {
- this.declaredContractType = declaredContractType;
- this.declaredContractAnnotation = declaredContractAnnotation;
-
- addField(accessor, fieldAnnotation, fieldSpec);
- }
-
- private void addField(Method accessor, DataField fieldAnnotation, FieldSpecInfo fieldSpec) {
- // 检查字段的是否有重复序号;
- FieldDeclaredInfo fieldInfo = new FieldDeclaredInfo(accessor, fieldAnnotation, fieldSpec);
- FieldDeclaredInfo conflictedField = orderedFields.put(fieldSpec.getOrder(), fieldInfo);
- if (conflictedField != null) {
- // 有两个字段都声明了相同的序号,这容易导致无序状态;
- throw new DataContractException(String.format("Declare two fields with the same order! --[%s][%s]",
- fieldInfo.reader.toString(), conflictedField.reader.toString()));
- }
- }
-
- @SuppressWarnings("unused")
- public int getExtendsionDistance() {
- return extendsionDistance;
- }
-
- public void setExtendsionDistance(int extendsionDistance) {
- this.extendsionDistance = extendsionDistance;
- }
-
- }
-
- private static class FieldDeclaredInfo {
- public FieldSpecInfo fieldSpec;
-
- public Method reader;
-
- @SuppressWarnings("unused")
- public DataField annoField;
-
- public FieldDeclaredInfo(Method accessor, DataField annoField, FieldSpecInfo fieldSpec) {
- this.reader = accessor;
- this.annoField = annoField;
- this.fieldSpec = fieldSpec;
- }
- }
-
- private static class ContractTypeVersionContext {
-
- public Class> contractType;
-
- public DataContractEncoder contractEncoder;
-
- // TODO:未实现多版本;
- // private HashMap versionMap = new HashMap<>();
-
- public ContractTypeVersionContext(Class> contractType, DataContractEncoder encoder) {
- this.contractType = contractType;
- this.contractEncoder = encoder;
- }
-
- }
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractEncoderImpl.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractEncoderImpl.java
deleted file mode 100644
index f8989cfc..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractEncoderImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.jd.blockchain.binaryproto.DataContractEncoder;
-import com.jd.blockchain.binaryproto.DataSpecification;
-import com.jd.blockchain.utils.io.BytesInputStream;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlice;
-
-public class DataContractEncoderImpl implements DataContractEncoder {
-
- private Class>[] contractTypeArray;
-
- private Class> contractType;
-
- private DataSpecification specification;
-
- private HeaderEncoder headEncoder;
-
- private FieldEncoder[] fieldEncoders;
-
- // 字段的 Get 方法与编码器的映射表;
- private Map fieldIndexMap;
-
- /**
- * @param contractType
- * @param specification
- * @param headEncoder
- * 头部编码器;
- * @param fieldEncoders
- * 按顺序排列的字段编码器列表;
- */
- public DataContractEncoderImpl(Class> contractType, DataSpecification specification, HeaderEncoder headEncoder,
- FieldEncoder[] fieldEncoders) {
- this.contractType = contractType;
- this.contractTypeArray = new Class>[] { contractType };
- this.specification = specification;
- this.headEncoder = headEncoder;
- this.fieldEncoders = fieldEncoders;
- this.fieldIndexMap = new HashMap<>();
- int i = 0;
- for (FieldEncoder fieldEncoder : fieldEncoders) {
- fieldIndexMap.put(fieldEncoder.getReader(), i);
- i++;
- }
- }
-
- HeaderEncoder getHeaderEncoder() {
- return headEncoder;
- }
-
- Class>[] getContractTypeAsArray() {
- return contractTypeArray;
- }
-
- int getFieldCount() {
- return fieldEncoders.length;
- }
-
- FieldEncoder getFieldEncoder(int id) {
- return fieldEncoders[id];
- }
-
- /**
- * 通过字段的声明方法返回字段的序号;
- *
- * @param declaredMethod
- * 声明并标注为数据契约字段的方法;注:不能是覆盖的非标注方法,也不能是实现方法;
- * @return 字段序号; 如果不存在,则返回 -1;
- */
- int getFieldId(Method declaredMethod) {
- Integer id = fieldIndexMap.get(declaredMethod);
- return id == null ? -1 : id.intValue();
- }
-
- /**
- * 通过字段的声明方法返回字段的编码器;
- *
- * @param declaredMethod
- * 声明并标注为数据契约字段的方法;注:不能是覆盖的非标注方法,也不能是实现方法;
- * @return
- */
- FieldEncoder getFieldEncoder(Method declaredMethod) {
- Integer idx = fieldIndexMap.get(declaredMethod);
- if (idx == null) {
- return null;
- }
- return fieldEncoders[idx.intValue()];
- }
-
- @Override
- public DataSpecification getSepcification() {
- return specification;
- }
-
- @Override
- public Class> getContractType() {
- return contractType;
- }
-
- @Override
- public int encode(Object dataContract, BytesOutputBuffer buffer) {
- int size = 0;
- size += headEncoder.encode(dataContract, buffer);
- if (dataContract != null) {
- for (SliceEncoder sliceEncoder : fieldEncoders) {
- size += sliceEncoder.encode(dataContract, buffer);
- }
- }
- return size;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public T decode(BytesInputStream bytesStream) {
- BytesSlice headerSlice = bytesStream.getSlice(HeaderEncoder.HEAD_BYTES);
- if (!headEncoder.verifyHeaders(headerSlice)) {
- throw new IllegalArgumentException(String.format(
- "The code and version resolved from bytes stream is not match this data contract encoder! --[expected=%s, %s][actual=%s, %s].",
- headEncoder.getCode(), headEncoder.getVersion(), HeaderEncoder.resolveCode(headerSlice),
- HeaderEncoder.resolveVersion(headerSlice)));
- }
- if (bytesStream.getSize() == HeaderEncoder.HEAD_BYTES) {
- // 只有头部,没有值,表示空值;
- return null;
- }
- return (T) DynamicDataContract.createContract(bytesStream, this);
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractEncoderLookup.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractEncoderLookup.java
deleted file mode 100644
index 37f77e32..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractEncoderLookup.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.binaryproto.DataContractEncoder;
-
-public interface DataContractEncoderLookup {
-
- /**
- * 检索指定类型的编码器;
- *
- * @param contractType
- * @return
- */
- DataContractEncoder lookup(Class> contractType);
-
- /**
- * 检索指定 code 和 version 的编码器;
- *
- * @param contractType
- * @return
- */
- DataContractEncoder lookup(int code, long version);
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractGenericRefConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractGenericRefConverter.java
deleted file mode 100644
index 9b926463..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractGenericRefConverter.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.jd.blockchain.binaryproto.DataContract;
-import com.jd.blockchain.binaryproto.DataContractEncoder;
-import com.jd.blockchain.binaryproto.DataContractException;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlice;
-
-public class DataContractGenericRefConverter extends AbstractDynamicValueConverter {
-
- private final Object mutex = new Object();
-
- private DataContractEncoderLookup encoderLookup;
-
- private Map, DataContractEncoder> encoderCache;
-
- public DataContractGenericRefConverter(Class> baseType, DataContractEncoderLookup encoderLookup) {
- super(baseType);
- this.encoderLookup = encoderLookup;
- this.encoderCache = new ConcurrentHashMap<>();
- }
-
- private DataContractEncoder lookupEncoder(Class> dataObjectType) {
- DataContractEncoder encoder = encoderCache.get(dataObjectType);
- if (encoder != null) {
- return encoder;
- }
- synchronized (mutex) {
- encoder = encoderCache.get(dataObjectType);
- if (encoder != null) {
- return encoder;
- }
- Class>[] intfs = dataObjectType.getInterfaces();
- Class> contractType = null;
- DataContract anno = null;
- for (Class> itf : intfs) {
- anno = itf.getAnnotation(DataContract.class);
- if (anno != null) {
- if (contractType == null) {
- contractType = itf;
- } else {
- throw new DataContractException(String.format(
- "Data object implements more than one DataContract interface! --[DataObject=%s]",
- dataObjectType.toString()));
- }
- }
- }
- if (contractType == null) {
- throw new DataContractException(
- String.format("Data object doesn't implement any DataContract interface! --[DataObject=%s]",
- dataObjectType.toString()));
- }
-
- encoder = encoderLookup.lookup(contractType);
- if (encoder == null) {
- throw new DataContractException(String.format(
- "DataContract of the specified data object hasn't been registered! --[DataContract=%s][DataObject=%s]",
- contractType.toString(), dataObjectType.toString()));
- }
- encoderCache.put(dataObjectType, encoder);
- }
-
- return encoder;
- }
-
- @Override
- public int encodeDynamicValue(Object value, BytesOutputBuffer buffer) {
- DataContractEncoder contractEncoder = lookupEncoder(value.getClass());
-
- BytesOutputBuffer contractBuffer = new BytesOutputBuffer();
- int size = contractEncoder.encode(value, contractBuffer);
-
- size += writeSize(size, buffer);
-
- buffer.write(contractBuffer);
- return size;
- }
-
- @Override
- public Object decodeValue(BytesSlice dataSlice) {
- int code = HeaderEncoder.resolveCode(dataSlice);
- long version = HeaderEncoder.resolveVersion(dataSlice);
- DataContractEncoder contractEncoder = encoderLookup.lookup(code, version);
- if (contractEncoder == null) {
- throw new DataContractException(
- String.format("No data contract was registered with code[%s] and version[%s]!", code, version));
- }
- return contractEncoder.decode(dataSlice.getInputStream());
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractHeader.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractHeader.java
deleted file mode 100644
index 13eea96c..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractHeader.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-//package com.jd.blockchain.binaryproto.impl2;
-//
-//public class DataContractHeader {
-//
-// private int code;
-//
-// private int version;
-//
-// private String name;
-//
-// private String description;
-//
-// public DataContractHeader(int contractCode, int contractVersion, String name, String description) {
-// this.code = contractCode;
-// this.version = contractVersion;
-// this.name = name ;
-// this.description = description;
-// }
-//
-// public int getContractVersion() {
-// return version;
-// }
-//
-// public int getContractCode() {
-// return code;
-// }
-//
-//}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractSpecification.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractSpecification.java
deleted file mode 100644
index d13e3242..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractSpecification.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import com.jd.blockchain.binaryproto.BinarySliceSpec;
-import com.jd.blockchain.binaryproto.DataSpecification;
-import com.jd.blockchain.binaryproto.FieldSpec;
-
-public class DataContractSpecification implements DataSpecification {
-
- private int code;
- private long version;
- private String name;
- private String description;
-
- private List fieldList;
- private List sliceList;
-
- public DataContractSpecification(int code, long version, String name, String description, BinarySliceSpec[] slices, FieldSpec[] fields) {
- this.code = code;
- this.version = version;
- this.name = name;
- this.description = description;
- this.fieldList = Collections.unmodifiableList(Arrays.asList(fields));
- this.sliceList = Collections.unmodifiableList(Arrays.asList(slices));
- }
-
- @Override
- public int getCode() {
- return code;
- }
-
- @Override
- public long getVersion() {
- return version;
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- @Override
- public String getDescription() {
- return description;
- }
-
- @Override
- public List getFields() {
- return fieldList;
- }
-
- @Override
- public List getSlices() {
- return sliceList;
- }
-
- @Override
- public String toHtml() {
- throw new IllegalStateException("Not implemented!");
- }
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractValueConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractValueConverter.java
deleted file mode 100644
index 75b52095..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DataContractValueConverter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.binaryproto.DataContractEncoder;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlice;
-
-public class DataContractValueConverter extends AbstractDynamicValueConverter {
-
- private DataContractEncoder contractEncoder;
-
- public DataContractValueConverter(DataContractEncoder contractEncoder) {
- super(contractEncoder.getContractType());
- this.contractEncoder =contractEncoder;
- }
-
- @Override
- public int encodeDynamicValue(Object value, BytesOutputBuffer buffer) {
- BytesOutputBuffer contractBuffer = new BytesOutputBuffer();
- int size = contractEncoder.encode(value, contractBuffer);
-
- size += writeSize(size, buffer);
-
- buffer.write(contractBuffer);
- return size;
- }
-
- @Override
- public Object decodeValue(BytesSlice dataSlice) {
- return contractEncoder.decode(dataSlice.getInputStream());
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicArrayFieldEncoder.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicArrayFieldEncoder.java
deleted file mode 100644
index 0c76d4c3..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicArrayFieldEncoder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-
-import com.jd.blockchain.binaryproto.BinarySliceSpec;
-import com.jd.blockchain.binaryproto.FieldSpec;
-import com.jd.blockchain.utils.io.BytesInputStream;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlice;
-import com.jd.blockchain.utils.io.BytesSlices;
-import com.jd.blockchain.utils.io.DynamicBytesSliceArray;
-import com.jd.blockchain.utils.io.NumberMask;
-
-public class DynamicArrayFieldEncoder extends AbstractFieldEncoder {
-
- private DynamicValueConverter valueConverter;
-
- public DynamicArrayFieldEncoder(BinarySliceSpec sliceSpec, FieldSpec fieldSpec, Method reader,
- DynamicValueConverter valueConverter) {
- super(sliceSpec, fieldSpec, reader);
- this.valueConverter = valueConverter;
- }
-
- @Override
- public int encode(Object dataContract, BytesOutputBuffer buffer) {
- int size = 0;
- Object[] values = readArrayValue(dataContract);
- size += encodeArrayDynamic(values, buffer);
-
- return size;
- }
-
- /**
- * 对数组类型的值进行非固定长度的编码;
- *
- * @param values
- * @param buffer
- * @return
- */
- private int encodeArrayDynamic(Object[] values, BytesOutputBuffer buffer) {
- int size = 0;
-
- int count = values == null ? 0 : values.length;
- byte[] countBytes = NumberMask.NORMAL.generateMask(count);
- buffer.write(countBytes);
- size += countBytes.length;
-
- for (int i = 0; i < count; i++) {
- size += valueConverter.encodeDynamicValue(values[i], buffer);
- }
-
- return size;
- }
-
- @Override
- public BytesSlices decode(BytesInputStream bytesStream) {
- return DynamicBytesSliceArray.resolve(bytesStream);
- }
-
- @Override
- public Object decodeField(BytesSlices fieldBytes) {
- Object[] values = (Object[]) Array.newInstance(valueConverter.getValueType(), fieldBytes.getCount());
- BytesSlice itemSlice;
- for (int i = 0; i < values.length; i++) {
- itemSlice = fieldBytes.getDataSlice(i);
- if (itemSlice.getSize() == 0) {
- values[i] = valueConverter.getDefaultValue();
- } else {
- values[i] = valueConverter.decodeValue(itemSlice);
- }
- }
- return values;
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicDataContract.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicDataContract.java
deleted file mode 100644
index 58b94e25..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicDataContract.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import com.jd.blockchain.utils.io.BytesInputStream;
-import com.jd.blockchain.utils.io.BytesSlices;
-
-class DynamicDataContract implements InvocationHandler {
-
- public static Method METHOD_GET_CLASS;
-
- static {
- try {
- METHOD_GET_CLASS = Object.class.getMethod("getClass");
- } catch (NoSuchMethodException | SecurityException e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
- }
-
- private DataContractEncoderImpl contractEncoder;
-
- // 字段的数据片段列表,首个是 HeaderSlice,其次是按字段顺序排列的数据片段;
- private BytesSlices[] dataSlices;
-
- private DynamicDataContract(BytesInputStream bytesStream, DataContractEncoderImpl contractEncoder) {
- this.contractEncoder = contractEncoder;
-
- init(bytesStream);
- }
-
- private void init(BytesInputStream bytesStream) {
- // 解析出所有的数据片段;
- dataSlices = new BytesSlices[contractEncoder.getFieldCount() + 1];
-
- dataSlices[0] = contractEncoder.getHeaderEncoder().decode(bytesStream);
-
- for (int i = 1; i < dataSlices.length; i++) {
- dataSlices[i] = contractEncoder.getFieldEncoder(i - 1).decode(bytesStream);
- }
- }
-
- @SuppressWarnings("unchecked")
- public static T createContract(BytesInputStream bytesStream, DataContractEncoderImpl contractEncoder) {
- return (T) Proxy.newProxyInstance(contractEncoder.getContractType().getClassLoader(),
- contractEncoder.getContractTypeAsArray(), new DynamicDataContract(bytesStream, contractEncoder));
- }
-
- @SuppressWarnings("unchecked")
- public static T createContract(byte[] contractBytes, DataContractEncoderImpl contractEncoder) {
- return (T) Proxy.newProxyInstance(contractEncoder.getContractType().getClassLoader(),
- contractEncoder.getContractTypeAsArray(),
- new DynamicDataContract(new BytesInputStream(contractBytes, 0, contractBytes.length), contractEncoder));
- }
-
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- int fieldId = contractEncoder.getFieldId(method);
- if (fieldId > -1) {
- FieldEncoder encoder = contractEncoder.getFieldEncoder(fieldId);
- return encoder.decodeField(dataSlices[fieldId + 1]);
- }
- if (METHOD_GET_CLASS == method) {
- return contractEncoder.getContractType();
- }
- // invoke method declared in type Object;
- Object result;
- try {
- //for some special case, interface's method without annotation
- result = method.invoke(this, args);
- } catch (Exception e) {
- if (method.getReturnType().isPrimitive()) {
- result = 0;
- }
- else {
- result = null;
- }
- e.printStackTrace();
- }
- return result;
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicFieldEncoder.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicFieldEncoder.java
deleted file mode 100644
index b49a5238..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicFieldEncoder.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.lang.reflect.Method;
-
-import com.jd.blockchain.binaryproto.BinarySliceSpec;
-import com.jd.blockchain.binaryproto.FieldSpec;
-import com.jd.blockchain.utils.io.BytesInputStream;
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlices;
-import com.jd.blockchain.utils.io.SingleBytesSliceArray;
-
-public class DynamicFieldEncoder extends AbstractFieldEncoder {
-
- private DynamicValueConverter valueConverter;
-
- public DynamicFieldEncoder(BinarySliceSpec sliceSpec, FieldSpec fieldSpec, Method reader,
- DynamicValueConverter valueConverter) {
- super(sliceSpec, fieldSpec, reader);
- this.valueConverter = valueConverter;
- }
-
- @Override
- public int encode(Object dataContract, BytesOutputBuffer buffer) {
- int size = 0;
- Object value = readValue(dataContract);
- size += valueConverter.encodeDynamicValue(value, buffer);
-
- return size;
- }
-
- @Override
- public BytesSlices decode(BytesInputStream bytesStream) {
- return SingleBytesSliceArray.resolveDynamic(bytesStream);
- }
-
- @Override
- public Object decodeField(BytesSlices fieldBytes) {
- // 非数组的字段,最多只有一个数据片段;
- if (fieldBytes.getCount() == 0) {
- return valueConverter.getDefaultValue();
- }
- return valueConverter.decodeValue(fieldBytes.getDataSlice(0));
- }
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicValueConverter.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicValueConverter.java
deleted file mode 100644
index d4c225e5..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/DynamicValueConverter.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import com.jd.blockchain.utils.io.BytesOutputBuffer;
-import com.jd.blockchain.utils.io.BytesSlice;
-
-public interface DynamicValueConverter extends ValueConverter {
-
- /**
- * 写入一个动态长度的值;以一个头部的长度字节开始
- * @param value
- * @param buffer
- * @return
- */
- int encodeDynamicValue(Object value, BytesOutputBuffer buffer);
-
- Object decodeValue(BytesSlice dataSlice);
-
-}
diff --git a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/EnumSpecificationInfo.java b/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/EnumSpecificationInfo.java
deleted file mode 100644
index 3a67a022..00000000
--- a/source/binary-proto/src/main/java/com/jd/blockchain/binaryproto/impl/EnumSpecificationInfo.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.jd.blockchain.binaryproto.impl;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import com.jd.blockchain.binaryproto.PrimitiveType;
-import com.jd.blockchain.binaryproto.EnumSpecification;
-
-/**
- * Created by zhangshuang3 on 2018/6/21.
- */
-public class EnumSpecificationInfo implements EnumSpecification {
-
- private PrimitiveType valueType;
-
- private Class> dataType;
-
- private int code;
- private long version;
- private String name;
- private String description;
-
- private Set items = new LinkedHashSet<>();
- // private Map