Skip to content
POST/open/v1/sweeps/estimate

预估归集手续费

读取确认余额及链上资源参数,预估所选钱包归集的能量、免费带宽、钱包 TRX 费用和 CatFee 租赁费用;不签名、不广播、不占用钱包。

POST /open/v1/sweeps/estimate

请求头

字段类型必填说明示例值
X-App-Idstring平台appID,规范正int64,只传一次。123456789012345001
X-Timestampstring当前秒级时间戳,服务器时间前后300秒内。1893456000
X-Signstring本次HMAC-SHA256签名,64位小写十六进制;按签名规则生成。按本次请求计算
Authorizationstring当前有效accessToken,格式为 Bearer 后加令牌。Bearer <ACCESS_TOKEN>
Content-Typestring单个UTF-8 JSON对象。application/json

认证只使用上表请求头;不要发送 Idempotency-Key。示例凭据、ID和地址是演示值,签名必须按实际参数和当前时间重新计算。

请求参数

无路径参数,不接受任何Query(包括仅有问号的URL)。以下字段全部放JSON,额外字段返回400。

字段类型必填说明示例值
wallet_idsstring[]1–20 个钱包,按输入顺序预估。[]
sweep_modestringall 全额归集;fixed 每钱包指定金额。 可选 all, fixed。"all"
requested_amountstring / nullall 必须明确为 null;fixed 必须为规范正 int64 字符串,最大 9223372036854775807,表示每个钱包的 USDT 最小单位金额。null
json
{
  "wallet_ids": [
    "123456789012345678"
  ],
  "sweep_mode": "all",
  "requested_amount": null
}

业务规则

每次1–20个规范正int64钱包ID,不允许重复;所有ID必须属于当前租户和网络,否则整体404。先用钱包预览固定确认清单,较大批次分组预估。

sweep_mode=all 时 requested_amount 必须明确为 null,金额取预估时已确认余额;fixed 时传每个钱包相同的正int64最小单位金额,不足时失败,不降额。未配置归集目标返回409;预估服务暂不可用返回 503;链上查询或 CatFee 报价失败按实际失败阶段返回整体错误或逐钱包失败。

单个钱包忙碌、向自身归集、余额不足或节点查询失败可返回HTTP200下的逐项failed;必须检查每一项的status和reason。

能量、带宽数量也使用整数字符串,但不是金额;标注SUN的字段才按六位精度换算为TRX。rental_cost 是预计平台租赁费用;estimated_fee、energy_fee 是预计钱包 TRX 支出;bandwidth_fee 始终为0。fee_limit 是完整能量准备额度对应的交易保护上限,不是扣款。

预估不创建、签名或广播交易,不锁定地址或余额,也不会保存费用报价。目标、余额、链上价格和钱包状态都可能在创建任务前变化;destination_version仅用于识别本次配置,不能把预估当作转账保证。创建归集仍须独立校验,本接口不需要request_id。

成功响应

HTTP 200,外层code=0、message为空字符串。

