@artblocks/abx-cli 0.1.0-alpha.4 → 0.1.0-alpha.41
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 +161 -0
- package/assets/renderer-scaffold/README.md +41 -11
- package/assets/renderer-scaffold/foundry.toml +5 -0
- package/assets/renderer-scaffold/remappings.txt +1 -1
- package/assets/renderer-scaffold/script/DeployHooks.s.sol +24 -0
- package/assets/renderer-scaffold/script/Preview.s.sol +99 -0
- package/assets/renderer-scaffold/src/MyHooks.sol +20 -0
- package/assets/renderer-scaffold/src/MyRenderer.sol +4 -4
- package/assets/renderer-scaffold/src/MyTraits.sol +2 -2
- package/assets/renderer-scaffold/test/MyRenderer.t.sol +60 -3
- package/dist/bin.d.ts +26 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +63 -0
- package/dist/bin.js.map +1 -0
- package/dist/capabilities.d.ts +99 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +144 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/commands/auth.d.ts +54 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +447 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/deploy.d.ts +242 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +5429 -0
- package/dist/commands/deploy.js.map +1 -0
- 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/maintenance.d.ts +4 -0
- package/dist/commands/maintenance.d.ts.map +1 -0
- package/dist/commands/maintenance.js +114 -0
- package/dist/commands/maintenance.js.map +1 -0
- package/dist/commands/project.d.ts +429 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +1720 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/reads.d.ts +85 -0
- package/dist/commands/reads.d.ts.map +1 -0
- package/dist/commands/reads.js +868 -0
- package/dist/commands/reads.js.map +1 -0
- package/dist/commands/scaffold.d.ts +89 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +738 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/dist/commands/service.d.ts +67 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +748 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/storage.d.ts +51 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +399 -0
- package/dist/commands/storage.js.map +1 -0
- package/dist/commands/submit-app.d.ts +102 -0
- package/dist/commands/submit-app.d.ts.map +1 -0
- package/dist/commands/submit-app.js +622 -0
- package/dist/commands/submit-app.js.map +1 -0
- package/dist/config.d.ts +105 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +351 -12
- package/dist/config.js.map +1 -1
- package/dist/conformance.d.ts +31 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +390 -0
- package/dist/conformance.js.map +1 -0
- package/dist/contract-read-error.d.ts +5 -0
- package/dist/contract-read-error.d.ts.map +1 -0
- package/dist/contract-read-error.js +37 -0
- package/dist/contract-read-error.js.map +1 -0
- package/dist/deploy-plan.d.ts +150 -0
- package/dist/deploy-plan.d.ts.map +1 -0
- package/dist/deploy-plan.js +31 -0
- package/dist/deploy-plan.js.map +1 -0
- package/dist/deps.d.ts +6 -39
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +4 -68
- package/dist/deps.js.map +1 -1
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -0
- package/dist/flag-allowlists.d.ts +53 -0
- package/dist/flag-allowlists.d.ts.map +1 -0
- package/dist/flag-allowlists.js +184 -0
- package/dist/flag-allowlists.js.map +1 -0
- package/dist/flags.d.ts +47 -0
- package/dist/flags.d.ts.map +1 -1
- package/dist/flags.js +125 -1
- package/dist/flags.js.map +1 -1
- package/dist/jsonout.d.ts +37 -0
- package/dist/jsonout.d.ts.map +1 -0
- package/dist/jsonout.js +79 -0
- package/dist/jsonout.js.map +1 -0
- package/dist/kind.d.ts +57 -0
- package/dist/kind.d.ts.map +1 -0
- package/dist/kind.js +122 -0
- package/dist/kind.js.map +1 -0
- package/dist/main.js +786 -4838
- package/dist/main.js.map +1 -1
- package/dist/mintpage.d.ts +17 -2
- package/dist/mintpage.d.ts.map +1 -1
- package/dist/mintpage.js +241 -54
- package/dist/mintpage.js.map +1 -1
- package/dist/output.d.ts +179 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +780 -0
- package/dist/output.js.map +1 -0
- package/dist/ownerops.d.ts +381 -57
- package/dist/ownerops.d.ts.map +1 -1
- package/dist/ownerops.js +2014 -359
- package/dist/ownerops.js.map +1 -1
- package/dist/preview.d.ts +23 -5
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +95 -43
- package/dist/preview.js.map +1 -1
- package/dist/prompt.d.ts +17 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +19 -0
- package/dist/prompt.js.map +1 -0
- package/dist/provision.d.ts +3 -13
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +19 -21
- package/dist/provision.js.map +1 -1
- package/dist/remote.d.ts +157 -52
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +435 -46
- package/dist/remote.js.map +1 -1
- package/dist/riskgate.d.ts +62 -0
- package/dist/riskgate.d.ts.map +1 -0
- package/dist/riskgate.js +234 -0
- package/dist/riskgate.js.map +1 -0
- package/dist/scaffold.d.ts +12 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +56 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/schema.d.ts +36 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +121 -26
- package/dist/schema.js.map +1 -1
- package/dist/script-chunks.d.ts +8 -0
- package/dist/script-chunks.d.ts.map +1 -0
- package/dist/script-chunks.js +35 -0
- package/dist/script-chunks.js.map +1 -0
- package/dist/served.d.ts +30 -0
- package/dist/served.d.ts.map +1 -0
- package/dist/served.js +112 -0
- package/dist/served.js.map +1 -0
- package/dist/signer.d.ts +13 -0
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +84 -15
- package/dist/signer.js.map +1 -1
- package/dist/update-check.d.ts +86 -5
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +161 -20
- package/dist/update-check.js.map +1 -1
- package/package.json +13 -12
- package/skill/SKILL.md +181 -347
- package/skill/agents/openai.yaml +4 -0
- package/skill/reference/capabilities.md +188 -0
- package/skill/reference/code.md +220 -0
- package/skill/reference/creator-token.md +94 -0
- package/skill/reference/deploy.md +174 -0
- package/skill/reference/diagnose.md +178 -0
- package/skill/reference/hosting.md +186 -93
- package/skill/reference/operate.md +220 -0
- package/skill/reference/services.md +121 -0
- package/skill/reference/setup.md +154 -36
- package/assets/renderer-scaffold/src/interfaces/IAbxFieldRenderer.sol +0 -32
- package/assets/renderer-scaffold/src/interfaces/IAbxParams.sol +0 -26
- package/dist/inspect.d.ts +0 -48
- package/dist/inspect.d.ts.map +0 -1
- package/dist/inspect.js +0 -184
- package/dist/inspect.js.map +0 -1
- package/dist/migrate.d.ts +0 -65
- package/dist/migrate.d.ts.map +0 -1
- package/dist/migrate.js +0 -180
- package/dist/migrate.js.map +0 -1
- package/dist/onchain-uri.d.ts +0 -97
- package/dist/onchain-uri.d.ts.map +0 -1
- package/dist/onchain-uri.js +0 -243
- package/dist/onchain-uri.js.map +0 -1
- package/dist/upload.d.ts +0 -28
- package/dist/upload.d.ts.map +0 -1
- package/dist/upload.js +0 -41
- package/dist/upload.js.map +0 -1
- package/skill/reference/code-projects.md +0 -246
- package/skill/reference/operating.md +0 -116
- package/skill/reference/troubleshooting.md +0 -28
|
@@ -0,0 +1,174 @@
|
|
|
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, but needs the
|
|
55
|
+
optional `@artblocks/abx-storage-arweave` package installed alongside the CLI first (see
|
|
56
|
+
[hosting.md](hosting.md#arweave)) — it is not part of the default install.
|
|
57
|
+
- IPFS requires maintained pinning and a public gateway; a local kubo gateway is development-only.
|
|
58
|
+
- Cloud requires an authenticated upload endpoint and a distinct public read base/CDN URL.
|
|
59
|
+
|
|
60
|
+
For uniform-extension Series folders, the CLI can use a shared directory/template representation
|
|
61
|
+
rather than one collection field per item. Let the dry run report the chosen representation.
|
|
62
|
+
|
|
63
|
+
This path can still carry on-chain description, attributes, authorship, license, and other reserved
|
|
64
|
+
fields. “External image” does not mean “off-chain metadata.”
|
|
65
|
+
|
|
66
|
+
### Hosted resolver
|
|
67
|
+
|
|
68
|
+
Use `--public-base-url https://…` when metadata must remain operationally editable, when arbitrary
|
|
69
|
+
attached files need enumeration, when large on-chain reads need an HTTP front, or when a JavaScript
|
|
70
|
+
project needs hosted live/render surfaces. The URL must be public and stable; the CLI refuses
|
|
71
|
+
localhost for a real deploy.
|
|
72
|
+
|
|
73
|
+
A resolver may be managed by a configured remote provider or run by the creator. That choice does
|
|
74
|
+
not change the token contract. Read [hosting.md](hosting.md) before promising who operates the
|
|
75
|
+
service, how effects are rendered, or how migration works.
|
|
76
|
+
|
|
77
|
+
### Local filesystem
|
|
78
|
+
|
|
79
|
+
Use `fs` only for local preview and disposable testnet iteration. A token whose public metadata
|
|
80
|
+
depends on a laptop path is not launched. Move the bytes or run a public resolver before presenting
|
|
81
|
+
the collection as complete.
|
|
82
|
+
|
|
83
|
+
## Understand on-chain reach
|
|
84
|
+
|
|
85
|
+
There is no fixed supported byte ceiling for `--onchain-image`. Writes are chunked; cost grows with
|
|
86
|
+
the stored bytes. Resolution rebuilds the document in one `eth_call`; success depends on the read-gas
|
|
87
|
+
allowance of the endpoint making that call.
|
|
88
|
+
|
|
89
|
+
The CLI estimates write cost, estimates read cost, probes the active endpoint, and reports whether the
|
|
90
|
+
document fits that endpoint's measured allowance. Preserve these distinctions:
|
|
91
|
+
|
|
92
|
+
- A successful write proves storage, not universal display reach.
|
|
93
|
+
- A successful read through the creator's RPC says nothing certain about a marketplace's RPC.
|
|
94
|
+
- Compression can reduce write cost without reducing the gas needed to reconstruct uncompressed
|
|
95
|
+
output.
|
|
96
|
+
- The limit is per token, not the aggregate size of the collection.
|
|
97
|
+
- If direct self-resolution has insufficient reach, the bytes remain on-chain; a resolver can read
|
|
98
|
+
them through a capable endpoint and serve ordinary HTTP after `set-renderer --off`.
|
|
99
|
+
|
|
100
|
+
Never call a size impossible merely because it is expensive or endpoint-dependent. State the dry
|
|
101
|
+
run's cost and reach, offer external permanent custody or resolver-fronted access as alternatives,
|
|
102
|
+
and let the creator decide.
|
|
103
|
+
|
|
104
|
+
## Prepare identity and economics
|
|
105
|
+
|
|
106
|
+
Propose and confirm a real name and symbol. The CLI may infer placeholders for a dry run but refuses
|
|
107
|
+
to silently bake a generic identity on a real send unless the user explicitly accepts it. A folder
|
|
108
|
+
named `images` is not a collection title.
|
|
109
|
+
|
|
110
|
+
Confirm these fields as applicable:
|
|
111
|
+
|
|
112
|
+
- description and external URL;
|
|
113
|
+
- creator, display notes, creator links, and license;
|
|
114
|
+
- initial royalty and royalty receiver;
|
|
115
|
+
- royalty cap, which is a permanent ceiling that may only decrease;
|
|
116
|
+
- burnability, fixed at deploy;
|
|
117
|
+
- ERC-721C/ERC-1155C enrollment, fixed at deploy;
|
|
118
|
+
- owner/deployer and primary-sale payee;
|
|
119
|
+
- whether metadata fields begin on-chain or in the resolver projection.
|
|
120
|
+
|
|
121
|
+
The owner may change ordinary royalties within the cap. Lowering the cap is irreversible. Do not
|
|
122
|
+
equate declared royalties with enforced creator fees; transfer-validator enrollment is a separate
|
|
123
|
+
creator-token decision described in [creator-token.md](creator-token.md).
|
|
124
|
+
|
|
125
|
+
### Mint timing
|
|
126
|
+
|
|
127
|
+
Choose among minting during deployment, pre-warming with no mint, or preminting part of a Series.
|
|
128
|
+
Pre-warming is valuable when a resolver or render pipeline must be ready before marketplaces observe
|
|
129
|
+
the first token. For hosted paths, register/index and verify the predicted or deployed contract before
|
|
130
|
+
minting; then mint and refresh.
|
|
131
|
+
|
|
132
|
+
The shared fixed-price minter is normally configured after deployment: set price/allocation, set the
|
|
133
|
+
minter/payee, and unpause when ready. Deploy-time minter flags pre-authorize a known stack; they are not
|
|
134
|
+
a substitute for confirming the actual sale configuration.
|
|
135
|
+
|
|
136
|
+
## Plan editions correctly
|
|
137
|
+
|
|
138
|
+
`--copies` changes both the token standard and the ownership model.
|
|
139
|
+
|
|
140
|
+
- `deploy --copies 100` means one id with a cap of 100 copies.
|
|
141
|
+
- `deploy-series --copies 100` means every folder item is its own id with up to 100 copies.
|
|
142
|
+
- `open` means an uncapped edition at deployment; later cap operations only lower numeric caps.
|
|
143
|
+
- `--mint-amount` is copies per preminted id; `--mint-count`/`--mint-all` select which ids premint.
|
|
144
|
+
- Transfers require an amount and explicit source because an id can have many holders.
|
|
145
|
+
|
|
146
|
+
For any edition, say “N ids × M copies per id” and the maximum aggregate supply before spending.
|
|
147
|
+
|
|
148
|
+
Static edition custody is symmetric with the 721 lanes: on-chain bytes, on-chain JSON with external
|
|
149
|
+
media, inline SVG, and hosted resolution are available. `--onchain-image` uses hot or wallet signing,
|
|
150
|
+
not cold unsigned staging.
|
|
151
|
+
|
|
152
|
+
Do not import code-edition limits into static editions or vice versa. Use the capability output.
|
|
153
|
+
|
|
154
|
+
## Plan, execute, and verify
|
|
155
|
+
|
|
156
|
+
1. Run `abx doctor`, storage/remote checks needed by the selected path, and command help.
|
|
157
|
+
2. Run the exact command with `--dry-run --json` and a known `--for` address when needed.
|
|
158
|
+
3. Read back contract family, id/copy arithmetic, custody, resolution, public URLs, signer lane,
|
|
159
|
+
initial mint, transaction count, cost/reach warnings, and irreversible options. The JSON payload's
|
|
160
|
+
`plan` object (every `deploy`/`deploy-series`/`deploy-code` emit, including `--resume`) carries
|
|
161
|
+
most of this pre-structured — `transactions`, `roles`, `royalty`, `custody`, `mint`, `estimate`,
|
|
162
|
+
`warnings`, and (code lanes) `surfaces`/`dependencies` — versioned via `plan.schemaVersion`. Prefer
|
|
163
|
+
it over parsing the human prose for anything it covers; a field it has no answer for is `null`, not
|
|
164
|
+
absent.
|
|
165
|
+
4. Receive explicit confirmation.
|
|
166
|
+
5. Run the same normalized command without `--dry-run`; do not start another write using the EOA.
|
|
167
|
+
6. Capture the chain, contract address, deploy block, owner, storage locators, and resolver/remote.
|
|
168
|
+
7. Verify `state`, `contracturi`, `tokenuri`, public image retrieval, and byte integrity.
|
|
169
|
+
8. If pre-warmed, register/serve first, mint second, verify the token-specific surfaces, then refresh.
|
|
170
|
+
9. Apply locks only after production-path verification.
|
|
171
|
+
|
|
172
|
+
For Arweave or other eventually available storage, an accepted upload is not yet a retrievable asset.
|
|
173
|
+
Use `abx storage status <locator> --json` and wait for `ready`; do not upload again simply because a
|
|
174
|
+
gateway is still propagating.
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Diagnosis and recovery
|
|
2
|
+
|
|
3
|
+
Use this reference when a command fails, a project is incomplete, metadata is wrong, a render is
|
|
4
|
+
missing, storage is propagating, a remote rejects a request, or an agent is tempted to add retries.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- [Diagnose one state transition at a time](#diagnose-one-state-transition-at-a-time)
|
|
9
|
+
- [State-to-action table](#state-to-action-table)
|
|
10
|
+
- [Nonces and serialized writes](#nonces-and-serialized-writes)
|
|
11
|
+
- [Incomplete deployments](#incomplete-deployments)
|
|
12
|
+
- [RPC and chain failures](#rpc-and-chain-failures)
|
|
13
|
+
- [Metadata and resolution failures](#metadata-and-resolution-failures)
|
|
14
|
+
- [Storage failures](#storage-failures)
|
|
15
|
+
- [Render and effects failures](#render-and-effects-failures)
|
|
16
|
+
- [Secret-safe reporting](#secret-safe-reporting)
|
|
17
|
+
|
|
18
|
+
## Diagnose one state transition at a time
|
|
19
|
+
|
|
20
|
+
1. Capture the command, exit code, typed error/status, active chain, target address, and signer lane.
|
|
21
|
+
Never capture secret values or complete credential-bearing URLs.
|
|
22
|
+
2. Run `abx version` and `abx doctor`; correct binary/skill drift before interpreting behavior.
|
|
23
|
+
3. Run the relevant read command (`state`, `tokens`, `tokenuri`, `contracturi`, `status`, `verify`,
|
|
24
|
+
`remote`, or `storage status`) to establish current state.
|
|
25
|
+
4. Classify the result as nonterminal, terminal/configuration, terminal/on-chain, or integrity fault.
|
|
26
|
+
5. Choose one documented transition. Re-read state after it. Stop when the state changes or a human
|
|
27
|
+
decision is required.
|
|
28
|
+
|
|
29
|
+
Do not run the same failed write with random flags, switch representations silently, rotate providers
|
|
30
|
+
without evidence, or wrap the CLI in an unbounded retry loop.
|
|
31
|
+
|
|
32
|
+
## State-to-action table
|
|
33
|
+
|
|
34
|
+
| Observation | Meaning | Next action |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `indexing`, `queued`, `running`, `propagating` | nonterminal work | use the command's `--watch`/status and wait |
|
|
37
|
+
| `401` from a remote | token absent/invalid | replace the configured credential, then probe once |
|
|
38
|
+
| `403` from a remote | credential lacks scope | fix provider authorization; do not rotate blindly |
|
|
39
|
+
| wrong chain id | endpoint/config mismatch | correct `ABX_CHAIN`/RPC; do not deploy another contract |
|
|
40
|
+
| no code at address | wrong chain/address or incomplete deploy | verify explorer/chain and deploy state before retrying |
|
|
41
|
+
| transaction reverted | on-chain rule rejected the exact call | inspect typed reason/tx; change intent or inputs, not nonce |
|
|
42
|
+
| integrity/hash mismatch | served bytes differ from commitment | stop publication; restore committed bytes or explicitly repoint |
|
|
43
|
+
| placeholder image | image surface not published/wired | choose renderer, public image base, or resolver/effects path |
|
|
44
|
+
| storage accepted but gateway 404 | propagation may be pending | `storage status`; wait if propagating |
|
|
45
|
+
| empty historical reconstruction | pruning/range-capped RPC may have answered `[]` | put a full-history endpoint first, then re-index |
|
|
46
|
+
| skill version/name warning | agent membrane is stale or duplicated | run the exact project/global `abx skill install` commands shown |
|
|
47
|
+
|
|
48
|
+
## Nonces and serialized writes
|
|
49
|
+
|
|
50
|
+
ABX already owns nonce handling. A hot sender reads pending and latest counts once, uses the safe
|
|
51
|
+
maximum, increments locally for the sequence, waits for newly deployed code before dependent calls,
|
|
52
|
+
pins gas with bounded estimation, and reports a reverted receipt as an error.
|
|
53
|
+
|
|
54
|
+
The operational rule is therefore simple: **one EOA, one write process at a time**. Two processes can
|
|
55
|
+
start from the same nonce before either sees the other's pending transaction. If contention occurred:
|
|
56
|
+
|
|
57
|
+
1. Stop additional writers.
|
|
58
|
+
2. Read nonce coherence with `abx doctor` and check pending/mined transactions on the active chain.
|
|
59
|
+
3. Wait for the pending transaction or resolve it using the wallet's standard replacement flow.
|
|
60
|
+
4. Re-read project state; resume only the missing documented step.
|
|
61
|
+
|
|
62
|
+
Do not add “nonce too low” retries, increment a guessed nonce, or send concurrent replacement
|
|
63
|
+
transactions from the agent. Those layers fight the CLI's serializer and can duplicate value-bearing
|
|
64
|
+
operations.
|
|
65
|
+
|
|
66
|
+
## Incomplete deployments
|
|
67
|
+
|
|
68
|
+
A failed multi-transaction code-project setup can leave a valid clone with missing setup legs. Use
|
|
69
|
+
`deploy-code --resume <address>` only where the capability output says resume is supported. It reads
|
|
70
|
+
the contract and sends only missing work; it is not a general “try deploy again” switch.
|
|
71
|
+
|
|
72
|
+
Before resume:
|
|
73
|
+
|
|
74
|
+
- verify the address, chain, contract family, owner, and original artifacts;
|
|
75
|
+
- use the same normalized script/dependencies/schema/renderer plan;
|
|
76
|
+
- read the resume dry run and confirm every proposed transaction;
|
|
77
|
+
- ensure no second writer is operating the same EOA.
|
|
78
|
+
|
|
79
|
+
EditionCode (`--copies`) targets are supported too — pass the exact same content flags the original
|
|
80
|
+
deploy used, minus `--copies` itself (the standard was fixed at creation and is read from chain, not
|
|
81
|
+
re-specified). The one difference from a 721 resume: name the intended premint plan with
|
|
82
|
+
`--mint-count`/`--mint-amount` if the original deploy premint any ids — the mint leg diffs **per id**
|
|
83
|
+
against that id's own on-chain copy count, not a single whole-contract total, and each shortfall sends
|
|
84
|
+
as one transaction regardless of how many copies are missing. Getting `--mint-count`/`--mint-amount`
|
|
85
|
+
wrong under-reports (an id you meant to premint stays at zero) rather than over-mints (a token cannot
|
|
86
|
+
be un-minted, so the diff only ever tops up a shortfall) — but confirm the intended plan with the
|
|
87
|
+
human before sending if there is any doubt about what the original deploy meant to premint.
|
|
88
|
+
|
|
89
|
+
## RPC and chain failures
|
|
90
|
+
|
|
91
|
+
Use `abx doctor` rather than probing secret endpoints manually. Distinguish:
|
|
92
|
+
|
|
93
|
+
- connectivity/rate limit: endpoint did not provide a usable response;
|
|
94
|
+
- wrong network: endpoint chain id differs from `ABX_CHAIN`;
|
|
95
|
+
- shallow history: recent reads work but old logs are unavailable;
|
|
96
|
+
- range cap: large `eth_getLogs` queries fail or return misleading empty ranges;
|
|
97
|
+
- read-gas cap: a large on-chain `tokenURI` call exceeds that endpoint's allowance;
|
|
98
|
+
- stale distributed view: pending nonce or newly deployed code lags the endpoint's own head.
|
|
99
|
+
|
|
100
|
+
Put the best archive endpoint first. Fallback transports can accept an empty successful answer from a
|
|
101
|
+
pruned endpoint and never reach a healthy second endpoint. For large on-chain content, state whose RPC
|
|
102
|
+
was measured; do not generalize creator reach to marketplace reach.
|
|
103
|
+
|
|
104
|
+
If a write simulation or estimate reverts, preserve the exact representation the creator chose. Use a
|
|
105
|
+
read-only call/CLI diagnostic to surface the contract reason. Never silently replace an on-chain reader
|
|
106
|
+
with an off-chain URL merely to make the command pass.
|
|
107
|
+
|
|
108
|
+
## Metadata and resolution failures
|
|
109
|
+
|
|
110
|
+
Start from the contract, not a constructed URL:
|
|
111
|
+
|
|
112
|
+
1. `abx state <addr>` — contract family, renderer, owner powers, schemas/locks.
|
|
113
|
+
2. `abx tokenuri <addr> --token <id>` — actual on-chain URI and decoded metadata.
|
|
114
|
+
3. `abx contracturi <addr>` — actual collection URI.
|
|
115
|
+
4. `abx verify <addr> --json` — commitments, chain-completeness, placeholders, public bytes.
|
|
116
|
+
|
|
117
|
+
Then follow the failing surface:
|
|
118
|
+
|
|
119
|
+
- URI absent/wrong: inspect URI pointer/renderer and deploy configuration.
|
|
120
|
+
- Metadata resolves but image fails: inspect image representation and public locator/gateway.
|
|
121
|
+
- Animation fails: inspect generated document, dependencies, target token data, and hosting.
|
|
122
|
+
- Traits missing: inspect decoded `attributes`, renderer/effects output, and publication—not only
|
|
123
|
+
program console traits.
|
|
124
|
+
- Attachments absent: verify resolver artifacts enumeration; bare on-chain metadata cannot enumerate
|
|
125
|
+
arbitrary keys.
|
|
126
|
+
|
|
127
|
+
Use `refresh` only after the current path is correct. Refreshing a broken URI makes a marketplace fetch
|
|
128
|
+
the same broken document again.
|
|
129
|
+
|
|
130
|
+
## Storage failures
|
|
131
|
+
|
|
132
|
+
Run `abx storage show --check` with the intended backend overrides. For cloud, inspect both the private
|
|
133
|
+
put endpoint and public read base by hostname only; never print credentials. For IPFS, separate pinning
|
|
134
|
+
from gateway retrieval. For Arweave, use structured status to distinguish propagation from failure.
|
|
135
|
+
|
|
136
|
+
Retry policy:
|
|
137
|
+
|
|
138
|
+
- accepted/deduplicated upload: success; do not upload again;
|
|
139
|
+
- propagating locator: wait using status backoff;
|
|
140
|
+
- terminal authentication/configuration error: fix configuration before one new attempt;
|
|
141
|
+
- integrity mismatch: stop and restore/republish the committed bytes;
|
|
142
|
+
- transient provider failure: use the client's bounded retry or retry once after status evidence;
|
|
143
|
+
- repeated unknown failure: stop and report the smallest redacted reproduction.
|
|
144
|
+
|
|
145
|
+
Do not switch backend or public locator without telling the creator; that changes the custody plan.
|
|
146
|
+
|
|
147
|
+
## Render and effects failures
|
|
148
|
+
|
|
149
|
+
A still is derived state keyed by current inputs. Diagnose the graph in order:
|
|
150
|
+
|
|
151
|
+
1. Token/id is minted and indexed.
|
|
152
|
+
2. Live document loads for that real id.
|
|
153
|
+
3. Dependencies and PostParams resolve.
|
|
154
|
+
4. Effects runner is authenticated and receives the job.
|
|
155
|
+
5. Render bytes are non-placeholder and uploaded to public storage.
|
|
156
|
+
6. Resolver receives/publishes the locator and traits.
|
|
157
|
+
7. Token metadata exposes them.
|
|
158
|
+
|
|
159
|
+
Use `abx render --force` only when an existing render is known bad or stale; a plain render should
|
|
160
|
+
idempotently skip an existing current artifact. A PostParam change produces a new inputs hash; verify
|
|
161
|
+
the watcher or run the explicit one-shot path. Solidity image renderers have no effects job—diagnose
|
|
162
|
+
their on-chain call instead.
|
|
163
|
+
|
|
164
|
+
`abx artifacts <addr> --token <id> --json` is the direct check for steps 5–7: it reports every
|
|
165
|
+
registered effect row (current and stale) against the token's active `inputsHash`, without fetching
|
|
166
|
+
and parsing the whole served document. A row present but labeled `stale` means a param changed since
|
|
167
|
+
it rendered — re-render, don't assume it's missing. Add `--remote <name|url>` for a hosted project;
|
|
168
|
+
the real artifact set lives on the resolver that serves it, not in this node's local projection.
|
|
169
|
+
|
|
170
|
+
## Secret-safe reporting
|
|
171
|
+
|
|
172
|
+
Include command name, CLI version, chain key, redacted host labels, contract address, transaction hash,
|
|
173
|
+
exit code, typed status/error, and expected versus observed state. Exclude `.env`, keys, tokens, JWKs,
|
|
174
|
+
wallet-session URLs, query strings, and raw provider responses containing request headers.
|
|
175
|
+
|
|
176
|
+
If the same blocking state survives three evidence-based transitions, stop. Report what was proven,
|
|
177
|
+
what was ruled out, and the exact external decision or state change required. Repetition is not
|
|
178
|
+
progress.
|