You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

data_account.md 2.3 kB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. ## 数据账户
  2. `JD Chain`存放`KV`数据的数据结构。
  3. ### 1. 基本概念
  4. 可类比传统数据库的表的概念,上层应用需要保存的应用数据最终都应表现为`KV`类型数据写入到数据账户中。
  5. 写入`KV`数据之前,需要创建或使用已存在数据账户。
  6. 一个账本可以创建无限多个数据账户,一个数据账户中可以写入无限多个`KV`数据。
  7. `KV`数据有`Version`(数据版本)的概念,以`KEY`作为唯一标识,`VALUE`的更新写入需要提供当前该`KEY`的最高版本,`KEY`不存在时为`-1`。
  8. ### 2. SDK
  9. 以下只描述主要步骤,完整示例代码可参照[JD Chain Samples](samples.md)数据账户部分。
  10. #### 2.1 注册数据账户
  11. 创建数据账户:
  12. ```java
  13. BlockchainKeypair dataAccount = BlockchainKeyGenerator.getInstance().generate();
  14. System.out.println("数据账户地址:" + dataAccount.getAddress());
  15. // 注册数据账户
  16. txTemp.dataAccounts().register(dataAccount.getIdentity());
  17. ```
  18. 从已存在数据账户公钥恢复:
  19. ```java
  20. PubKey pubKey = KeyGenUtils.decodePubKey("7VeRLdGtSz1Y91gjLTqEdnkotzUfaAqdap3xw6fQ1yKHkvVq");
  21. BlockchainIdentity dataAccountIdentity = new BlockchainIdentityData(pubKey);
  22. System.out.println("数据账户地址:" + dataAccountIdentity.getAddress());
  23. // 注册数据账户
  24. txTemp.dataAccounts().register(dataAccountIdentity);
  25. ```
  26. #### 2.2 写入数据
  27. ```java
  28. TransactionTemplate txTemp = blockchainService.newTransaction(ledger);
  29. txTemp.dataAccount("LdeNr7H1CUbqe3kWjwPwiqHcmd86zEQz2VRye")
  30. .setText("key1", "value1", -1)
  31. .setText("key1", "value1", 0)
  32. .setInt64("key2", 1, -1)
  33. .setJSON("key3", "{}", -1)
  34. .setBytes("key4", Bytes.fromInt(2), -1);
  35. ```
  36. 支持写入数据类型:
  37. - `setText`,字符类型
  38. - `setInt64`,长整型
  39. - `setJSON`,`JSON`串
  40. - `setBytes`,字节数组
  41. - `setTimestamp`,时间戳,长整型
  42. - `setXML`,`XML`文本
  43. - `setImage`,图片字节数据
  44. > 本质上仅支持`String/Long/[]byte`这三种数据类型,`JSON/XML/Image/Timestamp`等起标识作用,用于扩展差异化数据展示等场景需求
  45. `setText("key1", "value1", -1)`中第三个参数即为数据版本,需要传入`JD Chain`网络中当前`key1`的最高数据版本,首次写入时传入`-1`。