4 大文件上链存储示例

恒为链融合IPFS实现了大文件的链上存储。存储在IPFS的文件拥有唯一的IPFS Hash标识,文件内容的改变将造成IPFS的Hash值改变。恒为链通过将IPFS Hash上链的方式来防止文件的篡改,实现大文件的上链存储。区块链节点的存储和带宽资源非常珍贵,为此,恒为链通过付费机制实现了文件的上链存储和链上文件的下载,参考示例如下:

4.1 文件上链

4.2 链上文件下载

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为下载文件的密钥,提交后即可获得待下载的链上内容。

results matching ""

    No results matching ""