| @@ -21,6 +21,10 @@ public class BytesValueEntry implements BytesValue { | |||
| this.type = type; | |||
| this.value = bytes; | |||
| } | |||
| public static BytesValue fromType(BytesValueType type, byte[] value) { | |||
| return new BytesValueEntry(type, value); | |||
| } | |||
| public static BytesValue fromBytes(byte[] value) { | |||
| return new BytesValueEntry(BytesValueType.BYTES, value); | |||
| @@ -8,20 +8,39 @@ | |||
| */ | |||
| package com.jd.blockchain.sdk.client; | |||
| import java.lang.reflect.Field; | |||
| import org.apache.commons.codec.binary.Base64; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jd.blockchain.crypto.CryptoProvider; | |||
| import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.ledger.*; | |||
| import com.jd.blockchain.transaction.*; | |||
| import com.jd.blockchain.ledger.BlockchainIdentityData; | |||
| import com.jd.blockchain.ledger.BytesValue; | |||
| import com.jd.blockchain.ledger.BytesValueEntry; | |||
| import com.jd.blockchain.ledger.BytesValueType; | |||
| import com.jd.blockchain.ledger.ContractCodeDeployOperation; | |||
| import com.jd.blockchain.ledger.ContractEventSendOperation; | |||
| import com.jd.blockchain.ledger.CryptoSetting; | |||
| import com.jd.blockchain.ledger.DataAccountKVSetOperation; | |||
| import com.jd.blockchain.ledger.DataAccountRegisterOperation; | |||
| import com.jd.blockchain.ledger.LedgerInitOperation; | |||
| import com.jd.blockchain.ledger.Operation; | |||
| import com.jd.blockchain.ledger.ParticipantNode; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| import com.jd.blockchain.transaction.ContractCodeDeployOpTemplate; | |||
| import com.jd.blockchain.transaction.ContractEventSendOpTemplate; | |||
| import com.jd.blockchain.transaction.DataAccountKVSetOpTemplate; | |||
| import com.jd.blockchain.transaction.DataAccountRegisterOpTemplate; | |||
| import com.jd.blockchain.transaction.KVData; | |||
| import com.jd.blockchain.transaction.LedgerInitOpTemplate; | |||
| import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
| import com.jd.blockchain.transaction.UserRegisterOpTemplate; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| import com.jd.blockchain.utils.codec.Base58Utils; | |||
| import com.jd.blockchain.utils.codec.HexUtils; | |||
| import com.jd.blockchain.utils.io.BytesSlice; | |||
| import com.jd.blockchain.utils.io.BytesUtils; | |||
| import org.apache.commons.codec.binary.Base64; | |||
| import java.lang.reflect.Field; | |||
| /** | |||
| * | |||
| @@ -65,22 +84,22 @@ public class ClientOperationUtil { | |||
| public static Object readValueByBytesValue(BytesValue bytesValue) { | |||
| BytesValueType dataType = bytesValue.getType(); | |||
| BytesSlice saveVal = bytesValue.getValue(); | |||
| Bytes saveVal = bytesValue.getValue(); | |||
| Object showVal; | |||
| switch (dataType) { | |||
| case BYTES: | |||
| // return hex | |||
| showVal = HexUtils.encode(saveVal.getBytesCopy()); | |||
| showVal = HexUtils.encode(saveVal.toBytes()); | |||
| break; | |||
| case TEXT: | |||
| case JSON: | |||
| showVal = saveVal.getString(); | |||
| showVal = saveVal.toUTF8String(); | |||
| break; | |||
| case INT64: | |||
| showVal = saveVal.getLong(); | |||
| showVal = BytesUtils.toLong(saveVal.toBytes()); | |||
| break; | |||
| default: | |||
| showVal = HexUtils.encode(saveVal.getBytesCopy()); | |||
| showVal = HexUtils.encode(saveVal.toBytes()); | |||
| break; | |||
| } | |||
| return showVal; | |||
| @@ -107,7 +126,7 @@ public class ClientOperationUtil { | |||
| String realValBase58 = valueObj.getString("value"); | |||
| String key = currWriteSetObj.getString("key"); | |||
| BytesValueType dataType = BytesValueType.valueOf(typeStr); | |||
| BytesValue bytesValue = new BytesValueEntry(dataType, Base58Utils.decode(realValBase58)); | |||
| BytesValue bytesValue =BytesValueEntry.fromType(dataType, Base58Utils.decode(realValBase58)); | |||
| KVData kvData = new KVData(key, bytesValue, expectedVersion); | |||
| kvOperation.set(kvData); | |||
| } | |||
| @@ -132,8 +132,8 @@ public class SDK_Contract_Test { | |||
| String key2 = "jd_key2"; | |||
| String val2 = "www.jd2.com"; | |||
| // 定义交易,传输最简单的数字、字符串、提取合约中的地址; | |||
| txTemp.dataAccount(dataAccount.getAddress()).set(key1, val1, -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).set(key2, val2, -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).setText(key1, val1, -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).setText(key2, val2, -1); | |||
| // TX 准备就绪; | |||
| PreparedTransaction prepTx = txTemp.prepare(); | |||
| @@ -156,9 +156,9 @@ public class SDK_Contract_Test { | |||
| TransactionTemplate txTemp = bcsrv.newTransaction(ledgerHash); | |||
| BlockchainKeypair dataAccount = BlockchainKeyGenerator.getInstance().generate(); | |||
| txTemp.dataAccounts().register(dataAccount.getIdentity()); | |||
| txTemp.dataAccount(dataAccount.getAddress()).set("total", 200, -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).set("param1", "v", -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).set("param2", 123, -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).setInt64("total", 200, -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).setText("param1", "v", -1); | |||
| txTemp.dataAccount(dataAccount.getAddress()).setInt64("param2", 123, -1); | |||
| // TX 准备就绪; | |||
| PreparedTransaction prepTx = txTemp.prepare(); | |||
| prepTx.sign(signKeyPair); | |||
| @@ -175,7 +175,7 @@ public class SDK_Contract_Test { | |||
| BlockchainKeypair dataAccount = BlockchainKeyGenerator.getInstance().generate(); | |||
| for(int i=0; i<keys.length; i++){ | |||
| txTemp.dataAccount(dataAddress).set(keys[i], values[i], version); | |||
| txTemp.dataAccount(dataAddress).setText(keys[i], values[i], version); | |||
| } | |||
| // TX 准备就绪; | |||
| @@ -594,11 +594,11 @@ public class IntegrationTest { | |||
| // 定义交易; | |||
| TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); | |||
| txTpl.contractEvents().send(contractDeployKey.getAddress(), eventName, | |||
| ("888##abc##" + contractDataKey.getAddress() + "##" + previousBlock.getHash().toBase58() + "##" | |||
| + userKey.getAddress() + "##" + contractDeployKey.getAddress() + "##" + txContentHash.toBase58() | |||
| + "##SOME-VALUE").getBytes()); | |||
| // txTpl.contractEvents().send(contractDeployKey.getAddress(), eventName, | |||
| // ("888##abc##" + contractDataKey.getAddress() + "##" + previousBlock.getHash().toBase58() + "##" | |||
| // + userKey.getAddress() + "##" + contractDeployKey.getAddress() + "##" + txContentHash.toBase58() | |||
| // + "##SOME-VALUE").getBytes()); | |||
| // 签名; | |||
| PreparedTransaction ptx = txTpl.prepare(); | |||
| ptx.sign(adminKey); | |||
| @@ -110,7 +110,7 @@ public class IntegrationBase { | |||
| // 定义交易; | |||
| TransactionTemplate txTpl = blockchainService.newTransaction(ledgerHash); | |||
| txTpl.dataAccounts().register(dataAccount.getIdentity()); | |||
| txTpl.dataAccount(dataAccount.getAddress()).set("total", 200, -1); | |||
| txTpl.dataAccount(dataAccount.getAddress()).setInt64("total", 200, -1); | |||
| // txTpl.dataAccount(dataAccount.getAddress()).set("param1", "v", -1); | |||
| // txTpl.dataAccount(dataAccount.getAddress()).set("param2", 200, -1); | |||
| @@ -1,15 +1,50 @@ | |||
| package com.jd.blockchain.mocker; | |||
| import static java.lang.reflect.Proxy.newProxyInstance; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| import java.util.Properties; | |||
| import com.jd.blockchain.binaryproto.DataContractRegistry; | |||
| import com.jd.blockchain.consensus.ClientIdentification; | |||
| import com.jd.blockchain.consensus.ClientIdentifications; | |||
| import com.jd.blockchain.consensus.action.ActionRequest; | |||
| import com.jd.blockchain.consensus.action.ActionResponse; | |||
| import com.jd.blockchain.crypto.*; | |||
| import com.jd.blockchain.crypto.Crypto; | |||
| import com.jd.blockchain.crypto.CryptoProvider; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.crypto.PrivKey; | |||
| import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; | |||
| import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; | |||
| import com.jd.blockchain.crypto.service.sm.SMCryptoService; | |||
| import com.jd.blockchain.ledger.*; | |||
| import com.jd.blockchain.ledger.AccountHeader; | |||
| import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
| import com.jd.blockchain.ledger.BlockchainKeypair; | |||
| import com.jd.blockchain.ledger.ContractCodeDeployOperation; | |||
| import com.jd.blockchain.ledger.ContractEventSendOperation; | |||
| import com.jd.blockchain.ledger.DataAccountKVSetOperation; | |||
| import com.jd.blockchain.ledger.DataAccountRegisterOperation; | |||
| import com.jd.blockchain.ledger.EndpointRequest; | |||
| import com.jd.blockchain.ledger.KVDataEntry; | |||
| import com.jd.blockchain.ledger.KVInfoVO; | |||
| import com.jd.blockchain.ledger.LedgerBlock; | |||
| import com.jd.blockchain.ledger.LedgerInfo; | |||
| import com.jd.blockchain.ledger.LedgerMetadata; | |||
| import com.jd.blockchain.ledger.LedgerTransaction; | |||
| import com.jd.blockchain.ledger.NodeRequest; | |||
| import com.jd.blockchain.ledger.Operation; | |||
| import com.jd.blockchain.ledger.ParticipantNode; | |||
| import com.jd.blockchain.ledger.TransactionContent; | |||
| import com.jd.blockchain.ledger.TransactionContentBody; | |||
| import com.jd.blockchain.ledger.TransactionRequest; | |||
| import com.jd.blockchain.ledger.TransactionRequestBuilder; | |||
| import com.jd.blockchain.ledger.TransactionResponse; | |||
| import com.jd.blockchain.ledger.TransactionState; | |||
| import com.jd.blockchain.ledger.UserInfo; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| import com.jd.blockchain.ledger.core.CryptoConfig; | |||
| import com.jd.blockchain.ledger.core.LedgerDataSet; | |||
| import com.jd.blockchain.ledger.core.LedgerEditor; | |||
| @@ -28,15 +63,12 @@ import com.jd.blockchain.storage.service.utils.MemoryDBConnFactory; | |||
| import com.jd.blockchain.tools.initializer.DBConnectionConfig; | |||
| import com.jd.blockchain.tools.initializer.LedgerInitProperties; | |||
| import com.jd.blockchain.tools.keygen.KeyGenCommand; | |||
| import com.jd.blockchain.transaction.*; | |||
| import com.jd.blockchain.transaction.BlockchainQueryService; | |||
| import com.jd.blockchain.transaction.TxBuilder; | |||
| import com.jd.blockchain.utils.Bytes; | |||
| import com.jd.blockchain.utils.io.BytesUtils; | |||
| import com.jd.blockchain.web.serializes.ByteArrayObjectUtil; | |||
| import java.util.*; | |||
| import static java.lang.reflect.Proxy.newProxyInstance; | |||
| public class MockerNodeContext implements BlockchainQueryService { | |||
| private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), | |||
| @@ -171,25 +203,25 @@ public class MockerNodeContext implements BlockchainQueryService { | |||
| public void writeKv(String address, String key, String value, long version) { | |||
| TxBuilder txBuilder = txBuilder(); | |||
| txBuilder.dataAccount(address).set(key, value, version); | |||
| txBuilder.dataAccount(address).setText(key, value, version); | |||
| txProcess(txRequest(txBuilder)); | |||
| } | |||
| public void writeKv(String address, String key, long value, long version) { | |||
| TxBuilder txBuilder = txBuilder(); | |||
| txBuilder.dataAccount(address).set(key, value, version); | |||
| txBuilder.dataAccount(address).setInt64(key, value, version); | |||
| txProcess(txRequest(txBuilder)); | |||
| } | |||
| public void writeKv(String address, String key, byte[] value, long version) { | |||
| TxBuilder txBuilder = txBuilder(); | |||
| txBuilder.dataAccount(address).set(key, value, version); | |||
| txBuilder.dataAccount(address).setBytes(key, value, version); | |||
| txProcess(txRequest(txBuilder)); | |||
| } | |||
| public void writeKv(String address, String key, Bytes value, long version) { | |||
| TxBuilder txBuilder = txBuilder(); | |||
| txBuilder.dataAccount(address).set(key, value, version); | |||
| txBuilder.dataAccount(address).setBytes(key, value, version); | |||
| txProcess(txRequest(txBuilder)); | |||
| } | |||
| @@ -15,7 +15,7 @@ public class AccountContractImpl implements EventProcessingAwire, AccountContrac | |||
| @Override | |||
| public void create(String address, String account, long money) { | |||
| // 暂不处理该账户已经存在的问题 | |||
| eventContext.getLedger().dataAccount(address).set(account, money, -1); | |||
| eventContext.getLedger().dataAccount(address).setInt64(account, money, -1); | |||
| } | |||
| @Override | |||
| @@ -41,8 +41,8 @@ public class AccountContractImpl implements EventProcessingAwire, AccountContrac | |||
| currentFromMoney -= money; | |||
| currentToMoney += money; | |||
| // 重新设置结果 | |||
| eventContext.getLedger().dataAccount(address).set(from, currentFromMoney, currentFromVer) | |||
| .set(to, currentToMoney, currentToVer); | |||
| eventContext.getLedger().dataAccount(address).setInt64(from, currentFromMoney, currentFromVer) | |||
| .setInt64(to, currentToMoney, currentToVer); | |||
| } | |||
| @Override | |||
| @@ -16,7 +16,7 @@ public class WriteContractImpl implements EventProcessingAwire, WriteContract { | |||
| @Override | |||
| public void writeKv(String address, String key, String value) { | |||
| eventContext.getLedger().dataAccount(address).set(key, value, -1); | |||
| eventContext.getLedger().dataAccount(address).setText(key, value, -1); | |||
| } | |||
| @Override | |||
| @@ -1,13 +1,16 @@ | |||
| package com.jd.blockchain.mocker.handler; | |||
| import com.jd.blockchain.ledger.core.LedgerException; | |||
| import com.jd.blockchain.ledger.core.OperationHandle; | |||
| import com.jd.blockchain.ledger.core.impl.OperationHandleRegisteration; | |||
| import com.jd.blockchain.ledger.core.impl.handles.*; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import com.jd.blockchain.ledger.LedgerException; | |||
| import com.jd.blockchain.ledger.core.OperationHandle; | |||
| import com.jd.blockchain.ledger.core.impl.OperationHandleRegisteration; | |||
| import com.jd.blockchain.ledger.core.impl.handles.ContractCodeDeployOperationHandle; | |||
| import com.jd.blockchain.ledger.core.impl.handles.DataAccountKVSetOperationHandle; | |||
| import com.jd.blockchain.ledger.core.impl.handles.DataAccountRegisterOperationHandle; | |||
| import com.jd.blockchain.ledger.core.impl.handles.UserRegisterOperationHandle; | |||
| public class MockerOperationHandleRegister implements OperationHandleRegisteration { | |||
| private List<OperationHandle> opHandles = new ArrayList<>(); | |||
| @@ -136,7 +136,7 @@ public class MockerServiceHandler { | |||
| TransactionTemplate txTemplate = newTxTemplate(); | |||
| txTemplate.dataAccount(dataAccount).set(key, value, version); | |||
| txTemplate.dataAccount(dataAccount).setBytes(key, value, version); | |||
| TransactionResponse txResponse = txPrepareAndCommit(txTemplate); | |||