跳转至

wallet-cli exchange withdraw

按交易对的储备比例从中撤资。

用法

wallet-cli exchange withdraw <id> --token <TRX|asset-id>
                             (--amount <n> | --raw-amount <n>)
                             [--dry-run | (--sign-only | --build-only) [--expiration <ms>] | --wait [--wait-timeout <ms>]]
                             [--permission-id <n>] [options]

说明

该命令与 exchange inject 相反:指定一侧的撤出金额后,另一侧按当前储备比例计算,两种资产会一并转回账户。只有交易对创建者可以撤资。

无法被储备比例整除的金额会被拒绝。 链上把一侧折算成另一侧时有精度要求——商必须精确到 0.01% 以内——不满足的金额会直接以 precision_loss 被拒,而不是四舍五入。请把金额调整成该比例能整除的数值再试。

token 只能通过 ID 指定:使用 TRX(或其链上 ID _)以及数字形式的 TRC10 ID,不接受可能包含 : 的 TRC10 名称。--amount 按所选资产的完整 token 单位计;--raw-amount 则直接使用最小单位。两者必须且只能指定一个。

该命令默认在交易提交后返回stage: "submitted"),不会等待确认。使用 --wait 可阻塞至交易确认或失败。命令需要一个账户;仅在需要签名的模式下,才必须通过 --password-stdin 提供 master password。--dry-run--build-only 不会解锁钱包,因此无需密码。仅观察账户无法签名,会返回 watch_only_no_signer

选项

选项 说明
<id> 必填。 交易对 ID
--token <TRX\|asset-id> 必填。 用于指定撤出金额的资产
--amount <n> 该侧的金额,以完整 token 计;另一侧按储备比例跟随。--amount / --raw-amount 二选一
--raw-amount <n> 同一金额,以最小单位计。--amount / --raw-amount 二选一
--dry-run 只构建和估算,不签名/不广播;与 --sign-only / --build-only 互斥
--sign-only 只签名不广播,输出已签名的 hex;与 --dry-run / --build-only 互斥;配合 --expiration 使用
--build-only 构建并估算,输出未签名的 hex;与 --dry-run / --sign-only 互斥;配合 --expiration 使用
--expiration <ms> 交易过期时间(毫秒),最大 86400000(24 小时);仅可与 --sign-only--build-only 同用;省略时使用节点默认值(约 60 秒)
--permission-id <n> 用于签名的权限组(0=owner,1=witness,2-9=active);默认 0
--wait / --wait-timeout <ms> 广播后轮询直到已确认/失败(上限默认取配置 waitTimeoutMs,内置 60000)
--password-stdin 从 stdin(fd 0)读取 master password

此外还有全局选项

示例

示例中的 $PW 是你的 master password(来自环境变量、密码管理器等),通过 --password-stdin 从 stdin 传入。

echo "$PW" | wallet-cli exchange withdraw 12 --token TRX --amount 1000 --network tron:3448148188 --wait --password-stdin
✅ Liquidity withdrawn
  Exchange id  12
  Creator      TQkXm4vN...5Zt7Uw
  Withdrawn    1,000 TRX / 50,000 MyToken
  Reserves     10,000 TRX / 500,000 MyToken
  TxID         8f6...
  Block        #57,884,310
  Fee          0 TRX
  Status       success
echo "$PW" | wallet-cli exchange withdraw 12 --token TRX --amount 1000 --network tron:3448148188 --wait --password-stdin -o json
{"schema":"wallet-cli.result.v1","success":true,"command":"exchange.withdraw","data":{"kind":"exchange-withdraw","stage":"confirmed","txId":"8f6...","confirmed":true,"blockNumber":57884310,"failed":false,"exchangeId":12,"pair":"TRX:1000123","creatorAddress":"TQkXm4vN...","tokenId":"_","tokenQuant":"1000000000","tokenLabel":"TRX","tokenDecimals":6,"otherTokenId":"1000123","otherTokenQuant":"50000000000","otherTokenLabel":"MyToken","otherTokenDecimals":6,"reserveAfter":"10000000000","otherReserveAfter":"500000000000","feeSun":0},"meta":{"durationMs":6460,"warnings":[]},"chain":{"family":"tron","network":"tron:3448148188","chainId":"3448148188"}}

输出

data 是扁平结构,形状与 exchange inject 完全一致:

字段 类型 含义
exchangeId / pair / creatorAddress number / string / string 交易对及其创建者
tokenId / tokenQuant string 指定金额的资产及其撤出量,以最小单位计
tokenLabel / tokenDecimals string / number text 输出把该侧按完整 token 显示时所用的信息
otherTokenId / otherTokenQuant / otherTokenLabel / otherTokenDecimals 按比例算出的另一侧对应的同样四个字段
reserveAfter / otherReserveAfter string 本次撤资之后交易对两侧的余额,顺序与上面一致

TRX 以 "_" 标识;所有数量都是最小单位下的字符串--wait 会另加 stage: "confirmed"confirmedblockNumberfeeSunfailed

退出码

0 已提交(早退模式下为已构建/已签名) · 1 执行失败(exchange_not_found——没有这个交易对、not_exchange_creatortoken_not_in_exchangeexchange_closed——某一侧储备为零、insufficient_reserve——超过该侧持有量、precision_loss——金额无法整除折算、watch_only_no_signerauth_failed) · 2 用法错误(missing_option——没给 --tokeninvalid_option——--amount / --raw-amount 两个都给了或都没给;invalid_amount——金额不是十进制数字,或小数位数超过该 token 允许的位数;invalid_value——金额 ≤ 0,或小到算出的另一侧结果为零)。

另请参见

exchange inject · exchange show · 脚本安全