
钱包不是账户系统:BSV 钱包管理的是密钥和 UTXO
BSV 钱包不是传统账户系统。链上没有单一余额字段,钱包通过管理私钥、UTXO、交易构造和签名来计算余额并发起交易。理解这一点,有助于正确认识找零、多输入、非托管钱包和应用授权等关键概念。
林知衡
technical_editor
先说结论
在 BSV 中,钱包不是银行账户,也不是链上的“余额表”。钱包的核心作用,是帮助用户管理密钥、UTXO、交易构造、签名以及相关证明数据。
很多用户会把钱包理解成“里面有一个余额”。这个说法在产品界面上很方便,但从底层机制看并不准确。BSV 采用的是 UTXO 模型:链上记录的是一笔笔交易输出,而不是每个用户的账户余额。
理解这一点,对学习 BSV、开发应用、判断资金控制权都很重要。
账户系统是什么样的
传统账户系统通常接近这样的模型:
系统里有一个数据库,记录每个账户的余额。转账的本质,是数据库更新:Alice 的余额减少,Bob 的余额增加。
银行、支付平台、交易所账户大多接近这种模型。用户看到的是账户余额,平台后台维护余额状态。
BSV 使用的是 UTXO 模型
BSV 不是账户余额模型。
链上不会有一个字段写着:
链上记录的是一笔笔交易输出。某些输出还没有被花掉,这些未花费的交易输出就是 UTXO(Unspent Transaction Output)。如果钱包能够用私钥控制这些 UTXO,钱包就可以把它们加总,并在界面上显示为余额。
例如:
这里的“100 satoshis”不是链上的单一余额字段,而是钱包根据可用 UTXO 计算出来的视图。
一笔付款如何发生
假设你要支付 60 satoshis,钱包可能选择两个 UTXO 作为交易输入:
然后钱包构造新的交易输出:
交易完成后,原来的 UTXO A 和 UTXO B 会被花掉。与此同时,给收款人的 60 satoshis 成为新的 output;找零的 14 satoshis 也会成为一个新的 UTXO,由钱包继续管理。
这就是为什么在 UTXO 模型里,付款常常会出现“多个输入”和“找零输出”。
钱包到底管理什么
一个 BSV 钱包通常不只是显示余额。它至少需要管理以下内容:
- 私钥或签名权限;
- 公钥和地址;
- 可用 UTXO;
- 找零地址;
- 交易构造;
- 手续费估算;
- 交易签名;
- 广播交易,或调用广播服务;
- 交易状态;
- SPV 证明或交易背景数据。
更高级的钱包还可能管理:
- paymail;
- xpub;
- BEEF / BUMP;
- 应用授权;
- BRC-100 接口;
- token 或应用协议状态。
因此,钱包远远不只是“显示余额”的工具。它是用户控制链上资产、签署交易和与应用交互的重要组件。
为什么“钱包不是账户系统”很重要
如果用账户模型理解 BSV,开发和使用过程中会遇到很多困惑。
为什么付款还要找零?
因为 UTXO 必须整体花费。如果一个 UTXO 的金额大于实际支付金额,剩余部分需要通过新的 output 找回给自己。
为什么一笔付款会有多个输入?
因为单个 UTXO 可能不够支付,钱包需要合并多个 UTXO 作为 input。
为什么同一个地址会有多笔 UTXO?
因为每次收款都可能创建一个新的 output。即使它们与同一个地址相关,也仍然是不同的 UTXO。
为什么余额显示和链上交易结构差很多?
因为余额是钱包计算出来的结果,不是链上的原生字段。链上原生记录的是交易、输入和输出。
非托管钱包与托管账户
还需要区分钱包和托管账户。
如果你在某个平台上看到 BSV 余额,但平台控制私钥,那么你直接拥有的并不是链上 UTXO 的控制权,而是平台账户里的记账权益或债权关系。平台如何管理链上 UTXO,取决于它自己的内部系统。
非托管钱包则不同。用户或用户设备控制私钥,钱包软件帮助用户构造和签名交易。服务方可以提供查询、广播、索引等便利,但不能仅靠后台数据库转走用户资金。
所以,“钱包不是账户系统”不仅是技术概念,也关系到安全边界:关键问题始终是,私钥由谁控制。
BSV 应用中的钱包角色
在 BSV 应用架构里,钱包通常位于用户和应用之间。
应用想执行某个操作,例如发布数据、支付费用、签署凭证,可以向钱包发起请求。钱包负责处理与资金和签名相关的关键步骤:
- 展示请求;
- 检查权限;
- 选择 UTXO;
- 创建交易;
- 签名;
- 返回交易或广播结果。
应用不应该默认拿到用户私钥。更合理的方式,是应用通过标准接口请求钱包完成特定操作,例如 BRC-100 风格的钱包到应用接口。
这样的架构有助于把应用逻辑和密钥控制分开,减少不必要的安全风险。
钱包和区块浏览器不是一回事
区块浏览器可以查看链上交易,但它不是钱包。
区块浏览器可以告诉你:
- 某个地址相关的交易;
- 某个 txid 的详情;
- 某个区块的内容。
但它不能替你签名,不能证明你拥有某个私钥,也不能安全管理你的 UTXO。
钱包可以使用区块浏览器或其他服务查询数据,但钱包的核心职责仍然是管理和使用密钥,并帮助用户构造、签名和处理交易。
新手最容易混淆的几点
学习 BSV 时,可以先记住这些边界:
- 钱包余额不是链上的单一余额字段;
- 地址不是账户;
- 钱包不一定托管资金,关键看私钥由谁控制;
- 区块浏览器不是钱包;
- 找零不是系统自动“改余额”,而是钱包构造交易时创建的新 output;
- 钱包可以在界面上隐藏 UTXO 细节,但开发者迟早需要理解它。
小结
BSV 钱包更像是密钥、UTXO、交易和证明数据的管理工具,而不是一个传统账户系统。
用户界面可以显示“余额”,但这个余额来自钱包对可用 UTXO 的计算。真正发生在链上的,是交易输入被花费、新的交易输出被创建。
理解这一点后,找零、多输入、多 UTXO、非托管钱包、应用授权等概念都会更容易串联起来。对开发者来说,这也是正确设计 BSV 应用和钱包交互的基础。
参考资料
- BSV Transactions docs: https://protocol.bsvblockchain.org/bsv-blockchain/transactions
- Transaction Inputs and Outputs: https://docs.bsvblockchain.org/protocol/transaction-lifecycle/transaction-inputs-and-outputs
- BSV TypeScript SDK first transaction: https://bsv-blockchain.github.io/ts-sdk/tutorials/first-transaction/
推荐文章
区块链2026年5月26日
一个地址可以有很多 UTXO:理解 BSV 中的地址、余额与交易构造
在 BSV 的 UTXO 模型中,一个地址不是账户,也不是单一余额槽。同一个地址可以关联多个 UTXO,钱包余额只是这些 UTXO 的汇总。理解这一点,有助于正确处理交易构造、手续费、UTXO 碎片化和隐私问题。
区块链2026年5月26日
在 BSV 中,花钱就是消耗旧 UTXO、创造新 UTXO
在 BSV 中,花钱不是修改余额,而是消耗旧 UTXO、创建新 UTXO。理解这一点,有助于掌握付款、找零、交易链以及 token 和应用状态转移的基本逻辑。
区块链2026年5月26日
什么是 UTXO:理解 BSV 交易模型的基础
UTXO 是“未花费交易输出”,是 BSV 交易模型的基本单位。钱包余额并不是链上的账户字段,而是一组可控制 UTXO 的金额总和。理解 UTXO,有助于理解 BSV 的 input、output、找零、手续费、双花、Script 以及并行处理。