如果你已经拥有比特币钱包,下一步就是学会如何安全、高效地发送与接收比特币,比特币交易命令正是连接你与区块链世界的桥梁,它既是技术工具,也是风险管理的阀门,本文将围绕“比特币交易命令”这一关键词,从基础概念、命令格式、实战演练、脚本自动化到安全加固,为你提供一份可落地的操作手册。
为什么必须掌握比特币交易命令
图形界面钱包虽然友好,但在批量付款、冷签名、手续费动态调整等场景下显得笨拙,命令行工具(Bitcoin Core 的 bitcoin-cli、Electrum 的 cli 版、btcd 的 btcctl 等)则提供了原子级的控制能力:你可以精确指定输入输出、锁定脚本、手续费率,甚至构造复杂的多签或时间锁交易,一句话:图形界面是“自动挡”,命令行是“手动挡”,真正的高手必须会“换挡”。
准备工作:安装节点与钱包
1. 安装 Bitcoin Core
Ubuntu 示例:
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt update && sudo apt install bitcoind bitcoin-cli
2. 初始化配置文件 ~/.bitcoin/bitcoin.conf
server=1
rpcuser=alice
rpcpassword=StrongP@ssw0rd
3. 启动并同步区块
bitcoind -daemon
bitcoin-cli getblockcount # 确认同步完成
核心命令速查表
bitcoin-cli getnewaddress "label" "address_type"
bitcoin-cli getbalance "*" 0 true
bitcoin-cli listunspent 1 9999999 '["address"]'
bitcoin-cli createrawtransaction '[{"txid":"...","vout":0}]' '{"address":amount}'
bitcoin-cli signrawtransactionwithwallet "hexstring"
bitcoin-cli sendrawtransaction "signedhex"
bitcoin-cli gettransaction "txid" true
以上 7 条命令覆盖了 90% 的日常需求:生成地址、查询余额、列出可花费输出、创建裸交易、签名、广播、查询回执。
实战演练:构造并发送一笔 0.01 BTC 的交易
场景:Alice 要给 Bob 支付 0.01 BTC,并指定 0.00005 BTC 作为矿工费。
1. 获取 Bob 的收款地址
bob_addr=$(bitcoin-cli getnewaddress "BobPayment")
2. 找出 Alice 钱包里大于 0.01005 BTC 的 UTXO
utxo=$(bitcoin-cli listunspent 1 9999999 '[]' true | jq -r '.[] | select(.amount>0.01005) | {txid:.txid,vout:.vout}' | head -n 1)
3. 计算找零地址
change_addr=$(bitcoin-cli getrawchangeaddress)
4. 创建裸交易
rawtx=$(bitcoin-cli createrawtransaction "[${utxo}]" "{\"${bob_addr}\":0.01,\"${change_addr}\":0.00005}")
5. 签名
signed=$(bitcoin-cli signrawtransactionwithwallet "$rawtx" | jq -r '.hex')
6. 广播
txid=$(bitcoin-cli sendrawtransaction "$signed")
7. 验证
bitcoin-cli gettransaction "$txid" | jq '.confirmations'
进阶:使用钱包脚本自动化
在 Linux 服务器上,你可以用 bash 脚本定时扫描未确认交易并追加手续费(RBF),示例片段:
#!/bin/bash
txid="$1"
newfee="$2"
oldtx=$(bitcoin-cli getrawtransaction "$txid")
decoded=$(bitcoin-cli decoderawtransaction "$oldtx")
inputs=$(echo "$decoded" | jq -c '.vin')
outputs=$(echo "$decoded" | jq -c '.vout | map(select(.value>0)) | map({(.scriptPubKey.addresses[0]): .value}) | add')
newtx=$(bitcoin-cli createrawtransaction "$inputs" "$outputs")
signed=$(bitcoin-cli signrawtransactionwithwallet "$newtx" | jq -r '.hex')
bitcoin-cli sendrawtransaction "$signed"
保存为 bumpfee.sh,chmod +x bumpfee.sh,即可通过 ./bumpfee.sh txid 0.0001 实现费用替换。
安全加固:离线签名与 PSBT
1. 在离线机生成私钥,永不触网。
2. 在线机用 createrawtransaction 生成 PSBT(部分签名比特币交易)。
3. 通过二维码或 U 盘把 PSBT 传到离线机。
4. 离线机用 bitcoin-cli walletprocesspsbt 签名。
5. 把签名后的 PSBT 传回在线机广播。
该流程杜绝了私钥泄露,是交易所、矿池、大额钱包的标配。
常见坑与排查
• 错误:mandatory-script-verify-flag-failed
原因:输入脚本与输出脚本不匹配,通常是地址类型(P2PKH、P2SH、P2WPKH)搞错。
• 错误:insufficient priority
原因:手续费过低,节点拒绝转发,可启用 -acceptnonstdtxn=1 测试,或提高费率。
• 错误:txn-mempool-conflict
原因:双花,检查是否已广播过相同输入的交易。
未来展望:Taproot 与 Miniscript
随着 Taproot 激活,比特币交易命令将支持 Schnorr 签名、MAST 结构,Miniscript 则让复杂脚本可读化,命令行里可以直接用 miniscript 描述符生成地址,
bitcoin-cli getnewaddress "" "bech32m" '{"desc":"wsh(and_v(v:pk(alice_key),or_d(pk(bob_key),older(144)))"}'
这意味着多重条件、时间锁、哈希锁等高级逻辑将像写 SQL 一样简单。
结语
掌握比特币交易命令不是炫技,而是对自己资产负责,从最简单的 bitcoin-cli sendtoaddress 到离线 PSBT、RBF、Taproot 脚本,每一步都在降低信任、提升效率,把本文的命令复制到终端,亲手发一笔 0.0001 BTC 的测试交易,你会立刻体会到“私钥在手,天下我有”的快感。