全部產品
Search
文件中心

:存證交易模型

更新時間:Jul 06, 2024

SDK根據antblockchain-gl協議實現完整的內容存證交易Transaction模型,包括交易編碼、交易驗證、加密套件、交易簽名。

TransactionBuilder

SDK中推薦使用TransactionBuilder來構建內容存證交易。

不同的交易模型擷取不同的builder來構建

如下構建一筆存證交易

TransactionDO tx = TransactionBuilder.getContentOnlyNotaryPayloadBuilder()
  .setContent(bizData)
  .setCategory(category)
  .setTimestamp(System.currentTimeMillis())
  .build();

支援的交易類型builder

// 擷取引用存證模型builder
TransactionBuilder.getLinkNotaryPayloadBuilder()
// 擷取內容存證模型builder
TransactionBuilder.getContentOnlyNotaryPayloadBuilder()
// 擷取hash存證模型builder
TransactionBuilder.getHashOnlyNotaryPayloadBuilder()
// 擷取密文存證模型builder
TransactionBuilder.getEncryptNotaryPayloadBuilder()
// 擷取隱私分享模型builder
TransactionBuilder.getEncryptShareNotaryPayloadBuilder()
// 擷取純密文存證模型builder
TransactionBuilder.getEncryptContentOnlyNotaryPayloadBuilder()

存證交易Transaction

Transaction屬性如下, 其中不同類型的type有對應的Payload子類承載具體內容,類型映射見PayloadType。

// 交易結構版本號碼
int version

//交易類型
int type

//隨機數,確保交易唯一性
long nonce

//交易內容
Payload payload

Payload分類見子類,目前僅支援存證模型,已支援的Payload如下:

  • ContentOnlyNotaryPayloadDO

  • HashOnlyNotaryPayloadDO

  • LinkNotaryPayloadDO

  • EncryptContentOnlyNotaryPayloadDO

  • EncryptShareNotaryPayloadDO

  • EncryptNotaryPayloadDO

Transaction幾個關鍵方法:

  • 模型編碼:marshal()對交易進行編碼,unmarshal()對交易進行解碼。

  • 驗證交易:verify()根據協議對交易進行有效性驗證。

  • 交易雜湊:getTxHash()模型不儲存Hash,該方法對交易序列化後計算Hash。

ContentOnlyNotaryPayloadDO

內容存證模型
​
   如果一個源檔案需要存證,可以選擇將源檔案寫上鏈。該模型限制了512K大小的源檔案儲存體,在該範圍內的存證檔案可以選擇寫入上鏈。對於內容過大的存證(如映像、視頻等)可以選擇LinkNotaryPayloadDO使用連結模型的方式上鏈存證。
​
存證結構
    - content:存證內容
        類型:byte[] 區塊鏈不限制編碼方式,存證內容請根據業務需求進行編碼。
        長度:小於等於512K

HashOnlyNotaryPayloadDO

雜湊存證模型
​
   如果一個檔案需要存證,且不希望源檔案上鏈,或者檔案過大不適合寫上鏈,可以選擇將檔案的Hash值上鏈。
​
存證結構
    - hash:源檔案的hash值。根據鏈外的實際源檔案進行摘要計算得到該hash值。
        hash演算法:區塊鏈無法擷取源檔案,無法驗證該hash是否有效。該模型推薦使用sha-256,限制256位的摘要值。
        類型:byte[]
        長度:固定32byte

LinkNotaryPayloadDO

連結存證模型
​
   如果一個檔案需要存證,且不希望源檔案上鏈,或者檔案過大不適合寫上鏈,可以選擇將檔案的Hash值上鏈,此外且將檔案的連結(檔案固定的URI)寫入鏈。將來檢索資料時,可以根據URI去取源檔案。
​
存證結構
    - link:存證內容的連結,可以寫入URI,或者其他可以用於定位源檔案的線索。
        內容:源檔案的URI,或者其他可檢索的地址
        類型:byte[]  (內容字串經編碼得到byte數組,區塊鏈不校正,也不限制編碼方式,請根據業務需求進行編解碼)
        長度:小於等於64K
