@artblocks/abx-cli 0.1.0-alpha.32 → 0.1.0-alpha.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/dist/capabilities.d.ts +94 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +135 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +13 -17
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/feedback.d.ts +7 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +147 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/reads.js +1 -1
- package/dist/commands/reads.js.map +1 -1
- package/dist/commands/scaffold.d.ts +9 -1
- package/dist/commands/scaffold.d.ts.map +1 -1
- package/dist/commands/scaffold.js +60 -13
- package/dist/commands/scaffold.js.map +1 -1
- package/dist/commands/service.d.ts.map +1 -1
- package/dist/commands/service.js +5 -4
- package/dist/commands/service.js.map +1 -1
- package/dist/flag-allowlists.d.ts.map +1 -1
- package/dist/flag-allowlists.js +19 -0
- package/dist/flag-allowlists.js.map +1 -1
- package/dist/main.js +45 -11
- package/dist/main.js.map +1 -1
- package/dist/ownerops.d.ts +3 -3
- package/dist/ownerops.js +5 -5
- package/dist/ownerops.js.map +1 -1
- package/dist/remote.d.ts +5 -1
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +31 -2
- package/dist/remote.js.map +1 -1
- package/dist/scaffold.js +1 -1
- package/dist/scaffold.js.map +1 -1
- package/dist/update-check.d.ts +6 -1
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +40 -17
- package/dist/update-check.js.map +1 -1
- package/package.json +6 -6
- package/skill/SKILL.md +174 -526
- package/skill/agents/openai.yaml +4 -0
- package/skill/reference/capabilities.md +171 -285
- package/skill/reference/code.md +210 -0
- package/skill/reference/creator-token.md +90 -95
- package/skill/reference/deploy.md +167 -0
- package/skill/reference/diagnose.md +165 -0
- package/skill/reference/hosting.md +148 -126
- package/skill/reference/operate.md +181 -0
- package/skill/reference/services.md +76 -0
- package/skill/reference/setup.md +108 -62
- package/skill/reference/code-projects.md +0 -368
- package/skill/reference/decisions.md +0 -182
- package/skill/reference/operating.md +0 -220
- package/skill/reference/troubleshooting.md +0 -65
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Code projects, renderers, and PostParams
|
|
2
|
+
|
|
3
|
+
Use this reference for `preview`, `inspect`, `deploy-code`, JavaScript/build projects, Solidity field
|
|
4
|
+
renderers, marketplace stills and traits, seeds, dependencies, parameters, and code-project locks.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- [Choose the runtime lane](#choose-the-runtime-lane)
|
|
9
|
+
- [Design every public surface](#design-every-public-surface)
|
|
10
|
+
- [Preview and inspect honestly](#preview-and-inspect-honestly)
|
|
11
|
+
- [Plan JavaScript projects](#plan-javascript-projects)
|
|
12
|
+
- [Plan Solidity field renderers](#plan-solidity-field-renderers)
|
|
13
|
+
- [Use PostParams and hooks](#use-postparams-and-hooks)
|
|
14
|
+
- [Handle seeds and dependencies](#handle-seeds-and-dependencies)
|
|
15
|
+
- [Verify and freeze](#verify-and-freeze)
|
|
16
|
+
|
|
17
|
+
## Choose the runtime lane
|
|
18
|
+
|
|
19
|
+
`deploy-code` selects a code-capable canonical contract. It supports four useful input shapes:
|
|
20
|
+
|
|
21
|
+
| Shape | Core flags | Typical surfaces |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| On-chain JavaScript template | `--script <file>` | on-chain program; hosted or on-chain assembled live document |
|
|
24
|
+
| Build directory | `--code-dir <dir>` | uploaded application bundle; resolver/live view |
|
|
25
|
+
| Solidity-computed fields | `--image-renderer` and/or `--attributes-renderer` | on-chain SVG image and/or traits |
|
|
26
|
+
| Hybrid | script plus field renderers | program animation plus Solidity image/traits |
|
|
27
|
+
|
|
28
|
+
Without `--copies`, the contract is SeriesCode (ERC-721). With `--copies <n|open>`, it is EditionCode
|
|
29
|
+
(ERC-1155): N generated ids, each with multiple copies. EditionCode currently supports scripts,
|
|
30
|
+
dependencies, and field renderers. It does not support `--code-dir`, `--image-base`, or `--resume`.
|
|
31
|
+
Run `abx capabilities --json` immediately before planning.
|
|
32
|
+
|
|
33
|
+
For one generated work with 100 copies, use `--max 1 --copies 100`. Omitting `--max 1` leaves the
|
|
34
|
+
default multi-id space, producing multiple generated ids with 100 copies available for each id.
|
|
35
|
+
|
|
36
|
+
A creator who needs parameters or hooks must use a code-capable contract even if the output is a
|
|
37
|
+
static-looking SVG or image. This is a deploy-time type decision.
|
|
38
|
+
|
|
39
|
+
## Design every public surface
|
|
40
|
+
|
|
41
|
+
A code project is not one URL. Decide each surface separately:
|
|
42
|
+
|
|
43
|
+
- **Program/animation** — the live JavaScript document or absence of one.
|
|
44
|
+
- **Marketplace image** — a rendered still, a deterministic image URL, an on-chain Solidity SVG, or
|
|
45
|
+
an explicit placeholder during development.
|
|
46
|
+
- **Marketplace traits** — renderer-computed JSON, resolver/effects output, or intentionally omitted.
|
|
47
|
+
- **PostParams** — canonical typed state on the token contract, consumed by the program/renderers.
|
|
48
|
+
- **Attachments** — named files served through a resolver's artifacts/data surface.
|
|
49
|
+
|
|
50
|
+
“The program is on-chain” does not prove that image and traits are on-chain. “The animation works”
|
|
51
|
+
does not prove a marketplace thumbnail exists. Write a surface matrix before deployment and verify
|
|
52
|
+
each row after minting.
|
|
53
|
+
|
|
54
|
+
## Preview and inspect honestly
|
|
55
|
+
|
|
56
|
+
Use `abx preview` while authoring and `abx inspect` before choosing a deployment lane.
|
|
57
|
+
|
|
58
|
+
Preview uses the canonical runtime envelope, dependency order, and token-data shape with synthetic
|
|
59
|
+
inputs. It is a high-fidelity authoring preview, not an end-to-end deployment proof. It does not prove:
|
|
60
|
+
|
|
61
|
+
- that a chosen dependency resolves on the target chain;
|
|
62
|
+
- that the deployed generator or renderer fits an RPC's read allowance;
|
|
63
|
+
- that real minted seeds and PostParams are consumed correctly in every state;
|
|
64
|
+
- that marketplace metadata contains image and attributes;
|
|
65
|
+
- that a hosted resolver/effects/storage path is reachable.
|
|
66
|
+
|
|
67
|
+
Use `--shoot` for representative frames. Exercise more than the default seed and every user-facing
|
|
68
|
+
parameter. Then run `abx inspect` to analyze dependencies, deterministic seed usage, declared traits,
|
|
69
|
+
document size, and lane fit. Treat findings as evidence and the deploy dry run/testnet verification as
|
|
70
|
+
the final proof.
|
|
71
|
+
|
|
72
|
+
Avoid unseeded randomness, wall-clock dependence, environment-only assets, and network fetches when
|
|
73
|
+
claiming reproducibility. A live-data design is valid; label it live rather than deterministic.
|
|
74
|
+
|
|
75
|
+
## Plan JavaScript projects
|
|
76
|
+
|
|
77
|
+
### On-chain program, hosted resolution
|
|
78
|
+
|
|
79
|
+
Use `--script` with `--public-base-url` when a resolver should assemble the live document and expose
|
|
80
|
+
mutable metadata/render surfaces. The script remains on-chain; the public metadata path is HTTP.
|
|
81
|
+
This is normally the most interoperable lane for a sale where thumbnails must update continuously.
|
|
82
|
+
|
|
83
|
+
Run an effects service for derived stills and traits:
|
|
84
|
+
|
|
85
|
+
- `abx effects` runs locally and blocks; use it for development or a co-located operator.
|
|
86
|
+
- `abx deploy-effects --resolver-url <url>` scaffolds a continuously running service.
|
|
87
|
+
- `abx render <addr> [ids] --remote <resolver>` performs a one-shot/backfill render.
|
|
88
|
+
|
|
89
|
+
The renderer must store its bytes in a backend the resolver can retrieve. A hosted resolver cannot
|
|
90
|
+
read a laptop-local `fs` store. Managed providers may advertise managed rendering; confirm with
|
|
91
|
+
`abx remote <name>` rather than assuming it.
|
|
92
|
+
|
|
93
|
+
### On-chain program and on-chain live document
|
|
94
|
+
|
|
95
|
+
Use `--script --onchain-uri` when the generator can assemble the animation document entirely from
|
|
96
|
+
on-chain program/dependency bytes. This can remove an always-on resolver for the live program.
|
|
97
|
+
|
|
98
|
+
Check the deploy dependency report and `abx verify` before calling it chain-complete: a registry
|
|
99
|
+
dependency may resolve through a CDN instead of on-chain bytes. Large assembled documents may exceed
|
|
100
|
+
some endpoints' `eth_call` allowance; report the measured reach, not “any RPC forever.”
|
|
101
|
+
|
|
102
|
+
For a JavaScript lane, the marketplace image remains a separate decision. With no resolver watcher,
|
|
103
|
+
a still published to a deterministic public `--image-base` is a manual/backfill surface: rerun render
|
|
104
|
+
after relevant parameter changes. An on-chain animation plus automatically updating off-chain still
|
|
105
|
+
requires an operator watching state.
|
|
106
|
+
|
|
107
|
+
EditionCode does not currently accept `--image-base`. Give it an on-chain image renderer, or run a
|
|
108
|
+
resolver/effects path (`deploy-effects` for continuous rendering; `render --remote` for one-shot
|
|
109
|
+
publication). Do not treat its on-chain animation as a marketplace still.
|
|
110
|
+
|
|
111
|
+
### Build directory
|
|
112
|
+
|
|
113
|
+
Use `--code-dir` for an application bundle whose files are uploaded and addressed as a code artifact.
|
|
114
|
+
It requires external storage and public resolution. Inspect the built output, not only the source
|
|
115
|
+
tree, and verify that every referenced asset is included. `--code-dir` is not yet supported with
|
|
116
|
+
`--copies`.
|
|
117
|
+
|
|
118
|
+
## Plan Solidity field renderers
|
|
119
|
+
|
|
120
|
+
`--image-renderer <address>` stores an `IAbxFieldRenderer` pointer for the metadata image field;
|
|
121
|
+
`--attributes-renderer <address>` does the same for traits. With `--onchain-uri`, the canonical
|
|
122
|
+
metadata renderer calls them on-chain. A renderer-only project needs no JavaScript program and no
|
|
123
|
+
effects runner.
|
|
124
|
+
|
|
125
|
+
Start with `abx scaffold-renderer`, then build, test, and deploy the Solidity project using Foundry.
|
|
126
|
+
ABX does not compile or deploy custom Solidity. A real deploy refuses a renderer address with no
|
|
127
|
+
code.
|
|
128
|
+
|
|
129
|
+
Enforce these invariants in renderer tests:
|
|
130
|
+
|
|
131
|
+
- `render(token, tokenId, field)` must not revert for unminted ids, missing params, boundary values,
|
|
132
|
+
unexpected callers, or retired schema state.
|
|
133
|
+
- Return the correct media type and valid complete content: SVG for image, JSON attributes array for
|
|
134
|
+
traits.
|
|
135
|
+
- Derive image and traits from the same seed/state model.
|
|
136
|
+
- Bound loops and output. Test realistic worst cases through an RPC call, not only local unit gas.
|
|
137
|
+
- Treat a renderer or hook address lock as a pointer lock. Use immutable deployments for stronger
|
|
138
|
+
permanence claims; an upgradeable proxy can change behavior behind a locked address.
|
|
139
|
+
|
|
140
|
+
Solidity image/attributes renderers work on both SeriesCode and EditionCode, including renderer-only
|
|
141
|
+
editions. They eliminate off-chain stills only for the fields they compute; a separate JavaScript
|
|
142
|
+
animation may still exist.
|
|
143
|
+
|
|
144
|
+
## Use PostParams and hooks
|
|
145
|
+
|
|
146
|
+
PostParams are typed, schema-governed state stored on-chain. Use `--schema` at deployment or
|
|
147
|
+
`abx set-schema` later, then `abx configure-param` through the governed path. Inspect current type,
|
|
148
|
+
authorization, and lock grammar with command help instead of memorizing it.
|
|
149
|
+
|
|
150
|
+
Model parameters deliberately:
|
|
151
|
+
|
|
152
|
+
- Define a stable key and type; do not change a key's meaning across versions.
|
|
153
|
+
- Choose creator, token-owner/holder, or address authorization to match the actual state model.
|
|
154
|
+
- Validate input in the UI and again in a configure hook when the rule must be enforced on-chain.
|
|
155
|
+
- Treat string/bytes values as potentially large and price/limit them appropriately.
|
|
156
|
+
- Retire or weld a governed parameter only after the current value and defaults are verified.
|
|
157
|
+
|
|
158
|
+
### Edition shared state
|
|
159
|
+
|
|
160
|
+
On EditionCode, parameters belong to an **id**, not an individual physical copy. If token id 3 has
|
|
161
|
+
100 holders, they all read the same value for id 3. With holder authorization any holder may write it;
|
|
162
|
+
the last valid writer wins. This is good for communal state and wrong for “name my personal copy.”
|
|
163
|
+
Use one id per personalized work when per-holder state is required.
|
|
164
|
+
|
|
165
|
+
A holder-writable large string/bytes parameter can also expand the shared id's metadata beyond common
|
|
166
|
+
RPC read reach. State this before deployment and use schema validation/hooks to bound it when needed.
|
|
167
|
+
|
|
168
|
+
### Hooks
|
|
169
|
+
|
|
170
|
+
SeriesCode and EditionCode expose three configurable hook addresses:
|
|
171
|
+
|
|
172
|
+
- configure hook: validates/vetoes governed writes before they persist;
|
|
173
|
+
- transfer hook: observes every mint, transfer, and burn and may veto the operation;
|
|
174
|
+
- augment hook: computes additional/overriding token data during reads.
|
|
175
|
+
|
|
176
|
+
Hooks are extension seams, not ordinary CLI flags. Build and deploy them outside ABX, wire them with
|
|
177
|
+
`abx set-param-hooks`, test against a real clone, and read [capabilities.md](capabilities.md). A
|
|
178
|
+
transfer-hook revert fails mints as well as secondary transfers. Freeze the addresses with
|
|
179
|
+
`abx lock-param-hooks` only after testing every lifecycle transition.
|
|
180
|
+
|
|
181
|
+
## Handle seeds and dependencies
|
|
182
|
+
|
|
183
|
+
Seeds are generated at mint and drive reproducible variation. `abx inspect` identifies common seed
|
|
184
|
+
misuse, but test multiple real token-data fixtures. A custom seed source affects future mints and is
|
|
185
|
+
an external contract pointer; verify its code/interface and disclose who can change its behavior.
|
|
186
|
+
|
|
187
|
+
Dependencies are ordered; index 0 is the runtime. A `name@version` reference resolves through the
|
|
188
|
+
collection's dependency-registry pointer, while a `0x…` reference reads a data contract directly.
|
|
189
|
+
Registry availability is chain-specific. Read the deploy dependency report: a named dependency can
|
|
190
|
+
be valid yet served from a CDN, which means the document is not chain-complete.
|
|
191
|
+
|
|
192
|
+
`lock-dependencies` freezes the reference list and registry pointer, not necessarily the bytes a live
|
|
193
|
+
registry entry returns. Use immutable on-chain data contracts for a stronger frozen-dependency claim.
|
|
194
|
+
|
|
195
|
+
## Verify and freeze
|
|
196
|
+
|
|
197
|
+
After deploying and minting representative ids:
|
|
198
|
+
|
|
199
|
+
1. Read `abx state`, `abx tokens --json`, and `abx tokenuri`.
|
|
200
|
+
2. Open the animation/live view using actual minted token data.
|
|
201
|
+
3. Fetch the marketplace image and inspect `attributes` from token metadata.
|
|
202
|
+
4. Run `abx verify` and resolve placeholder, chain-complete, dependency, or render warnings.
|
|
203
|
+
5. Change every intended parameter through its authorized path; confirm still refresh behavior.
|
|
204
|
+
6. Exercise mint, transfer, and burn paths if hooks or burnability are involved.
|
|
205
|
+
7. Verify dependency and renderer addresses and whether their code is upgradeable.
|
|
206
|
+
8. Lock only the surfaces the creator has explicitly chosen to freeze.
|
|
207
|
+
|
|
208
|
+
A fully frozen code-project posture may involve URI/field locks, `lock-script`,
|
|
209
|
+
`lock-dependencies`, `lock-param-hooks`, and governed parameter locks. Those locks cover different
|
|
210
|
+
state. Describe exactly what each freezes; never summarize them as “the output can never change.”
|
|
@@ -1,99 +1,94 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
1
|
+
# ERC-721C / ERC-1155C transfer validation
|
|
2
|
+
|
|
3
|
+
Use this reference only when the creator asks about creator-token standards, transfer validation,
|
|
4
|
+
royalty-enforcement compatibility, validator selection, or changing/suspending validation.
|
|
5
|
+
|
|
6
|
+
## Separate three mechanisms
|
|
7
|
+
|
|
8
|
+
- **Royalties** declare a receiver and basis points through the token's royalty interface. They do
|
|
9
|
+
not force a marketplace to pay.
|
|
10
|
+
- **Creator-token enrollment** opts the collection into ERC-721C or ERC-1155C validation at deploy.
|
|
11
|
+
Transfers consult a validator selected by the owner.
|
|
12
|
+
- **ABX transfer hooks** are code-project extension callbacks and may implement arbitrary project
|
|
13
|
+
lifecycle rules. They are not creator-token validators.
|
|
14
|
+
|
|
15
|
+
These mechanisms can coexist and may each reject a transfer for a different reason. Diagnose the
|
|
16
|
+
actual contract state and revert path.
|
|
17
|
+
|
|
18
|
+
## Enrollment is deploy-time
|
|
19
|
+
|
|
20
|
+
Pass `--721c recommended|0x…` on the selected deploy command to create the creator-token variant. The
|
|
21
|
+
same flag chooses the ERC-1155C twin when `--copies` selects an edition. Absence creates the ordinary
|
|
22
|
+
ERC-721/ERC-1155 family.
|
|
23
|
+
|
|
24
|
+
Enrollment cannot be added or removed after deployment. Ask before spending:
|
|
25
|
+
|
|
26
|
+
- Does the creator actually want standards-track transfer validation?
|
|
27
|
+
- Which validator and security policy should govern transfers?
|
|
28
|
+
- Is the intended marketplace/wallet flow compatible on the target chain today?
|
|
29
|
+
- Who may later change or suspend the validator?
|
|
30
|
+
- Is the stronger restriction worth the interoperability and owner-power tradeoff?
|
|
31
|
+
|
|
32
|
+
Do not default into enrollment merely because the creator set a royalty. Do not present it as a
|
|
33
|
+
guarantee of payment across all marketplaces.
|
|
34
|
+
|
|
35
|
+
## Select and validate the validator
|
|
36
|
+
|
|
37
|
+
`recommended` resolves the toolkit's current recommended creator-fee validator for the active chain.
|
|
38
|
+
An explicit address must be a deployed validator contract that actually implements the expected
|
|
39
|
+
interface and rejects unsupported calls. A Safe, EOA, empty proxy, or permissive fallback is not an
|
|
40
|
+
enforcement policy even if it has code.
|
|
41
|
+
|
|
42
|
+
Let the CLI probe the address. Do not bypass a refusal with a raw transaction. For a custom validator,
|
|
43
|
+
review and test:
|
|
44
|
+
|
|
45
|
+
- transfer behavior for owner, approved operator, marketplace conduit, and ordinary recipient;
|
|
46
|
+
- mint and burn behavior where the standard invokes validation;
|
|
47
|
+
- upgrade/administration powers and who controls them;
|
|
48
|
+
- failure behavior when external registries are unavailable;
|
|
49
|
+
- ERC-721 versus ERC-1155 amount/batch semantics;
|
|
50
|
+
- interaction with an ABX transfer hook.
|
|
51
|
+
|
|
52
|
+
Marketplace allowlists, registry addresses, and supported flows change. Use current command output,
|
|
53
|
+
the validator's primary documentation, and a testnet transaction rather than a dated compatibility
|
|
54
|
+
table in this skill.
|
|
55
|
+
|
|
56
|
+
## Operate an enrolled collection
|
|
57
|
+
|
|
58
|
+
Read current enrollment and validator state with `abx state`. Use:
|
|
55
59
|
|
|
56
60
|
```bash
|
|
57
|
-
|
|
58
|
-
abx
|
|
59
|
-
|
|
60
|
-
abx deploy --copies <n|open> … --721c [recommended|0x<validator>]
|
|
61
|
-
|
|
62
|
-
# Operate an ENROLLED collection (owner-only, any signing lane, --dry-run works):
|
|
63
|
-
abx set-transfer-validator <addr> 0x<validator> # re-point enforcement
|
|
64
|
-
abx set-transfer-validator <addr> none # suspend (stays enrolled)
|
|
65
|
-
abx set-transfer-validator <addr> recommended # the chain's recommended validator
|
|
66
|
-
|
|
67
|
-
abx state <addr> # shows a "721C validator" row ONLY when enrolled ("suspended" when zero);
|
|
68
|
-
# an enrolled EDITION shows the same row labeled "1155C validator" — same
|
|
69
|
-
# ERC-165 id + getter on both standards, so detection is identical
|
|
61
|
+
abx set-transfer-validator <address> recommended
|
|
62
|
+
abx set-transfer-validator <address> 0x...
|
|
63
|
+
abx set-transfer-validator <address> none
|
|
70
64
|
```
|
|
71
65
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
|
|
99
|
-
|
|
66
|
+
Run command help for current syntax and a dry run before writing. Setting `none` suspends the active
|
|
67
|
+
validator where supported; it does not convert the contract back to a plain non-C token. Enrollment
|
|
68
|
+
and the associated owner power remain part of the contract's permanent type.
|
|
69
|
+
|
|
70
|
+
Before changing the validator:
|
|
71
|
+
|
|
72
|
+
1. Read the current validator, owner, royalty, minter, and transfer-hook state.
|
|
73
|
+
2. Explain whether the change tightens, loosens, or suspends transfer policy.
|
|
74
|
+
3. Test representative transfers using the intended marketplace/operator on testnet.
|
|
75
|
+
4. Receive exact human confirmation.
|
|
76
|
+
5. Execute once and re-read state.
|
|
77
|
+
|
|
78
|
+
If a transfer fails, do not clear the validator as a generic repair. Determine whether the failure
|
|
79
|
+
comes from the creator-token validator, an ABX transfer hook, token ownership/approval, pause/mint
|
|
80
|
+
rules, or the receiving contract. Changing enforcement is a policy decision, not troubleshooting.
|
|
81
|
+
|
|
82
|
+
## Disclose owner powers precisely
|
|
83
|
+
|
|
84
|
+
Collectors should know:
|
|
85
|
+
|
|
86
|
+
- the collection is permanently enrolled in the creator-token variant;
|
|
87
|
+
- the current validator address and whether it is upgradeable;
|
|
88
|
+
- who can change or suspend that validator;
|
|
89
|
+
- whether a separate ABX transfer hook can veto transfers/mints;
|
|
90
|
+
- whether hook addresses are locked;
|
|
91
|
+
- the royalty rate, receiver, and permanent ceiling.
|
|
92
|
+
|
|
93
|
+
A locked ABX hook set does not lock the creator-token validator, and creator-token enrollment does not
|
|
94
|
+
freeze royalties. List each power separately.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Static projects and editions
|
|
2
|
+
|
|
3
|
+
Use this reference for `abx deploy`, `abx deploy-series`, their `--copies` editions, content
|
|
4
|
+
placement, identity, mint timing, and deploy confirmation.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- [Choose the contract shape](#choose-the-contract-shape)
|
|
9
|
+
- [Choose custody and resolution](#choose-custody-and-resolution)
|
|
10
|
+
- [Understand on-chain reach](#understand-on-chain-reach)
|
|
11
|
+
- [Prepare identity and economics](#prepare-identity-and-economics)
|
|
12
|
+
- [Plan editions correctly](#plan-editions-correctly)
|
|
13
|
+
- [Plan, execute, and verify](#plan-execute-and-verify)
|
|
14
|
+
|
|
15
|
+
## Choose the contract shape
|
|
16
|
+
|
|
17
|
+
Start from the artifact and supply model, not from a preferred storage backend:
|
|
18
|
+
|
|
19
|
+
| Creator intent | Command | Contract family |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| One static work, one token | `abx deploy` | OneOfOneImage, ERC-721 |
|
|
22
|
+
| Folder of N distinct works | `abx deploy-series` | SeriesImage, ERC-721 |
|
|
23
|
+
| One work with multiple copies | `abx deploy --copies <n|open>` | OneOfOneEdition, ERC-1155 |
|
|
24
|
+
| N distinct works, copies of each | `abx deploy-series --copies <n|open>` | EditionImage, ERC-1155 |
|
|
25
|
+
|
|
26
|
+
If the work needs collector parameters, state-derived output, or configure/transfer/augment hooks,
|
|
27
|
+
use `deploy-code` even when the visible artifact looks static. Contract family is fixed at deploy;
|
|
28
|
+
static contracts cannot gain code extensions later.
|
|
29
|
+
|
|
30
|
+
Run `abx capabilities --json` and the chosen command's help before constructing the plan. The
|
|
31
|
+
capability contract, help, flag validation, and dry-run output are current product truth.
|
|
32
|
+
|
|
33
|
+
## Choose custody and resolution
|
|
34
|
+
|
|
35
|
+
Treat custody, resolution, and mutability as separate decisions.
|
|
36
|
+
|
|
37
|
+
### Bytes and metadata fully on-chain
|
|
38
|
+
|
|
39
|
+
Use `--onchain-image [--compress fastlz]` for static media bytes behind the on-chain metadata
|
|
40
|
+
renderer. It implies on-chain resolution and requires no host or storage provider. It works for 721
|
|
41
|
+
static projects and their editions in hot or wallet lanes. Cold `--unsigned` staging is refused.
|
|
42
|
+
|
|
43
|
+
Use `fastlz` for on-chain-readable compression. Gzip is an off-chain decode format and cannot be
|
|
44
|
+
substituted for an on-chain-rendered field. Bare `--onchain-uri` may inline very small SVG/text
|
|
45
|
+
content, but the reader/chunk path is normally more economical for real files; trust the dry-run's
|
|
46
|
+
measured plan rather than a memorized byte threshold.
|
|
47
|
+
|
|
48
|
+
### Media external, metadata JSON on-chain, no resolver
|
|
49
|
+
|
|
50
|
+
Use `--onchain-uri --backend arweave|ipfs|cloud`. The CLI uploads media, bakes its public locator into
|
|
51
|
+
on-chain JSON, and does not require an ABX resolver. This is often the simplest durable path for
|
|
52
|
+
static collections:
|
|
53
|
+
|
|
54
|
+
- Arweave provides pay-once permanent custody through the configured uploader.
|
|
55
|
+
- IPFS requires maintained pinning and a public gateway; a local kubo gateway is development-only.
|
|
56
|
+
- Cloud requires an authenticated upload endpoint and a distinct public read base/CDN URL.
|
|
57
|
+
|
|
58
|
+
For uniform-extension Series folders, the CLI can use a shared directory/template representation
|
|
59
|
+
rather than one collection field per item. Let the dry run report the chosen representation.
|
|
60
|
+
|
|
61
|
+
This path can still carry on-chain description, attributes, authorship, license, and other reserved
|
|
62
|
+
fields. “External image” does not mean “off-chain metadata.”
|
|
63
|
+
|
|
64
|
+
### Hosted resolver
|
|
65
|
+
|
|
66
|
+
Use `--public-base-url https://…` when metadata must remain operationally editable, when arbitrary
|
|
67
|
+
attached files need enumeration, when large on-chain reads need an HTTP front, or when a JavaScript
|
|
68
|
+
project needs hosted live/render surfaces. The URL must be public and stable; the CLI refuses
|
|
69
|
+
localhost for a real deploy.
|
|
70
|
+
|
|
71
|
+
A resolver may be managed by a configured remote provider or run by the creator. That choice does
|
|
72
|
+
not change the token contract. Read [hosting.md](hosting.md) before promising who operates the
|
|
73
|
+
service, how effects are rendered, or how migration works.
|
|
74
|
+
|
|
75
|
+
### Local filesystem
|
|
76
|
+
|
|
77
|
+
Use `fs` only for local preview and disposable testnet iteration. A token whose public metadata
|
|
78
|
+
depends on a laptop path is not launched. Move the bytes or run a public resolver before presenting
|
|
79
|
+
the collection as complete.
|
|
80
|
+
|
|
81
|
+
## Understand on-chain reach
|
|
82
|
+
|
|
83
|
+
There is no fixed supported byte ceiling for `--onchain-image`. Writes are chunked; cost grows with
|
|
84
|
+
the stored bytes. Resolution rebuilds the document in one `eth_call`; success depends on the read-gas
|
|
85
|
+
allowance of the endpoint making that call.
|
|
86
|
+
|
|
87
|
+
The CLI estimates write cost, estimates read cost, probes the active endpoint, and reports whether the
|
|
88
|
+
document fits that endpoint's measured allowance. Preserve these distinctions:
|
|
89
|
+
|
|
90
|
+
- A successful write proves storage, not universal display reach.
|
|
91
|
+
- A successful read through the creator's RPC says nothing certain about a marketplace's RPC.
|
|
92
|
+
- Compression can reduce write cost without reducing the gas needed to reconstruct uncompressed
|
|
93
|
+
output.
|
|
94
|
+
- The limit is per token, not the aggregate size of the collection.
|
|
95
|
+
- If direct self-resolution has insufficient reach, the bytes remain on-chain; a resolver can read
|
|
96
|
+
them through a capable endpoint and serve ordinary HTTP after `set-renderer --off`.
|
|
97
|
+
|
|
98
|
+
Never call a size impossible merely because it is expensive or endpoint-dependent. State the dry
|
|
99
|
+
run's cost and reach, offer external permanent custody or resolver-fronted access as alternatives,
|
|
100
|
+
and let the creator decide.
|
|
101
|
+
|
|
102
|
+
## Prepare identity and economics
|
|
103
|
+
|
|
104
|
+
Propose and confirm a real name and symbol. The CLI may infer placeholders for a dry run but refuses
|
|
105
|
+
to silently bake a generic identity on a real send unless the user explicitly accepts it. A folder
|
|
106
|
+
named `images` is not a collection title.
|
|
107
|
+
|
|
108
|
+
Confirm these fields as applicable:
|
|
109
|
+
|
|
110
|
+
- description and external URL;
|
|
111
|
+
- creator, display notes, creator links, and license;
|
|
112
|
+
- initial royalty and royalty receiver;
|
|
113
|
+
- royalty cap, which is a permanent ceiling that may only decrease;
|
|
114
|
+
- burnability, fixed at deploy;
|
|
115
|
+
- ERC-721C/ERC-1155C enrollment, fixed at deploy;
|
|
116
|
+
- owner/deployer and primary-sale payee;
|
|
117
|
+
- whether metadata fields begin on-chain or in the resolver projection.
|
|
118
|
+
|
|
119
|
+
The owner may change ordinary royalties within the cap. Lowering the cap is irreversible. Do not
|
|
120
|
+
equate declared royalties with enforced creator fees; transfer-validator enrollment is a separate
|
|
121
|
+
creator-token decision described in [creator-token.md](creator-token.md).
|
|
122
|
+
|
|
123
|
+
### Mint timing
|
|
124
|
+
|
|
125
|
+
Choose among minting during deployment, pre-warming with no mint, or preminting part of a Series.
|
|
126
|
+
Pre-warming is valuable when a resolver or render pipeline must be ready before marketplaces observe
|
|
127
|
+
the first token. For hosted paths, register/index and verify the predicted or deployed contract before
|
|
128
|
+
minting; then mint and refresh.
|
|
129
|
+
|
|
130
|
+
The shared fixed-price minter is normally configured after deployment: set price/allocation, set the
|
|
131
|
+
minter/payee, and unpause when ready. Deploy-time minter flags pre-authorize a known stack; they are not
|
|
132
|
+
a substitute for confirming the actual sale configuration.
|
|
133
|
+
|
|
134
|
+
## Plan editions correctly
|
|
135
|
+
|
|
136
|
+
`--copies` changes both the token standard and the ownership model.
|
|
137
|
+
|
|
138
|
+
- `deploy --copies 100` means one id with a cap of 100 copies.
|
|
139
|
+
- `deploy-series --copies 100` means every folder item is its own id with up to 100 copies.
|
|
140
|
+
- `open` means an uncapped edition at deployment; later cap operations only lower numeric caps.
|
|
141
|
+
- `--mint-amount` is copies per preminted id; `--mint-count`/`--mint-all` select which ids premint.
|
|
142
|
+
- Transfers require an amount and explicit source because an id can have many holders.
|
|
143
|
+
|
|
144
|
+
For any edition, say “N ids × M copies per id” and the maximum aggregate supply before spending.
|
|
145
|
+
|
|
146
|
+
Static edition custody is symmetric with the 721 lanes: on-chain bytes, on-chain JSON with external
|
|
147
|
+
media, inline SVG, and hosted resolution are available. `--onchain-image` uses hot or wallet signing,
|
|
148
|
+
not cold unsigned staging.
|
|
149
|
+
|
|
150
|
+
Do not import code-edition limits into static editions or vice versa. Use the capability output.
|
|
151
|
+
|
|
152
|
+
## Plan, execute, and verify
|
|
153
|
+
|
|
154
|
+
1. Run `abx doctor`, storage/remote checks needed by the selected path, and command help.
|
|
155
|
+
2. Run the exact command with `--dry-run --json` and a known `--for` address when needed.
|
|
156
|
+
3. Read back contract family, id/copy arithmetic, custody, resolution, public URLs, signer lane,
|
|
157
|
+
initial mint, transaction count, cost/reach warnings, and irreversible options.
|
|
158
|
+
4. Receive explicit confirmation.
|
|
159
|
+
5. Run the same normalized command without `--dry-run`; do not start another write using the EOA.
|
|
160
|
+
6. Capture the chain, contract address, deploy block, owner, storage locators, and resolver/remote.
|
|
161
|
+
7. Verify `state`, `contracturi`, `tokenuri`, public image retrieval, and byte integrity.
|
|
162
|
+
8. If pre-warmed, register/serve first, mint second, verify the token-specific surfaces, then refresh.
|
|
163
|
+
9. Apply locks only after production-path verification.
|
|
164
|
+
|
|
165
|
+
For Arweave or other eventually available storage, an accepted upload is not yet a retrievable asset.
|
|
166
|
+
Use `abx storage status <locator> --json` and wait for `ready`; do not upload again simply because a
|
|
167
|
+
gateway is still propagating.
|