Skip to content

Latest commit

 

History

History
732 lines (565 loc) · 21.6 KB

离线API服务使用说明.md

File metadata and controls

732 lines (565 loc) · 21.6 KB

6.离线API服务使用说明

离线API主要是账户和密码学相关API, 不需要连接星火链网RPC接口也能工作。具体部署操作、接口调用如下:

6.1 部署服务

GitHub地址:https://github.com/caict-4iot-dev/bif-offline-api

6.1.1 获取镜像

docker pull caictdevelop/bif-offline-api:v1.0.0 

6.1.2 启动服务

docker run -d -p 8888:8888 --name bif-offline-api --restart always caictdevelop/bif-offline-api:v1.0.0

6.1.3 查询服务

docker ps 

CONTAINER ID   IMAGE                                 COMMAND   CREATED          STATUS          PORTS                    NAMES
7fab57f360a2   caictdevelop/bif-offline-api:v1.0.0   "./app"   31 seconds ago   Up 29 seconds   0.0.0.0:8888->8888/tcp   bif-offline-api

6.2 接口服务

6.2.1 本地账号生成

请求参数:

字段名 类型 是否必填 描述
keyType int 必填 加密类型,1:ed25519 , 2:sm2

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.encAddress string 账号地址
data.encPublicKey string 星火公钥
data.encPrivateKey string 星火私钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/createAddress
{
    "keyType":1
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "encAddress": "did:bid:efNs6DGRwnaWvdBqp6PVLFJQzL5rxYeF",
        "encPrivateKey": "priSPKnS7DVESZGYbjc6tqYfzN4R74E6DXzgzD5RMt5VDj2ftA",
        "encPublicKey": "b065664e71b940a91737a9136df9081b03262c43e94ba517820fe14cb9fad79d6395fc"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "type值必须是1或者2"
}

6.2.2 根据私钥获取账号

请求参数:

字段名 类型 是否必填 描述
privateKey string 必填 星火私钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.encAddress string 账号地址
data.encPublicKey string 星火公钥
data.encPrivateKey string 星火私钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getAddressByPrivateKey
{
   "privateKey":"priSPKi7K3nVAgtdCu9k9hVn4modxzFkd73JGsRrUYJR1T2RxM"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "encAddress": "did:bid:efQ69GRtQUDR9SngdFKAv4owYyx5Fnko",
        "encPrivateKey": "priSPKi7K3nVAgtdCu9k9hVn4modxzFkd73JGsRrUYJR1T2RxM",
        "encPublicKey": "b06566d8fb4a6dfbe0d5831e38f621391ad9191626f7e28c13d3a0482c52d5c9607b14"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "private key (***) is invalid"
}

6.2.3 根据公钥获取账号

请求参数:

字段名 类型 是否必填 描述
publicKey string 必填 星火公钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.encAddress string 账号地址
data.encPublicKey string 星火公钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getAddressByPublicKey
{
    "publicKey": "b06566d8fb4a6dfbe0d5831e38f621391ad9191626f7e28c13d3a0482c52d5c9607b14"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "encAddress": "did:bid:efQ69GRtQUDR9SngdFKAv4owYyx5Fnko",
        "encPublicKey": "b06566d8fb4a6dfbe0d5831e38f621391ad9191626f7e28c13d3a0482c52d5c9607b14"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "public key (***) is invalid, please check"
}

6.2.4 星火私钥转原生私钥

请求参数:

字段名 类型 是否必填 描述
encPrivateKey string 必填 星火私钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.keyType int 加密类型,1:ed25519 , 2:sm2
data.rawPrivateKey string 原生私钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getRawPrivateKey
{
     "encPrivateKey": "priSrrgL1JPpgKBCdjoyf8E4dRfaF2NYTKmqnSWKfTfhj8ngLc"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "keyType": 2,
        "rawPrivateKey": "270e2630f429cd5b8ddd76c605245a2814f08255f27e9810418801b5a0b804a5"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "private key (****) is invalid"
}

6.2.5 星火公钥转原生公钥

请求参数:

字段名 类型 是否必填 描述
encPublicKey string 必填 星火公钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.rawPublicKey string 原生公钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getRawPublicKey
{
    "encPublicKey": "b06566424ea71b348ebad4eecac7497227607f2cc3bc128d6248e742faf30ec149e2ed"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "rawPublicKey": "424ea71b348ebad4eecac7497227607f2cc3bc128d6248e742faf30ec149e2ed"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "endPublicKey 无效"
}

6.2.6 根据星火公钥获取加密方式

请求参数:

字段名 类型 是否必填 描述
encPublicKey string 必填 星火公钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.keyType string 加密类型,ed25519 / sm2

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getEncryptionTypeByPubK
{
    "encPublicKey": "b06566424ea71b348ebad4eecac7497227607f2cc3bc128d6248e742faf30ec149e2ed"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "keyType": "SM2"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "endPublicKey 无效"
}

