#钱包 #命令 #液体 #cli命令 #串行 #lwk #服务器

bin+lib lwk_cli

Liquid 钱包套件 - 与 RPC 服务器交互的命令行界面

7 个版本 (破坏性)

0.7.0 2024年7月5日
0.5.1 2024年5月22日
0.4.0 2024年5月3日
0.3.0 2024年3月20日
0.1.0 2024年1月26日

#1 in #lwk

每月25次下载

MIT OR BSD-2-Clause

55KB
1K SLoC

CLI

构建所需的可执行文件需要 rust

$ git clone [email protected]:Blockstream/lwk.git
$ cd lwk
$ cargo install --path ./lwk_cli

如果您想通过串行构建启用 Jade

$ cargo install --path ./lwk_cli --features serial

帮助显示可用的命令

$ lwk_cli --help

使用以下命令安装 bash 完成脚本

$ lwk_cli generate-completion bash | jq -r . | sudo tee /usr/share/bash-completion/completions/lwk_cli

其他 shell 也可用:bash、elvish、fish、powershell、zsh。目标文件路径 /usr/share/bash-completion/completions/cli 可能根据您的发行版而有所不同。

服务器

启动

$ lwk_cli server start

或使用更多日志

$ RUST_LOG=debug lwk_cli server start

在后台启动服务器并将日志记录到文件

$ lwk_cli server start 2>debug.log &

停止

如果不在后台,请在启动它的终端或另一个 shell 中按 ctrl-c

$ lwk_cli server stop

终止在后台启动的服务器的一种方法是在另一个 shell 中输入 fg 将后台进程带到前台,然后按 ctrl-c

客户端

每个命令都需要服务器正在运行。

生成一个软件签名者("无状态"请求)

$ lwk_cli signer generate

相当于

$ curl --header "Content-Type: application/json" --request POST --data '{"method":"signer_generate","params":[],"id":1,"jsonrpc":"2.0"}' https://127.0.0.1:32111 -s

要查看通过 cli 命令交换的 RPC 数据,启用应用日志跟踪,例如

$ RUST_LOG=app=trace cargo run -- wallet balance --wallet ciao
...
2023-11-28T09:36:18.696846Z TRACE app::client: ---> {"method":"balance","params":{"name":"ciao"},"id":2,"jsonrpc":"2.0"}
2023-11-28T09:36:18.697675Z TRACE app::client: <--- {"result":null,"error":{"code":-32008,"message":"Wallet 'ciao' does not exist","data":{"name":"ciao"}},"id":2,"jsonrpc":"2.0"}
{
  "code": -32008,
  "data": {
    "name": "ciao"
  },
  "message": "Wallet 'ciao' does not exist"
}

加载钱包并请求余额("有状态"请求)

$ lwk_cli wallet load --wallet custody -d "ct(L3jXxwef3fpB7hcrFozcWgHeJCPSAFiZ1Ji2YJMPxceaGvy3PC1q,elwpkh(tpubD6NzVbkrYhZ4Was8nwnZi7eiWUNJq2LFpPSCMQLioUfUtT1e72GkRbmVeRAZc26j5MRUz2hRLsaVHJfs6L7ppNfLUrm9btQTuaEsLrT7D87/*))#lrwadl63"
$ lwk_cli wallet balance --wallet custody

相当于

$ curl --header "Content-Type: application/json" --request POST --data '{"method":"wallet_load","params":{"descriptor":"ct(L3jXxwef3fpB7hcrFozcWgHeJCPSAFiZ1Ji2YJMPxceaGvy3PC1q,elwpkh(tpubD6NzVbkrYhZ4Was8nwnZi7eiWUNJq2LFpPSCMQLioUfUtT1e72GkRbmVeRAZc26j5MRUz2hRLsaVHJfs6L7ppNfLUrm9btQTuaEsLrT7D87/*))#lrwadl63", "name": "custody"},"id":1,"jsonrpc":"2.0"}' https://127.0.0.1:32111 -s

$ curl --header "Content-Type: application/json" --request POST --data '{"method":"balance","params":{"name":"custody"},"id":1,"jsonrpc":"2.0"}' https://127.0.0.1:32111 -s | jq .result

请求地址

$ lwk_cli wallet address --wallet custody
$ lwk_cli wallet address --wallet custody --index 4

一个错误测试用例

$ curl --header "Content-Type: application/json" --request POST --data '{"method":"wallet_load","params":{"desc":"fake"},"id":1,"jsonrpc":"2.0"}' https://127.0.0.1:32111 -s | jq
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32603,
    "message": "Serde JSON Error: missing field `descriptor`",
    "data": null
  }
}

创建一个单签钱包

首先启动服务器

lwk_cli --network testnet server start
$ MNEMONIC=$(lwk_cli signer generate | jq -r .mnemonic)
$ lwk_cli signer load-software --persist true --mnemonic "$MNEMONIC" --signer s1
$ DESCRIPTOR=$(lwk_cli signer singlesig-desc --signer s1 --descriptor-blinding-key slip77 --kind wpkh | jq -r .descriptor)
$ lwk_cli wallet load --wallet w1 -d "$DESCRIPTOR"
$ lwk_cli wallet address --wallet w1

向地址发送一些 lbtc

$ lwk_cli wallet balance --wallet w1

应显示余额

创建交易、签名和广播

您必须有一个已加载的单签钱包 w1,以及与之前步骤中创建的相应签名者 w1 相对应。还必须在钱包中有资金。

$ UNSIGNED_PSET=$(lwk_cli wallet send --wallet w1 --recipient tlq1qqwe0a3dp3hce866snkll5vq244n47ph5zy2xr330uc8wkrvc0whwsvw4w67xksmfyxwqdyrykp0tsxzsm24mqm994pfy4f6lg:1000:144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49 | jq -r .pset)

创建一个未签名的 PSET,发送 1000 satoshi 的 liquid btc(144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49 是测试网中的政策资产)到地址 tlq1qqwe0a3dp3hce866snkll5vq244n47ph5zy2xr330uc8wkrvc0whwsvw4w67xksmfyxwqdyrykp0tsxzsm24mqm994pfy4f6lg

签名 pset

$ SIGNED_PSET=$(lwk_cli signer sign --signer s1 --pset $UNSIGNED_PSET | jq -r .pset)

广播它。删除 --dry-run 以实际广播实时,否则仅对交易最终化进行部分检查(例如,不检查输入是否未花费)

$ lwk_cli wallet broadcast --dry-run --wallet w1 --pset $SIGNED_PSET)

依赖关系

~37–53MB
~780K SLoC