能读,还不能动钱。

币安 Agentic Wallet 的 Rust 客户端。官方 baw 用 Node 写成,baw-rs 用 Rust 从零重写同一套协议,覆盖官方 1.12.0 的 102 条叶子命令语法。

覆盖的是命令语法。哪些功能碰过真实账号,哪些没有,下面分开画出来:实心块是跑过的,虚线框是没跑过的。协议是逆向官方 npm 包还原的。

用真实账号跑过

一次真实的二维码登录,加五个只读查询。会话有效期实测 48 小时。

  • 二维码登录
  • status
  • address
  • balance
  • left-quota
  • settings

没有实盘跑过

所有动用真实资金的操作。命令已经写好,但没有对真钱执行过一次。

  • 转账
  • swap
  • 限价单
  • DeFi 存取
  • x402 签名
  • contract-call 执行

可不可信:安全模型

写操作要依次过几道检查,任何一道不通过,请求都不会发出。按“下一步”逐个看。

没有实盘跑过 这条写操作路径还没有对真钱执行过。

  1. 先生成这笔操作的预览,得到预览内容的 sha256。

  2. 执行时必须带上预览的 sha256。签名只针对这一份预览,而且只能消费一次。

  3. 必须同时带 --confirm 和一次性的 --operation-id。用过的 ID 永久拒绝,进程崩溃之后也不会复用。

  4. 默认检查发送方地址,不一致直接报错,请求不发出。能减少检查的开关只有 --skip-prechecks 一个,默认关闭。

  5. 提交之前先把这次操作的意图写进日志。

  6. 服务端明确返回 按返回结果处理。
    传输层失败 返回 UNCERTAIN 和 retrySafe:false。不自动重发,需要你人工对账。

登录态加密

登录态用 AES-256-GCM 加密。密钥只由一个固定口令经 PBKDF2-HMAC-SHA256 推导,迭代 10 万轮。不读主机名、网卡、机器码、钥匙串或 TPM,所以整个目录搬到另一台机器也能解密。

代价有两条:口令丢了,登录态永久打不开;口令和 session.json 同时泄露,就等于登录态泄露。

文件与网络

目录权限 0700,文件 0600,禁止符号链接,并校验属主。接口域名写死在代码里,禁止重定向,也不接受任意 URL 覆盖。

多钱包隔离

一个后台进程可以管多个具名钱包,各自独立登录,可以并行。同一个钱包内的操作串行执行,并加互斥锁。

钱包名写错、未登录、目录被替换,都会直接报错,不会把请求落到别的钱包上。

和官方差在哪

baw-rs 约 25,300 行 Rust,覆盖官方 1.12.0 的 102 条叶子命令语法。在这之上,多出五条官方没有的命令。

命令 做什么 实测 实盘
openfour quote-buy four.meme 内盘报价。进程内直接读链上曲线算价,不下单。 进程内 67–74 ms等价 Node 脚本要 467–1100 ms 跑过读公开链上状态,不涉及交易
serve 常驻后台进程,后续命令交给它执行。 单次调用 0.10–0.17 秒冷启动 0.09 秒 跑过本机实测,只读命令
batch 只读批处理,一次跑多条查询。 没有公开的计时 没跑过不在实盘记录里
contract-call run 在策略约束下执行合约调用。 没有公开的计时 没跑过涉及真实资金
contract-call fire 把预览和执行合成一次调用。 没有公开的计时 没跑过涉及真实资金

“跑过”的两行衡量的是命令执行多久,不代表任何交易成功过。

现在能不能用真钱

还没有人用 baw-rs 动过真钱。转账、swap、限价单、DeFi 存取、x402 签名、contract-call 执行,都没有实盘跑过。如果你现在拿真钱用,你就是第一个实盘跑这些路径的人。

实盘做过的

  • 一次真实的二维码登录。
  • 五个只读查询:status、address、balance、left-quota、settings。
  • 会话有效期实测 48 小时。

离线测试做过的

  • 296 项通过,0 项失败。
  • 全部离线运行:用回环 HTTP fixture 模拟接口,用合成的会话文件模拟登录态。
  • 离线测试证明代码按设计走,证明不了真实接口在真钱上的行为。

怎么装

仓库不发布预编译二进制,必须自己构建。README 给的理由是:只有你自己构建的产物,哈希才可核对。

需要 Rust 稳定版工具链,开发时用的是 1.99.1。主要平台是 Linux。

构建

git clone https://github.com/bqingx/baw-rs.git
cd baw-rs && cargo build --release     # 产物:target/release/baw-rs

首次使用前的准备

umask 077
mkdir -m 700 ~/.baw
printf '%s' 'your-passphrase' > ~/.baw-instance.key   # 0600

把 your-passphrase 换成你自己的口令。这个口令文件是登录态的加密依据,丢了它,已保存的会话就永久打不开,请另外备份。