@artblocks/abx-cli 0.1.0-alpha.40 → 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 +145 -0
- package/assets/renderer-scaffold/README.md +12 -0
- package/assets/renderer-scaffold/foundry.toml +4 -0
- package/assets/renderer-scaffold/script/Preview.s.sol +99 -0
- package/dist/capabilities.d.ts +9 -4
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +13 -4
- package/dist/capabilities.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +731 -65
- package/dist/commands/deploy.js.map +1 -1
- 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 +175 -3
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +333 -27
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/reads.d.ts +21 -0
- package/dist/commands/reads.d.ts.map +1 -1
- package/dist/commands/reads.js +171 -4
- package/dist/commands/reads.js.map +1 -1
- package/dist/commands/scaffold.d.ts.map +1 -1
- package/dist/commands/scaffold.js +5 -0
- package/dist/commands/scaffold.js.map +1 -1
- package/dist/commands/service.d.ts.map +1 -1
- package/dist/commands/service.js +7 -0
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/storage.d.ts.map +1 -1
- package/dist/commands/storage.js +32 -3
- package/dist/commands/storage.js.map +1 -1
- package/dist/commands/submit-app.d.ts +43 -0
- package/dist/commands/submit-app.d.ts.map +1 -1
- package/dist/commands/submit-app.js +115 -6
- package/dist/commands/submit-app.js.map +1 -1
- package/dist/config.d.ts +16 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +73 -7
- package/dist/config.js.map +1 -1
- 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/flag-allowlists.d.ts.map +1 -1
- package/dist/flag-allowlists.js +5 -1
- package/dist/flag-allowlists.js.map +1 -1
- package/dist/flags.d.ts +6 -0
- package/dist/flags.d.ts.map +1 -1
- package/dist/flags.js +14 -0
- package/dist/flags.js.map +1 -1
- package/dist/jsonout.d.ts.map +1 -1
- package/dist/jsonout.js +11 -0
- package/dist/jsonout.js.map +1 -1
- package/dist/main.js +46 -7
- package/dist/main.js.map +1 -1
- package/dist/ownerops.d.ts +69 -0
- package/dist/ownerops.d.ts.map +1 -1
- package/dist/ownerops.js +221 -17
- package/dist/ownerops.js.map +1 -1
- package/dist/script-chunks.d.ts +1 -1
- package/dist/script-chunks.d.ts.map +1 -1
- package/dist/script-chunks.js +2 -2
- package/dist/script-chunks.js.map +1 -1
- package/package.json +6 -6
- package/skill/SKILL.md +6 -4
- package/skill/reference/code.md +17 -8
- package/skill/reference/deploy.md +9 -2
- package/skill/reference/diagnose.md +15 -2
- package/skill/reference/hosting.md +26 -0
- package/skill/reference/operate.md +43 -4
- package/skill/reference/setup.md +14 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,150 @@
|
|
|
1
1
|
# @artblocks/abx-cli
|
|
2
2
|
|
|
3
|
+
## 0.1.0-alpha.41
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c068a0f: `abx artifacts <address> [--token <id>]` reads a token's `artifacts` manifest directly, instead of
|
|
8
|
+
fetching and parsing the whole served tokenURI document. Reports every entry plus every
|
|
9
|
+
producer-registered effect row — current AND stale — each labeled against the token's active
|
|
10
|
+
`inputsHash`, so a param change that re-addressed a render is diagnosable rather than silently
|
|
11
|
+
absent. `--remote <name|url>` reads what a hosted resolver actually reports (the surface that owns a
|
|
12
|
+
hosted project's real artifact set), mirroring the existing `abx verify` / `abx verify --remote`
|
|
13
|
+
split. Neither "not registered here" nor "not registered on that remote" fails the command — both
|
|
14
|
+
return a stable `{surface, registered, available, reason, entries, effects}` JSON shape.
|
|
15
|
+
`@artblocks/abx-token-api` exports the underlying `tokenArtifacts()` read for direct SDK/server use.
|
|
16
|
+
- c068a0f: `abx attach` now distinguishes the on-chain field write from off-chain SERVING — the write can
|
|
17
|
+
succeed while nothing is able to serve it. It prints the canonical, directly-fetchable URL for every
|
|
18
|
+
attached key (`{base}/{chainId}/{address}[/<id>]/data/<key>`) so nobody hand-assembles the route, and
|
|
19
|
+
probes whether a resolver actually answers for the project right now, warning when none does (with
|
|
20
|
+
no resolver base baked in at all, or with one baked in that isn't currently reachable). `--collection`
|
|
21
|
+
now correctly reads `contractURIBase` (it previously always read `tokenURIBase`, even for a
|
|
22
|
+
collection-scope attach).
|
|
23
|
+
- c068a0f: Local data-directory resolution (`.abx-self-host` / `ABX_DATA_DIR`) is now centralized in one SDK
|
|
24
|
+
resolver (`resolveDataDir` from `@artblocks/abx-sdk/node`) instead of five independent copies of the
|
|
25
|
+
same fallback across the CLI, indexer, and storage packages — the setup that could silently split a
|
|
26
|
+
project's SQLite projection from its managed Arweave key into two different directories.
|
|
27
|
+
|
|
28
|
+
A handful of READ commands (`status`, `state`, `verify`, `doctor`, `capabilities`, `tokens`,
|
|
29
|
+
`tokenuri`, `contracturi`, `inspect`, `minter show`) now search upward from the current directory,
|
|
30
|
+
git-style, for an already-existing `.abx-self-host` before falling back to creating one at cwd —
|
|
31
|
+
bounded at the home directory, a `.git` repository root, or the filesystem root, and never crossing
|
|
32
|
+
into an unrelated directory tree. Running one of these from a project subdirectory (e.g. a
|
|
33
|
+
`contracts/` folder) now finds the same node a run from the project root would, instead of quietly
|
|
34
|
+
reporting an empty one. `abx status`'s existing `data: <path>` line — and a new one-line notice —
|
|
35
|
+
name the directory whenever it was found this way. Every WRITE command is unaffected: it always
|
|
36
|
+
resolves strictly to the current directory, exactly as before, so nothing is ever created somewhere
|
|
37
|
+
you didn't `cd` into. `ABX_DATA_DIR`, when set, still always wins outright and disables the search
|
|
38
|
+
entirely.
|
|
39
|
+
|
|
40
|
+
- c068a0f: Every `deploy` / `deploy-series` / `deploy-code` `--json` emit — dry-run and real send, across every
|
|
41
|
+
product lane and `deploy-code --resume` — now carries a versioned, structured `plan` object alongside
|
|
42
|
+
the existing fields: wallet transaction/approval count, expected signer/owner/royalty/minter/payee
|
|
43
|
+
roles, custody and URI-resolution choices, the mint plan, a cost estimate where one is computed, every
|
|
44
|
+
warning that run raised, and (code lanes) the per-surface thumbnail/traits/postParams disposition plus
|
|
45
|
+
dependency-registry info. A field a lane has no answer for is reported as `null`, never silently
|
|
46
|
+
absent. The human dry-run/confirm output is unchanged, byte for byte.
|
|
47
|
+
- c068a0f: `deploy-code --copies --code-dir <dir>` now works: an EditionCode project can point `code` at a
|
|
48
|
+
hosted directory build (index.html + assets uploaded to ipfs/arweave/cloud), the same as the
|
|
49
|
+
existing SeriesCode (721) lane.
|
|
50
|
+
- c068a0f: `deploy-code --copies --image-base <url>` now works: an EditionCode project can bake a
|
|
51
|
+
deterministic per-id off-chain still (`{base}/{id}.png`), the same field write as the existing
|
|
52
|
+
SeriesCode (721) lane, mutually exclusive with an on-chain `--image-renderer`. The effect runner's
|
|
53
|
+
render sweep excludes an id with zero live copies (no mint-time seed drawn yet), mirroring how a
|
|
54
|
+
burned 721 token is already excluded.
|
|
55
|
+
- c068a0f: `deploy-code --resume <address>` now works against an EditionCode (`--copies`) target, not just
|
|
56
|
+
SeriesCode. The mint leg diffs per id against that id's own `totalSupply(id)` — pass the same
|
|
57
|
+
content flags the original deploy used, plus `--mint-count`/`--mint-amount` if it premint any ids.
|
|
58
|
+
- c068a0f: `reconstructProject()` and `reconstructIncremental()` accept `toBlock: 'safe' | 'finalized'` in
|
|
59
|
+
addition to a literal block number and the existing `'latest'` default. The tag is resolved to a
|
|
60
|
+
concrete inclusive block number (via the new `resolveBlockTag()`) before any `eth_getLogs` scan
|
|
61
|
+
starts, and that number — never the tag — is what lands in the persisted `ProjectState.toBlock`. An
|
|
62
|
+
RPC that doesn't support the requested tag throws the new `BlockTagUnavailableError` instead of
|
|
63
|
+
silently falling back to `latest`. `SelfHostIndexer#reindex` gained a matching `blockTag` option.
|
|
64
|
+
Existing callers (the `'latest'`/unset default) are unaffected.
|
|
65
|
+
|
|
66
|
+
`abx index --to-block safe|finalized` stops a re-index at a reorg-safe boundary.
|
|
67
|
+
|
|
68
|
+
- c068a0f: The Solidity renderer scaffold (`abx scaffold renderer` / `abx scaffold solidity`) now ships
|
|
69
|
+
`script/Preview.s.sol`: a Forge script that runs the actual `IAbxFieldRenderer.render` interface
|
|
70
|
+
against representative token id / seed / PostParam inputs (all overridable via env vars) and writes
|
|
71
|
+
the SVG/JSON output to `preview-out/` for human inspection — `forge test` proves the renderer
|
|
72
|
+
behaves, but never let you look at what it drew. Reverts are surfaced clearly; the script is explicit
|
|
73
|
+
that its gas output is a local-EVM sanity check, not a production gas measurement.
|
|
74
|
+
- c068a0f: Add `abx replace-script <address> --script <file>` — a safe, first-class way to replace an UNLOCKED
|
|
75
|
+
code project's on-chain program (`SeriesCode`/`EditionCode`, before `abx lock-script`). It refuses
|
|
76
|
+
outright on a locked script or a non-code target, diffs the replacement by content against what's
|
|
77
|
+
on-chain (an index that already matches is never re-sent), handles a smaller replacement by queuing
|
|
78
|
+
the trailing `removeLastScriptChunk` calls it needs, folds every write and remove into ONE atomic
|
|
79
|
+
transaction (a revert can never leave a half-applied script), and reads the completed script back to
|
|
80
|
+
verify it reassembles exactly to the file before reporting success. Supports `--dry-run` and every
|
|
81
|
+
signing lane.
|
|
82
|
+
|
|
83
|
+
The SDK gains the primitives this is built on: `prepareSetScriptChunk`/`prepareRemoveLastScriptChunk`
|
|
84
|
+
(no `prepare*` wrapper existed for `OnChainScript.sol`'s writers before this — every caller hand-
|
|
85
|
+
encoded `encodeFunctionData`), plus `planScriptReplace`/`verifyScriptReplace`, which take a small
|
|
86
|
+
reader interface (mirroring `resume.ts`'s own reader seam) so the diff and post-write verification
|
|
87
|
+
are testable without a chain.
|
|
88
|
+
|
|
89
|
+
- c068a0f: SQLite maintenance for existing and long-running self-hosted stores (issue #113). `SqliteStore`
|
|
90
|
+
gains `autoVacuumMode`/`vacuumStats` (detection), `vacuumConvert` (a one-time, explicit full
|
|
91
|
+
`VACUUM` for a store that predates incremental auto-vacuum), and `runIncrementalVacuum` (a bounded
|
|
92
|
+
reclaim pass). `SelfHostIndexer.startVacuumMaintenance` runs that bounded reclaim automatically
|
|
93
|
+
between chain-watch ticks — never inline with a request. The new `abx vacuum [status|convert|
|
|
94
|
+
incremental]` CLI command exposes both halves to an operator. Also fixes a pragma-ordering bug that
|
|
95
|
+
left EVERY store — not just pre-existing ones — stuck at `auto_vacuum='none'` despite the earlier
|
|
96
|
+
incremental auto-vacuum fix (`PRAGMA auto_vacuum` must precede `PRAGMA journal_mode = WAL`, not just
|
|
97
|
+
the schema's first `CREATE TABLE`).
|
|
98
|
+
- c068a0f: `abx state` now reports every irreversible lock a collection can carry — token/contract URI, script,
|
|
99
|
+
dependencies, param hooks, and the standard `METADATA_FIELD` set — for both ERC-721 and ERC-1155
|
|
100
|
+
families, not just `paramHooks.locked`. Each lock is a distinct `true` (frozen) / `false` (open) /
|
|
101
|
+
`null` (unread — never collapsed into `false`) reading, in both human and `--json` output, alongside
|
|
102
|
+
the exact owner command that freezes it.
|
|
103
|
+
- c068a0f: `abx verify --json` gains a sibling `availability` field (render/serve-readiness: `available` /
|
|
104
|
+
`partial` / `unavailable` / `unknown`), kept separate from the integrity-only `ok`/`contentIntegrity`
|
|
105
|
+
that the command's exit status still reflects exactly as before. A locator-committed `image` field
|
|
106
|
+
(ipfs/arweave/url/url-template) this command doesn't re-fetch now reports as a `verified: null`
|
|
107
|
+
content check instead of silently reading as no commitment at all. Fixes a side-bug: `abx verify
|
|
108
|
+
--remote <r> --json` used to route around `--json` entirely and emit no payload — it now emits the
|
|
109
|
+
same shape as the local lane, plus a `"not-checked"` `contentIntegrity` state for when byte
|
|
110
|
+
integrity genuinely wasn't asked (no credential, rejected token, or an older resolver).
|
|
111
|
+
- c068a0f: Additive for SDK consumers — a new exported function, nothing existing changed shape or behavior.
|
|
112
|
+
|
|
113
|
+
`abx verify` now compares a collection's actual `tokenURIRenderer` and `animation_url` generator
|
|
114
|
+
pointers against the current canonical singletons for its chain, reporting each as current or
|
|
115
|
+
not-current (never treating an older-but-working deployment as broken). Adds the SDK helper
|
|
116
|
+
`isCurrentGenerator` alongside the existing `isCurrentRenderer` probe.
|
|
117
|
+
|
|
118
|
+
### Patch Changes
|
|
119
|
+
|
|
120
|
+
- c068a0f: `abx storage upload <path>` now stats the path before reading it, so a directory, a missing file, or
|
|
121
|
+
an unreadable file gets an actionable error instead of a raw Node errno (`EISDIR: illegal operation
|
|
122
|
+
on a directory, read`, a bare `ENOENT` stack). The directory message points at the commands that
|
|
123
|
+
actually upload folder content — `abx deploy-series --dir` and `abx deploy-code --code-dir` — since
|
|
124
|
+
`storage upload` only ever handles a single file.
|
|
125
|
+
- c068a0f: `abx submit-app` no longer fails silently on RPC catch-up: the mint's token id is now recoverable
|
|
126
|
+
even under `--json` if metadata configuration can't proceed, the first metadata write after a fresh
|
|
127
|
+
mint retries a few times with backoff before giving up, and a caller who exhausts that bound gets an
|
|
128
|
+
explicit message naming the token id and confirming a re-run picks up exactly where it left off
|
|
129
|
+
(never a duplicate mint — the collection is already `claimed`). `--json`'s `withJson` helper also now
|
|
130
|
+
flushes whatever payload a command already `emit()`-ed before a later step throws, instead of leaving
|
|
131
|
+
`--json` callers with nothing on stdout when a command fails partway through.
|
|
132
|
+
- Updated dependencies [c068a0f]
|
|
133
|
+
- Updated dependencies [c068a0f]
|
|
134
|
+
- Updated dependencies [c068a0f]
|
|
135
|
+
- Updated dependencies [c068a0f]
|
|
136
|
+
- Updated dependencies [c068a0f]
|
|
137
|
+
- Updated dependencies [c068a0f]
|
|
138
|
+
- Updated dependencies [c068a0f]
|
|
139
|
+
- Updated dependencies [c068a0f]
|
|
140
|
+
- Updated dependencies [c068a0f]
|
|
141
|
+
- Updated dependencies [c068a0f]
|
|
142
|
+
- Updated dependencies [c068a0f]
|
|
143
|
+
- @artblocks/abx-token-api@0.1.0-alpha.34
|
|
144
|
+
- @artblocks/abx-sdk@0.1.0-alpha.31
|
|
145
|
+
- @artblocks/abx-indexer@0.1.0-alpha.32
|
|
146
|
+
- @artblocks/abx-storage@0.1.0-alpha.31
|
|
147
|
+
|
|
3
148
|
## 0.1.0-alpha.40
|
|
4
149
|
|
|
5
150
|
### Patch Changes
|
|
@@ -24,6 +24,9 @@ Foundry, then hand the deployed address(es) to `abx deploy-code`, which verifies
|
|
|
24
24
|
collection surface, and a fuzz over every seed/tokenId) and that image ↔ traits stay coherent.
|
|
25
25
|
- `script/Deploy.s.sol` deploys renderers; `script/DeployHooks.s.sol` deploys the three hook examples
|
|
26
26
|
after a token address exists.
|
|
27
|
+
- `script/Preview.s.sol` — a **local preview**, not a test: runs `render()` with representative
|
|
28
|
+
inputs and writes the actual output to `preview-out/` so you can look at it (open the `.svg` in a
|
|
29
|
+
browser). `forge test` proves render() behaves; this script is the only way to see what it drew.
|
|
27
30
|
|
|
28
31
|
## Build, test, deploy
|
|
29
32
|
|
|
@@ -32,6 +35,11 @@ forge soldeer install # fetch solady + forge-std (pinned in foundry.tom
|
|
|
32
35
|
forge build
|
|
33
36
|
forge test # MUST pass — especially the never-revert cases
|
|
34
37
|
|
|
38
|
+
# look at what the renderer actually produces (writes preview-out/image.svg + attributes.json):
|
|
39
|
+
forge script script/Preview.s.sol
|
|
40
|
+
# override the representative token id / seed / palette without editing the script:
|
|
41
|
+
PREVIEW_TOKEN_ID=42 PREVIEW_SEED=0x00...abc PREVIEW_PALETTE=0x00...ff3366 forge script script/Preview.s.sol
|
|
42
|
+
|
|
35
43
|
# deploy to your testnet, then copy the printed addresses:
|
|
36
44
|
forge script script/Deploy.s.sol --rpc-url <your-rpc-url> --private-key <key> --broadcast
|
|
37
45
|
|
|
@@ -40,6 +48,10 @@ forge script script/DeployHooks.s.sol --sig "run(address,uint256)" <token> 1024
|
|
|
40
48
|
--rpc-url <your-rpc-url> --private-key <key> --broadcast
|
|
41
49
|
```
|
|
42
50
|
|
|
51
|
+
`script/Preview.s.sol`'s gas numbers are a local-EVM sanity check, not a production gas measurement —
|
|
52
|
+
see the disclaimer in that file. For real gas numbers, deploy (above) and read `tokenURI` on the
|
|
53
|
+
actual chain you're targeting.
|
|
54
|
+
|
|
43
55
|
## Wire it into a drop
|
|
44
56
|
|
|
45
57
|
```bash
|
|
@@ -9,6 +9,10 @@ evm_version = "paris" # broad multi-chain compatibility (no PUSH0/cancun
|
|
|
9
9
|
optimizer = true
|
|
10
10
|
optimizer_runs = 1_000_000 # a renderer is deployed once and called forever → optimize runtime
|
|
11
11
|
|
|
12
|
+
# script/Preview.s.sol writes rendered output here for human inspection (vm.writeFileBinary).
|
|
13
|
+
# Foundry denies filesystem writes by default; this is the narrowest grant that lets it work.
|
|
14
|
+
fs_permissions = [{ access = "read-write", path = "./preview-out" }]
|
|
15
|
+
|
|
12
16
|
# Dependencies are fetched with soldeer (`forge soldeer install`), pinned here.
|
|
13
17
|
[dependencies]
|
|
14
18
|
abx-contracts = "2.0.0"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
|
+
|
|
4
|
+
import {Script, console2} from "forge-std/Script.sol";
|
|
5
|
+
import {IAbxFieldRenderer} from "abx-contracts/src/uri/IAbxFieldRenderer.sol";
|
|
6
|
+
import {MyRenderer} from "../src/MyRenderer.sol";
|
|
7
|
+
import {MyTraits} from "../src/MyTraits.sol";
|
|
8
|
+
import {MockParams} from "../test/MyRenderer.t.sol";
|
|
9
|
+
|
|
10
|
+
/// @notice A human-inspection harness, not a test. `forge test` is what proves render() behaves
|
|
11
|
+
/// (never reverts, traits agree with the image, etc) — this script exists ONLY because
|
|
12
|
+
/// assertions don't let a person actually LOOK at the SVG/JSON a renderer produces. It
|
|
13
|
+
/// calls the exact same `IAbxFieldRenderer.render(token, tokenId, field)` interface the
|
|
14
|
+
/// deployed ABX token calls at read time, against a `MockParams` standing in for the
|
|
15
|
+
/// token (the same stand-in `test/MyRenderer.t.sol` uses), and writes the raw output to
|
|
16
|
+
/// disk so it can be opened in a browser or editor.
|
|
17
|
+
///
|
|
18
|
+
/// GAS DISCLAIMER — read before trusting any number this script prints: a local
|
|
19
|
+
/// `forge script` run executes against an in-memory EVM with no real chain's calldata
|
|
20
|
+
/// pricing, contract-size/warm-storage state, or congestion. The gas this script reports
|
|
21
|
+
/// (and even a real `--broadcast` dry run) is NOT a production gas measurement. If you
|
|
22
|
+
/// need real numbers, deploy with `script/Deploy.s.sol` and read `tokenURI` on the actual
|
|
23
|
+
/// chain you're targeting.
|
|
24
|
+
///
|
|
25
|
+
/// Usage (from this scaffold's directory, after `forge soldeer install`):
|
|
26
|
+
/// forge script script/Preview.s.sol
|
|
27
|
+
/// Every input has a representative default and is overridable via env vars, so you can preview
|
|
28
|
+
/// a specific token without editing this file:
|
|
29
|
+
/// PREVIEW_TOKEN_ID=42 PREVIEW_SEED=0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee \
|
|
30
|
+
/// PREVIEW_PALETTE=0xff3366 forge script script/Preview.s.sol
|
|
31
|
+
/// Set PREVIEW_TOKEN_ID to `115792089237316195423570985008687907853269984665640564039457584007913129639935`
|
|
32
|
+
/// (type(uint256).max) to preview the collection surface (contractURI) instead of a token.
|
|
33
|
+
/// Output lands in `preview-out/` at the repo root of this scaffold — open `preview-out/image.svg`
|
|
34
|
+
/// in a browser, `preview-out/attributes.json` in an editor.
|
|
35
|
+
contract Preview is Script {
|
|
36
|
+
function run() external {
|
|
37
|
+
uint256 tokenId = vm.envOr("PREVIEW_TOKEN_ID", uint256(7));
|
|
38
|
+
bytes32 seed = vm.envOr("PREVIEW_SEED", bytes32(uint256(0x1234)));
|
|
39
|
+
// `palette` is a HexColor PostParam: the RGB value packed into the low 3 bytes.
|
|
40
|
+
bytes32 palette = vm.envOr("PREVIEW_PALETTE", bytes32(uint256(0xff3366)));
|
|
41
|
+
|
|
42
|
+
// vm.writeFileBinary does not create parent directories; make sure ours exists.
|
|
43
|
+
vm.createDir("preview-out", true);
|
|
44
|
+
|
|
45
|
+
MyRenderer image = new MyRenderer();
|
|
46
|
+
MyTraits traits = new MyTraits();
|
|
47
|
+
MockParams params = new MockParams();
|
|
48
|
+
params.setToken(tokenId, "seed", seed);
|
|
49
|
+
params.setToken(tokenId, "palette", palette);
|
|
50
|
+
|
|
51
|
+
console2.log("== NOT a gas measurement (see script comment) ==");
|
|
52
|
+
console2.log("== preview inputs ==");
|
|
53
|
+
console2.log("tokenId:", tokenId);
|
|
54
|
+
console2.log("seed :", vm.toString(seed));
|
|
55
|
+
console2.log("palette:", vm.toString(palette));
|
|
56
|
+
|
|
57
|
+
_renderAndDump(image, address(params), tokenId, "image", "image", "preview-out/image");
|
|
58
|
+
_renderAndDump(traits, address(params), tokenId, "attributes", "attributes", "preview-out/attributes");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/// @dev Runs the ACTUAL renderer interface — the same call the resolver/on-chain metadata
|
|
62
|
+
/// renderer makes — and surfaces a revert instead of swallowing it, so a miswired field
|
|
63
|
+
/// or a broken invariant shows up here instead of silently bricking `tokenURI` later.
|
|
64
|
+
function _renderAndDump(
|
|
65
|
+
IAbxFieldRenderer renderer,
|
|
66
|
+
address token,
|
|
67
|
+
uint256 tokenId,
|
|
68
|
+
bytes32 field,
|
|
69
|
+
string memory fieldLabel,
|
|
70
|
+
string memory pathNoExt
|
|
71
|
+
) private {
|
|
72
|
+
console2.log(string.concat("== field: ", fieldLabel, " =="));
|
|
73
|
+
try renderer.render(token, tokenId, field) returns (string memory contentType, bytes memory data) {
|
|
74
|
+
string memory path = string.concat(pathNoExt, ".", _extFor(contentType));
|
|
75
|
+
vm.writeFileBinary(path, data);
|
|
76
|
+
console2.log("contentType:", contentType);
|
|
77
|
+
console2.log("bytes :", data.length);
|
|
78
|
+
console2.log("written to :", path);
|
|
79
|
+
} catch Error(string memory reason) {
|
|
80
|
+
console2.log("REVERTED:", reason);
|
|
81
|
+
} catch Panic(uint256 code) {
|
|
82
|
+
console2.log("REVERTED, panic code:", code);
|
|
83
|
+
} catch (bytes memory lowLevelData) {
|
|
84
|
+
// A custom error (e.g. MyRenderer.UnsupportedField) has no ABI-decoded reason string —
|
|
85
|
+
// this is the raw revert data, selector first, so you can tell which error fired.
|
|
86
|
+
console2.log("REVERTED, raw data:", vm.toString(lowLevelData));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// @dev Extension purely for local viewing convenience — not part of the on-chain contract.
|
|
91
|
+
function _extFor(string memory contentType) private pure returns (string memory) {
|
|
92
|
+
bytes32 ct = keccak256(bytes(contentType));
|
|
93
|
+
if (ct == keccak256("image/svg+xml")) return "svg";
|
|
94
|
+
if (ct == keccak256("application/json")) return "json";
|
|
95
|
+
if (ct == keccak256("text/html")) return "html";
|
|
96
|
+
if (ct == keccak256("text/plain")) return "txt";
|
|
97
|
+
return "bin";
|
|
98
|
+
}
|
|
99
|
+
}
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -49,9 +49,9 @@ export declare const ABX_CAPABILITIES: {
|
|
|
49
49
|
readonly edition: {
|
|
50
50
|
readonly contract: "EditionCode (ERC-1155)";
|
|
51
51
|
readonly selector: "--copies <n|open>";
|
|
52
|
-
readonly summary: "N generated ids × copies per id; supports scripts, dependencies, and Solidity image/trait renderers";
|
|
53
|
-
readonly supported: readonly ["--script", "--dep", "--dep-registry", "--image-renderer", "--attributes-renderer", "--onchain-uri", "--public-base-url"];
|
|
54
|
-
readonly unsupported: readonly ["--
|
|
52
|
+
readonly summary: "N generated ids × copies per id; supports scripts, directory builds, dependencies, deterministic per-id off-chain stills, and Solidity image/trait renderers";
|
|
53
|
+
readonly supported: readonly ["--script", "--code-dir", "--dep", "--dep-registry", "--image-renderer", "--attributes-renderer", "--image-base", "--onchain-uri", "--public-base-url"];
|
|
54
|
+
readonly unsupported: readonly ["--no-delegation"];
|
|
55
55
|
};
|
|
56
56
|
};
|
|
57
57
|
};
|
|
@@ -80,9 +80,14 @@ export declare const ABX_CAPABILITIES: {
|
|
|
80
80
|
readonly command: "abx deploy-code --image-renderer/--attributes-renderer";
|
|
81
81
|
readonly availableOn: "SeriesCode and EditionCode";
|
|
82
82
|
readonly useFor: readonly ["on-chain SVG images", "on-chain computed traits"];
|
|
83
|
+
}, {
|
|
84
|
+
readonly route: "replace an unlocked script";
|
|
85
|
+
readonly command: "abx replace-script";
|
|
86
|
+
readonly availableOn: "SeriesCode and EditionCode, before `abx lock-script`";
|
|
87
|
+
readonly useFor: readonly ["shipping a fix to a live generative program", "iterating pre-lock without a full redeploy"];
|
|
83
88
|
}];
|
|
84
89
|
readonly deployTimeChoices: readonly ["contract shape and token standard (--copies)", "code-capable versus static contract type", "burnability (--burnable)", "ERC-721C/ERC-1155C enrollment (--721c)"];
|
|
85
|
-
readonly unsupportedToday: readonly ["mainnet deployment through the toolkit", "unsupported chains", "secondary-market listings or an order book", "compiling or deploying custom Solidity through abx", "
|
|
90
|
+
readonly unsupportedToday: readonly ["mainnet deployment through the toolkit", "unsupported chains", "secondary-market listings or an order book", "compiling or deploying custom Solidity through abx", "retrofitting a deploy-time choice on an existing collection"];
|
|
86
91
|
readonly interpretation: {
|
|
87
92
|
readonly native: "A documented command/flag combination performs the request directly.";
|
|
88
93
|
readonly extension: "A canonical extension seam performs it while the token remains a factory clone.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAEtC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAEtC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GnB,CAAC;AAEX,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAyBlD"}
|
package/dist/capabilities.js
CHANGED
|
@@ -49,9 +49,13 @@ export const ABX_CAPABILITIES = {
|
|
|
49
49
|
edition: {
|
|
50
50
|
contract: 'EditionCode (ERC-1155)',
|
|
51
51
|
selector: '--copies <n|open>',
|
|
52
|
-
summary: 'N generated ids × copies per id; supports scripts, dependencies, and Solidity image/trait renderers',
|
|
53
|
-
supported: ['--script', '--dep', '--dep-registry', '--image-renderer', '--attributes-renderer', '--onchain-uri', '--public-base-url'],
|
|
54
|
-
|
|
52
|
+
summary: 'N generated ids × copies per id; supports scripts, directory builds, dependencies, deterministic per-id off-chain stills, and Solidity image/trait renderers',
|
|
53
|
+
supported: ['--script', '--code-dir', '--dep', '--dep-registry', '--image-renderer', '--attributes-renderer', '--image-base', '--onchain-uri', '--public-base-url'],
|
|
54
|
+
// `--resume` isn't listed in `supported`/`unsupported` at all (neither lane lists it — it's a
|
|
55
|
+
// REPAIR verb against an EXISTING contract, not a deploy-time flag): `abx deploy-code --resume
|
|
56
|
+
// <address>` now diffs an EditionCode target's per-id mint shortfall exactly as it always has
|
|
57
|
+
// for a 721 SeriesCode target (see resume.ts's `planEditionResume`).
|
|
58
|
+
unsupported: ['--no-delegation'],
|
|
55
59
|
},
|
|
56
60
|
},
|
|
57
61
|
},
|
|
@@ -86,6 +90,12 @@ export const ABX_CAPABILITIES = {
|
|
|
86
90
|
availableOn: 'SeriesCode and EditionCode',
|
|
87
91
|
useFor: ['on-chain SVG images', 'on-chain computed traits'],
|
|
88
92
|
},
|
|
93
|
+
{
|
|
94
|
+
route: 'replace an unlocked script',
|
|
95
|
+
command: 'abx replace-script',
|
|
96
|
+
availableOn: 'SeriesCode and EditionCode, before `abx lock-script`',
|
|
97
|
+
useFor: ['shipping a fix to a live generative program', 'iterating pre-lock without a full redeploy'],
|
|
98
|
+
},
|
|
89
99
|
],
|
|
90
100
|
deployTimeChoices: [
|
|
91
101
|
'contract shape and token standard (--copies)',
|
|
@@ -98,7 +108,6 @@ export const ABX_CAPABILITIES = {
|
|
|
98
108
|
'unsupported chains',
|
|
99
109
|
'secondary-market listings or an order book',
|
|
100
110
|
'compiling or deploying custom Solidity through abx',
|
|
101
|
-
'replacing a deployed code project script through the CLI',
|
|
102
111
|
'retrofitting a deploy-time choice on an existing collection',
|
|
103
112
|
],
|
|
104
113
|
interpretation: {
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAGpD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa,EAAE,CAAC;IAChB,eAAe,EAAE,CAAC,GAAG,gBAAgB,CAAC;IACtC,kBAAkB,EAAE;QAClB,MAAM,EAAE;YACN,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE;gBACN,QAAQ,EAAE,yBAAyB;gBACnC,MAAM,EAAE,CAAC,SAAS,CAAC;aACpB;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,4BAA4B;gBACtC,QAAQ,EAAE,mBAAmB;gBAC7B,OAAO,EAAE,8FAA8F;gBACvG,SAAS,EAAE,CAAC,yCAAyC,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,CAAC;gBACzG,WAAW,EAAE,CAAC,iCAAiC,CAAC;aACjD;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,mCAAmC;YAC7C,MAAM,EAAE;gBACN,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,CAAC,OAAO,CAAC;aAClB;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,yBAAyB;gBACnC,QAAQ,EAAE,mBAAmB;gBAC7B,OAAO,EAAE,2GAA2G;gBACpH,SAAS,EAAE,CAAC,yCAAyC,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,CAAC;gBACzG,WAAW,EAAE,CAAC,iCAAiC,CAAC;aACjD;SACF;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,iEAAiE;YAC3E,MAAM,EAAE;gBACN,QAAQ,EAAE,sBAAsB;gBAChC,MAAM,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,CAAC;aAChF;YACD,OAAO,EAAE;gBACP,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ,EAAE,mBAAmB;gBAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACL,KAAK,OAAO,EAMZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|