合约仓库接口
(1)获取合约模板列表
描述:获取合约模板列表
方法:GET
请求路径:/xbaas/v1/contract-hub/template/list
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
language | query | string | 是 | 筛选合约模板语言: cpp、solidity、go、all |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | object | 合约模板列表 |
请求示例:
响应示例:
{
"code":"0",
"msg":"ok",
"data":{
"template_list":[{
"template_id":1,
"lang":"C++",
"template_name":"xxx", //模板名
"type":1, //模板类型
"description":"xxx"//描述
},...
]
}
}
(2)查询合约模板详细信息
描述:获取合约模板详细信息
方法:GET
请求路径:/xbaas/v1/contract-hub/template/detail
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
template_id | query | int | 是 | 合约模板id |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | object | 合约模板 |
请求示例:
响应示例:
{
"code":"0",
"msg":"ok",
"data":{
"template_name":"xxx", //模板名
"publisher":"xxxx", //合约模板发布者
"language":"cpp", //合约模板语言
"version":"1.0.0", //合约模板版本
"release_time":, //发布时间
"update_time":, //更新时间
"description":"xxx",//描述
"interface_description":"", //接口描述
"interface_for_invoke":"", //调用时的接口
"contract_code":"xxx" //模板代码
}
}
(3)合约保存
描述:平台保存合约,只有全量版可以调用
方法:POST
请求路径:/xbaas/v1/contract-hub/contract/store
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
creator_address | body | string | 是 | 创建合约的用户address |
contract_name | body | string | 是 | 合约名 |
language | body | string | 是 | 合约语言 |
contract_code | body | string | 是 | 合约代码 |
create_mode | body | int | 是 | 合约创建方式: 1. 复用合约市场模板 2. 本地上传 3. 手动编写 |
contract_id | body | int | 否 | 合约id |
description | body | string | 否 | 合约描述 |
upload_filename | body | string | 否 | 上传合约文件的文件名 |
template_id | int | body | int | 否 |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | int | 合约id |
请求示例:
POST
/xbaas/v1/contract-hub/contract/store
{
"contract_name":"1661799926",
"creator_address":"bmWzjXQc3BsVhA2umzZkxWSE2f4o9VYUr ",
"description":"test",
"language":"cpp",
"contract_code":"#include "xchain/xchain.h" struct Counter : public xchain::Contract {}; DEFINE_METHOD(Counter, initialize) { xchain::Context* ctx = self.context(); const std::string& creator = ctx->arg("creator"); if (creator.empty()) { ctx->error("missing creator"); return; } ctx->put_object("creator", creator); ctx->ok("initialize succeed"); } DEFINE_METHOD(Counter, increase) { xchain::Context* ctx = self.context(); const std::string& key = ctx->arg("key"); std::string value; ctx->get_object(key, &value); int cnt = 0; cnt = atoi(value.c_str()); char buf[32]; snprintf(buf, 32, "%d", cnt + 1); ctx->put_object(key, buf); ctx->ok(buf); } DEFINE_METHOD(Counter, get) { xchain::Context* ctx = self.context(); const std::string& key = ctx->arg("key"); std::string value; if (ctx->get_object(key, &value)) { ctx->ok(value); } else { ctx->error("key not found"); } }",
"create_mode":2,
"upload_filename":"test.cc",
"template_id":1,
"contract_id":0
}
响应示例:
(4)合约编译
描述:未发布合约编译,只有全量版可以调用
方法:POST
请求路径:/xbaas/v1/contract-hub/contract/compile
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
contract_id | body | int | 是 | 合约id |
source_code | body | []Code | 否 | 合约源码,如果没传则编译原来保存的 |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | int | 合约id |
请求示例:
响应示例:
(5)合约详细信息查询
描述:查询合约的详细信息,只有全量版调用
方法:GET
请求路径:/xbaas/v1/contract-hub/contract/detail
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
contract_id | query | int | 是 | 合约id |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | object | 合约信息 |
请求示例:
响应示例:
{
"code":"0",
"msg":"ok",
"data":{
"publisher":"xxx", //发布者
"contract_name":"xxx", //合约名
"language":"xxx", //语言
"description":"xxx", //描述
"contract_code":"xxxx", //合约代码
"create_mode":1, //合约创建方式
"upload_filename":"xxxx", //上传合约文件名
"status":"xxx" //合约状态
"template_id":1 //复用合约模板的id
"version":"1.0.0" //版本
"release_time":"xxx" //发布时间
"code_path": "/xbaas/v1/contract-hub/workspace/contract_[contractId]_[保存时间戳].zip",
"compile_output_path":""/xbaas/v1/contract-hub/download/output/build/contract_[contractId]_[编译时间戳]/compile.zip"
"err_message":"xxx" //编译错误信息
}
}
(6)合约发布
描述:合约发布,只有全量版调用
方法:GET
请求路径:/xbaas/v1/contract-hub/contract/publish
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
contract_id | query | int | 是 | 合约id |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | int | 合约id |
请求示例:
响应示例:
(7)合约删除
描述:合约删除,只有全量版调用
方法:GET
请求路径:/xbaas/v1/contract-hub/contract/delete
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
contract_id | query | int | 是 | 合约id |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | int | 合约id |
请求示例:
响应示例:
(8)获取合约列表
描述:合约列表
方法:GET
请求路径:/xbaas/v1/contract-hub/contract/list
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
address | query | string | 是 | 用户address |
is_published | query | int | 否 | 是否筛选出已经发布的合约,不传默认返回所有合约:1 → 获取所有已经发布的合约 |
language | query | string | 否 | 筛选合约语言: cpp、solidity、go |
module | query | int | 否 | solidity合约是否按照模块切分:1-按照模块切分,0-不切分 |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | object | 合约列表 |
请求示例:
GET
/xbaas/v1/contract-hub/contract/list?address=bmWzjXQc3BsVhA2umzZkxWSE2f4o9VYUr++&is_published=1&language=go
响应示例:
{
"code":"0",
"msg":"ok",
"data":{
contract_list:[
{
"contract_id":1,
"contract_name":"xxxx", //合约名
"language":"cpp", //语言
"publish_time":123445566, //发布时间(未发布该字段为0)
"is_published":true, //是否发布
"create_time":123445566, //创建时间
"description":"xxxxx" //描述
},...
]
}
}
(9)获取编译产出文件url
描述:获取合约的编译产出
方法:GET
请求路径:/xbaas/v1/contract-hub/compile/file/get
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
type | query | int | 是 | 获取产出类型:1. 合约模板编译产出 2. 合约编译产出 |
id | query | int | 是 | 合约或合约模板id |
index | query | int | 否 | solidity合约必传:1. .bin文件 2. .abi文件 |
module | query | string | 否 | solidity,合约模块名称 |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | object | 合约编译产出url |
请求示例:
响应示例:
(10)合约信息更新
描述:合约信息更新,只有全量版调用
方法:POST
请求路径:/xbaas/v1/contract-hub/contract/info/
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
contract_id | body | int | 是 | 合约id |
contract_name | body | string | 否 | 合约名称,为空则不更新 |
language | body | string | 否 | 合约语言,cpp、solidity、go,为空则不更新 |
description | body | string | 否 | 合约描述信息,为空则不更新 |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
请求示例:
POST
/xbaas/v1/contract-hub/contract/info
{
"contract_id": 3,
"contract_name": "cccccccccc",
"language": "cpp",
"description": "description"
}
响应示例:
(11)合约代码更新
描述:更新合约代码,整个合约的更新,只有全量版调用
方法:POST
请求路径:/xbaas/v1/contract-hub/contract/code/
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
contract_id | body | int | 是 | 合约id |
source_code | body | []Code | 否 | 合约源码,如果没传则编译原来保存的 |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
data | string | 合约存储路径 |
请求示例:
POST
/xbaas/v1/contract-hub/contract/code/
{
"contract_id": 3,
"source_code": [
{
"path":"/src/main.cc",
"content":""
},
{
"path":"/test/main.test.js",
"content":""
}
]
}
响应示例:
(12)合约编译中止
描述:合约编译中止,只有全量版调用
方法:POST
请求路径:/xbaas/v1/contract-hub/compile/stop/:contract_id
请求参数:
名称 | 位置 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
:contract_id | path | int | 是 | 合约id |
响应体:
字段 | 字段类型 | 字段内容 |
---|---|---|
msg | string | 响应的消息 |
code | string | 状态码 |
请求示例:
响应示例:
状态信息
(1)合约状态
状态 | 前端展示内容 |
---|---|
INITIAL | 初始化状态 |
COMPILING | 编译中 |
COMPILED | 编译成功 |
COMPILING | 编译中 |
COMPILEFAILED | 编译失败 |
PUBLISHED | 已发布 |
数据结构
(1)Code
字段 | 字段类型 | 字段内容 |
---|---|---|
path | string | 文件路径 |
content | string | 文件内容 |
objectType | int | 0-文件,1-文件夹。如果是文件夹类型,则不保存文件内容 |