本文档以数字农业场景,通过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
}
步骤八:资源使用统计概览
您可以在统计信息视图,查看当前已使用的服务调用次数,以及各个业务链的授权次数使用情况。