news 2026/7/4 7:13:26

status-go API使用手册:从C绑定到HTTP服务的完整接口指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
status-go API使用手册:从C绑定到HTTP服务的完整接口指南

status-go API使用手册:从C绑定到HTTP服务的完整接口指南

【免费下载链接】status-goThe "backend" library for Status Apps项目地址: https://gitcode.com/gh_mirrors/st/status-go

status-go作为Status应用的核心后端库,提供了从C语言绑定到HTTP服务的全方位接口支持。本文将详细介绍status-go的API体系,帮助开发者快速掌握从底层C绑定到高层HTTP服务的使用方法,轻松构建基于Status生态的应用和服务。

一、C语言绑定:底层接口的无缝对接

1.1 C绑定生成工具概述

status-go提供了专门的C绑定生成工具,位于tools/generate-cbindings/目录下。该工具通过解析mobile/目录下的Go文件,识别公共函数并生成等效的C语言签名,实现了Go代码与C语言的无缝对接。

1.2 支持的数据类型

目前C绑定工具支持以下数据类型:

  • C.int:整数类型
  • *C.char:字符串类型
  • unsafer.Pointer:指针类型

函数如果使用了不支持的类型,将被自动忽略。

1.3 实现原理

C绑定生成工具通过解析Go代码,为每个符合条件的公共函数生成对应的C语言包装函数。这些包装函数会直接调用mobile/目录下的原始Go函数,从而实现了C语言对Go代码的直接调用。

这种方法虽然简单直接,但也存在一定的局限性,主要是类型支持有限。不过对于大多数基础功能的调用已经足够,为移动应用等需要C语言接口的场景提供了便利。

二、HTTP服务:高层接口的便捷使用

2.1 服务初始化与登录

status-go提供了完整的HTTP服务接口,位于cmd/status-backend/server/目录。使用HTTP服务的第一步是初始化应用并登录账户。

初始化应用
POST /statusgo/InitializeApplication { "dataDir": "/path/to/data" }

响应将包含数据目录中已有的账户列表,如果账户列表为空,则需要创建新账户。

创建账户并登录
POST /statusgo/CreateAccountAndLogin { "rootDataDir": "/path/to/data", "displayName": "MyBot", "password": "...", "customizationColor": "primary" }
登录现有账户
POST /statusgo/LoginAccount { "keyUID": "0xabc...", "password": "..." }

[!IMPORTANT] 登录操作是异步的,HTTP响应仅表示请求已接收,实际登录结果需要通过WebSocket信号node.login获取。

2.2 WebSocket信号:实时事件通知

status-go使用WebSocket提供实时事件通知,连接地址为ws://<host>:<port>/signals

关键信号类型
信号触发时机关键事件字段
node.login登录完成后error,settings,account
node.started节点进程启动后
node.ready节点完全初始化后
messages.new收到新消息时messages[]— 消息对象数组
登录信号示例
{ "type": "node.login", "event": { "error": "", "settings": {...}, "account": {...} } }

2.3 JSON-RPC接口:核心功能调用

所有核心功能都通过POST /statusgo/CallRPC接口以JSON-RPC格式调用。

启动信使服务
{ "jsonrpc": "2.0", "id": 1, "method": "wakuext_startMessenger", "params": [] }
获取已加入社区
{ "jsonrpc": "2.0", "id": 2, "method": "wakuext_joinedCommunities", "params": [] }

响应示例:

[ { "id": "0x03abc...", "name": "Community Name", "joined": true, "isMember": true, "verified": true, "members": { "0x04pubkey...": {"roles": [1]} }, "chats": { "chat-uuid": { "name": "general", "canPost": true } } } ]

[!NOTE]joined表示本地已加入,isMember表示网络层面已成为成员,只有isMember: true才能发布消息。

