Skip to content

wallet-cli 8004 register

Register a new Agent.

Synopsis

wallet-cli 8004 register <uri>
                  [--wait [--wait-timeout <ms>] | --sign-only | --build-only | --dry-run]
                  [--fee-limit <sun>] [--permission-id <n>] [--expiration <ms>] [options]

Description

Calls the registry's register(string) from the active account (or --account), which becomes the Agent's owner. The URI must point to a registration document you build and host yourself; wallet-cli does not create or check its content.

The URI must be https://, ipfs://, or a base64 JSON data: URI, at most 2048 characters, with no credentials in it. 8004 show loads only https:// and http:// documents, so an Agent registered with an ipfs:// or data: URI shows no registration details there; prefer https:// if you want them readable with wallet-cli.

The Agent ID is assigned by the chain. The default submitted receipt has only identity.uri. With --wait, the receipt adds identity.agentId once the confirmed registration event can be read. Without --wait, read it from the transaction afterwards: in tx info-o json, the first entry of data.info.log is the registry's Transfer event, and its last topic is the Agent ID in hex (…00aa is Agent 170). Do not register again to get the id — that creates a second Agent.

Requires an account. The master password (via --password-stdin) is needed only by the modes that sign.

Runs on networks with an ERC-8004 Identity Registry: tron, nile, shasta, bsc, bsc-testnet, base, base-sepolia. See 8004.

Arguments

  • uri — URI of the registration document

Options

Option Description
--wait / --wait-timeout <ms> Poll after broadcast until confirmed/failed (cap default: config waitTimeoutMs, built-in 60000)
--sign-only Sign without broadcasting, output the signed hex; excludes --dry-run / --build-only
--build-only Build and estimate, output the unsigned hex without unlocking the wallet; excludes --dry-run / --sign-only
--dry-run Estimate only, no signature/broadcast; excludes --sign-only / --build-only
--password-stdin Master password from stdin

TRON only:

Option Description
--fee-limit <sun> Max energy fee to burn, in SUN (default 100000000)
--permission-id <n> Permission group to sign with (0=owner, 1=witness, 2-9=active); default 0
--expiration <ms> Transaction expiration in ms, up to 86400000 (24h); only with --sign-only or --build-only; omitted = node default (~60s)

There are no EVM fee flags: on EVM the gas limit and fees come from the node's estimate, and --gas-limit and the like are refused as unknown options.

Plus the global options.

Examples

Register an Agent on Nile and wait for its ID. The registration document here is a small data: URI. $PW is your master password (from an environment variable, password manager, etc.), fed on stdin via --password-stdin.

printf '%s' "$PW" | wallet-cli 8004 register "data:application/json;base64,eyJuYW1lIjoiV2VhdGhlciBBZ2VudCIsImRlc2NyaXB0aW9uIjoiUmV0dXJucyB3ZWF0aGVyIGZvcmVjYXN0cyBmb3IgYSBjaXR5In0=" --network nile --wait --password-stdin
✅ Called register
  Contract  TDDk4vc69nzBCbsY4kfu7gw2jmvbinirj5
  Agent ID  173
  URI       data:application/json;base64,eyJuYW1lIjoiV2VhdGhlciBBZ2VudCIsImRlc2NyaXB0aW9uIjoiUmV0dXJucyB3ZWF0aGVyIGZvcmVjYXN0cyBmb3IgYSBjaXR5In0=
  TxID      ee19cabbc6bfa4bc0201669c967c95f639a46128826f33b5fb27a9bb6de8a4c8
  Block     #71,015,894
  Energy    183,779
  Fee       18.8561 TRX
  Status    success
printf '%s' "$PW" | wallet-cli 8004 register "data:application/json;base64,eyJuYW1lIjoiV2VhdGhlciBBZ2VudCIsImRlc2NyaXB0aW9uIjoiUmV0dXJucyB3ZWF0aGVyIGZvcmVjYXN0cyBmb3IgYSBjaXR5In0=" --network nile --wait --password-stdin -o json
{"schema":"wallet-cli.result.v1","success":true,"command":"8004.register","data":{"kind":"contract-send","stage":"confirmed","txId":"6850f29e0eff687d0f0f41515a067fced277cd0fd0bbe2773371268cd14894ee","confirmed":true,"blockNumber":71015896,"feeSun":18884800,"energyUsed":183779,"energyFeeSun":18377800,"netFeeSun":507000,"result":"SUCCESS","failed":false,"method":"register(string)","contract":"TDDk4vc69nzBCbsY4kfu7gw2jmvbinirj5","identity":{"uri":"data:application/json;base64,eyJuYW1lIjoiV2VhdGhlciBBZ2VudCIsImRlc2NyaXB0aW9uIjoiUmV0dXJucyB3ZWF0aGVyIGZvcmVjYXN0cyBmb3IgYSBjaXR5In0=","agentId":"173"}},"meta":{"durationMs":6869,"warnings":[]},"chain":{"family":"tron","network":"tron:3448148188","chainId":"3448148188"}}

The new Agent ID is 173 — in JSON, data.identity.agentId. Fee is the TRX burned for the energy the registration used.

Output

data varies by stage:

Mode Fields
default (submit) kind: "contract-send", stage: "submitted", txId, method, contract, identity
--wait (confirmed/failed) above, but stage: "confirmed" or "failed", plus confirmed, blockNumber, failed, and the realised cost — feeSun / energyUsed / energyFeeSun / netFeeSun / result on TRON, gasUsed / feeWei / effectiveGasPriceWei on EVM
--sign-only kind, mode: "sign-only", hex, signed, address (signer), txId, fee, method, contract, identity
--build-only kind, mode: "build-only", hex (unsigned), tx, fee, method, contract, identity
--dry-run kind, mode: "dry-run", fee, unsigned tx, method, contract, plus nonce on EVM, identity

identity holds uri, plus agentId (decimal string) after a confirmed --wait.

Exit status

0 submitted (or built/signed in early-exit modes) · 1 execution failure (execution_reverted — the registry refused the call during estimation, with the raw revert data in error.details.revertData; auth_required — a signing mode without --password-stdin; watch_only_no_signer, auth_failed, rpc_error, timeout — on timeout the tx may still be in flight; check tx status) · 2 usage error (invalid_value — a malformed id or URI, or a bad option combination such as --expiration without --sign-only / --build-only; family_mismatch — an address of the other chain family; invalid_option — --wait with an early-exit mode; unsupported_network_capability — no registry on the selected network)

See also

8004 show · 8004 update · Script safety