安装问题
kaleido: command not found
kaleido: command not found
kaleido原因: 存放启动器的目录不在 PATH 中。安装脚本的最后一行已经提示过:If 'kaleido' is not found yet, add <dir> to your PATH and restart your shell.解决办法:- 先重启 shell —— 已经运行中的会话看不到新加入
PATH的条目 - 若使用
uv安装,确认工具目录在PATH中:uv tool dir和uv tool list - 若使用引导安装脚本,把它打印的目录写进 shell 配置文件(
~/.bashrc、~/.zshrc) - Windows 上请使用 WSL —— shell 引导脚本面向 macOS、Linux 和 WSL
pip install kaleido-cli 找不到这个包
pip install kaleido-cli 找不到这个包
ERROR: Could not find a version that satisfies the requirement kaleido-cli原因: CLI 没有发布到 PyPI,只能从源码安装。解决办法:uv,否则回退到隔离的虚拟环境。详见安装。Kaleido CLI requires Python 3.10 or newer
Kaleido CLI requires Python 3.10 or newer
- 查看当前版本:
python3 --version - 安装更新的 Python,或交给
uv管理:uv python install 3.12 - 待
python3指向 3.10 或更高版本后重新执行安装
设置与环境
Docker is not installed or not in PATH.
Docker is not installed or not in PATH.
node 生命周期命令、或不带参数的 kaleido setup 报出这条信息原因: CLI 通过 docker compose 执行操作,因此二进制文件和运行中的守护进程缺一不可。解决办法:- 同时确认客户端与守护进程:
docker version—— 必须出现 “Server” 部分 - 启动 Docker Desktop,Linux 上执行
sudo systemctl start docker - 确认 Compose v2 插件可用:
docker compose version - 如果完全不想用 Docker,可以只做市场模式设置:
kaleido setup --mode market --defaults
No docker-compose.yml found in …
No docker-compose.yml found in …
No docker-compose.yml found in <dir>,随后是 Run 'kaleido node create' to generate it.,或者 Environment directory not found: <dir>原因:- 环境从未创建过,或创建在了另一个基础目录下
- 配置里的
spawn-dir指向的位置与环境实际所在的位置不一致
- 先看 CLI 实际能识别哪些环境:
kaleido node list - 检查基础目录:
kaleido config show—— 环境位于spawn-dir下,默认为~/.kaleido - 重新创建:
kaleido node create <name>
Multiple environments exist — specify one:
Multiple environments exist — specify one:
No environments found. Run 'kaleido node create' first. 则是相反的问题 —— 还没有创建过任何环境。Environment '<name>' already exists at …
Environment '<name>' already exists at …
kaleido setup 以这条信息终止,并提示 Choose a different environment name with --env-name to create a new node.解决办法:- 复用已有环境:
kaleido node up <name>,然后kaleido node use <name> - 或者另建一个:
kaleido setup --env-name taker-2
kaleido node create 则会询问是否覆盖 compose 文件,这不会影响数据卷。容器起来了,但节点始终没有响应
容器起来了,但节点始终没有响应
node up 成功,node info 失败解决办法:- 查看容器状态:
kaleido node ps <name> - 读取节点自身的日志:
kaleido node logs <name> --service rgb_node_1 --no-follow - 排查端口冲突 —— 节点 1 绑定 3001 与 9735,节点 2 绑定 3002 与 9736。若这些端口被占用,用
kaleido node create以不同的基础端口重建环境 up之后稍等片刻:节点需要先打开数据库才能对外提供服务
节点连接
Node URL not configured.
Node URL not configured.
Use --node-url or: kaleido config set node-url http://localhost:3001原因: 该命令需要节点,但标志、环境变量和配置里都没有节点 URL。解决办法:- 指向某个环境的节点:
kaleido node use <name> - 或直接设置:
kaleido config set node-url http://localhost:3001 - 或只为这一条命令覆盖:
kaleido --node-url http://localhost:3002 wallet balance
连接被拒绝,或响应的是另一个节点
连接被拒绝,或响应的是另一个节点
wallet、asset、channel、payment 报连接错误,或者余额属于另一个节点原因:- 容器没有在运行
node-url仍指向你上次使用的节点- shell 里导出了
KALEIDO_NODE_URL,静默覆盖了保存的配置
- 确认当前生效的节点:
kaleido config show,以及kaleido node list—— 生效的节点标记为● - 启动环境:
kaleido node up <name> - 检查是否有残留的覆盖:
echo $KALEIDO_NODE_URL - 记住优先级:标志 → 环境变量 → 配置文件
Node N does not exist in '<name>' — environment has M node(s).
Node N does not exist in '<name>' — environment has M node(s).
kaleido node use <name> --node 2 被拒绝原因: --node 是 compose 文件中实际定义的节点的 1 起始索引。解决办法: 用 kaleido node list 查看环境里有多少个节点。需要更多节点时,重建环境并在节点数量提示处填更大的值。相关的 No nodes found in environment '<name>'. Is the compose file present? 表示 compose 文件存在,但没有定义任何 rgb_node_* 服务。Error unlocking wallet,或所有调用都提示钱包已锁定
Error unlocking wallet,或所有调用都提示钱包已锁定
Error unlocking wallet: …,或重启后节点命令全部失败原因:- 节点重启后没有解锁 —— 每次重启都需要
unlock - 解锁请求指向的 bitcoind 或索引器不可达
- 这个节点上的钱包从未初始化
-
解锁:
kaleido node unlock -
如果问题出在服务上,改用索引器跟随链,而不是 bitcoind:
-
如果从未初始化,先运行一次
kaleido node init -
用
kaleido node info确认结果
Error initializing wallet
Error initializing wallet
Error initializing wallet: …原因:- 这个节点上的钱包已经初始化过 ——
init每个节点只做一次,不是每个会话一次 - 恢复时传入的
--mnemonic无效
- 若节点已初始化,直接执行
kaleido node unlock - 想从干净的节点重来,
kaleido node clean <name>会不可逆地删除数据卷,之后才能重新init - 恢复时给助记词加引号,避免被 shell 拆开:
--mnemonic "word1 word2 …"
钱包与资产
余额看起来够,发送却失败
余额看起来够,发送却失败
wallet send 或 asset send 报余额不足原因:- 余额尚未确认
- 没有空闲 UTXO 可供 RGB 分配使用
- 金额之外的手续费无法覆盖
- 查看真正可用的部分:
kaleido wallet balance与kaleido wallet utxos - 在 RGB 操作前创建有色 UTXO:
kaleido wallet create-utxos --num 10 --size 3000 - signet 上用 Mutiny 水龙头给节点充值,地址来自
kaleido wallet address - 用
kaleido wallet estimate-fee --blocks 6查看当前费率,并显式传入--fee-rate
RGB 转账一直处于 pending
RGB 转账一直处于 pending
kaleido asset transfers <asset-id> 中的转账始终没有完成解决办法:- 推进待处理的转账:
kaleido asset refresh - 重新同步 RGB 钱包:
kaleido asset sync - 再看一次状态:
kaleido asset transfers <asset-id> - 只有在转账确实失效时,才释放它占用的分配:
kaleido asset fail-transfers --batch-idx <idx>
--skip-sync,请去掉:命令返回的本来就是缓存状态。asset send-batch 报 File not found 或 Invalid JSON
asset send-batch 报 File not found 或 Invalid JSON
File not found: <path> 或 Invalid JSON: …原因: asset send-batch 接收的是一个描述收款方的 JSON 文件路径,而不是内联标志。解决办法:PATH argument is required in non-interactive mode.
PATH argument is required in non-interactive mode.
--agent 模式下 wallet backup 或 wallet restore 被拒绝原因: 目标路径是位置参数,而提示已被禁用。解决办法: 显式传入路径和密码。restore 会覆盖当前节点数据,务必谨慎执行。通道与 LSP 订单
Peer must be in pubkey@host:port format in non-interactive mode.
Peer must be in pubkey@host:port format in non-interactive mode.
channel open 或 peer connect 被拒绝原因: 只传了裸公钥。交互模式下 CLI 会追问地址,非交互模式下必须给出完整格式。解决办法:- 使用完整的 peer 字符串:
kaleido channel open 03abc...@peer.host:9735 --capacity 100000 - 先连接并确认可达:
kaleido peer connect 03abc...@peer.host:9735,然后kaleido peer list
PEER argument is required in non-interactive mode. 与 --capacity is required in non-interactive mode.。--asset-amount requires --asset-id.
--asset-amount requires --asset-id.
--push-asset-amount,以及 LSP 订单上的 --lsp-asset-amount / --client-asset-amount。解决办法:--lsp-asset-amount is required when --asset-id is set. 与 --client-asset-amount must be less than or equal to --lsp-asset-amount.。--peer is required in non-interactive mode.(channel close)
--peer is required in non-interactive mode.(channel close)
channel close <channel-id> 被拒绝原因: 关闭通道同时需要通道 ID 和对端公钥。解决办法:--force:单方面关闭会把资金锁定到时间锁到期为止。Asset '<asset-id>' is not available from the LSP.
Asset '<asset-id>' is not available from the LSP.
channel order create 或 estimate-fees 拒绝该资产原因: LSP 只为它支持的资产开通有色通道。解决办法: 先查看它支持哪些资产,再使用其中的资产 ID。LSP did not report a connection URL. 是同一次交互的另一面 —— 返回的 LSP 元数据里没有对等地址,订单无法继续。订单并不处于等待付款的状态
订单并不处于等待付款的状态
channel order pay 返回 This order is not awaiting a wallet payment. Current payment state: <state>原因:- 订单已经支付过
- 在完成资金确认前就过期了
- 它在等待费率决定,而不是等待付款
- 查看当前状态:
kaleido channel order get <order-id> --access-token <token> - 若在等待费率,提交决定:
kaleido channel order decide <order-id> --accept - 若已过期,重新创建订单 ——
--funding-within与--expiry-blocks控制这两个时间窗 - 非交互模式下必须显式选择付款方式,否则会看到
Specify exactly one of --onchain or --offchain in non-interactive mode.
市场与交换
Pair '<pair>' not found.
Pair '<pair>' not found.
Pair 'BTC/USD' not found. Use 'kaleido market pairs' to list available pairs.原因:- 拼写错误,或该 ticker 未上线
- 交易对方向写反了 —— 顺序是有意义的
- 列出所有交易对:
kaleido market pairs - 使用该输出中确切的
BASE/QUOTEticker
No trading pairs are currently available. 则不同:maker 返回了空列表,问题在上游而不在你的命令。Provide exactly one of --from-amount or --to-amount.
Provide exactly one of --from-amount or --to-amount.
Provide --from-amount or --to-amount in non-interactive mode.原因: 报价只锚定一侧 —— 你固定发送金额或接收金额,另一侧由 maker 定价。解决办法:- 二者只传其一
- 记住这里是显示单位:
--from-amount 0.001是 0.001 BTC,不是 1000 聪 - 如果金额被判为无效,用
kaleido market pairs查看该交易对的上下限
Swapstring must contain 6 slash-separated fields.
Swapstring must contain 6 slash-separated fields.
Swapstring fields must not be empty or whitespace.、Swapstring contains invalid numeric fields.原因: swapstring 被截断或损坏了。它的结构是:- 从
swap atomic init的输出中完整复制,不要折行 - 加引号,避免 shell 改动它:
--swapstring '30/rgb:abc.../10/rgb:def.../600/<hash>' - 或者用
kaleido swap atomic run <pair>完全跳过这一步
Auto-whitelist validation failed
Auto-whitelist validation failed
Auto-whitelist validation failed: …,或类似 Swapstring from_amount 30 does not match quote amount 31. 的信息原因: 在本地节点白名单之前,CLI 会用你接受的报价校验 swapstring。不匹配说明这个 swapstring 属于另一笔交换,或者报价已经变了。解决办法:- 重新执行
swap atomic init,并使用同一次响应里的 swapstring 与 payment hash —— 不要跨次混用 - 重新报价后不要复用旧的 swapstring
Maker returned no swap payload for --payment-hash; refusing to auto-whitelist.表示 maker 没有该 payment hash 对应的交换:用kaleido swap atomic status <payment-hash>核对
execute 失败,因为交换从未被加入白名单
execute 失败,因为交换从未被加入白名单
swap atomic init 成功,swap atomic execute 失败原因: maker 结算之前,taker 节点必须先接受这笔交换,而这一步发生在你的节点上,不在 maker 那边。解决办法: 三个步骤必须按顺序执行。execute 加上 --auto-whitelist,或直接用 kaleido swap atomic run <pair>。execute 之后交换一直挂起
execute 之后交换一直挂起
execute 已返回,但资产没有到账解决办法:- 轮询 maker 一侧:
kaleido swap atomic status <payment-hash> - 轮询你的节点一侧:
kaleido node swap status <payment-hash> --taker - 列出节点已知的交换:
kaleido node swap list - 推进待处理的 RGB 转账:
kaleido asset refresh
kaleido channel list 检查该资产的容量,而不只是看总余额。脚本与自动化
命令卡住不返回
命令卡住不返回
--agent,它会把所有提示变成报错:PAIR argument is required in non-interactive mode. 或 <option> is required in non-interactive mode.,直接指出缺了什么。--yes is required in non-interactive mode
--yes is required in non-interactive mode
--yes is required in non-interactive mode to accept the quoted price.、… to accept the RFQ price.、… to pay the order.,或它们的 JSON 模式变体原因: 任何花钱或接受价格的操作都会请求确认,而此时没人可以确认。解决办法:- 确认参数无误后加上
--yes - 先用
kaleido market quote或kaleido channel order estimate-fees核价,再带--yes执行 kaleido node clean与kaleido config reset同样接受--yes
互斥标志
互斥标志
Must specify exactly one of --accept or --reject、Must specify at most one of --taker or --maker,或 Specify exactly one of --onchain or --offchain in non-interactive mode.原因: 这些是选择而不是开关,两个都不给或都给时,CLI 拒绝猜测。解决办法: 只传其中一个。交互模式下两个都省略时,CLI 会改为询问。调试
当报错信息不足以定位问题时,从 CLI 自己的视角逐层向外排查:echo $KALEIDO_NODE_URL 与 echo $KALEIDO_API_URL:导出的环境变量会覆盖保存的配置,而且很容易被忘记。
获取帮助
如果遇到的是疑问而不是报错,请查阅常见问题;上游文档与相关链接见更多资源。 其他情况请通过下面你偏好的渠道反馈问题,并附上:- CLI 的安装方式,以及
uv tool list的输出(没有--version标志) - Python 版本(
python --version)与操作系统 - 你执行的完整命令,以及加上
--json后的输出 - 节点是本地 Docker 环境还是远程节点,以及所在网络
kaleido config show与kaleido node ps的输出,去掉其中的密码