From 66842c3c851497ff536d9e7a6a39ff9c2e4a63c9 Mon Sep 17 00:00:00 2001 From: shaozhuguang Date: Wed, 31 Jul 2019 10:13:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=A7=A3=E6=9E=90SDK?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=BA=94=E7=AD=94=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdk/converters/ClientResolveUtil.java | 3 +- .../sdk/samples/SDKDemo_Constant.java | 15 +++ .../sdk/samples/SDK_InsertData_Demo.java | 120 ++++++++++++++++++ 3 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java diff --git a/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/converters/ClientResolveUtil.java b/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/converters/ClientResolveUtil.java index f0f904ad..cbdf723a 100644 --- a/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/converters/ClientResolveUtil.java +++ b/source/sdk/sdk-base/src/main/java/com/jd/blockchain/sdk/converters/ClientResolveUtil.java @@ -138,7 +138,8 @@ public class ClientResolveUtil { long expectedVersion = currWriteSetObj.getLong("expectedVersion"); JSONObject valueObj = currWriteSetObj.getJSONObject("value"); String typeStr = valueObj.getString("type"); - String realValBase58 = valueObj.getString("value"); + // Base58Utils.decode(valueObj.getJSONObject("value").getString("value")) + String realValBase58 = valueObj.getJSONObject("value").getString("value"); String key = currWriteSetObj.getString("key"); DataType dataType = DataType.valueOf(typeStr); BytesValue bytesValue = BytesData.fromType(dataType, Base58Utils.decode(realValBase58)); diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java index aa5ac2f7..3ee48e47 100644 --- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java +++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDKDemo_Constant.java @@ -8,8 +8,10 @@ import java.io.File; public class SDKDemo_Constant { public static final String GW_IPADDR = "127.0.0.1"; +// public static final String GW_IPADDR = "192.168.151.41"; public static final int GW_PORT = 11000; +// public static final int GW_PORT = 18081; public static final String[] PUB_KEYS = { "3snPdw7i7PjVKiTH2VnXZu5H8QmNaSXpnk4ei533jFpuifyjS5zzH9", @@ -23,6 +25,19 @@ public class SDKDemo_Constant { "177gjtwLgmSx5v1hFb46ijh7L9kdbKUpJYqdKVf9afiEmAuLgo8Rck9yu5UuUcHknWJuWaF", "177gk1pudweTq5zgJTh8y3ENCTwtSFsKyX7YnpuKPo7rKgCkCBXVXh5z2syaTCPEMbuWRns"}; + +// public static final String[] PUB_KEYS = { +// "3snPdw7i7PXvEDgq96QyzcKhfWL4mgYspzKwvgXiuAidWb2rkRMgDY", +// "3snPdw7i7PajLB35tEau1kmixc6ZrjLXgxwKbkv5bHhP7nT5dhD9eX", +// "3snPdw7i7PZi6TStiyc6mzjprnNhgs2atSGNS8wPYzhbKaUWGFJt7x", +// "3snPdw7i7PifPuRX7fu3jBjsb3rJRfDe9GtbDfvFJaJ4V4hHXQfhwk"}; +// +// public static final String[] PRIV_KEYS = { +// "177gjsxj2ezADGthZ4tGqWeCAqRAwtNvesPjRnyKqCb1huU8LKZmJ3HGZNMPKWQJK3DP1B2", +// "177gju9p5zrNdHJVEQnEEKF4ZjDDYmAXyfG84V5RPGVc5xFfmtwnHA7j51nyNLUFffzz5UT", +// "177gjtwLgmSx5v1hFb46ijh7L9kdbKUpJYqdKVf9afiEmAuLgo8Rck9yu5UuUcHknWJuWaF", +// "177gk1pudweTq5zgJTh8y3ENCTwtSFsKyX7YnpuKPo7rKgCkCBXVXh5z2syaTCPEMbuWRns"}; + public static final String PASSWORD = "abc"; public static final byte[] readChainCodes(String contractZip) { diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java new file mode 100644 index 00000000..3a89c7a6 --- /dev/null +++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/sdk/samples/SDK_InsertData_Demo.java @@ -0,0 +1,120 @@ +package com.jd.blockchain.sdk.samples; + +import com.jd.blockchain.crypto.HashDigest; +import com.jd.blockchain.ledger.*; +import com.jd.blockchain.sdk.converters.ClientResolveUtil; + +public class SDK_InsertData_Demo extends SDK_Base_Demo { + + public static void main(String[] args) { + SDK_InsertData_Demo sdkDemo_insertData = new SDK_InsertData_Demo(); + sdkDemo_insertData.insertData(); + } + /** + * 生成一个区块链数据账户,并注册到区块链; + */ + public void insertData() { + // 在本地定义注册账号的 TX; + TransactionTemplate txTemp = blockchainService.newTransaction(ledgerHash); + //采用原始的方式来生成BlockchainKeypair; +// SignatureFunction signatureFunction = Crypto.getSignatureFunction("ED25519"); +// AsymmetricKeypair cryptoKeyPair = signatureFunction.generateKeypair(); +// BlockchainKeypair dataAccount = new BlockchainKeypair(cryptoKeyPair.getPubKey(), cryptoKeyPair.getPrivKey()); + //采用KeyGenerator来生成BlockchainKeypair; + BlockchainKeypair dataAccount = BlockchainKeyGenerator.getInstance().generate(); + + txTemp.dataAccounts().register(dataAccount.getIdentity()); + txTemp.dataAccount(dataAccount.getAddress()).setText("key1","value1",-1); + + // TX 准备就绪 + PreparedTransaction prepTx = txTemp.prepare(); + prepTx.sign(adminKey); + + // 提交交易; + prepTx.commit(); + + getData(dataAccount.getAddress().toBase58()); + } + + public void getData(String commerceAccount) { + // 查询区块信息; + // 区块高度; + long ledgerNumber = blockchainService.getLedger(ledgerHash).getLatestBlockHeight(); + // 最新区块; + LedgerBlock latestBlock = blockchainService.getBlock(ledgerHash, ledgerNumber); + // 区块中的交易的数量; + long txCount = blockchainService.getTransactionCount(ledgerHash, latestBlock.getHash()); + // 获取交易列表; + LedgerTransaction[] txList = blockchainService.getTransactions(ledgerHash, ledgerNumber, 0, 100); + // 遍历交易列表 + for (LedgerTransaction ledgerTransaction : txList) { + TransactionContent txContent = ledgerTransaction.getTransactionContent(); + Operation[] operations = txContent.getOperations(); + if (operations != null && operations.length > 0) { + for (Operation operation : operations) { + operation = ClientResolveUtil.read(operation); + // 操作类型:数据账户注册操作 + if (operation instanceof DataAccountRegisterOperation) { + DataAccountRegisterOperation daro = (DataAccountRegisterOperation) operation; + BlockchainIdentity blockchainIdentity = daro.getAccountID(); + } + // 操作类型:用户注册操作 + else if (operation instanceof UserRegisterOperation) { + UserRegisterOperation uro = (UserRegisterOperation) operation; + BlockchainIdentity blockchainIdentity = uro.getUserID(); + } + // 操作类型:账本注册操作 + else if (operation instanceof LedgerInitOperation) { + + LedgerInitOperation ledgerInitOperation = (LedgerInitOperation)operation; + LedgerInitSetting ledgerInitSetting = ledgerInitOperation.getInitSetting(); + + ParticipantNode[] participantNodes = ledgerInitSetting.getConsensusParticipants(); + } + // 操作类型:合约发布操作 + else if (operation instanceof ContractCodeDeployOperation) { + ContractCodeDeployOperation ccdo = (ContractCodeDeployOperation) operation; + BlockchainIdentity blockchainIdentity = ccdo.getContractID(); + } + // 操作类型:合约执行操作 + else if (operation instanceof ContractEventSendOperation) { + ContractEventSendOperation ceso = (ContractEventSendOperation) operation; + } + // 操作类型:KV存储操作 + else if (operation instanceof DataAccountKVSetOperation) { + DataAccountKVSetOperation.KVWriteEntry[] kvWriteEntries = + ((DataAccountKVSetOperation) operation).getWriteSet(); + if (kvWriteEntries != null && kvWriteEntries.length > 0) { + for (DataAccountKVSetOperation.KVWriteEntry kvWriteEntry : kvWriteEntries) { + BytesValue bytesValue = kvWriteEntry.getValue(); + DataType dataType = bytesValue.getType(); + Object showVal = ClientResolveUtil.readValueByBytesValue(bytesValue); + System.out.println("writeSet.key=" + kvWriteEntry.getKey()); + System.out.println("writeSet.value=" + showVal); + System.out.println("writeSet.type=" + dataType); + System.out.println("writeSet.version=" + kvWriteEntry.getExpectedVersion()); + } + } + } + } + } + } + + //根据交易的 hash 获得交易;注:客户端生成 PrepareTransaction 时得到交易hash; + HashDigest txHash = txList[0].getTransactionContent().getHash(); +// Transaction tx = blockchainService.getTransactionByContentHash(ledgerHash, txHash); +// String[] objKeys = new String[] { "x001", "x002" }; +// KVDataEntry[] kvData = blockchainService.getDataEntries(ledgerHash, commerceAccount, objKeys); + + // 获取数据账户下所有的KV列表 + KVDataEntry[] kvData = blockchainService.getDataEntries(ledgerHash, commerceAccount, 0, 100); + if (kvData != null && kvData.length > 0) { + for (KVDataEntry kvDatum : kvData) { + System.out.println("kvData.key=" + kvDatum.getKey()); + System.out.println("kvData.version=" + kvDatum.getVersion()); + System.out.println("kvData.type=" + kvDatum.getType()); + System.out.println("kvData.value=" + kvDatum.getValue()); + } + } + } +}