JD Chain存放KV数据的数据结构。
可类比传统数据库的表的概念,上层应用需要保存的应用数据最终都应表现为KV类型数据写入到数据账户中。
写入KV数据之前,需要创建或使用已存在数据账户。
一个账本可以创建无限多个数据账户,一个数据账户中可以写入无限多个KV数据。
KV数据有Version(数据版本)的概念,以KEY作为唯一标识,VALUE的更新写入需要提供当前该KEY的最高版本,KEY不存在时为-1。
以下只描述主要步骤,完整示例代码可参照JD Chain Samples数据账户部分。
创建数据账户:
BlockchainKeypair dataAccount = BlockchainKeyGenerator.getInstance().generate();
System.out.println("数据账户地址:" + dataAccount.getAddress());
// 注册数据账户
txTemp.dataAccounts().register(dataAccount.getIdentity());
从已存在数据账户公钥恢复:
PubKey pubKey = KeyGenUtils.decodePubKey("7VeRLdGtSz1Y91gjLTqEdnkotzUfaAqdap3xw6fQ1yKHkvVq");
BlockchainIdentity dataAccountIdentity = new BlockchainIdentityData(pubKey);
System.out.println("数据账户地址:" + dataAccountIdentity.getAddress());
// 注册数据账户
txTemp.dataAccounts().register(dataAccountIdentity);
TransactionTemplate txTemp = blockchainService.newTransaction(ledger);
txTemp.dataAccount("LdeNr7H1CUbqe3kWjwPwiqHcmd86zEQz2VRye")
.setText("key1", "value1", -1)
.setText("key1", "value1", 0)
.setInt64("key2", 1, -1)
.setJSON("key3", "{}", -1)
.setBytes("key4", Bytes.fromInt(2), -1);
支持写入数据类型:
setText,字符类型setInt64,长整型setJSON,JSON串setBytes,字节数组setTimestamp,时间戳,长整型setXML,XML文本setImage,图片字节数据本质上仅支持
String/Long/[]byte这三种数据类型,JSON/XML/Image/Timestamp等起标识作用,用于扩展差异化数据展示等场景需求
setText("key1", "value1", -1)中第三个参数即为数据版本,需要传入JD Chain网络中当前key1的最高数据版本,首次写入时传入-1。