Operate a project
These commands run against a live project. Each command that writes to the chain uses a
signing lane and accepts --dry-run.
Everything here is a power you keep after the sale, so it is also a power a collector can see you keep. What a project owner can do is the disclosure side of this page — worth reading once, and worth pointing buyers at.
Ownership and payouts
abx transfer <address> --to 0x... [--token <id>]: move a token to a new holder.abx set-royalty <address> --bps <0-1000> [--receiver 0x...]: change the royalty.abx set-transfer-validator <address> <0x...|none|recommended>: re-point or suspend an ERC-721C collection's transfer validator. Only for a collection that enrolled at deploy.abx set-seed-source <address> <0x...|canonical|none>: re-point where a code project draws its mint seeds — the project's ownIAbxSeedSource(commit-reveal, a VRF oracle), the shared canonical one, or none. Probed before any gas, and it applies to future mints only: seeds already assigned are settled. See seeds.abx set-admin <address> --to 0x...: hand over contract ownership.
Metadata and hosting
abx set-token-uri <address> --uri <base>: re-point token metadata to a resolver base. Use--override <uri> --token <id>to pin one token to a fixed locator.abx set-contract-uri <address> --uri <base>: re-point the collection metadata.abx set-renderer <address>: toggle URI resolution between on-chain and off-chain.--offclears to off-chain.abx refresh <address> [--token <id>]: ask marketplaces to re-index. ABX emits ERC-4906 on a metadata change on both lanes — an edition advertises0x49064906and pings it too — and this nudges a marketplace to read it. What an edition also has is ERC-1155's nativeURIevent, which cannot express "every id may have changed", so after a contract-wide URI or renderer re-point also runabx ping-uri <address> --token-ids <ids>for consumers that honor only that event. (abx refresh's advisory was corrected to match the contracts — both lanes emit ERC-4906 on a URI change — and theping-uristep below is still the one for consumers that honour only the native ERC-1155 event.)
Data plane
abx attach <address> <key> <uri>: attach a named, typed file to the token's data plane.--file <path>stores small bytes on-chain instead of a URI. Use--collectionor--token <id>.abx set-field <address> --field <name> ...: set an on-chain metadata field directly.
Freezing
abx lock-field <address> --field <name>: freeze a field permanently.abx lock-uri <address>: freeze the URI configuration permanently. With the fields also locked, the stored metadata cannot change.abx lock-script <address>/abx lock-dependencies <address>: on a code project, freeze the program and its library set — the two the metadata locks don't cover.
Every lock is one-way, so lock last: deploy, confirm it resolves in production, then freeze. And be
careful with the word: these freeze what your contract stores, which is not always the same as what
the token renders — no metadata lock reaches a parameter, and a Registry
dependency's bytes live in the registry. "Locked metadata" is the honest claim to make to a buyer; see
locked metadata does not always mean a locked output.
To freeze a parameter you weld its schema, per key, with a separate command:
abx set-schema <address> --schema <key>:<Type>:<Auth>:lock=now (or abx retire-param <address> <key>).
That is permanent in both halves — value writes and further schema edits both revert afterwards, so the
type, authorization, bounds and Select options are frozen too — and the lock date can only ever move
earlier, never back to open. A parameter with no schema has no lock at all; the owner's setter keeps
working on it forever.
Editions
An edition (--copies)
uses id-scoped variants of the commands above, plus two edition-only verbs:
abx mint <address> --token-id <n> --amount <n>: mintncopies of one id.--token-iddefaults to0on a one-work edition; it's required on a multi-work edition (EditionImage/EditionCode).abx transfer <address> --amount <n> --from 0x... --to 0x...: movencopies of an id between holders.--fromis required — an id can have many concurrent holders, so there's no single on-chain "owner" to default from.abx set-max-supply <address> --token-id <n> --cap <n>: lower one id's ERC-1155 supply cap — the per-id twin ofset-max-invocations. Monotonic: the cap can only decrease, never below that id's current supply, and once set it can never return to open (--cap openis refused).abx ping-uri <address> --token-ids <csv|range>: owner-only — re-emit the per-id refresh events for the given ids. A contract-wide re-point (set-token-uri/set-renderer) emits its own config event but not a per-id one, so a consumer that honors only the per-id event needs this nudge after a re-point. It emits ERC-4906MetadataUpdate(id)for every id named, plus ERC-1155's nativeURI(uri(id), id)when no on-chain renderer is configured — with one, that event would have to carry the whole rendered document.
abx state <address> and abx tokens <address> both detect an edition automatically and report
per-id supply/cap instead of a single owner — there is no whole-contract "supply" on an edition, since
each id has its own. See Sales for per-id pricing.
Moving and removing
abx migrate <address> --from <url> --to <url>: move off-chain state to a new resolver, verifying parity first. See Self-hosting.abx forget <address>: drop the local registration and projection. The chain is untouched.