为什么要使用虚拟账户
在传统加密钱包的基础上,虚拟账户把链上复杂性与业务层解耦:一条链只需要一个链上“真正”地址(XPUB),其余用户的充值地址全部复用这一地址并依靠 destinationTag(XRP)或 message(XLM)来区分。
这不仅能 显著节省储备资金,还能让交易所或应用在同一链上托管数百万用户资产,而不必为每人冻结几十枚 XRP 或 XLM 作为最小余额。
一、获取链上主钱包密钥(Master Wallet)
若要创建 XRP 或 XLM 虚拟账户,第一步是生成你的“Master Exchange 地址”——即专用 XPUB,并拿到与之匹配的私钥用来签名。
REST API 调用
curl -X GET https://api.tatum.io/v3/xrp/account \
-H 'x-api-key: YOUR_KEY'返回示例:
{
"address": "rDWpnpN3KHUz49WZJpwNe2GQLHeSZ62B1d", // 作为后续 XPUB
"secret": "ssKPqjZ9VPg79rEsrHjydRLMM8xgG" // 签名私钥
}注意
- 只需 一层 API 调用 即可获得完整钥匙对。
- 建议使用 密钥管理系统(KMS) 在生产环境托管私钥,避免明文泄露。
二、在总账本中创建虚拟账户
虚拟账户相当于账本系统里的“子账本”,它 复用同一个链上地址,但根据 destinationTag 划分不同用户余额。
关键字段释义
| 字段 | 作用 |
|---|---|
| currency | 仅限于 XRP 或 XLM |
| xpub | 必须复用第一步返回的地址 |
| customer | 绑定你的应用用户模型 |
| compliant | 合规标记 |
| accountingCurrency | 报表时用于换算的法币单位 |
| externalId | 与你数据库中用户唯一主键对应 |
REST API 示例
curl -X POST https://api.tatum.io/v3/ledger/account \
-H 'content-type: application/json' \
-H 'x-api-key: YOUR_KEY' \
-d '{
"currency":"XRP",
"xpub":"rDWpnpN3KHUz49WZJpwNe2GQLHeSZ62B1d",
"customer": {
"accountingCurrency":"USD",
"customerCountry":"US",
"externalId":"123654",
"providerCountry":"US"
},
"compliant":false,
"accountingCurrency":"USD",
"accountNumber":"123456"
}'返回:
{
"currency": "XRP",
"active": true,
"balance": {
"accountBalance": "0",
"availableBalance": "0"
},
"frozen": false,
"xpub": "rDWpnpN3KHUz49WZJpwNe2GQLHeSZ62B1d",
"accountingCurrency": "USD",
"id": "61afba85997b887f543fa7f0" // 虚拟账户 ID
}常见创建误区
把xpub换成其他链上地址会导致account.xpub.bnb错误,提示 “仅允许使用 1 个 XPUB”。务必复用同一链上地址。
三、为用户生成充值信息
在虚拟账户内,“存款地址”就是 这组统一的地址。你只需要给每位用户分配一个 独立的 destinationTag 或 message 即可运行。
调用
curl -X POST 'https://api.tatum.io/v3/offchain/account/{Virtual_Account_ID}/address?index=1' \
-H 'x-api-key: YOUR_KEY'返回解析:
{
"xpub": "rDWpnpN3KHUz49WZJpwNe2GQLHeSZ62B1d",
"derivationKey": 1,
"address": "rDWpnpN3KHUz49WZJpwNe2GQLHeSZ62B1d", // 实际链上地址
"currency": "XRP",
"destinationTag": 1 // 用户专属标签
}在 UI 或邮件里给用户的提示示例:
请向地址rDWpnpN3KHUz49WZJpwNe2GQLHeSZ62B1d转账,并务必在 备注/Tag 字段填写1,否则可能无法正确到账。
四、典型业务场景示范
假设你运营一个法币-加密兑换平台,新用户 Jane 首次入金 100 XRP:
- Jane 注册 → 后端用
externalId=jane123创建虚拟账户。 - 系统分配
destinationTag=1301。 - Jane 得到提示,把 100 XRP 打到主地址并填写 Tag 1301。
- 链上监听器检测到交易 → 确认 Tag 匹配 → 自动把 100 XRP 记到 Jane 的虚拟账户余额。
- 如需提现,系统用第一步拿到的私钥签名并广播链上交易。
👉 三步完成用户入账与提现自动化(含 Slides + 示例代码)
FAQ:创建 XRP/XLM 虚拟账户常见疑问
Q1:为什么只能用一个链上地址?
A:XRP 和 XLM 采用 储备金机制,每生成一条独立的新地址需要冻结 10-20 枚代币;交易所若创建十万条地址,就要锁仓数百万枚 XRP,这在成本上不可持续。因此官方推荐用一个地址加 Tag 或 Message。
Q2:如何防止用户填错 destinationTag?
A:
- 前端表单 强制必填;
- 充值地址页面直接带 QR code,自动附带 Tag,减少手动输入;
- 后台对缺失 Tag 的入金发出自动通知,支持人工修复。
Q3:如果我需要扩展更多币种,一样流程吗?
A:BTC、ETH 等没有储备金要求,可以按用户 单线方案 分别生成独立链上地址;XRP/XLM 必须回退到本文的 聚合地址 + Tag 模式。
Q4:主钱包私钥一定要冷存储吗?
A:强烈建议。主钱包控制所有用户资产,使用 分离签名服务 / KMS 能有效降低被黑客直连服务器盗取私钥的风险。
Q5:我已有传统交易所架构,能平滑迁移吗?
A:可以。只需将旧钱包系统生成的余额转成创建 usdt, usdt, usdc 等虚拟账户,再为每个老用户 批量生成 destinationTag 并绑定旧 UID,再进行数据迁移即可。
结语
借助 XRP、XLM 虚拟账户 方案,你不仅能 降低链上成本,还能在几分钟内完成千万级用户的后台账户搭建。把握储备机制的好处,合规地复用主地址与唯一 Tag,destination 字段成为区分用户的“身份证号”。掌握本文流程并在生产环境配合 KMS,即可让交易所托管与汇款体验接近传统电汇般丝滑。