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 payloadPayload分類見子類,目前僅支援存證模型,已支援的Payload如下:
ContentOnlyNotaryPayloadDO
HashOnlyNotaryPayloadDO
LinkNotaryPayloadDO
EncryptContentOnlyNotaryPayloadDO
EncryptShareNotaryPayloadDO
EncryptNotaryPayloadDO
Transaction幾個關鍵方法:
模型編碼:
marshal()對交易進行編碼,unmarshal()對交易進行解碼。驗證交易:
verify()根據協議對交易進行有效性驗證。交易雜湊:
getTxHash()模型不儲存Hash,該方法對交易序列化後計算Hash。
ContentOnlyNotaryPayloadDO
內容存證模型
如果一個源檔案需要存證,可以選擇將源檔案寫上鏈。該模型限制了512K大小的源檔案儲存體,在該範圍內的存證檔案可以選擇寫入上鏈。對於內容過大的存證(如映像、視頻等)可以選擇LinkNotaryPayloadDO使用連結模型的方式上鏈存證。
存證結構
- content:存證內容
類型:byte[] 區塊鏈不限制編碼方式,存證內容請根據業務需求進行編碼。
長度:小於等於512KHashOnlyNotaryPayloadDO
雜湊存證模型
如果一個檔案需要存證,且不希望源檔案上鏈,或者檔案過大不適合寫上鏈,可以選擇將檔案的Hash值上鏈。
存證結構
- hash:源檔案的hash值。根據鏈外的實際源檔案進行摘要計算得到該hash值。
hash演算法:區塊鏈無法擷取源檔案,無法驗證該hash是否有效。該模型推薦使用sha-256,限制256位的摘要值。
類型:byte[]
長度:固定32byteLinkNotaryPayloadDO
連結存證模型
如果一個檔案需要存證,且不希望源檔案上鏈,或者檔案過大不適合寫上鏈,可以選擇將檔案的Hash值上鏈,此外且將檔案的連結(檔案固定的URI)寫入鏈。將來檢索資料時,可以根據URI去取源檔案。
存證結構
- link:存證內容的連結,可以寫入URI,或者其他可以用於定位源檔案的線索。
內容:源檔案的URI,或者其他可檢索的地址
類型:byte[] (內容字串經編碼得到byte數組,區塊鏈不校正,也不限制編碼方式,請根據業務需求進行編解碼)
長度:小於等於64K
- hash:源檔案的hash值。根據link在鏈外檢索到實際源檔案,再對源檔案進行摘要計算得到該hash值。
hash演算法:區塊鏈無法擷取link源檔案,無法驗證該hash是否有效。該模型推薦使用sha-256,限制256位的摘要值。
類型:byte[]
長度:固定32byteEncryptNotaryPayloadDO
隱私存證模型
如果一個檔案需要存證,且不公開內容,可以選擇將源檔案通過對稱式加密演算法加密後上鏈存證。
存證結構
- 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演算法時,該值一般長度為12byteEncryptShareNotaryPayloadDO
分享隱私存證模型
如果一個檔案需要存證,且不公開內容,可以選擇將源檔案通過對稱式加密演算法加密後上鏈存證。對明文進行加密的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演算法時,該值一般長度為12byteEncryptContentOnlyNotaryPayloadDO
隱私存證模型
如果一個檔案需要存證,且不公開內容,可以選擇將源檔案通過對稱式加密演算法加密後上鏈存證。
存證結構
- encryptContent:源檔案的密文。由加密key及nonce對明文加密得到該值,通過加密key及nonce解密該值,得到密文值。
類型:byte[]
長度:小於等於512K
- nonce:加密iv。通過AES進行加密時指定隨機產生的iv,解密時需要使用該值。
類型:byte[]
長度:小於等於16位元組,使用AES GCM演算法時,該值一般長度為12byte