4 大文件上链存储示例
恒为链融合IPFS实现了大文件的链上存储。存储在IPFS的文件拥有唯一的IPFS Hash标识,文件内容的改变将造成IPFS的Hash值改变。恒为链通过将IPFS Hash上链的方式来防止文件的篡改,实现大文件的上链存储。区块链节点的存储和带宽资源非常珍贵,为此,恒为链通过付费机制实现了文件的上链存储和链上文件的下载,参考示例如下:
4.1 文件上链
(1)上传待上链文件
参考JSON-RPC API 的文件上传接口, 通过HTTP协议将待上链文件提交至文件上链节点,测试网地址:https://testnet-ipfs.hwelltech.com 。 也可通过恒为链提供的测试网文件上传页面上传待上链文件。节点将返回以下文件上链的付费信息:
{
"accountID": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"downloadFee": 10,
"files": [
{
"content_type": "application/octet-stream",
"id": "QmPGizoTY6LVv6ZoxajCwCNeQsyivMdzAUn9EJRPeJ31df",
"md5": "haf59aa2e050998a3236182d9b4c4a64",
"name": "abc.txt",
"size": "51"
}
],
"storageFee": 11
}
accountID为节点收费账号,storageFee为文件存储的费率。
(2)支付上链费用
参考JSON-RPC API 文件付费上链接口向节点收费账号支付HWT作为上链费用,支付的费用不小于((size+storage_fee-1)/storage_fee)HWT。如以下报文所示,MemoData的内容为(1)中返回的付费信息的十六进制格式。支付交易成功后,即实现了文件的上链,可通过支付交易Hash查询上链信息。
{
"method": "submit",
"params": [{
"offline": false,
"secret": "ss3ZBtHP********ryGE4Kuf",
"tx_json": {
"Account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"Amount": 100,
"Destination": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"TransactionType": "Payment",
"Memos": [{
"Memo": {
"MemoData": "7b0d0a20202020226163636f756e744944223a202236397236454639446842526e383556447068714675593571554a3945666a52633831222c0d0a2020202022646f776e6c6f6164466565223a2031302c0d0a202020202266696c6573223a205b0d0a20202020202020207b0d0a20202020202020202020202022636f6e74656e745f74797065223a20226170706c69636174696f6e2f6f637465742d73747265616d222c0d0a202020202020202020202020226964223a2022516d5047697a6f5459364c5676365a6f78616a4377434e6551737969764d647a41556e39454a5250654a33316466222c0d0a202020202020202020202020226d6435223a20223661663539616132653035303939386133323336313832643962346334613634222c0d0a202020202020202020202020226e616d65223a20226162632e747874222c0d0a2020202020202020202020202273697a65223a20223531220d0a20202020202020207d0d0a202020205d2c0d0a202020202273746f72616765466565223a2031310d0a7d",
"MemoFormat" : "4A534F4E",
"MemoType": "46696c6555706c6f6164"
}
}]
}
}]
}
4.2 链上文件下载
(1)付费获取下载信息
参考JSON-RPC API 付费获取下载所需信息接口向节点收费账号支付HWT获取文件的下载信息,如以下报文所示,MemoData的内容为上传文件返回的付费信息的十六进制格式。
{
"method": "submit",
"params": [{
"offline": false,
"secret": "ss3ZBtHP********ryGE4Kuf",
"tx_json": {
"Account": "hnUy2SHT6B9DubsPmkJZUXTf5FcNDG6YEA",
"Amount": 100,
"Destination": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"TransactionType": "Payment",
"Memos": [{
"Memo" : {
"MemoData" : "7B0D0A20202020226163636F756E744944223A202236397236454639446842526E383556447068714675593571554A3945666A52633831222C0D0A2020202022646F776E6C6F6164466565223A2031302C0D0A202020202266696C6573223A205B0D0A20202020202020207B0D0A20202020202020202020202022636F6E74656E745F74797065223A20226170706C69636174696F6E2F6F637465742D73747265616D222C0D0A202020202020202020202020226964223A2022516D5047697A6F5459364C5676365A6F78616A4377434E6551737969764D647A41556E39454A5250654A33316466222C0D0A202020202020202020202020226D6435223A20223661663539616132653035303939386133323336313832643962346334613634222C0D0A202020202020202020202020226E616D65223A20226162632E747874222C0D0A2020202020202020202020202273697A65223A20223531220D0A20202020202020207D0D0A202020205D2C0D0A202020202273746F72616765466565223A2031310D0A7D",
"MemoFormat" : "4A534F4E",
"MemoType" : "46696C65446F776E6C6F6164"
}
}]
}
}]
}
响应报文如下:
{
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"password": "2BCC04AB4DE1E31E16EC1CE80A10D6529AB48A50F59D8FD7EBF418AD298AA0E4",
"status": "success",
"tx_blob": "12000022800000002400000013614000000000000064684000000000002710732103EAC169AF572EB52038D1C51F7E5B9C94CE34A7FBB714860BE001BDE25A4B03C8744730450221008744D855D265CC540BDFAA42D1722CCEFA9C3C7262127F03A5CC7C01E0FEAC3402204CCF2F02AB9D61FE9C0446DF21BD76CB16897B4F1354E33D13812642D2CD8DA781142E244E6F20104E57C0C60BD823CB312BF10928C783145F51DBA17F3AC05DDBEF373AB304EA894472A219F9EA7C0C46696C65446F776E6C6F61647DC1C77B0D0A20202020226163636F756E744944223A202236397236454639446842526E383556447068714675593571554A3945666A52633831222C0D0A2020202022646F776E6C6F6164466565223A2031302C0D0A202020202266696C6573223A205B0D0A20202020202020207B0D0A20202020202020202020202022636F6E74656E745F74797065223A20226170706C69636174696F6E2F6F637465742D73747265616D222C0D0A202020202020202020202020226964223A2022516D5047697A6F5459364C5676365A6F78616A4377434E6551737969764D647A41556E39454A5250654A33316466222C0D0A202020202020202020202020226D6435223A20223661663539616132653035303939386133323336313832643962346334613634222C0D0A202020202020202020202020226E616D65223A20226162632E747874222C0D0A2020202020202020202020202273697A65223A20223531220D0A20202020202020207D0D0A202020205D2C0D0A202020202273746F72616765466565223A2031310D0A7D7E044A534F4EE1F1",
"tx_json": {
"Account": "hnUy2SHT6B9DubsPmkJZUXTf5FcNDG6YEA",
"Amount": "100",
"Destination": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"Fee": "10000",
"Flags": 2147483648,
"Memos": [
{
"Memo": {
"MemoData": "7B0D0A20202020226163636F756E744944223A202236397236454639446842526E383556447068714675593571554A3945666A52633831222C0D0A2020202022646F776E6C6F6164466565223A2031302C0D0A202020202266696C6573223A205B0D0A20202020202020207B0D0A20202020202020202020202022636F6E74656E745F74797065223A20226170706C69636174696F6E2F6F637465742D73747265616D222C0D0A202020202020202020202020226964223A2022516D5047697A6F5459364C5676365A6F78616A4377434E6551737969764D647A41556E39454A5250654A33316466222C0D0A202020202020202020202020226D6435223A20223661663539616132653035303939386133323336313832643962346334613634222C0D0A202020202020202020202020226E616D65223A20226162632E747874222C0D0A2020202020202020202020202273697A65223A20223531220D0A20202020202020207D0D0A202020205D2C0D0A202020202273746F72616765466565223A2031310D0A7D",
"MemoFormat": "4A534F4E",
"MemoType": "46696C65446F776E6C6F6164"
}
}
],
"Sequence": 19,
"SigningPubKey": "03EAC169AF572EB52038D1C51F7E5B9C94CE34A7FBB714860BE001BDE25A4B03C8",
"TransactionType": "Payment",
"TxnSignature": "30450221008744D855D265CC540BDFAA42D1722CCEFA9C3C7262127F03A5CC7C01E0FEAC3402204CCF2F02AB9D61FE9C0446DF21BD76CB16897B4F1354E33D13812642D2CD8DA7",
"hash": "039F3D2CD5ED0B58B6E6EF3827474D243C604377302B1424D5036755639E7476"
}
}
}
password是用于下载IPFS上文件的密钥,有效时间为1小时。
(2)签名下载
参考JSON-RPC API 在线签名下载接口,向文件上链节点发起请求,如以下报文所示:
{
"method": "download",
"params":[{
"transaction": "039F3D2CD5ED0B58B6E6EF3827474D243C604377302B1424D5036755639E7476",
"password": "2BCC04AB4DE1E31E16EC1CE80A10D6529AB48A50F59D8FD7EBF418AD298AA0E4",
"secret": "ss3ZBtHP7*************ryGE4Kuf"
}]
}
transaction为获取下载信息的交易Hash,password为下载文件的密钥,提交后即可获得待下载的链上内容。