@@ -79,7 +79,15 @@ public interface DataCodes { | |||||
public static final int DATA = 0x900; | public static final int DATA = 0x900; | ||||
//contract related; | |||||
public static final int CONTRACT = 0xA00; | public static final int CONTRACT = 0xA00; | ||||
public static final int CONTRACT_INT8 = 0xA01; | |||||
public static final int CONTRACT_INT16 = 0xA02; | |||||
public static final int CONTRACT_INT32 = 0xA03; | |||||
public static final int CONTRACT_INT64 = 0xA04; | |||||
public static final int CONTRACT_TEXT = 0xA05; | |||||
public static final int CONTRACT_BINARY = 0xA06; | |||||
public static final int CONTRACT_BIG_INT = 0xA07; | |||||
public static final int HASH = 0xB00; | public static final int HASH = 0xB00; | ||||
@@ -6,8 +6,10 @@ import com.jd.blockchain.binaryproto.DataField; | |||||
import com.jd.blockchain.consts.DataCodes; | import com.jd.blockchain.consts.DataCodes; | ||||
import com.jd.blockchain.ledger.*; | import com.jd.blockchain.ledger.*; | ||||
import com.jd.blockchain.utils.ArrayUtils; | import com.jd.blockchain.utils.ArrayUtils; | ||||
import com.jd.blockchain.utils.Bytes; | |||||
import com.jd.blockchain.utils.io.ByteArray; | import com.jd.blockchain.utils.io.ByteArray; | ||||
import com.jd.blockchain.utils.io.BytesUtils; | import com.jd.blockchain.utils.io.BytesUtils; | ||||
import org.springframework.util.ReflectionUtils; | |||||
import org.springframework.util.SerializationUtils; | import org.springframework.util.SerializationUtils; | ||||
import java.lang.annotation.Annotation; | import java.lang.annotation.Annotation; | ||||
@@ -92,7 +94,7 @@ public class ContractSerializeUtils { | |||||
byteBuffer.putInt(curResult.length); | byteBuffer.putInt(curResult.length); | ||||
} | } | ||||
for(int k=0; k<result.length; k++){ | for(int k=0; k<result.length; k++){ | ||||
byteBuffer.put(result[k],0, result[k].length); | |||||
byteBuffer.put(result[k]); | |||||
} | } | ||||
return byteBuffer.array(); | return byteBuffer.array(); | ||||
} | } | ||||
@@ -113,21 +115,50 @@ public class ContractSerializeUtils { | |||||
Object result[] = new Object[classTypes.length]; | Object result[] = new Object[classTypes.length]; | ||||
ByteBuffer byteBuffer = ByteBuffer.allocate(params.length); | ByteBuffer byteBuffer = ByteBuffer.allocate(params.length); | ||||
byteBuffer.put(params); | |||||
int paramNums = byteBuffer.getInt(0); | int paramNums = byteBuffer.getInt(0); | ||||
if(paramNums != classTypes.length){ | if(paramNums != classTypes.length){ | ||||
throw new IllegalArgumentException("deserializeMethodparm. params'length in byte[] != method's param length"); | throw new IllegalArgumentException("deserializeMethodparm. params'length in byte[] != method's param length"); | ||||
} | } | ||||
Annotation [][] annotations = method.getParameterAnnotations(); | |||||
int offsetPosition = (1 + classTypes.length)*4; //start position of real data; | |||||
for(int i=0; i<classTypes.length; i++){ | for(int i=0; i<classTypes.length; i++){ | ||||
Class<?> classType = classTypes[i]; | Class<?> classType = classTypes[i]; | ||||
int curParamLength = byteBuffer.get(i+1); | |||||
int curParamLength = byteBuffer.getInt((i+1)*4); | |||||
DataContract dataContract = classType.getDeclaredAnnotation(DataContract.class); | DataContract dataContract = classType.getDeclaredAnnotation(DataContract.class); | ||||
if(dataContract == null){ | if(dataContract == null){ | ||||
throw new IllegalArgumentException("must set annotation in each param of contract."); | |||||
boolean canPass = false; | |||||
//check by annotation; | |||||
Annotation[] annotationArr = annotations[i]; | |||||
for(Annotation annotation : annotationArr){ | |||||
if(annotation.annotationType().equals(DataContract.class)){ | |||||
dataContract = (DataContract) annotation; | |||||
canPass = true; | |||||
} | |||||
} | |||||
if(!canPass){ | |||||
throw new IllegalArgumentException("must set annotation in each param of contract."); | |||||
} | |||||
} | } | ||||
result [i] = BinaryProtocol.decodeAs( | |||||
byteBuffer.get(params,(i + 1 + classTypes.length)*4,curParamLength).array(), | |||||
ByteBuffer byteBuffer1 = ByteBuffer.allocate(curParamLength); | |||||
byteBuffer1.put(params,offsetPosition,curParamLength); | |||||
offsetPosition += curParamLength; | |||||
//if dataContract=primitive type(byte/short/int/long/String),only use its getValues(); | |||||
Object object = BinaryProtocol.decodeAs(byteBuffer1.array(), | |||||
getDataIntf().get(dataContract.code())); | getDataIntf().get(dataContract.code())); | ||||
if(isPrimitiveType(dataContract.code())){ | |||||
Class<?> classObj = getDataIntf().get(dataContract.code()); | |||||
try { | |||||
result[i] = ReflectionUtils.invokeMethod(classObj.getMethod("getValue"),object); | |||||
} catch (NoSuchMethodException e) { | |||||
throw new IllegalStateException("no getValue(). detail="+e.getMessage()); | |||||
} | |||||
}else { | |||||
result[i] = object; | |||||
} | |||||
byteBuffer1.clear(); | |||||
} | } | ||||
return result; | return result; | ||||
@@ -146,19 +177,28 @@ public class ContractSerializeUtils { | |||||
return dataContractMap; | return dataContractMap; | ||||
} | } | ||||
public static boolean isPrimitiveType(int dataContractCode){ | |||||
return (dataContractCode == DataCodes.CONTRACT_INT8 || | |||||
dataContractCode == DataCodes.CONTRACT_INT16 || | |||||
dataContractCode == DataCodes.CONTRACT_INT32 || | |||||
dataContractCode == DataCodes.CONTRACT_INT64 || | |||||
dataContractCode == DataCodes.CONTRACT_TEXT | |||||
); | |||||
} | |||||
private static Object regenObj(DataContract dataContract, Object object){ | private static Object regenObj(DataContract dataContract, Object object){ | ||||
if(getDataIntf().get(dataContract.code()).equals(CONTRACT_INT8.class)){ | if(getDataIntf().get(dataContract.code()).equals(CONTRACT_INT8.class)){ | ||||
return new CONTRACT_INT8() { | return new CONTRACT_INT8() { | ||||
@Override | @Override | ||||
public int getValue() { | |||||
return Integer.parseInt(object.toString()); | |||||
public Byte getValue() { | |||||
return Byte.parseByte(object.toString()); | |||||
} | } | ||||
}; | }; | ||||
}else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_INT16.class)){ | }else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_INT16.class)){ | ||||
return new CONTRACT_INT16() { | return new CONTRACT_INT16() { | ||||
@Override | @Override | ||||
public int getValue() { | |||||
return Integer.parseInt(object.toString()); | |||||
public short getValue() { | |||||
return Short.parseShort(object.toString()); | |||||
} | } | ||||
}; | }; | ||||
}else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_INT32.class)){ | }else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_INT32.class)){ | ||||
@@ -185,8 +225,8 @@ public class ContractSerializeUtils { | |||||
}else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_BINARY.class)){ | }else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_BINARY.class)){ | ||||
return new CONTRACT_BINARY() { | return new CONTRACT_BINARY() { | ||||
@Override | @Override | ||||
public Byte getValue() { | |||||
return (Byte) object; | |||||
public Bytes getValue() { | |||||
return (Bytes) object; | |||||
} | } | ||||
}; | }; | ||||
}else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_BIG_INT.class)){ | }else if(getDataIntf().get(dataContract.code()).equals(CONTRACT_BIG_INT.class)){ | ||||
@@ -12,7 +12,7 @@ import java.math.BigDecimal; | |||||
* @author zhaogw | * @author zhaogw | ||||
* date 2019-05-17 15:32 | * date 2019-05-17 15:32 | ||||
*/ | */ | ||||
@DataContract(code = DataCodes.CONTRACT_BINARY) | |||||
@DataContract(code = DataCodes.CONTRACT_BIG_INT) | |||||
public interface CONTRACT_BIG_INT { | public interface CONTRACT_BIG_INT { | ||||
@DataField(order=2, primitiveType= PrimitiveType.BIG_INT) | @DataField(order=2, primitiveType= PrimitiveType.BIG_INT) | ||||
@@ -4,6 +4,7 @@ import com.jd.blockchain.binaryproto.DataContract; | |||||
import com.jd.blockchain.binaryproto.DataField; | import com.jd.blockchain.binaryproto.DataField; | ||||
import com.jd.blockchain.binaryproto.PrimitiveType; | import com.jd.blockchain.binaryproto.PrimitiveType; | ||||
import com.jd.blockchain.consts.DataCodes; | import com.jd.blockchain.consts.DataCodes; | ||||
import com.jd.blockchain.utils.Bytes; | |||||
/** | /** | ||||
* contract args for Binary; | * contract args for Binary; | ||||
@@ -14,5 +15,5 @@ import com.jd.blockchain.consts.DataCodes; | |||||
public interface CONTRACT_BINARY { | public interface CONTRACT_BINARY { | ||||
@DataField(order=2, primitiveType= PrimitiveType.BYTES) | @DataField(order=2, primitiveType= PrimitiveType.BYTES) | ||||
Byte getValue(); | |||||
Bytes getValue(); | |||||
} | } |
@@ -14,5 +14,5 @@ import com.jd.blockchain.consts.DataCodes; | |||||
public interface CONTRACT_INT16 { | public interface CONTRACT_INT16 { | ||||
@DataField(order=2, primitiveType= PrimitiveType.INT16) | @DataField(order=2, primitiveType= PrimitiveType.INT16) | ||||
int getValue(); | |||||
short getValue(); | |||||
} | } |
@@ -14,5 +14,5 @@ import com.jd.blockchain.consts.DataCodes; | |||||
public interface CONTRACT_INT8 { | public interface CONTRACT_INT8 { | ||||
@DataField(order=2, primitiveType= PrimitiveType.INT8) | @DataField(order=2, primitiveType= PrimitiveType.INT8) | ||||
int getValue(); | |||||
Byte getValue(); | |||||
} | } |
@@ -1,8 +1,7 @@ | |||||
package com.jd.blockchain.transaction; | package com.jd.blockchain.transaction; | ||||
import com.jd.blockchain.contract.ContractSerializeUtils; | |||||
import com.jd.blockchain.utils.Bytes; | import com.jd.blockchain.utils.Bytes; | ||||
import com.jd.blockchain.utils.serialize.binary.ContractSerializeUtils; | |||||
import java.lang.reflect.InvocationHandler; | import java.lang.reflect.InvocationHandler; | ||||
import java.lang.reflect.Method; | import java.lang.reflect.Method; | ||||
@@ -46,7 +45,7 @@ public class ContractInvocationProxy implements InvocationHandler { | |||||
return null; | return null; | ||||
} | } | ||||
private byte[] serializeArgs(Object[] args, Method method) throws Exception { | |||||
private byte[] serializeArgs(Object[] args, Method method) { | |||||
// TODO 根据方法参数的定义序列化参数; | // TODO 根据方法参数的定义序列化参数; | ||||
return ContractSerializeUtils.serializeMethodParam(args,method); | return ContractSerializeUtils.serializeMethodParam(args,method); | ||||
} | } | ||||
@@ -56,6 +56,14 @@ public class GatewayServiceFactory implements BlockchainServiceFactory, Closeabl | |||||
DataContractRegistry.register(ClientIdentifications.class); | DataContractRegistry.register(ClientIdentifications.class); | ||||
DataContractRegistry.register(ClientIdentification.class); | DataContractRegistry.register(ClientIdentification.class); | ||||
DataContractRegistry.register(CONTRACT_INT8.class); | |||||
DataContractRegistry.register(CONTRACT_INT16.class); | |||||
DataContractRegistry.register(CONTRACT_INT32.class); | |||||
DataContractRegistry.register(CONTRACT_INT64.class); | |||||
DataContractRegistry.register(CONTRACT_TEXT.class); | |||||
DataContractRegistry.register(CONTRACT_BINARY.class); | |||||
// DataContractRegistry.register(CONTRACT_BIG_INT.class); | |||||
ByteArrayObjectUtil.init(); | ByteArrayObjectUtil.init(); | ||||
} | } | ||||
@@ -46,7 +46,7 @@ public class SDK_Contract_Test { | |||||
@Before | @Before | ||||
public void init(){ | public void init(){ | ||||
ledgerAddress = "j5rpuGWVxSuUbU3gK7MDREfui797AjfdHzvAMiSaSzydu7"; | |||||
ledgerAddress = "j5qHcS8jG6XwpE5wXv9HYMeGTb5Fs2gQao3TPQ3irqFpQL"; | |||||
ledgerHash = getLedgerHash(); | ledgerHash = getLedgerHash(); | ||||
pubKey = SDK_GateWay_KeyPair_Para.pubKey0; | pubKey = SDK_GateWay_KeyPair_Para.pubKey0; | ||||
privKey = SDK_GateWay_KeyPair_Para.privkey0; | privKey = SDK_GateWay_KeyPair_Para.privkey0; | ||||
@@ -68,7 +68,7 @@ public class SDK_Contract_Test { | |||||
public void demoContract1() { | public void demoContract1() { | ||||
// 发起交易; | // 发起交易; | ||||
TransactionTemplate txTemp = bcsrv.newTransaction(ledgerHash); | TransactionTemplate txTemp = bcsrv.newTransaction(ledgerHash); | ||||
String contractAddress = "LdeNfBcbQWqVge1sVyLq3EHBJhMMjwQY3uJJE"; | |||||
String contractAddress = "LdeNm31KhQ4e76bVjCyhPc7QoTejU6Pig9mHW"; | |||||
AssetContract2 assetContract = txTemp.contract(contractAddress, AssetContract2.class); | AssetContract2 assetContract = txTemp.contract(contractAddress, AssetContract2.class); | ||||
TransactionContentBody transactionContentBody = new TransactionContentBody() { | TransactionContentBody transactionContentBody = new TransactionContentBody() { | ||||
@Override | @Override | ||||
@@ -1,38 +1,13 @@ | |||||
package test.com.jd.blockchain.intgr; | package test.com.jd.blockchain.intgr; | ||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Properties; | |||||
import java.util.Random; | |||||
import java.util.concurrent.CountDownLatch; | |||||
import org.springframework.core.io.ClassPathResource; | |||||
import com.jd.blockchain.consensus.ConsensusProvider; | import com.jd.blockchain.consensus.ConsensusProvider; | ||||
import com.jd.blockchain.consensus.ConsensusProviders; | import com.jd.blockchain.consensus.ConsensusProviders; | ||||
import com.jd.blockchain.consensus.ConsensusSettings; | import com.jd.blockchain.consensus.ConsensusSettings; | ||||
import com.jd.blockchain.crypto.AddressEncoding; | |||||
import com.jd.blockchain.crypto.AsymmetricKeypair; | import com.jd.blockchain.crypto.AsymmetricKeypair; | ||||
import com.jd.blockchain.crypto.Crypto; | |||||
import com.jd.blockchain.crypto.HashDigest; | import com.jd.blockchain.crypto.HashDigest; | ||||
import com.jd.blockchain.crypto.PrivKey; | import com.jd.blockchain.crypto.PrivKey; | ||||
import com.jd.blockchain.crypto.PubKey; | |||||
import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | ||||
import com.jd.blockchain.ledger.AccountHeader; | |||||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||||
import com.jd.blockchain.ledger.DataAccountKVSetOperation; | |||||
import com.jd.blockchain.ledger.KVDataEntry; | |||||
import com.jd.blockchain.ledger.LedgerBlock; | |||||
import com.jd.blockchain.ledger.LedgerInfo; | |||||
import com.jd.blockchain.ledger.ParticipantNode; | |||||
import com.jd.blockchain.ledger.PreparedTransaction; | |||||
import com.jd.blockchain.ledger.TransactionResponse; | |||||
import com.jd.blockchain.ledger.TransactionTemplate; | |||||
import com.jd.blockchain.ledger.UserInfo; | |||||
import com.jd.blockchain.ledger.core.DataAccountSet; | |||||
import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.ledger.core.LedgerManage; | import com.jd.blockchain.ledger.core.LedgerManage; | ||||
import com.jd.blockchain.ledger.core.LedgerRepository; | import com.jd.blockchain.ledger.core.LedgerRepository; | ||||
import com.jd.blockchain.ledger.core.impl.LedgerManager; | import com.jd.blockchain.ledger.core.impl.LedgerManager; | ||||
@@ -48,10 +23,18 @@ import com.jd.blockchain.utils.Bytes; | |||||
import com.jd.blockchain.utils.codec.HexUtils; | import com.jd.blockchain.utils.codec.HexUtils; | ||||
import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; | import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; | ||||
import com.jd.blockchain.utils.net.NetworkAddress; | import com.jd.blockchain.utils.net.NetworkAddress; | ||||
import org.springframework.core.io.ClassPathResource; | |||||
import test.com.jd.blockchain.intgr.IntegratedContext.Node; | import test.com.jd.blockchain.intgr.IntegratedContext.Node; | ||||
import test.com.jd.blockchain.intgr.perf.LedgerInitializeWebTest; | import test.com.jd.blockchain.intgr.perf.LedgerInitializeWebTest; | ||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Properties; | |||||
import java.util.Random; | |||||
import java.util.concurrent.CountDownLatch; | |||||
public class IntegrationTest { | public class IntegrationTest { | ||||
// 合约测试使用的初始化数据; | // 合约测试使用的初始化数据; | ||||
BlockchainKeypair contractDataKey = BlockchainKeyGenerator.getInstance().generate(); | BlockchainKeypair contractDataKey = BlockchainKeyGenerator.getInstance().generate(); | ||||
@@ -1,34 +1,12 @@ | |||||
package test.com.jd.blockchain.intgr; | package test.com.jd.blockchain.intgr; | ||||
import static org.junit.Assert.assertEquals; | |||||
import static org.junit.Assert.assertNotNull; | |||||
import static org.junit.Assert.assertTrue; | |||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Properties; | |||||
import java.util.concurrent.CountDownLatch; | |||||
import org.junit.Test; | |||||
import org.junit.runner.RunWith; | |||||
import org.springframework.core.io.ClassPathResource; | |||||
import com.jd.blockchain.consensus.ConsensusProvider; | import com.jd.blockchain.consensus.ConsensusProvider; | ||||
import com.jd.blockchain.consensus.ConsensusProviders; | |||||
import com.jd.blockchain.consensus.ConsensusSettings; | import com.jd.blockchain.consensus.ConsensusSettings; | ||||
import com.jd.blockchain.crypto.AsymmetricKeypair; | import com.jd.blockchain.crypto.AsymmetricKeypair; | ||||
import com.jd.blockchain.crypto.HashDigest; | import com.jd.blockchain.crypto.HashDigest; | ||||
import com.jd.blockchain.crypto.PrivKey; | import com.jd.blockchain.crypto.PrivKey; | ||||
import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | ||||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||||
import com.jd.blockchain.ledger.LedgerBlock; | |||||
import com.jd.blockchain.ledger.LedgerInfo; | |||||
import com.jd.blockchain.ledger.PreparedTransaction; | |||||
import com.jd.blockchain.ledger.TransactionResponse; | |||||
import com.jd.blockchain.ledger.TransactionTemplate; | |||||
import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.ledger.core.LedgerRepository; | import com.jd.blockchain.ledger.core.LedgerRepository; | ||||
import com.jd.blockchain.sdk.BlockchainService; | import com.jd.blockchain.sdk.BlockchainService; | ||||
import com.jd.blockchain.sdk.client.GatewayServiceFactory; | import com.jd.blockchain.sdk.client.GatewayServiceFactory; | ||||
@@ -39,18 +17,29 @@ import com.jd.blockchain.tools.initializer.Prompter; | |||||
import com.jd.blockchain.tools.keygen.KeyGenCommand; | import com.jd.blockchain.tools.keygen.KeyGenCommand; | ||||
import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; | import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; | ||||
import com.jd.blockchain.utils.net.NetworkAddress; | import com.jd.blockchain.utils.net.NetworkAddress; | ||||
import org.junit.Test; | |||||
import org.springframework.core.io.ClassPathResource; | |||||
import test.com.jd.blockchain.intgr.IntegratedContext.Node; | import test.com.jd.blockchain.intgr.IntegratedContext.Node; | ||||
import test.com.jd.blockchain.intgr.contract.AssetContract; | |||||
import test.com.jd.blockchain.intgr.initializer.LedgerInitializeWeb4SingleStepsTest; | import test.com.jd.blockchain.intgr.initializer.LedgerInitializeWeb4SingleStepsTest; | ||||
import test.com.jd.blockchain.intgr.initializer.LedgerInitializeWeb4SingleStepsTest.NodeWebContext; | import test.com.jd.blockchain.intgr.initializer.LedgerInitializeWeb4SingleStepsTest.NodeWebContext; | ||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Properties; | |||||
import java.util.concurrent.CountDownLatch; | |||||
import static org.junit.Assert.*; | |||||
/** | /** | ||||
* 测试合约,提交后不立即进行验证,因为此时可能还没有完成正式结块; | * 测试合约,提交后不立即进行验证,因为此时可能还没有完成正式结块; | ||||
*/ | */ | ||||
public class IntegrationTest2 { | public class IntegrationTest2 { | ||||
// 合约测试使用的初始化数据; | // 合约测试使用的初始化数据; | ||||
BlockchainKeypair contractDeployKey = BlockchainKeyGenerator.getInstance().generate(); | BlockchainKeypair contractDeployKey = BlockchainKeyGenerator.getInstance().generate(); | ||||
private String contractZipName = "AssetContract3.contract"; | |||||
private String contractZipName = "contract.jar"; | |||||
private String eventName = "issue-asset"; | private String eventName = "issue-asset"; | ||||
@Test | @Test | ||||
@@ -315,7 +304,7 @@ public class IntegrationTest2 { | |||||
// 定义交易; | // 定义交易; | ||||
TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); | TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); | ||||
txTpl.contractEvents().send(contractDeployKey.getAddress(), eventName, ("888##999##abc").getBytes()); | |||||
txTpl.contract(contractDeployKey.getAddress(), AssetContract.class).issue(10,"abc"); | |||||
// 签名; | // 签名; | ||||
PreparedTransaction ptx = txTpl.prepare(); | PreparedTransaction ptx = txTpl.prepare(); | ||||
@@ -1,36 +1,8 @@ | |||||
package test.com.jd.blockchain.intgr; | package test.com.jd.blockchain.intgr; | ||||
import static org.junit.Assert.assertArrayEquals; | |||||
import static org.junit.Assert.assertEquals; | |||||
import static org.junit.Assert.assertNotNull; | |||||
import static org.junit.Assert.assertTrue; | |||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Random; | |||||
import org.junit.Test; | |||||
import org.springframework.core.io.ClassPathResource; | |||||
import com.jd.blockchain.crypto.AddressEncoding; | |||||
import com.jd.blockchain.crypto.AsymmetricKeypair; | |||||
import com.jd.blockchain.crypto.Crypto; | |||||
import com.jd.blockchain.crypto.HashDigest; | |||||
import com.jd.blockchain.crypto.PrivKey; | |||||
import com.jd.blockchain.crypto.PubKey; | |||||
import com.jd.blockchain.crypto.*; | |||||
import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | import com.jd.blockchain.gateway.GatewayConfigProperties.KeyPairConfig; | ||||
import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||||
import com.jd.blockchain.ledger.BlockchainKeypair; | |||||
import com.jd.blockchain.ledger.DataAccountKVSetOperation; | |||||
import com.jd.blockchain.ledger.KVDataEntry; | |||||
import com.jd.blockchain.ledger.LedgerBlock; | |||||
import com.jd.blockchain.ledger.LedgerInfo; | |||||
import com.jd.blockchain.ledger.PreparedTransaction; | |||||
import com.jd.blockchain.ledger.TransactionResponse; | |||||
import com.jd.blockchain.ledger.TransactionState; | |||||
import com.jd.blockchain.ledger.TransactionTemplate; | |||||
import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.ledger.core.DataAccount; | import com.jd.blockchain.ledger.core.DataAccount; | ||||
import com.jd.blockchain.ledger.core.DataAccountSet; | import com.jd.blockchain.ledger.core.DataAccountSet; | ||||
import com.jd.blockchain.ledger.core.LedgerManage; | import com.jd.blockchain.ledger.core.LedgerManage; | ||||
@@ -47,10 +19,19 @@ import com.jd.blockchain.utils.Bytes; | |||||
import com.jd.blockchain.utils.codec.HexUtils; | import com.jd.blockchain.utils.codec.HexUtils; | ||||
import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; | import com.jd.blockchain.utils.concurrent.ThreadInvoker.AsyncCallback; | ||||
import com.jd.blockchain.utils.net.NetworkAddress; | import com.jd.blockchain.utils.net.NetworkAddress; | ||||
import org.junit.Test; | |||||
import org.springframework.core.io.ClassPathResource; | |||||
import test.com.jd.blockchain.intgr.contract.AssetContract; | import test.com.jd.blockchain.intgr.contract.AssetContract; | ||||
import test.com.jd.blockchain.intgr.initializer.LedgerInitializeWeb4SingleStepsTest; | import test.com.jd.blockchain.intgr.initializer.LedgerInitializeWeb4SingleStepsTest; | ||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Random; | |||||
import static org.junit.Assert.*; | |||||
public class IntegrationTestAll4Redis { | public class IntegrationTestAll4Redis { | ||||
public static final String PASSWORD = "abc"; | public static final String PASSWORD = "abc"; | ||||