跳转至

合约仓库接口

(1)获取合约模板列表

描述:获取合约模板列表

方法:GET

请求路径:/xbaas/v1/contract-hub/template/list

请求参数:

名称 位置 类型 是否必填 说明
language query string 筛选合约模板语言: cpp、solidity、go、all

响应体:

字段 字段类型 字段内容
msg string 响应的消息
code string 状态码
data object 合约模板列表

请求示例:

GET

/xbaas/v1/contract-hub/template/list?language=go

响应示例:

{
  "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 合约模板

请求示例:

GET

/xbaas/v1/contract-hub/template/detail?template_id=1

响应示例:

{
  "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
}

响应示例:

{
  "code":"0",
  "msg":"ok",
  "data":{
      "contract_id":1,
  }
}

(4)合约编译

描述:未发布合约编译,只有全量版可以调用

方法:POST

请求路径:/xbaas/v1/contract-hub/contract/compile

请求参数:

名称 位置 类型 是否必填 说明
contract_id body int 合约id
source_code body []Code 合约源码,如果没传则编译原来保存的

响应体:

字段 字段类型 字段内容
msg string 响应的消息
code string 状态码
data int 合约id

请求示例:

GET

/xbaas/v1/contract-hub/contract/compile?contract_id=1

响应示例:

{
  "code":"0",
  "msg":"ok",
  "data":{
      "contract_id":1,
  }
}

(5)合约详细信息查询

描述:查询合约的详细信息,只有全量版调用

方法:GET

请求路径:/xbaas/v1/contract-hub/contract/detail

请求参数:

名称 位置 类型 是否必填 说明
contract_id query int 合约id

响应体:

字段 字段类型 字段内容
msg string 响应的消息
code string 状态码
data object 合约信息

请求示例:

GET

/xbaas/v1/contract-hub/contract/detail?contract_id=1

响应示例:

{
  "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

请求示例:

GET

/xbaas/v1/contract-hub/contract/publish?contract_id=1

响应示例:

{
  "code":"0",
  "msg":"ok",
  "data":{
      "contract_id":1,
  }
}

(7)合约删除

描述:合约删除,只有全量版调用

方法:GET

请求路径:/xbaas/v1/contract-hub/contract/delete

请求参数:

名称 位置 类型 是否必填 说明
contract_id query int 合约id

响应体:

字段 字段类型 字段内容
msg string 响应的消息
code string 状态码
data int 合约id

请求示例:

GET

/xbaas/v1/contract-hub/contract/delete?contract_id=1

响应示例:

{
  "code":"0",
  "msg":"ok",
  "data":{
      "contract_id":1,
  }
}

(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

请求示例:

GET

/xbaas/v1/contract-hub/compile/file/get?type=2&id=299

响应示例:

{
  "code":"0",
  "msg":"ok",
  "data":{
      "url": "xxxxxx"
  }
}

(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"
}

响应示例:

{
  "code":"0",
  "msg":"ok"
}

(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":""
    }
]
}

响应示例:

{
    "code": "0",
    "msg": "ok",
    "data": "testcc.tar.gz",
}

(12)合约编译中止

描述:合约编译中止,只有全量版调用

方法:POST

请求路径:/xbaas/v1/contract-hub/compile/stop/:contract_id

请求参数:

名称 位置 类型 是否必填 说明
:contract_id path int 合约id

响应体:

字段 字段类型 字段内容
msg string 响应的消息
code string 状态码

请求示例:

POST

/xbaas/v1/contract-hub/compile/stop/3

响应示例:

{
    "code": "0",
    "msg": "ok"
}

状态信息

(1)合约状态

状态 前端展示内容
INITIAL 初始化状态
COMPILING 编译中
COMPILED 编译成功
COMPILING 编译中
COMPILEFAILED 编译失败
PUBLISHED 已发布

数据结构

(1)Code

字段 字段类型 字段内容
path string 文件路径
content string 文件内容
objectType int 0-文件,1-文件夹。如果是文件夹类型,则不保存文件内容