Sales
A primary sale runs through the shared fixed-price minter, a single ownerless contract per chain that serves every project. Only the fixed-price minter ships now; see Minting for the protocol model.
Sales run against a collection. A plain 1/1 has no minter, so to sell a single piece, deploy a one-token
collection (abx deploy-series --count 1) — or, if copies of that piece are fine, an
edition (abx deploy --copies <n|open>), which ships a native sale stack on
its own.
Configure and buy
abx minter configure <token> --price <eth> --allocation <n>: set the price and how many tokens this minter may sell for the project. Use--price-raw <units>for exact base units, and--erc20 0x...to price in an ERC-20 instead of ETH. Only the token owner can configure.abx minter show <token>: the sale terms, whether the minter is assigned on the token, the payee, the pause state, and supply.abx minter buy <token> [--to 0x...]: buy one token. An ERC-20 sale needs a prior approval to the minter.
Re-configuring a live sale takes effect immediately, and every buy carries the terms it was quoted, so
an in-flight purchase reverts SaleTermsChanged rather than paying the new price. That is the point —
it is what stops a price change from reaching a buyer's ERC-20 allowance — but it means a price change
during a busy mint will fail some in-flight buys. Pause first if you want a clean cutover.
Buyers retry, and the CLI re-reads the terms on each minter buy. The scaffolded mint page reads the
terms when it loads, so after a terms change a buyer may need to reload it before their next attempt
succeeds — it recovers automatically from SaleTermsChanged, but a price cut surfaces as
WrongPayment (the ETH lane requires the exact value, since V1 has no refunds) and that path does not
self-refresh. Another reason to pause for a cutover rather than re-pricing under live traffic.
Wiring a collection for sale
A sale needs two separate grants, both from the project owner, plus a payee. Run them in this order:
abx minter configure <token> ...: set the sale terms on the minter.abx set-minter <token> --minter <address>: authorize that minter on the token.abx set-primary-payee <token> --payee 0x...: set the payout address. A sale reverts without one.abx unpause <token>: open minting. Run this last.
"Configured" on the minter and "assigned" on the token are different grants; a sale needs both. Use
abx set-max-invocations <token> --max <n> to lower the supply cap, which only decreases, and
abx pause <token> to return to owner-only minting.
Two things worth knowing about these grants, because a buyer can read both. They have no timelock —
re-configuring price, payee, allocation or pause takes effect immediately, and what protects a buyer is
the terms assertion on their own purchase,
not a delay on yours. And allocation is a budget inside the minter, not a slice of your supply:
set-minter grants the minter the whole remaining cap, and you can keep minting reserves alongside it,
so the supply cap is the real ceiling. Both, and the rest of what you retain after the sale, are listed
in what a project owner can do.
Editions: per-id sales
An edition (--copies)
sells through a sibling contract, AbxFixedPriceMinter1155, priced per id rather than per
collection:
abx minter configure <token> --token-id <n> --price <eth> --allocation <n>: price that one id.abx minter show <token> --token-id <n>: that id's sale terms and readiness.abx minter buy <token> --token-id <n> --quantity <n>: buyncopies in one purchase, payingprice × quantity.
--token-id is required on every minter subcommand against an edition, and refused against a plain
collection. Wiring is otherwise identical: set-minter, set-primary-payee, and unpause stay
contract-wide — one minter, one payee, one pause gate for the whole id space. OneOfOneEdition (a
single work deployed with --copies, no folder) needs no Series wrapper at all: it implements the
mint primitive directly, at id 0, so abx deploy --copies <n|open> --no-mint already has a full sale
stack once wired up.
Mint page
abx mint-page <token> scaffolds a self-contained mint site for the fixed-price minter, ready to deploy
to a static host. It reads the sale state and images directly from the chain. Sales are in ETH in this
version.
Works against a Series, or an edition (OneOfOneEdition/EditionImage/EditionCode) — on an edition
the page is a token-id-and-quantity purchase card rather than a gallery. Pointed at a plain 1/1,
mint-page refuses up front rather than scaffolding a page that would sit on "Loading…" forever;
deploy a one-token collection instead (abx deploy-series --dir <folder> --count 1), or an edition of
one work (abx deploy --copies <n|open>).