2 JSON-RPC API
2.7 文件上链接口
恒为区块链底层融合IPFS协议,提供大文件上链的功能。区块链节点的存储和带宽资源比较珍贵。遵循“谁消耗,谁付费;谁提供服务,谁收益。”的原则,文件上链和链上文件下载都需要按照大小进行收费。费用支付给节点的搭建者,费用的收费标准由节点搭建者自己设定。
2.7.1 上传文件
通过 HTTP POST multipart/form-data 的方式将待上链文件上传到文件上链节点服务器先缓存。并返回如下文件上链的付费信息:
{
"accountID": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"downloadFee": 10,
"files": [
{
"content_type": "application/octet-stream",
"id": "QmPGizoTY6LVv6ZoxajCwCNeQsyivMdzAUn9EJRPeJ31df",
"md5": "haf59aa2e050998a3236182d9b4c4a64",
"name": "abc.txt",
"size": "51"
}
],
"storageFee": 11
}
上面的备注内容中包含了需要上链文件的信息。
字段名称 | 类型 | 描述 |
---|---|---|
accountID | string | 节点收费账账号 |
downloadFee | unsigned int | 文件的下载费率 |
storageFee | unsigned int | 文件的存储费率 |
content_type | object | 文件的传输格式 |
id | string | 文件的IPFS hash值 |
md5 | string | 文件的md5值 |
name | string | 文件名称 |
2.7.2 文件付费上链
请求:
{
"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"
}
}]
}
}]
}
字段名称 | 类型 | 描述 |
---|---|---|
method | string | RPC接口名称 |
offline | bool | 是否离线提交。默认false |
Amount | unsigned int | 金额。值不小于(size+storage_fee-1)/storage_fee |
Memos | object[] | (可选)备注集 |
Memo | object | 备注 |
MemoData | string | 备注内容,必须是Hex编码格式。本例中的内容为“注1”的json数据转换成十六进制后的值。 |
MemoFormat | string | 备注内容格式,必须是Hex编码格式。本例中的值为“JSON”的十六进制值。 |
MemoType | string | 备注类型,必须是Hex编码格式。例如“string”,Hex编码后是“737472696E67” |
注1: 下面是MemoData 十六进制解码后的json格式数据。即2.7.1中节点返回的收费信息。
{
"accountID": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"downloadFee": 10,
"files": [
{
"content_type": "application/octet-stream",
"id": "QmPGizoTY6LVv6ZoxajCwCNeQsyivMdzAUn9EJRPeJ31df",
"md5": "haf59aa2e050998a3236182d9b4c4a64",
"name": "abc.txt",
"size": "51"
}
],
"storageFee": 11
}
响应结果:
{
"result": {
"engine_result": "tesSUCCESS",
"engine_result_code": 0,
"engine_result_message": "The transaction was applied. Only final in a validated ledger.",
"status": "success",
"tx_blob": "12000022800000002400000005614000000000000064684000000000002710732103BD349FF8764509DA13C2470455546D9BC0D8CB570617315BDD02C02DFED333D1744630440220115B35406BA565DE6CA34076F0246A77745E32BF4E4AAD641CB01A97BAFB1F7E02204080C2A692710DBE891221C77787F06101287EFFA068547FF7E07829B49E64E08114F501326012BC453DDE1FABE98EAD4AEC1C8B2BDE83145F51DBA17F3AC05DDBEF373AB304EA894472A219F9EA7C0A46696C6555706C6F61647DC1C77B0D0A20202020226163636F756E744944223A202236397236454639446842526E383556447068714675593571554A3945666A52633831222C0D0A2020202022646F776E6C6F6164466565223A2031302C0D0A202020202266696C6573223A205B0D0A20202020202020207B0D0A20202020202020202020202022636F6E74656E745F74797065223A20226170706C69636174696F6E2F6F637465742D73747265616D222C0D0A202020202020202020202020226964223A2022516D5047697A6F5459364C5676365A6F78616A4377434E6551737969764D647A41556E39454A5250654A33316466222C0D0A202020202020202020202020226D6435223A20223661663539616132653035303939386133323336313832643962346334613634222C0D0A202020202020202020202020226E616D65223A20226162632E747874222C0D0A2020202020202020202020202273697A65223A20223531220D0A20202020202020207D0D0A202020205D2C0D0A202020202273746F72616765466565223A2031310D0A7D7E044A534F4EE1F1",
"tx_json": {
"Account": "hnUy2SHThB9DubsPmkJZUXTf5FcNDGhYEA",
"Amount": "100",
"Destination": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"Fee": "10000",
"Flags": 2147483648,
"Memos": [
{
"Memo": {
"MemoData": "7B0D0A20202020226163636F756E744944223A202236397236454639446842526E383556447068714675593571554A3945666A52633831222C0D0A2020202022646F776E6C6F6164466565223A2031302C0D0A202020202266696C6573223A205B0D0A20202020202020207B0D0A20202020202020202020202022636F6E74656E745F74797065223A20226170706C69636174696F6E2F6F637465742D73747265616D222C0D0A202020202020202020202020226964223A2022516D5047697A6F5459364C5676365A6F78616A4377434E6551737969764D647A41556E39454A5250654A33316466222C0D0A202020202020202020202020226D6435223A20223661663539616132653035303939386133323336313832643962346334613634222C0D0A202020202020202020202020226E616D65223A20226162632E747874222C0D0A2020202020202020202020202273697A65223A20223531220D0A20202020202020207D0D0A202020205D2C0D0A202020202273746F72616765466565223A2031310D0A7D",
"MemoFormat": "4A534F4E",
"MemoType": "46696C6555706C6F6164"
}
}
],
"Sequence": 5,
"SigningPubKey": "03BD349FF8764509DA13C2470455546D9BC0D8CB570617315BDD02C02DFED333D1",
"TransactionType": "Payment",
"TxnSignature": "30440220115B35406BA565DE6CA34076F0246A77745E32BF4E4AAD641CB01A97BAFB1F7E02204080C2A692710DBE891221C77787F06101287EFFA068547FF7E07829B49E64E0",
"hash": "FBE874F81108C8E110FF022A766F7C923C3C0CB3992C436302E199A8FCA77154"
}
}
}
字段名称 | 类型 | 描述 |
---|---|---|
engine_result | string | 支付执行结果 |
engine_result_code | int | 支付结果代码 |
engine_result_message | string | 支付结果信息 |
tx_blob | string | 签名结果,二进制数据格式 |
tx_json | object | 交易要素,json格式 |
Memos | object[] | (可选)备注集 |
Memo | object | 备注 |
MemoData | string | 备注内容,必须是Hex编码格式 |
MemoFormat | string | 备注内容格式,必须是Hex编码格式。本例中的值为"JSON"的十六进制值。 |
MemoType | string | 备注类型,必须是Hex编码格式。本例中的值为“FileUpload”的十六进制值。 |
Fee | string | 交易燃料费,单位为滴 |
status | string | 响应状态 |
2.7.3 付费获取下载所需信息
请求:
{
"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"
}
}]
}
}]
}
字段名称 | 类型 | 描述 |
---|---|---|
method | string | RPC接口名称 |
offline | bool | 是否离线提交。默认false |
Amount | unsigned int | 金额。值不小于(size+download_fee-1)/download_fee |
Memos | object[] | (可选)备注集 |
Memo | object | 备注 |
MemoData | string | 备注内容,必须是Hex编码格式本例中的值由“注2”中的json内容经十六进制转换而来。 |
MemoFormat | string | 备注内容格式,必须是Hex编码格式。本例中的值为"JSON"的十六进制值。 |
MemoType | string | 备注类型,必须是Hex编码格式。本例中的值为"FileDownload"的十六进制值。 |
注2:
{
"accountID": "hDg53Haik2475DJx8bjMDSDPj4VX7rtaMd",
"downloadFee": 10,
"files": [
{
"content_type": "application/octet-stream",
"id": "QmPGizoTY6LVv6ZoxajCwCNeQsyivMdzAUn9EJRPeJ31df",
"md5": "haf59aa2e050998a3236182d9b4c4a64",
"name": "abc.txt",
"size": "51"
}
],
"storageFee": 11
}
响应结果:
{
"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"
}
}
}
字段名称 | 类型 | 描述 |
---|---|---|
engine_result | string | 支付执行结果 |
engine_result_code | int | 支付结果代码 |
engine_result_message | string | 支付结果信息 |
password | string | 支付结果的临时密钥信息,下载ipfs文件时有用,一小时内有效 |
tx_blob | string | 签名结果,二进制数据格式 |
tx_json | object | 交易要素,json格式 |
Memos | object[] | (可选)备注集 |
Memo | object | 备注 |
MemoData | string | 备注内容,必须是Hex编码格式 |
MemoFormat | string | 备注内容格式,必须是Hex编码格式。本例中的值为"JSON"的十六进制值。 |
MemoType | string | 备注类型,必须是Hex编码格式。 |
Fee | string | 交易燃料费,单位为滴 |
status | string | 响应状态 |
2.7.4 在线签名下载
请求:
{
"method": "download",
"params":[{
"transaction": "039F3D2CD5ED0B58B6E6EF3827474D243C604377302B1424D5036755639E7476",
"password": "2BCC04AB4DE1E31E16EC1CE80A10D6529AB48A50F59D8FD7EBF418AD298AA0E4",
"secret": "ss3ZBtHP7*************ryGE4Kuf"
}]
}
字段名称 | 类型 | 描述 |
---|---|---|
method | string | RPC接口名称 |
transaction | string | 交易哈希 |
password | string | 支付结果的临时密钥信息,下载ipfs文件时有用,一小时内有效。 |
secret | string | 私钥 |
响应结果:
abc123
abc123
abc123
abc123
Hello hwchain+IPFS
返回的是文件的内容。
2.7.5 离线签名下载
本地根据signature算法生成签名(对transaction与password连接形成的字符串进行签名)
请求:
{
"method": "signature",
"params":[{
"transaction": "039F3D2CD5ED0B58B6E6EF3827474D243C604377302B1424D5036755639E7476",
"password": "2BCC04AB4DE1E31E16EC1CE80A10D6529AB48A50F59D8FD7EBF418AD298AA0E4",
"secret": "ss3ZBtHP7*************ryGE4Kuf"
}]
}
字段名称 | 类型 | 描述 |
---|---|---|
method | string | RPC接口名称 |
transaction | string | 交易哈希 |
password | string | 支付结果的临时密钥信息,下载ipfs文件时有用,一小时内有效 |
secret | string | 私钥 |
响应结果:
3045022100A6C88C963AF2F1DC9E164352644D46ED6ECA0FAF9F596FB6FEDD210D81D76B4B02205AEBFA1DBA13FDFB5BD0A85FEE2AEFB4BD304610CA15CFD4456B42E4D6952255
返回的是带password的签名信息。
ii. 提交签名,下载
请求:
{
"method": "download",
"params":[{
"transaction": "039F3D2CD5ED0B58B6E6EF3827474D243C604377302B1424D5036755639E7476",
"password": "2BCC04AB4DE1E31E16EC1CE80A10D6529AB48A50F59D8FD7EBF418AD298AA0E4",
"signature": "3045022100A6C88C963AF2F1DC9E164352644D46ED6ECA0FAF9F596FB6FEDD210D81D76B4B02205AEBFA1DBA13FDFB5BD0A85FEE2AEFB4BD304610CA15CFD4456B42E4D6952255"
}]
}
字段名称 | 类型 | 描述 |
---|---|---|
method | string | RPC接口名称 |
transaction | string | 交易哈希 |
password | string | 支付结果的临时密钥信息,下载ipfs文件时有用,一小时内有效 |
secret | string | 私钥 |
响应结果:
abc123
abc123
abc123
abc123
Hello hwchain+IPFS
返回的是文件的内容。