json
{
  "code": 0,
  "message": "",
  "data": {
    "network": "nile",
    "destination": "TAt8Du9Xw2CmrTHRawGETwiEKpNuKDSjE8",
    "destination_version": "1",
    "sweep_mode": "all",
    "requested_amount": null,
    "estimated_at": "2030-01-01T00:00:00Z",
    "items": [
      {
        "wallet_id": "123456789012345678",
        "address": "TQyeXvAnmKsBqo6V48RmhAnZpWLmR2D7DM",
        "amount": "100000000",
        "status": "estimated",
        "reason": "",
        "estimate": {
          "energy_required": "65000",
          "energy_from_origin": "0",
          "caller_energy_required": "65000",
          "energy_available": "0",
          "energy_from_resources": "0",
          "energy_burned": "65000",
          "energy_fee": "6500000",
          "bandwidth_required": "350",
          "staked_bandwidth_available": "0",
          "free_bandwidth_available": "600",
          "bandwidth_from_resources": "350",
          "bandwidth_burned": "0",
          "bandwidth_fee": "0",
          "energy_price": "100",
          "bandwidth_price": "1000",
          "fee_limit": "7150000",
          "estimated_fee": "6500000",
          "balance_usdt": "100000000",
          "balance_trx": "30000000",
          "activation_required": "false",
          "bandwidth_source": "free",
          "rental_quantity": "0",
          "rental_cost": "0",
          "fee_source": "wallet_trx",
          "prepared_energy": "71500",
          "max_wallet_trx_fee": "7150000",
          "free_bandwidth_limit": "600"
        }
      }
    ]
  }
}
字段类型必填说明示例值
codeinteger业务成功。0
messagestring成功时为空字符串。""
dataobject当前统一归集目标、预估时间和逐钱包手续费预估结果。"见 JSON 示例"
data.networkstring资产所属网络:main 或 nile。"nile"
data.destinationstring本次预估使用的租户归集地址。"TAt8Du9Xw2CmrTHRawGETwiEKpNuKDSjE8"
data.destination_versionstring本次预估使用的归集配置版本,不是钱包 ID。"1"
data.sweep_modestring与请求一致。 可选 all, fixed。"all"
data.requested_amountstring / nullall 必须明确为 null;fixed 必须为规范正 int64 字符串,最大 9223372036854775807,表示每个钱包的 USDT 最小单位金额。null
data.estimated_atstring本次预估响应开始生成的时间。"2030-01-01T00:00:00Z"
data.itemsobject[]逐钱包结果,与请求顺序一致。[]
data.items[].wallet_idstring本项钱包 ID。"123456789012345678"
data.items[].addressstring本项来源地址。"TQyeXvAnmKsBqo6V48RmhAnZpWLmR2D7DM"
data.items[].amountstring / null本次预估金额;无法取得金额时为 null;六位精度最小单位的整数字符串。null
data.items[].statusstringestimated 已取得费用预估;failed 本项不能预估。 可选 estimated, failed。"estimated"
data.items[].reasonstring失败原因;预估成功为空字符串。""
data.items[].estimateobject / null"见 JSON 示例"
data.items[].estimate.energy_requiredstring交易总能量需求,单位能量点。 以非负整数字符串传递。"65000"
data.items[].estimate.energy_from_originstring合约部署方分担的能量点数。 以非负整数字符串传递。"0"
data.items[].estimate.caller_energy_requiredstring调用钱包需要承担的能量点数。 以非负整数字符串传递。"65000"
data.items[].estimate.energy_availablestring钱包当前可用能量点数。 以非负整数字符串传递。"0"
data.items[].estimate.energy_from_resourcesstring实际使用已有资源抵扣的能量点数。 以非负整数字符串传递。"0"
data.items[].estimate.energy_burnedstring当前钱包能量缺口,仅 wallet_trx 路径预计燃烧 TRX 支付。 以非负整数字符串传递。"65000"
data.items[].estimate.energy_feestring预计钱包燃烧的 TRX 能量费用,resources/catfee 路径为0,单位SUN。 以非负整数字符串传递。"6500000"
data.items[].estimate.bandwidth_requiredstring预计交易所需带宽,单位字节。 以非负整数字符串传递。"350"
data.items[].estimate.staked_bandwidth_availablestring当前可用的质押带宽,单位字节。 以非负整数字符串传递。"0"
data.items[].estimate.free_bandwidth_availablestring当前可用的免费带宽,单位字节。 以非负整数字符串传递。"600"
data.items[].estimate.bandwidth_from_resourcesstring本次以已有资源支付的带宽字节数。 以非负整数字符串传递。"350"
data.items[].estimate.bandwidth_burnedstring带宽不足时的交易所需带宽,任务等待恢复。 以非负整数字符串传递。"0"
data.items[].estimate.bandwidth_feestring不以TRX支付带宽,值为0。 以非负整数字符串传递。"0"
data.items[].estimate.energy_pricestring每能量点价格,SUN。 以非负整数字符串传递。"100"
data.items[].estimate.bandwidth_pricestring每带宽字节价格,SUN。 以非负整数字符串传递。"1000"
data.items[].estimate.fee_limitstring完整能量准备额度折算的交易能量费用上限,SUN;不是预计扣款,也不是带宽费用上限。 以非负整数字符串传递。"7150000"
data.items[].estimate.estimated_feestring预计钱包TRX支出,等于 energy_fee;平台租赁费另见 rental_cost。 以非负整数字符串传递。"6500000"
data.items[].estimate.balance_usdtstring预估时查询的已确认 USDT 余额,最小单位。 以非负整数字符串传递。"100000000"
data.items[].estimate.balance_trxstring已确认余额与当前节点余额中的较小值,排除未确认收入并反映未确认支出,SUN。 以非负整数字符串传递。"30000000"
data.items[].estimate.bandwidth_sourcestring本次带宽来源:free 免费额度、waiting 等待恢复或激活。"free"

