全部产品
云市场

存证交易模型

更新时间:2019-01-07 11:56:24

SDK根据antblockchain-gl协议实现完整的内容存证交易Transaction模型,包括交易编码、交易验证、加密套件、交易签名。

TransactionBuilder

SDK中推荐使用TransactionBuilder来构建内容存证交易。

不同的交易模型获取不同的builder来构建

如下构建一笔存证交易

  1. TransactionDO tx = TransactionBuilder.getContentOnlyNotaryPayloadBuilder()
  2. .setContent(bizData)
  3. .setCategory(category)
  4. .setTimestamp(System.currentTimeMillis())
  5. .build();

支持的交易类型builder

  1. // 获取引用存证模型builder
  2. TransactionBuilder.getLinkNotaryPayloadBuilder()
  3. // 获取内容存证模型builder
  4. TransactionBuilder.getContentOnlyNotaryPayloadBuilder()
  5. // 获取hash存证模型builder
  6. TransactionBuilder.getHashOnlyNotaryPayloadBuilder()
  7. // 获取密文存证模型builder
  8. TransactionBuilder.getEncryptNotaryPayloadBuilder()
  9. // 获取隐私分享模型builder
  10. TransactionBuilder.getEncryptShareNotaryPayloadBuilder()
  11. // 获取纯密文存证模型builder
  12. TransactionBuilder.getEncryptContentOnlyNotaryPayloadBuilder()

存证交易Transaction

Transaction属性如下, 其中不同类型的type有对应的Payload子类承载具体内容,类型映射见PayloadType

  1. // 交易结构版本号
  2. int version
  3. //交易类型
  4. int type
  5. //随机数,确保交易唯一性
  6. long nonce
  7. //交易内容
  8. Payload payload

Payload分类见子类,目前仅支持存证模型,已支持的Payload如下:

  • ContentOnlyNotaryPayloadDO
  • HashOnlyNotaryPayloadDO
  • LinkNotaryPayloadDO
  • EncryptContentOnlyNotaryPayloadDO
  • EncryptShareNotaryPayloadDO
  • EncryptNotaryPayloadDO

Transaction几个关键方法:

  • 模型编码: marshal()对交易进行编码,unmarshal()对交易进行解码。
  • 验证交易: verify()根据协议对交易进行有效性验证
  • 交易哈希: getTxHash()模型不存储Hash,该方法对交易序列化后计算Hash

ContentOnlyNotaryPayloadDO

  1. 内容存证模型
  2. 如果一个源文件需要存证,可以选择将源文件写上链。该模型限制了512K大小的源文件存储,在该范围内的存证文件可以选择写入上链。对于内容过大的存证(如图像、视频等)可以选择LinkNotaryPayloadDO使用链接模型的方式上链存证。
  3. 存证结构
  4. - content: 存证内容
  5. 类型: byte[] 区块链不限制编码方式,存证内容由业务自行编码。
  6. 长度: 小于等于512K

HashOnlyNotaryPayloadDO

  1. 哈希存证模型
  2. 如果一个文件需要存证,且不希望源文件上链,或者文件过大不适合写上链,可以选择将文件的Hash值上链。
  3. 存证结构
  4. - hash: 源文件的hash值。根据链外的实际源文件进行摘要计算得到该hash值。
  5. hash算法: 区块链无法获取源文件,无法验证该hash是否有效。该模型推荐使用sha-256,限制256位的摘要值。
  6. 类型: byte[]
  7. 长度: 固定32byte

LinkNotaryPayloadDO

  1. 链接存证模型
  2. 如果一个文件需要存证,且不希望源文件上链,或者文件过大不适合写上链,可以选择将文件的Hash值上链,此外且将文件的链接(文件固定的URI)写入链。将来检索数据时,可以根据URI去取源文件。
  3. 存证结构
  4. - link: 存证内容的链接,可以写入URI,或者其他可以用于定位源文件的线索。
  5. 内容: 源文件的URI,或者其他可检索的地址
  6. 类型: byte[] (内容字符串经编码得到byte数组,区块链不校验,也不限制编码方式,由业务自行编解码)
  7. 长度: 小于等于64K
  8. - hash: 源文件的hash值。根据link在链外检索到实际源文件,再对源文件进行摘要计算得到该hash值。
  9. hash算法: 区块链无法获取link源文件,无法验证该hash是否有效。该模型推荐使用sha-256,限制256位的摘要值。
  10. 类型: byte[]
  11. 长度: 固定32byte