6.2.7 原生私钥转星火私钥

请求参数:

字段名 类型 是否必填 描述
keyType int 必填 加密类型,1:ed25519 , 2:sm2
rawPrivateKey string 必填 原生私钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.keyType int 加密类型,1:ed25519 , 2:sm2
data.encPrivateKey string 星火私钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getEncPrivateKeyByRaw
{
    "keyType":2,
    "rawPrivateKey": "270e2630f429cd5b8ddd76c605245a2814f08255f27e9810418801b5a0b804a5"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "encPrivateKey": "priSrrgL1JPpgKBCdjoyf8E4dRfaF2NYTKmqnSWKfTfhj8ngLc",
        "keyType": 2
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "type值必须是1或者2"
}

6.2.8 原生公钥转星火公钥

请求参数:

字段名 类型 是否必填 描述
keyType int 必填 加密类型,1:ed25519 , 2:sm2
rawPublicKey string 必填 原生公钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.keyType int 加密类型,1:ed25519 , 2:sm2
data.encPublicKey string 星火公钥

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/getEncPublicKeyByRaw
{
    "keyType":1,
    "rawPublicKey": "424ea71b348ebad4eecac7497227607f2cc3bc128d6248e742faf30ec149e2ed"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "encPublicKey": "b06566424ea71b348ebad4eecac7497227607f2cc3bc128d6248e742faf30ec149e2ed",
        "keyType": 1
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "endPublicKey 无效"
}

6.2.9 构造合约签名交易

请求参数:

字段名 类型 是否必填 描述
senderAddress string 必填 交易源账号,即交易的发起方
senderPrivateKey string 必填 交易源账户私钥
contractAddress string 必填 合约账户地址
input string 必填 待触发的合约的main()入参
nonce Long 必填 账户交易序列号
feeLimit Long 选填 交易花费的手续费(单位是glowstone),1 星火令(XHT) = 10^8 星火萤(glowstone),默认1000000L
bifAmount Long 选填 转账金额,大小限制[0, Long.MAX_VALUE]
GasPrice Long 选填 打包费用 (单位是glowstone),1 星火令(XHT) = 10^8 星火萤(glowstone),默认100L

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.serialization string 交易序列化信息
data.publicKey string 交易源账户公钥
data.signData string 签名数据

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/contract
{
	"senderAddress": "did:bid:efQ69GRtQUDR9SngdFKAv4owYyx5Fnko",
	"senderPrivateKey":"priSPKi7K3nVAgtdCu9k9hVn4modxzFkd73JGsRrUYJR1T2RxM",
	"contractAddress":"did:bid:efAHUyTyhCdUXSxb3znw3Jw4ET24GdCk",
	"bifAmount":0, 
	"feeLimit":100000000, 
	"gasPrice":10,                                 
	"nonce":33,  
	"input":"	{\"function\":\"safeTransferFrom(address,address,string)\",\"args\":\"did:bid:efQ69GRtQUDR9SngdFKAv4owYyx5Fnko,did:bid:ef1L8GBs9mWzeKXGiAZC877WResz6y7,'did:bid:efDtTjWBLkJjtRSJFMfBLNJ6LjnKu1tV'\"}"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "serialization": "0a286469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f102122ee01080752e9010a286469643a6269643a65664148557954796843645558537862337a6e77334a7734455432344764436b1abc017b2266756e6374696f6e223a22736166655472616e7366657246726f6d28616464726573732c616464726573732c737472696e6729222c2261726773223a226469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f2c6469643a6269643a6566314c38474273396d577a654b584769415a43383737575265737a3679372c276469643a6269643a65664474546a57424c6b4a6a7452534a464d66424c4e4a364c6a6e4b7531745627227d3080c2d72f380a",
        "signData": "70b2ce583fb15b1e67e67e76ab3cfe491e819dbcfa3120946b98648be2f319961e3f148efc49c37dae8a6b71c17ac3c11a20caf58fa26513f86b0d4b209d7a09",
        "publicKey": "b06566d8fb4a6dfbe0d5831e38f621391ad9191626f7e28c13d3a0482c52d5c9607b14"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "*********"
}

6.2.10 签名

请求参数:

