Skip to content

wallet-cli asset unfreeze

Release matured frozen supply of the TRC10 you issued.

Synopsis

wallet-cli asset unfreeze
                          [--dry-run | (--sign-only | --build-only) [--expiration <ms>] | --wait [--wait-timeout <ms>]]
                          [--permission-id <n>] [options]

Description

Returns the part of the issued supply that was frozen at issuance and whose lock period is over, back to the issuer's balance.

There is no argument of any kind: the command always targets the token issued by the signing account, and the chain accepts neither "which tranche" nor "how much" — every matured tranche is released in one transaction. Tranches that have not matured are untouched; run the command again once they are.

A tranche matures at its issuance --start plus its days, not at the moment the token was actually issued: the chain writes each tranche's expire_time as start_time + days × 86400000 when the token is created. The resulting dates are visible in the Frozen section of asset info.

This is unrelated to stake unfreeze, which releases staked TRX; the only thing they share is the word.

By default the command returns at submission (stage: "submitted"), not confirmation — add --wait to block until confirmed/failed. Requires an account. The master password (via --password-stdin) is needed only by the modes that sign — --dry-run and --build-only do not unlock the wallet and run without it. Watch-only accounts fail with watch_only_no_signer in a signing mode.

The Ledger TRON app cannot sign TRC10 issuance contract types. Ledger accounts may dry-run or build unsigned hex, but signing modes fail with ledger_unsupported before device interaction.

Options

This command has no options of its own.

Option Description
--dry-run Build and estimate only, no signature/broadcast; excludes --sign-only / --build-only
--sign-only Sign without broadcasting, output the signed hex; excludes --dry-run / --build-only; pairs with --expiration
--build-only Build and estimate, output the unsigned hex; excludes --dry-run / --sign-only; pairs with --expiration
--expiration <ms> Transaction expiration in ms, up to 86400000 (24h); only with --sign-only or --build-only; omitted = node default (~60s)
--permission-id <n> Permission group to sign with (0=owner, 1=witness, 2-9=active); default 0
--wait / --wait-timeout <ms> Poll after broadcast until confirmed/failed (cap default: config waitTimeoutMs, built-in 60000)
--password-stdin Master password from stdin (fd 0)

Plus the global options.

Examples

In the examples, $PW is your master password (from an environment variable, password manager, etc.), fed on stdin via --password-stdin.

echo "$PW" | wallet-cli asset unfreeze --network tron:3448148188 --wait --password-stdin
✅ Frozen supply released
  Asset         MyToken  (id 1000123)
  Issuer        TQkXm4vN...5Zt7Uw
  Released      100,000,000 MyToken
  Still frozen  50,000,000 MyToken
  TxID          6a5...
  Block         #57,883,560
  Fee           0 TRX
  Status        success
echo "$PW" | wallet-cli asset unfreeze --network tron:3448148188 --wait --password-stdin -o json
{"schema":"wallet-cli.result.v1","success":true,"command":"asset.unfreeze","data":{"kind":"asset-unfreeze","stage":"confirmed","txId":"6a5...","confirmed":true,"blockNumber":57883560,"feeSun":0,"netUsed":288,"netFeeSun":0,"failed":false,"assetId":"1000123","name":"MyToken","issuerAddress":"TQkXm4vN...","releasedAmount":"100000000000000","stillFrozenAmount":"50000000000000","precision":6},"meta":{"durationMs":6410,"warnings":[]},"chain":{"family":"tron","network":"tron:3448148188","chainId":"3448148188"}}

Output

data varies by stage:

Stage Fields
default (submit) kind: "asset-unfreeze", stage: "submitted", txId, assetId, name, issuerAddress, precision, and releasedAmount / stillFrozenAmount — present here too, but as the amounts this command intends to release
--wait (confirmed) above, plus stage: "confirmed", confirmed (boolean), blockNumber, flat settlement fields when returned (feeSun, energyUsed, netUsed, energyFeeSun, netFeeSun), and failed; releasedAmount is then taken from the receipt

releasedAmount and stillFrozenAmount are raw decimal strings (smallest unit); precision is included for scaling. Both are always present — before confirmation they are this command's own computation from the asset's frozen tranches, and only the confirmed releasedAmount is the receipt's number.

Exit status

0 submitted (or built/signed in early-exit modes) · 1 execution failure (not_an_issuer — this account has not issued a TRC10, no_frozen_supply, not_yet_unfreezable — nothing has matured yet, watch_only_no_signer, ledger_unsupported, auth_failed) · 2 usage error.

See also

asset info · asset issue · stake unfreeze · Script safety