Bo's Lab

XRP 的 1 XRP 最低储备金:为什么你的地址必须留钱?

发现一个有趣的事

最近在测试 XRP 充提的时候,发现一个现象:XRP 地址上必须保留至少 1 XRP,否则无法转账。

这不是 Bug,而是 XRP Ledger(XRPL)的一个核心设计。

如果你试图把地址里的 XRP 全部转走,交易会失败。那 1 XRP 是"锁住"的,你花不掉。

为什么要这样设计?

一句话:防垃圾账户。

XRPL 是一个共享的全局账本,每个地址的数据都存在所有验证节点的内存中。如果创建账户不要钱,攻击者可以无限制地刷账户,让账本膨胀到节点跑不动。

储备金机制就是给创建账户设了一个经济门槛:你要在链上"占位",就得质押一笔钱。

这个思路其实很聪明 — 不靠 Gas Fee 限制交易,而是靠储备金限制状态膨胀。

两种储备金

XRPL 的储备金分两部分:

基础储备(Base Reserve)= 1 XRP

  • 每个地址最少要持有的 XRP
  • 这是账户"存在"的代价
  • 用来激活账户、允许收发交易

对象储备(Owner Reserve)= 每个对象 0.2 XRP

  • 你在链上创建的每个对象(Trust Line、Offer、Escrow 等)都要额外锁定 0.2 XRP
  • 比如你要持有 USDT,就需要建一条 Trust Line → 额外锁 0.2 XRP
  • 对象删除后,这部分 XRP 会释放

举个例子:一个地址持有 3 种代币(3 条 Trust Line),最低储备就是:

1 + 0.2 × 3 = 1.6 XRP

历史变化

储备金不是一成不变的,通过验证者投票可以调整:

  • 最早:基础储备是 200 XRP(那时 XRP 才几分钱)
  • 后来:降到 20 XRP,再降到 10 XRP
  • 2024年12月:最新一次投票降到了 1 XRP

降低储备金的原因很简单 — XRP 涨价了。如果还要求 10 XRP(当时约 $25),创建一个账户的门槛太高了。

对测试的影响

作为测试工程师,这个机制意味着:

充值测试

  • 新地址首次充值必须 ≥ 1 XRP,否则交易失败
  • 如果用户充了 0.5 XRP,这笔钱会"消失"(实际上是被退回)

提现测试

  • 用户不可能提走全部余额,最多只能提 余额 - 1 - (对象数 × 0.2) XRP
  • 需要在 UI 上正确显示"可用余额"和"锁定余额"

边界场景

  • 账户有 Trust Line 但 XRP 不足以覆盖对象储备 → 不能再创建新对象
  • 删除 Trust Line 后储备释放 → 可用余额变多
  • 储备金只能用来支付交易手续费,不能直接转给别人

和其他链对比

这个设计在公链里不算主流,但类似的链还有几条:

  • Stellar (XLM) — 同样有最低储备要求(1 XLM)
  • EOS — 需要 RAM 资源来存储账户数据
  • Polkadot (DOT) — 有 Existential Deposit(最低存在余额 1 DOT)

大部分 EVM 链(ETH、BSC 等)没有这个概念 — 账户可以余额为 0。

总结

XRP 的储备金机制本质上是一种状态租金 — 你在链上占用存储空间,就要付出代价。这个设计在防止状态膨胀方面很有效,但也给用户体验带来了一些坑(比如"为什么我提不完?")。

对于做充提测试的同学,遇到类似有最低储备要求的链,重点关注:

  1. 首次充值的最低金额
  2. 可用余额的计算逻辑
  3. 全额提现时的边界处理
  4. UI 上对锁定金额的展示

参考资料:XRPL 官方文档 - Reserves