​
    - hash:源檔案的hash值。根據link在鏈外檢索到實際源檔案,再對源檔案進行摘要計算得到該hash值。
        hash演算法:區塊鏈無法擷取link源檔案,無法驗證該hash是否有效。該模型推薦使用sha-256,限制256位的摘要值。
        類型:byte[]
        長度:固定32byte

EncryptNotaryPayloadDO

隱私存證模型
​
   如果一個檔案需要存證,且不公開內容,可以選擇將源檔案通過對稱式加密演算法加密後上鏈存證。
​
存證結構
    - contentHash:存證的明文內容的Hash值。區塊鏈無法約束存證明文的Hash就是該Hash值。
        hash演算法:區塊鏈無法擷取資料明文,無法驗證該hash是否有效。該模型推薦使用sha-256,限制256位的摘要值。
        類型:byte[]
        長度:固定32byte
​
    - encryptContent:源檔案的密文。由加密key及nonce對明文加密得到該值,通過加密key及nonce解密該值,得到密文值。
        類型:byte[]
        長度:小於等於512K
​
    - nonce:加密iv。通過AES進行加密時指定隨機產生的iv,解密時需要使用該值。
        類型:byte[]
        長度:小於等於16位元組,使用AES GCM演算法時,該值一般長度為12byte

EncryptShareNotaryPayloadDO

分享隱私存證模型
​
   如果一個檔案需要存證,且不公開內容,可以選擇將源檔案通過對稱式加密演算法加密後上鏈存證。對明文進行加密的key通過另外一把私密的key進行key wrap後公開,需要讀取該密文資料時,需要擁有私密的key,對wrap key進行解密後得到密文的key,最終得到密文。
​
   業務可以通過該加密規則進行業務設計,例如使用KDF演算法設計密鑰tree,根據資料的安全層級、分享範圍等給資料分配對應的私密key,通過該私密key對特定範圍內的資料進行加密。向指定的對象分享該key即可分享這範圍內的資料。
​
存證結構
    - contentHash:存證的明文內容的Hash值。區塊鏈無法約束存證明文的Hash就是該Hash值。
        hash演算法:區塊鏈無法擷取資料明文,無法驗證該hash是否有效。該模型推薦使用sha-256,限制256位的摘要值。
        類型:byte[]
        長度:固定32byte
​
    - encryptContent:源檔案的密文。由加密key及nonce對明文加密得到該值,通過加密key及nonce解密該值,得到密文值。
        類型:byte[]
        長度:小於等於512K
​
    - keyName:密鑰的kdf推導路徑。密鑰tree父節點根據該路徑可以推匯出私密key
        類型:byte[]
        長度:最長512byte
​
    - keyWrap:加密key的warp key。加密key隨機產生,對明文進行加密的,該key有私密key進行key warp後公開。使用時,通過私密key對warp key解密,得到加密key,通過該加密key對密文進行解密。
        類型:byte[]
        長度:該模型支援antblockchain加密庫,對wrap key限制40byte。
​
    - nonce:加密iv。通過AES進行加密時指定隨機產生的iv,解密時需要使用該值。
        類型:byte[]
        長度:小於等於16位元組,使用AES GCM演算法時,該值一般長度為12byte

EncryptContentOnlyNotaryPayloadDO

隱私存證模型
​
   如果一個檔案需要存證,且不公開內容,可以選擇將源檔案通過對稱式加密演算法加密後上鏈存證。
​
存證結構
    - encryptContent:源檔案的密文。由加密key及nonce對明文加密得到該值,通過加密key及nonce解密該值,得到密文值。
        類型:byte[]
        長度:小於等於512K
​
    - nonce:加密iv。通過AES進行加密時指定隨機產生的iv,解密時需要使用該值。
        類型:byte[]
        長度:小於等於16位元組,使用AES GCM演算法時,該值一般長度為12byte