失败响应

错误JSON没有data;HTTP状态与code一致。

HTTP情况
400参数缺失、类型/格式无效或存在不支持的字段
401accessToken、签名或签名时间窗口无效
403租户停用、删除或过期
404钱包不存在或不属于当前租户/网络
409归集地址未配置或无效
413 / 429请求体过大 / 请求频率超限
500 / 503 / 504内部依赖错误 / 资源或配置不可用 / 请求超时
json
{
  "code": 401,
  "message": "authentication required or expired",
  "error_code": "TOKEN_INVALID_OR_EXPIRED",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

通用错误说明Retry-After及重试处理;写请求不要因超时生成新的request_id。

业务错误示例

HTTP 400:钱包数量不在1至20范围。

json
{
  "code": 400,
  "message": "每次预估请选择1至20个钱包",
  "error_code": "INVALID_ARGUMENT",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 404:至少一个钱包不存在或不属于当前租户及网络。

json
{
  "code": 404,
  "message": "钱包不存在或不属于当前租户及网络",
  "error_code": "RESOURCE_NOT_FOUND",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 409:归集地址尚未配置。

json
{
  "code": 409,
  "message": "请先配置USDT归集地址",
  "error_code": "BUSINESS_CONFLICT",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

HTTP 503:预估服务暂不可用。

json
{
  "code": 503,
  "message": "归集预估服务配置不完整",
  "error_code": "SERVICE_UNAVAILABLE",
  "trace_id": "0123456789abcdef0123456789abcdef"
}

CatFee 报价字段

字段类型说明
data.items[].estimate.rental_quantitystring仅CatFee路径需要租赁;模拟能量加10%余量后扣除已有可用能量,最低65000。
data.items[].estimate.rental_coststringCatFee 当前预计报价,SUN,由平台支付;预估不下单。

能量租期 1 小时,同一任务最多一笔租赁订单。免费带宽不足时等待恢复,期间不购买能量。未激活地址的激活费单独记录;查询失败时以返回的错误或逐项 reason 为准。

未激活地址返回 activation_required: "true"。能量和交易字节数仍来自真实模拟;当前可用资源为零,激活完成后重新核验。预估不会创建租赁订单。

费用选择顺序

免费带宽不足时任务暂停,每分钟复查,不购买能量、不签名、不广播。免费额度必须独立覆盖完整交易;不能用质押带宽补足。未激活钱包沿用CatFee同单激活,完成后检查免费额度。

能量准备额度为模拟总能量乘以110%并向上取整。先使用钱包已有能量,再判断钱包TRX能否覆盖整个剩余准备额度;足够则燃烧钱包TRX,不足则由CatFee租足能量缺口,不安排混合支付。租赁最低65000、租期1小时;一旦建立租赁记录不更换路径、不自动续租。

字段类型说明
data.items[].estimate.fee_sourcestringresources 自身能量;wallet_trx 自身TRX;catfee 平台租赁。
data.items[].estimate.prepared_energystring模拟能量增加10%的准备额度。
data.items[].estimate.max_wallet_trx_feestring当前准备额度的最大预计钱包能量支出,SUN;只有wallet_trx路径非零。
data.items[].estimate.free_bandwidth_limitstring免费带宽上限,不能把质押带宽计入。

钱包手续费与CatFee租赁费用必须分别展示,不能把CatFee费用标为钱包支出。实际费用见归集记录;预估不会产生订单或扣款。TRON没有单独禁止带宽扣费的交易开关,因此系统签名、广播前检查,回执出现带宽费时记录异常并保持真实转账结果。

费用来源按包含余量的总能量准备额度选择;实际钱包费用同时考虑合约部署方当次分担。因此 fee_source 为 wallet_trx 但 estimated_fee 为 "0" 是可能的:表示钱包 TRX 可承担准备上限,而当前模拟由已有资源或合约承担消耗。不能把 max_wallet_trx_fee 当作预计实扣。

完整字段与状态

查看全部响应字段、嵌套对象及枚举 · 业务状态与处理 · 错误码排查