本文檔以數字農業場景,通過IoT區塊鏈Hub把IoT設備數據中轉到阿里云BaaS-Fabric區塊鏈為示例,介紹完成的IoT設備上鏈流程。
場景描述
在該場景中會涉及兩類角色:
數字農業-管理方。自身擁有區塊鏈物理資源,需要接入其他參與方到IoT區塊鏈Hub。
數字農業-使用方。自身沒有區塊鏈物理資源,擁有自己的IoT設備,把IoT設備數據接入到管理方所擁有的區塊鏈。
管理方角色
進行該最佳實踐前請保證您的賬號已購買并且擁有區塊鏈資源。
步驟一:創建業務鏈
管理方首先要在IoT區塊鏈Hub中創建一個業務鏈,完成該步驟之后,可以通過該業務鏈連接到您所擁有的物理區塊鏈。
在區塊鏈列表頁面進行新增業務鏈操作。
選擇區塊鏈類型:阿里云BaaS-Fabric鏈,區塊鏈名稱,備注等信息。
選擇區塊鏈中的聯盟,通道,組織等配置信息,點擊提交。
步驟二:成員接入
在數字農業場景中,使用方的IoT設備數據需要上鏈,管理方則把使用方成員組織到一起,并進行相應的授權,使得使用方擁有訪問業務鏈的權限。后續使用方可以把IoT設備數據上鏈到擁有訪問權限的業務鏈。
作為管理方,如果您沒有其它參與方進行IoT設備數據上鏈的需求,IoT設備數據上鏈操作由您自行完成,請跳過成員接入步驟,跳轉到使用方角色步驟進行后續操作。
添加成員。請輸入使用方的阿里云賬號UID,成員名稱以及服務調用次數等信息,對成員進行入駐。
添加完成員后,您可以在成員接入記錄中可查看所添加的成員記錄,此時需要等待成員登錄IoT區塊鏈Hub進行確認接入操作,成員進行同意接入后,管理方可以進行接下來的成員授權操作。
成員授權。為已經同意接入的使用方成員分配權限,使得使用方成員可以訪問管理方所創建的業務鏈。
使用方角色
進行最佳實踐前請保證您的IoT設備已經通過身份認證,如未進行認證,請聯系我們獲取支持。
使用方同意管理方的接入邀請,并且被管理方授權業務鏈的訪問權限之后,登錄到IoT區塊鏈Hub,可以看到管理方為您授權的業務鏈信息。接下來您可以創建產品和授權,把自身的IoT設備數據進行上鏈。
步驟一:同意邀請
您需要同意管理方的邀請后,方可進行后續步驟。
點擊成員信息列表中邀請記錄的接入處理按鈕,點擊同意。
步驟二:創建產品和授權
您需要創建一個產品,并授權該產品訪問業務鏈。完成該步驟之后該產品下的所有IoT設備均擁有訪問業務鏈的權限,IoT設備數據可以進行上鏈。
點擊產品列表頁的添加設備按鈕。
點擊添加設備彈出框中的創建產品。
在創建產品彈出框中,填寫完成產品信息后,點擊確認提交。
返回添加設備彈出框,選擇您所添加的產品,填寫備注,點擊確定。
創建完產品之后,您需要對此產品進行業務鏈訪問授權,之后該產品下的IoT設備才能上鏈到該業務鏈。
對產品進行業務鏈授權的前提是管理方已經為您授權業務鏈的訪問權限,如果沒有授權,您首先需要聯系管理方進行授權。
步驟三:創建數據處理規則
在數字農業場景,如果有某些數據信息,比如地理位置信息,在上鏈之前需要進行數據隱私處理,您可以在接下來的步驟進行數據處理規則配置,IoT區塊鏈Hub可以遵循您所創建的數據處理規則,對IoT設備數據進行隱私處理之后再進行數據上鏈。
點擊數據處理規則列表頁的添加數據處理規則按鈕。
在彈出的添加規則彈出框中填寫規則信息后,點擊確定即可創建新的數據處理規則。
步驟四:配置路由規則
為了指明IoT設備數據上鏈到哪個業務鏈,您需要進行路由規則配置,在該步驟可以指定具體的業務鏈目標地址,IoT設備數據會遵循您所配置的路由規則,把IoT設備數據路由到特定的業務鏈。在該步驟可以配置之前創建的數據處理規則,IoT設備數據會經過該隱私處理之后,再進行路由上鏈。
點擊路由規則列表頁的添加路由規則按鈕。
在彈出的添加路由規則彈出框中填寫路由規則信息后,點擊確定進行路由規則的創建。
步驟五:設備端SDK集成
接下來您需要在IoT設備端集成SDK,請參考設備端接入,下載設備端SDK,集成到您的設備(這里以Linux平臺x86架構IoT設備為例)。之后IoT設備可以進行數據采集,并通過設備端SDK對采集的數據進行處理,生成可信令牌,IoT設備數據就可以通過IoT區塊鏈Hub進行數據上鏈。
此處以數字農業場景中的溫度和位置采集為例,最終生成的數據如下:
iotDataDID: did:lto:000FFFFFDABCFDF0B4999700610B599D00000001
iotDataDIDLen: 48
userPlainData: {"溫度":"25.2"}
userPlainDataLen: 17
userPrivacyData: {"位置":"180.24, 257.27"}
userPrivacyDataLen: 27
iotAuthType: ID2
iotAuthTypeLen: 3
iotIdServiceProvider: pkpkpkpkpkk
iotIdServiceProviderLen: 11
iotId: 000FFFFFDABCFDF0B4999700
iotIdLen: 24
iotDataDigest: FBB7FAE10BDD1466F1C7534E7CFDFE7941FBD1A4FAE64FB1F07CA7F3AD97E02B
iotDataDigestLen: 64
iotDataToken: 3~2~1756E40A3FAE23E1~1628133789000~GLrSRKly/9T71lSqlzPhqX0Mb8I7uiNXmgPpt1q2cQtJcgazu61apcJrdsLqP/6D
iotDataTokenLen: 99
lto: generate token success!
步驟六:數據上鏈和查詢
準備工作:登錄IoT安全中心系統,在文檔與工具模塊,下載LTO服務端SDK。
將LTO服務端SDK導入開發工具中,按照SDK提供的Demo樣例進行后續步驟。
在數字農業場景,IoT設備數據處理完成之后,為了表明該數據的完整和可信,您可以把該數據通過IoT區塊鏈Hub進行上鏈。
API名稱:UploadIoTDataToBlockchain
請求示例:
UploadIoTDataToBlockchainRequest request = new UploadIoTDataToBlockchainRequest();
request.setIotDataDID("did:lto:000FFFFFDABCFDF0B4999700610B599D00000001");
request.setPlainData("{\"溫度\":\"25.2\"}");
request.setPrivacyData("{\"位置\":\"180.24, 257.27\"}");
request.setIotAuthType("ID2");
// IotIdServiceProvider為步驟二創建的設備中的ProduceKey
request.setIotIdServiceProvider("pkpkpkpkpkk");
request.setIotId("000FFFFFDABCFDF0B4999700");
request.setIotIdSource("2");
request.setIotDataDigest("FBB7FAE10BDD1466F1C7534E7CFDFE7941FBD1A4FAE64FB1F07CA7F3AD97E02B");
request.setIotDataToken("3~2~1756E40A3FAE23E1~1628133789000~GLrSRKly/9T71lSqlzPhqX0Mb8I7uiNXmgPpt1q2cQtJcgazu61apcJrdsLqP/6D");
響應結果:
{
"code": "00000",
"data": "",
"message": "",
"requestId": "7B4CE933-08F4-1654-AC17-F09CDFF94816",
"success": true
}
2. IoT數據上鏈成功之后,為了確保原始數據的完整性,您可以通過IoT區塊鏈Hub獲取之前上鏈的數據,并進行校驗比對。
API名稱:QueryBlockchainData
請求示例:
QueryBlockchainDataRequest request = new QueryBlockchainDataRequest();
request.setIotDataDID("did:lto:000FFFFFDABCFDF0B4999700610B599D00000001");
request.setBizChainId("7376036577407211");
響應結果:
{
"code":"00000",
"data":{
"plainData":"{\"溫度\":\"25.2\"}",
"privacyData":"tiq9SV1EkVkUhZSamwP2unmenPc7Hv6E4YH/VhlJngv/BmKj3cjL8k20mq+pENQo",
"privacyRuleId":"0387453157147937"
},
"message":"",
"requestId":"802E77DD-C5F3-1B11-93D1-9E761E48247C",
"success":true
}
3. IoT設備數據上鏈成功之后,為了獲取該次上鏈的數據證書信息,以對該次上鏈數據進行證明,您可以調用IoT區塊鏈Hub云端API查詢上鏈數據元信息進行查證。
API名稱:QueryBlockchainMetadata
請求示例:
QueryBlockchainMetadataRequest request = new QueryBlockchainMetadataRequest();
request.setIotDataDID("did:lto:000FFFFFDABCFDF0B4999700610B599D00000001");
request.setBizChainId("7376036577407211");
響應結果:
{
"code":"00000",
"data":{
"blockHash":"970e4ac4b4b458916f17d95e405021bde5c45d9c9b6c08094fc4501f79ea7e74",
"blockNumber":"4",
"iotId":"000FFFFFDABCFDF0B4999700",
"memberName":"小明",
"productKey":"pkpkpkpkpkk",
"timestamp":1629262928000,
"txHash":"11d24261fd7e7641d654f83959ae85297b6f904f84d21e183932078d874283e0"
},
"message":"",
"requestId":"6D19B975-0A6C-1ED6-9550-707453D567C9",
"success":true
}
步驟七:溯源數據查詢
IoT數據上鏈成功之后,獲取上鏈數據標識的前24位字符,調用查詢溯源數據標識接口,獲取上鏈的所有數據標識信息。
API名稱:ListDIDByDataDIDPrefix
請求示例:
ListDIDByDataDIDPrefixRequest request = new ListDIDByDataDIDPrefixRequest();
request.setChainId("7376036577407211");
request.setDataDIDPrefix("000FFFFFDABCFDF0B4999700");
響應結果:
{
"code":"00000",
"data":[{
"iotDataDID":"did:lto:000FFFFFDABCFDF0B4999700610B599D00000001"
}],
"message":"",
"requestId":"782E77DD-2CE6-1291-93D1-9E6549A8247C",
"success":true
}
步驟八:資源使用統計概覽
您可以在統計信息視圖,查看當前已使用的服務調用次數,以及各個業務鏈的授權次數使用情況。