From 5d14589a72511c8fffa92f080399734c7b2c0ef4 Mon Sep 17 00:00:00 2001 From: imuge Date: Fri, 29 Jan 2021 13:57:13 +0800 Subject: [PATCH] update samples --- samples/README.md | 20 +++++----- .../samples/contract/SampleContractImpl.java | 10 ++++- .../java/com/jdchain/samples/sdk/TestNet.java | 2 +- .../contract-samples-1.4.0.RELEASE.car | Bin 3532 -> 0 bytes .../contract-samples-1.4.2.RELEASE.car | Bin 0 -> 3537 bytes .../jdchain/samples/sdk/ContractSample.java | 28 +++++++++++++- .../samples/sdk/DataAccountSample.java | 2 +- .../com/jdchain/samples/sdk/EventSample.java | 2 +- .../com/jdchain/samples/sdk/QuerySample.java | 35 ++++++++++-------- 9 files changed, 67 insertions(+), 32 deletions(-) delete mode 100644 samples/sdk-samples/src/main/resources/contract-samples-1.4.0.RELEASE.car create mode 100644 samples/sdk-samples/src/main/resources/contract-samples-1.4.2.RELEASE.car diff --git a/samples/README.md b/samples/README.md index 3684e7e4..f4c57797 100644 --- a/samples/README.md +++ b/samples/README.md @@ -2,7 +2,7 @@ 本项目为`JD Chain SDK`的使用样例,开发者可以参考此项目快速上手`JD Chain SDK`,主要包括[交易发送查询](#交易发送查询),[合约开发部署](#合约开发部署)两部分。 -本项目提供了基于内存的`JD Chain`四节点+网关的网络环境启动程序[TestNet](/sdk-samples/src/main/java/com/jdchain/samples/sdk/TestNet.java),运行`TestNet`的`main`方法启动测试网络,等待日志输出:`START TESTNET SUCCESS`,网络启动成功会写入一些测试数据,可直接运行本项目提供的所有测试用例。 +本项目提供了基于内存的`JD Chain`四节点+网关的网络环境启动程序[TestNet](sdk-samples/src/main/java/com/jdchain/samples/sdk/TestNet.java),运行`TestNet`的`main`方法启动测试网络,等待日志输出:`START TESTNET SUCCESS`,网络启动成功会写入一些测试数据,可直接运行本项目提供的所有测试用例。 > `TestNet`测试网络默认会占用`8910`/`8920`/`8930`/`8940`/`8911`/`8921`/`8931`/`8941`用于共识服务,`12000`/`12010`/`12020`/`12030`用于四节点`API`服务端口,`11000`用于网关`API`服务端口,启动前请检查相关端口可用。 @@ -10,31 +10,31 @@ ### 交易发送查询 -相关代码放在[sdk-sample](/sdk-samples/src)下。 +相关代码放在[sdk-sample](sdk-samples/src)下。 -> 若并非使用`TestNet`启动的测试网络,开发者在运行本样例前,请根据实际环境修改[config.properties](/sdk-samples/src/main/resources/config.properties)中的网关配置,用户配置等信息。 +> 若并非使用`TestNet`启动的测试网络,开发者在运行本样例前,请根据实际环境修改[config.properties](sdk-samples/src/main/resources/config.properties)中的网关配置,用户配置等信息。 #### 交易发送 -参照[UserSample](/sdk-samples/src/test/java/com/jdchain/samples/sdk/UserSample.java)实现注册用户,配置用户角色权限功能; +参照[UserSample](sdk-samples/src/test/java/com/jdchain/samples/sdk/UserSample.java)实现注册用户,配置用户角色权限功能; -参照[DataAccountSample](/sdk-samples/src/test/java/com/jdchain/samples/sdk/DataAccountSample.java)实现注册数据账户,存储`KV`数据功能; +参照[DataAccountSample](sdk-samples/src/test/java/com/jdchain/samples/sdk/DataAccountSample.java)实现注册数据账户,存储`KV`数据功能; -参照[EventSample](/sdk-samples/src/test/java/com/jdchain/samples/sdk/EventSample.java)实现注册事件账户,发布事件,事件监听功能; +参照[EventSample](sdk-samples/src/test/java/com/jdchain/samples/sdk/EventSample.java)实现注册事件账户,发布事件,事件监听功能; -参照[ContractSample](/sdk-samples/src/test/java/com/jdchain/samples/sdk/ContractSample.java)实现合约调用,非插件方式合约部署功能。 +参照[ContractSample](sdk-samples/src/test/java/com/jdchain/samples/sdk/ContractSample.java)实现合约调用,非插件方式合约部署功能。 #### 数据查询 -参照[QuerySample](/sdk-samples/src/test/java/com/jdchain/samples/sdk/QuerySample.java)实现对于区块链上数据查询功能。 +参照[QuerySample](sdk-samples/src/test/java/com/jdchain/samples/sdk/QuerySample.java)实现对于区块链上数据查询功能。 ### 合约开发部署 -[contract-samples](/contract-samples/src)提供了通过合约注册用户,注册数据账户,注册事件账户,设置`KV`,发布事件的简单合约样例。 +[contract-samples](contract-samples/src)提供了通过合约注册用户,注册数据账户,注册事件账户,设置`KV`,发布事件的简单合约样例。 -> 若并非使用`TestNet`启动的测试网络,开发者在运行本样例前,请根据实际环境修改[pom.xml](/contract-samples/pom.xml)中的网关配置,用户配置等信息。 +> 若并非使用`TestNet`启动的测试网络,开发者在运行本样例前,请根据实际环境修改[pom.xml](contract-samples/pom.xml)中的网关配置,用户配置等信息。 修改相关代码,确认配置正确,`contract-samples`项目目录下命令行执行: diff --git a/samples/contract-samples/src/main/java/com/jdchain/samples/contract/SampleContractImpl.java b/samples/contract-samples/src/main/java/com/jdchain/samples/contract/SampleContractImpl.java index 5777640c..2eb46fdf 100644 --- a/samples/contract-samples/src/main/java/com/jdchain/samples/contract/SampleContractImpl.java +++ b/samples/contract-samples/src/main/java/com/jdchain/samples/contract/SampleContractImpl.java @@ -27,7 +27,10 @@ public class SampleContractImpl implements EventProcessingAware, SampleContract @Override public void setKV(String address, String key, String value) { // 查询最新版本,初始为-1 - TypedKVEntry[] entries = eventContext.getLedger().getDataEntries(eventContext.getCurrentLedgerHash(), address, key); + // 查询已提交区块数据,不包括此操作所在未提交区块的所有数据 + // TypedKVEntry[] entries = eventContext.getLedger().getDataEntries(eventContext.getCurrentLedgerHash(), address, key); + // 可查询包括此操作所在未提交区块的所有数据 + TypedKVEntry[] entries = eventContext.getUncommittedLedger().getDataEntries(address, key); long version = -1; if (null != entries && entries.length > 0) { version = entries[0].getVersion(); @@ -76,7 +79,10 @@ public class SampleContractImpl implements EventProcessingAware, SampleContract @Override public void publishEvent(String address, String topic, String content) { // 查询最新序号,初始为-1 - Event event = eventContext.getLedger().getLatestEvent(eventContext.getCurrentLedgerHash(), address, topic); + // 查询已提交区块数据,不包括此操作所在未提交区块的所有数据 + // Event event = eventContext.getLedger().getRuntimeLedger().getLatestEvent(address, topic); + // 可查询包括此操作所在未提交区块的所有数据 + Event event = eventContext.getUncommittedLedger().getLatestEvent(address, topic); long sequence = -1; if (null != event) { sequence = event.getSequence(); diff --git a/samples/sdk-samples/src/main/java/com/jdchain/samples/sdk/TestNet.java b/samples/sdk-samples/src/main/java/com/jdchain/samples/sdk/TestNet.java index 40dc0343..086bc83f 100644 --- a/samples/sdk-samples/src/main/java/com/jdchain/samples/sdk/TestNet.java +++ b/samples/sdk-samples/src/main/java/com/jdchain/samples/sdk/TestNet.java @@ -284,7 +284,7 @@ public class TestNet { txTemp.eventAccounts().register(user.getIdentity()); txTemp.eventAccount(user.getAddress()).publish("sample-event", "sample-content", -1); // 初始化一个合约 - txTemp.contracts().deploy(user.getIdentity(), FileUtils.readBytes(new ClassPathResource("contract-samples-1.4.0.RELEASE.car").getFile())); + txTemp.contracts().deploy(user.getIdentity(), FileUtils.readBytes(new ClassPathResource("contract-samples-1.4.2.RELEASE.car").getFile())); PreparedTransaction ptx = txTemp.prepare(); ptx.sign(admin); diff --git a/samples/sdk-samples/src/main/resources/contract-samples-1.4.0.RELEASE.car b/samples/sdk-samples/src/main/resources/contract-samples-1.4.0.RELEASE.car deleted file mode 100644 index fb6ccbb5ad9a71544bafe0e2f4aa9815570c18db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3532 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 diff --git a/samples/sdk-samples/src/main/resources/contract-samples-1.4.2.RELEASE.car b/samples/sdk-samples/src/main/resources/contract-samples-1.4.2.RELEASE.car new file mode 100644 index 0000000000000000000000000000000000000000..cdbc372e71e72a01958f2eae82bdd39936fedb77 GIT binary patch literal 3537 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