字段名 类型 是否必填 描述
message string 必填 待签名的信息
privateKey string 必填 签名账户私钥

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.serialization string 签名的信息
data.publicKey string 星火公钥
data.signData string 签名数据

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/sign
{
	"message": "0a286469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f101f22ee01080752e9010a286469643a6269643a65664148557954796843645558537862337a6e77334a7734455432344764436b1abc017b2266756e6374696f6e223a22736166655472616e7366657246726f6d28616464726573732c616464726573732c737472696e6729222c2261726773223a226469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f2c6469643a6269643a6566314c38474273396d577a654b584769415a43383737575265737a3679372c276469643a6269643a65664474546a57424c6b4a6a7452534a464d66424c4e4a364c6a6e4b7531745627227d3080c2d72f3814",
	"privateKey":"priSPKi7K3nVAgtdCu9k9hVn4modxzFkd73JGsRrUYJR1T2RxM"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "serialization": "0a286469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f101f22ee01080752e9010a286469643a6269643a65664148557954796843645558537862337a6e77334a7734455432344764436b1abc017b2266756e6374696f6e223a22736166655472616e7366657246726f6d28616464726573732c616464726573732c737472696e6729222c2261726773223a226469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f2c6469643a6269643a6566314c38474273396d577a654b584769415a43383737575265737a3679372c276469643a6269643a65664474546a57424c6b4a6a7452534a464d66424c4e4a364c6a6e4b7531745627227d3080c2d72f3814",
        "publicKey": "b06566d8fb4a6dfbe0d5831e38f621391ad9191626f7e28c13d3a0482c52d5c9607b14",
        "signData": "5c95d1ddc5fbf24439e4849034b863deb68c4681cf6dbc9d6b7a9d0b5ea6fbbe6a3933619099a0be29dfb4ceaaf614cba0582853fa48420a5b7dd81e28e44c04"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "*********"
}

6.2.11 验签

请求参数:

字段名 类型 是否必填 描述
serialization string 必填 签名的信息
publicKey string 必填 签名账户公钥
signData string 必填 签名数据

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.verifySign Boolean 验签结果

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/verifySign
{
    "serialization": "0a286469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f101f22ee01080752e9010a286469643a6269643a65664148557954796843645558537862337a6e77334a7734455432344764436b1abc017b2266756e6374696f6e223a22736166655472616e7366657246726f6d28616464726573732c616464726573732c737472696e6729222c2261726773223a226469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f2c6469643a6269643a6566314c38474273396d577a654b584769415a43383737575265737a3679372c276469643a6269643a65664474546a57424c6b4a6a7452534a464d66424c4e4a364c6a6e4b7531745627227d3080c2d72f3814",
     "signData": "22909a4bf1b0d310705eff9f736dd8755927c8f5d43d75d8602cd4097f08a6c7ea5cc824036679daf48a69910957f6d9ef7eabfe994c38391c2258aa07793b09",
     "publicKey": "b06566d8fb4a6dfbe0d5831e38f621391ad9191626f7e28c13d3a0482c52d5c9607b14"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "verifySign": true
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "*******"
}

6.2.12 数据反序列化

请求参数:

字段名 类型 是否必填 描述
serialization string 必填 交易序列化数据

响应参数:

字段名 类型 描述
code int 成功200 ,失败非200
message string 错误信息
data object
data.SourceAddress string 交易源账号
data.FeeLimit Long 交易花费的手续费
data.GasPrice Long 打包费用
data.Nonce Long 账户交易序列号
data.ChainId Long 链码
data.Operations object 交易内容

示例:

(1)请求示例:

http请求方式:POST
https://{url}/bifApi/v1/deserialization
{
    "serialization":"0a286469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f102122ee01080752e9010a286469643a6269643a65664148557954796843645558537862337a6e77334a7734455432344764436b1abc017b2266756e6374696f6e223a22736166655472616e7366657246726f6d28616464726573732c616464726573732c737472696e6729222c2261726773223a226469643a6269643a65665136394752745155445239536e6764464b4176346f7759797835466e6b6f2c6469643a6269643a6566314c38474273396d577a654b584769415a43383737575265737a3679372c276469643a6269643a65664474546a57424c6b4a6a7452534a464d66424c4e4a364c6a6e4b7531745627227d3080c2d72f380a"
}

(2)返回结果示例:

a. 接口调用成功,则返回JSON数据示例为:

{
    "code": 200,
    "data": {
        "ChainId": 0,
        "FeeLimit": 100000000,
        "GasPrice": 10,
        "Nonce": 33,
        "Operations": [
            {
                "type": 7,
                "pay_coin": {
                    "dest_address": "did:bid:efAHUyTyhCdUXSxb3znw3Jw4ET24GdCk",
                    "input": "{\"function\":\"safeTransferFrom(address,address,string)\",\"args\":\"did:bid:efQ69GRtQUDR9SngdFKAv4owYyx5Fnko,did:bid:ef1L8GBs9mWzeKXGiAZC877WResz6y7,'did:bid:efDtTjWBLkJjtRSJFMfBLNJ6LjnKu1tV'\"}"
                }
            }
        ],
        "SourceAddress": "did:bid:efQ69GRtQUDR9SngdFKAv4owYyx5Fnko"
    },
    "message": "ok"
}

b. 接口调用失败,则返回JSON数据示例为:

{
    "code": 500,
    "data": "",
    "message": "Invalid serialization"
}