EncryptNotaryPayloadDO

  1. 隐私存证模型
  2. 如果一个文件需要存证,且不公开内容,可以选择将源文件通过对称加密算法加密后上链存证。
  3. 存证结构
  4. - contentHash: 存证的明文内容的Hash值。区块链无法约束存证明文的Hash就是该Hash值。
  5. hash算法: 区块链无法获取数据明文,无法验证该hash是否有效。该模型推荐使用sha-256,限制256位的摘要值。
  6. 类型: byte[]
  7. 长度: 固定32byte
  8. - encryptContent: 源文件的密文。由加密keynonce对明文加密得到该值,通过加密keynonce解密该值,得到密文值。
  9. 类型: byte[]
  10. 长度: 小于等于512K
  11. - nonce: 加密iv。通过AES进行加密时指定随机生成的iv,解密时需要使用该值。
  12. 类型: byte[]
  13. 长度: 小于等于16字节,使用AES GCM算法时,该值一般长度为12byte

EncryptShareNotaryPayloadDO

  1. 分享隐私存证模型
  2. 如果一个文件需要存证,且不公开内容,可以选择将源文件通过对称加密算法加密后上链存证。对明文进行加密的key通过另外一把私密的key进行key wrap后公开,需要读取该密文数据时,需要拥有私密的key,对wrap key进行解密后得到密文的key,最终得到密文。
  3. 业务可以通过该加密规则进行业务设计,例如使用KDF算法设计密钥tree,根据数据的安全级别、分享范围等给数据分配对应的私密key,通过该私密key对特定范围内的数据进行加密。向指定的对象分享该key即可分享这范围内的数据。
  4. 存证结构
  5. - contentHash: 存证的明文内容的Hash值。区块链无法约束存证明文的Hash就是该Hash值。
  6. hash算法: 区块链无法获取数据明文,无法验证该hash是否有效。该模型推荐使用sha-256,限制256位的摘要值。
  7. 类型: byte[]
  8. 长度: 固定32byte
  9. - encryptContent: 源文件的密文。由加密keynonce对明文加密得到该值,通过加密keynonce解密该值,得到密文值。
  10. 类型: byte[]
  11. 长度: 小于等于512K
  12. - keyName: 密钥的kdf推导路径。密钥tree父节点根据该路径可以推导出私密key
  13. 类型: byte[]
  14. 长度: 最长512byte
  15. - keyWrap: 加密keywarp key。加密key随机生成,对明文进行加密的,该key有私密key进行key warp后公开。使用时,通过私密keywarp key解密,得到加密key,通过该加密key对密文进行解密。
  16. 类型: byte[]
  17. 长度: 该模型支持antblockchain加密库,对wrap key限制40byte
  18. - nonce: 加密iv。通过AES进行加密时指定随机生成的iv,解密时需要使用该值。
  19. 类型: byte[]
  20. 长度: 小于等于16字节,使用AES GCM算法时,该值一般长度为12byte

EncryptContentOnlyNotaryPayloadDO

  1. 隐私存证模型
  2. 如果一个文件需要存证,且不公开内容,可以选择将源文件通过对称加密算法加密后上链存证。
  3. 存证结构
  4. - encryptContent: 源文件的密文。由加密keynonce对明文加密得到该值,通过加密keynonce解密该值,得到密文值。
  5. 类型: byte[]
  6. 长度: 小于等于512K
  7. - nonce: 加密iv。通过AES进行加密时指定随机生成的iv,解密时需要使用该值。
  8. 类型: byte[]
  9. 长度: 小于等于16字节,使用AES GCM算法时,该值一般长度为12byte