如何在 RippleApi payment JSON 中使用 Destination tag
支付老李
结论
在旧版 RippleAPI 的 payment 对象中,直接把 tag 添加到 destination 下。它与 address、amount 同级,不能放在 amount 中,也不能拼接到地址里。
const payment = {
source: {
address: ADDRESS_1,
maxAmount: {
value: amount,
currency: currency
}
},
destination: {
address: ADDRESS_2,
tag: DESTINATION_TAG,
amount: {
value: amount,
currency: currency
}
}
}
DESTINATION_TAG 通常是一个无符号 32 位整数,例如:
const DESTINATION_TAG = 123456;
为什么这样设置
Destination Tag 用来区分同一个 XRP Ledger 地址下的账户、用户或充值记录。交易提交后,destination.tag 对应 XRP Ledger 交易中的 DestinationTag 字段。
Destination Tag 既不是地址的一部分,也不是金额属性。下面两种写法都不正确:
address: `${ADDRESS_2}:${DESTINATION_TAG}`
amount: {
value: amount,
currency: currency,
tag: DESTINATION_TAG
}
完整示例
const payment = {
source: {
address: ADDRESS_1,
maxAmount: {
value: amount,
currency: currency
}
},
destination: {
address: ADDRESS_2,
tag: 123456,
amount: {
value: amount,
currency: currency
}
}
};
const prepared = await api.preparePayment(ADDRESS_1, payment);
如果标签来自字符串输入,应先严格校验,再转换成数字:
const parsedTag = Number(destinationTag);
if (
!Number.isInteger(parsedTag) ||
parsedTag < 0 ||
parsedTag > 0xFFFFFFFF
) {
throw new Error('Invalid destination tag');
}
payment.destination.tag = parsedTag;
注意事项
- Destination Tag 的有效范围是
0到4294967295。 - 不能使用负数、小数或超出范围的数值。
- 部分交易所和托管钱包强制要求填写 Destination Tag。标签遗漏或填写错误时,对方可能无法自动识别对应的入账账户。
- 不需要标签时,省略
tag字段即可。不要随意填写0,因为0本身也是有效标签。 source.tag和destination.tag的含义不同。如果发送方需要 Source Tag,应在source下单独添加tag。- 以上写法要求当前使用的
ripple-lib/RippleAPI版本支持 payment 对象中的destination.tag。如果旧版本在参数校验阶段拒绝该字段,只修改 JSON 不能解决问题,需要升级到兼容版本或改为构造底层交易。 - 如果使用包含标签信息的 X-address,应按照对应库版本的地址规则处理,避免在地址和
destination.tag中重复指定标签。
备注:内容仅供参考。
