wallet-cli typed-data sign¶
Sign EIP-712 / TIP-712 structured data.
Synopsis¶
wallet-cli typed-data sign --typed-data <json> [options]
Description¶
Signs structured (typed) data with the active account's key (or --account), and prints the signature, the digest that was signed, and the primary type. Signing only — nothing is broadcast, and no node is contacted.
Works on TRON and EVM: the selected network decides which of the account's keys signs and which address is reported. EIP-712 and TIP-712 are the same construction, so the same payload can be signed for either — the domain inside the payload, not --network, is what a verifying contract checks.
The --typed-data value is EIP-712 / TIP-712 JSON with the shape {"domain":…,"types":…,"primaryType"?:…,"message":…}. Three conveniences apply when it is parsed:
EIP712Domaininsidetypesis ignored (you may include it or leave it out).valueis accepted as an alias formessage.- TRON base58 addresses work in
addressfields, alongside0xhex.
primaryType is optional — it is inferred when omitted.
Like message sign, this command never prompts for the master password: software accounts must pass --password-stdin. Watch-only accounts cannot sign (watch_only_no_signer).
Options¶
| Option | Description |
|---|---|
--typed-data <json> |
Required. EIP-712/TIP-712 JSON: {"domain":…,"types":…,"primaryType"?:…,"message":…} |
--password-stdin |
Master password from stdin (software accounts) |
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 typed-data sign --typed-data "$(cat permit.json)" --password-stdin --network tron:3448148188
✅ Signed typed data
Address TMSgJxtPw29AFEHMXsjGo4kWV7UwbCToHJ
Type Permit
Digest 0x1e0f...
Signature 0x9f3c...
echo "$PW" | wallet-cli typed-data sign --typed-data "$(cat permit.json)" --password-stdin --network tron:3448148188 -o json
{"schema":"wallet-cli.result.v1","success":true,"command":"typed-data.sign","data":{"address":"TMSgJxtPw29AFEHMXsjGo4kWV7UwbCToHJ","primaryType":"Permit","digest":"0x1e0f...","signature":"0x9f3c..."},"meta":{"durationMs":15,"warnings":[]},"chain":{"family":"tron","network":"tron:3448148188","chainId":"3448148188"}}
The same payload signed on an EVM network, with the account's EVM key:
echo "$PW" | wallet-cli typed-data sign --typed-data "$(cat permit.json)" --password-stdin --network eip155:11155111
Ledger account — confirm on device, no master password needed:
wallet-cli typed-data sign --typed-data "$(cat permit.json)" --network tron:3448148188
Output¶
| Field | Type | Meaning |
|---|---|---|
address |
string | Signer's address, in the selected network's format |
primaryType |
string | The primary type that was signed |
digest |
string | The digest that was signed, 0x-prefixed hex |
signature |
string | Signature, 0x-prefixed hex |
Exit status¶
0 signed · 1 execution failure (watch_only_no_signer, auth_failed, signing_rejected — declined on the Ledger, ledger_setting_required — enable blind signing / EIP-712 support in the device app, ledger_unsupported — the device app cannot sign this payload) · 2 usage error (--typed-data missing → missing_option, or its value is not JSON → invalid_value).
See also¶
message sign — sign a plain text message · Security model · machine-interface → Secret handling