发送聊天消息
{ "jsonrpc": "2.0", "id": 3, "method": "wakuext_sendChatMessage", "params": [ { "chatId": "0x03ab2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b28a805944-9f5d-4219-a104-5d2047f5572a", "text": "Hello, status-go!", "contentType": 1 } ] }

三、API使用流程:从启动到消息发送

3.1 完整启动流程

  1. 连接WebSocket到/signals
  2. 调用POST /statusgo/InitializeApplication获取现有账户
  3. 根据情况选择登录或创建账户
  4. 等待node.login信号确认登录成功
  5. 调用wakuext_startMessenger启动信使服务
  6. 开始使用其他RPC方法

status-go API使用流程示意图

3.2 加入社区流程

  1. 获取钱包地址:调用accounts_getAccounts找到wallet: true的账户
  2. 获取社区描述:调用wakuext_fetchCommunity
  3. 发送加入请求:调用wakuext_requestToJoinCommunity
  4. 等待社区所有者批准(开放社区会自动批准)
  5. 确认isMember变为true后即可发送消息

四、常见错误与解决方案

错误含义解决方案
"does not exist"RPC处理器尚未注册等待startMessenger完成
"node is already running"已登录状态下调用登录登录前检查settings_getSettings中的public-key
"can't post message type '1'"无发消息权限使用requestToJoinCommunity并等待成员资格确认
"community not found"社区描述未获取先调用fetchCommunity

五、总结

status-go提供了从C语言绑定到HTTP服务的完整API体系,满足了不同层级的开发需求。通过C绑定,开发者可以在底层与status-go进行交互;通过HTTP服务和WebSocket,开发者可以轻松构建高层应用。

无论是移动应用开发还是后端服务集成,status-go的API都提供了便捷、高效的接口。希望本文能够帮助开发者快速掌握status-go API的使用,为Status生态的发展贡献力量。

要开始使用status-go,请先克隆仓库:git clone https://gitcode.com/gh_mirrors/st/status-go,然后参考docs/目录下的文档获取更多详细信息。

【免费下载链接】status-goThe "backend" library for Status Apps项目地址: https://gitcode.com/gh_mirrors/st/status-go

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 7:13:14

CANN/Ascend C SIMD对齐加载解压缩函数

asc_loadalign_unpack 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://g…

作者头像 李华
网站建设 2026/7/4 7:10:45

CANN/GE Python张量API

Tensor 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友…

作者头像 李华
网站建设 2026/7/4 7:07:07

从deprecated到新方案:Grafonnet-lib迁移指南与最佳实践

从deprecated到新方案&#xff1a;Grafonnet-lib迁移指南与最佳实践 【免费下载链接】grafonnet-lib Jsonnet library for generating Grafana dashboard files. 项目地址: https://gitcode.com/gh_mirrors/gr/grafonnet-lib Grafonnet-lib是用于以代码方式编写Grafana仪…

作者头像 李华
网站建设 2026/7/4 7:05:22

Touch WX与Touch UI:两个框架的区别与联系详解

Touch WX与Touch UI&#xff1a;两个框架的区别与联系详解 【免费下载链接】touchwx 小程序组件化解决方案。官网&#xff1a;https://www.wetouch.net/wx.html 项目地址: https://gitcode.com/gh_mirrors/to/touchwx Touch WX和Touch UI是一对强大的移动端开发框架组合…

作者头像 李华
网站建设 2026/7/4 7:03:24

Leela Chess Zero vs 传统象棋引擎:为什么神经网络是未来的趋势

Leela Chess Zero vs 传统象棋引擎&#xff1a;为什么神经网络是未来的趋势 【免费下载链接】leela-chess **MOVED TO https://github.com/LeelaChessZero/leela-chess ** A chess adaption of GCPs Leela Zero 项目地址: https://gitcode.com/gh_mirrors/le/leela-chess …

作者头像 李华
网站建设 2026/7/4 7:02:09

CANN/ops-nn分组量化SwiGLU激活算子

SwigluGroupQuant 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列…

作者头像 李华