@artblocks/abx-cli 0.1.0-alpha.9 → 0.1.0
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 +402 -0
- package/assets/renderer-scaffold/README.md +44 -13
- 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 +132 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +175 -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 +483 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/contract.d.ts +19 -0
- package/dist/commands/contract.d.ts.map +1 -0
- package/dist/commands/contract.js +171 -0
- package/dist/commands/contract.js.map +1 -0
- package/dist/commands/deploy.d.ts +296 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +5736 -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 +154 -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 +458 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +1837 -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 +881 -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 +741 -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 +761 -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 +638 -0
- package/dist/commands/submit-app.js.map +1 -0
- package/dist/config.d.ts +94 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +332 -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 +400 -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/creator-agent.d.ts +49 -0
- package/dist/creator-agent.d.ts.map +1 -0
- package/dist/creator-agent.js +363 -0
- package/dist/creator-agent.js.map +1 -0
- package/dist/creator-keyring.d.ts +26 -0
- package/dist/creator-keyring.d.ts.map +1 -0
- package/dist/creator-keyring.js +57 -0
- package/dist/creator-keyring.js.map +1 -0
- package/dist/creator-signer.d.ts +52 -0
- package/dist/creator-signer.d.ts.map +1 -0
- package/dist/creator-signer.js +267 -0
- package/dist/creator-signer.js.map +1 -0
- package/dist/deploy-plan.d.ts +218 -0
- package/dist/deploy-plan.d.ts.map +1 -0
- package/dist/deploy-plan.js +20 -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 +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +32 -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 +188 -0
- package/dist/flag-allowlists.js.map +1 -0
- package/dist/flags.d.ts +53 -0
- package/dist/flags.d.ts.map +1 -1
- package/dist/flags.js +151 -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 +859 -5374
- 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 +184 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +774 -0
- package/dist/output.js.map +1 -0
- package/dist/ownerops.d.ts +450 -57
- package/dist/ownerops.d.ts.map +1 -1
- package/dist/ownerops.js +2219 -358
- 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/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 +116 -9
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +371 -14
- package/dist/remote.js.map +1 -1
- package/dist/riskgate.d.ts +101 -0
- package/dist/riskgate.d.ts.map +1 -0
- package/dist/riskgate.js +343 -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 +20 -1
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +110 -18
- package/dist/signer.js.map +1 -1
- package/dist/update-check.d.ts +60 -9
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +105 -18
- package/dist/update-check.js.map +1 -1
- package/package.json +17 -12
- package/skill/SKILL.md +211 -354
- package/skill/agents/openai.yaml +4 -0
- package/skill/reference/capabilities.md +195 -0
- package/skill/reference/code.md +236 -0
- package/skill/reference/creator-token.md +94 -0
- package/skill/reference/deploy.md +177 -0
- package/skill/reference/diagnose.md +178 -0
- package/skill/reference/hosting.md +191 -102
- package/skill/reference/operate.md +237 -0
- package/skill/reference/services.md +173 -0
- package/skill/reference/setup.md +221 -42
- 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 -118
- package/skill/reference/troubleshooting.md +0 -28
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
# @artblocks/abx-cli
|
|
2
|
+
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 21e3d6c: Drop-in for existing v2 integrations; new deployments use the canonical v3 contracts.
|
|
8
|
+
Record the synchronized v3 factory generation and testnet deployments, retain full v2 service
|
|
9
|
+
compatibility (including already-assigned v2 sale minters), and update the renderer scaffold to
|
|
10
|
+
`abx-contracts` 3.0.0.
|
|
11
|
+
- 22abce8: Generalize the creator-wallet sponsorship lane to direct zero-value contract creation and
|
|
12
|
+
receipt-dependent on-chain image staging. Add `abx deploy-contract` for exact Foundry artifact or
|
|
13
|
+
initcode deployment through any signing lane.
|
|
14
|
+
- ea57f7a: Add provider-neutral remote interface discovery, the ABX Creators account API client, and the Base
|
|
15
|
+
Sepolia creator-wallet `--sponsor` signing lane. A provider catalog may advertise its account and
|
|
16
|
+
wallet interfaces at a separate HTTPS origin without changing existing same-origin remotes.
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- f9d7a44: Clarify fully on-chain image deployment tradeoffs and make static-project verification report
|
|
21
|
+
`onChainUri.chainComplete` as not applicable instead of false.
|
|
22
|
+
- d50cecd: Classify env-key signing risk from the shared chain registry so newly supported testnets, including
|
|
23
|
+
Robinhood Chain Testnet, work in bounded autonomous smoke tests without being mistaken for mainnet.
|
|
24
|
+
The contributor smoke runner now pins one testnet, gives the worker a fresh small-funded wallet,
|
|
25
|
+
copies only the requested hosted-provider credential, and records evidence without per-transaction
|
|
26
|
+
prompts. Remote discovery accepts `remote list`, and on-chain image planning now calls out the
|
|
27
|
+
single-transaction inline-SVG alternative when it applies.
|
|
28
|
+
- 90bde50: Document the supported creator-wallet sponsorship lane in hook, mint, and transfer command help.
|
|
29
|
+
- 70d2761: Make release-candidate automation fail closed: accept the documented hot-signing flag for code
|
|
30
|
+
editions, simulate purchase dry-runs as the configured hot signer, and return a failed exit status
|
|
31
|
+
when any requested render fails.
|
|
32
|
+
- b8f2876: Keep sponsored deploy guidance consistent: an ABX creator wallet no longer receives a faucet warning when its native balance is intentionally zero.
|
|
33
|
+
- 56973c4: Preserve `maxInvocations` as an exact uint256 value instead of narrowing it through a JavaScript
|
|
34
|
+
number. Reuse an existing hosted-service credential on login and add self-service API-key listing
|
|
35
|
+
and revocation for accounts at their active-key limit.
|
|
36
|
+
- 0a9ed51: Reuse Privy creator-wallet grants across sponsored CLI commands through the native operating-system credential store.
|
|
37
|
+
- c324a8f: Make sponsored deployment previews resolve the existing ABX creator wallet without provisioning external state, so the preview and real send use the same owner, mint recipient, and deterministic salt.
|
|
38
|
+
- 2290b0a: Recover ambiguous creator-wallet submissions through the existing operation status instead of replaying them. Sponsored sends now keep polling safely when the provider response is temporarily unknown and surface the operation ID if reconciliation cannot complete.
|
|
39
|
+
- ee24497: Add machine-readable `--json` output to `contracturi` and `add`. Collection metadata reads now emit
|
|
40
|
+
the resolved document alone, while registration reports identify the target surface, chain and
|
|
41
|
+
address, scan floor, lifecycle status, and whether remote catch-up is complete or still backfilling.
|
|
42
|
+
- 8ccbede: Enable Robinhood Chain production as beta after canonical deployment, paired-testnet qualification,
|
|
43
|
+
and managed-service validation. Surface the same real-funds warning and testnet-first gate used for
|
|
44
|
+
other production beta networks.
|
|
45
|
+
- d925eb1: Breaking only for SDK callers that directly prepared an unsupported sponsored `to: null` request;
|
|
46
|
+
drop-in for existing hot, wallet, and unsigned deployments. Route sponsored custom-contract
|
|
47
|
+
deployments through ABX's existing keyless CREATE2 proxy, expose the exact signer-bound salt and
|
|
48
|
+
predicted address, verify code after confirmation, and document the proxy constructor-caller boundary.
|
|
49
|
+
- e89896a: Reject deterministic deploy salts reserved to a different signer before authorization or broadcast.
|
|
50
|
+
- 8f35dae: Prepare package metadata, release notes, and public-facing source comments for the initial public
|
|
51
|
+
source release.
|
|
52
|
+
- 719b9fe: Make the bundled skill read network and sponsorship support from CLI capabilities and the live
|
|
53
|
+
service descriptor instead of a hardcoded network list. Refresh public documentation references in
|
|
54
|
+
the published packages.
|
|
55
|
+
- f9ba363: Clarify edition live-supply caps, intentional ERC-721 self-transfer hook callbacks, and OP Stack
|
|
56
|
+
seed-source behavior in the bundled ABX skill.
|
|
57
|
+
- c2400a7: Stage Robinhood Chain and its testnet as disabled qualification targets, keep the network registry
|
|
58
|
+
focused on the current roadmap, and stop sale inspection from turning RPC read failures into false
|
|
59
|
+
zero-state results.
|
|
60
|
+
- cf2708c: Allow the beta creator-wallet sponsorship lane on Base mainnet when the live provider and account explicitly advertise eligibility, while retaining Base Sepolia as the recommended first run.
|
|
61
|
+
- b6f941d: Preserve authorship fields in exact deploy replay commands, keep deferred-mint staging narration
|
|
62
|
+
accurate, and distinguish chain-resident image bytes from independently hash-verified content.
|
|
63
|
+
- 3d7fe3c: Record the verified canonical Robinhood Chain Testnet deployment and enable the network for
|
|
64
|
+
experimental qualification with explicit CLI and agent guidance.
|
|
65
|
+
- 66cf489: Mark the qualified creator-wallet sponsorship lane as supported while preserving Base mainnet's protocol-beta warnings.
|
|
66
|
+
- 1294757: Make available ABX updates a clear pre-deployment recommendation in the CLI and bundled agent skill,
|
|
67
|
+
including the matching skill refresh and compatibility expectations for existing projects.
|
|
68
|
+
- ddb2e0b: Refuse irreversible URI locks when the current token or collection base uses `abx.io`. Clarify that
|
|
69
|
+
managed resolver URLs must remain mutable unless a creator-controlled domain is routed and verified.
|
|
70
|
+
- 5164922: Teach the bundled agent skill to prefer live-advertised gas sponsorship for eligible operations while
|
|
71
|
+
keeping hot-key, browser-wallet, and unsigned signing as first-class choices.
|
|
72
|
+
- 4512962: Enable Base production as beta, add a keyless read fallback, and surface production risk and paired-testnet guidance in the CLI, agent skill, and public docs.
|
|
73
|
+
- 76cfc6a: Follow each remote service interface's advertised origin so provider catalogs can separate token data from account and control APIs.
|
|
74
|
+
- 04c0919: Remove ABX's artificial 3,000,000-gas ceiling from sponsored transactions. Sponsored calls now use
|
|
75
|
+
the network estimate and remain subject to the active chain and provider sponsorship policy.
|
|
76
|
+
- Updated dependencies [21e3d6c]
|
|
77
|
+
- Updated dependencies [22abce8]
|
|
78
|
+
- Updated dependencies [4d5e2b1]
|
|
79
|
+
- Updated dependencies [56973c4]
|
|
80
|
+
- Updated dependencies [2290b0a]
|
|
81
|
+
- Updated dependencies [b9197bc]
|
|
82
|
+
- Updated dependencies [8ccbede]
|
|
83
|
+
- Updated dependencies [d925eb1]
|
|
84
|
+
- Updated dependencies [ea57f7a]
|
|
85
|
+
- Updated dependencies [3ddba71]
|
|
86
|
+
- Updated dependencies [8f35dae]
|
|
87
|
+
- Updated dependencies [719b9fe]
|
|
88
|
+
- Updated dependencies [9065128]
|
|
89
|
+
- Updated dependencies [c2400a7]
|
|
90
|
+
- Updated dependencies [3d7fe3c]
|
|
91
|
+
- Updated dependencies [7b462e2]
|
|
92
|
+
- Updated dependencies [ddb2e0b]
|
|
93
|
+
- Updated dependencies [4512962]
|
|
94
|
+
- Updated dependencies [76cfc6a]
|
|
95
|
+
- Updated dependencies [5522192]
|
|
96
|
+
- @artblocks/abx-sdk@0.1.0
|
|
97
|
+
- @artblocks/abx-token-api@0.1.0
|
|
98
|
+
- @artblocks/abx-indexer@0.1.0
|
|
99
|
+
- @artblocks/abx-storage@0.1.0
|
|
100
|
+
|
|
101
|
+
## 0.1.0-alpha.71
|
|
102
|
+
|
|
103
|
+
### Patch Changes
|
|
104
|
+
|
|
105
|
+
- 0a9ed51: Reuse Privy creator-wallet grants across sponsored CLI commands through the native operating-system credential store.
|
|
106
|
+
|
|
107
|
+
## 0.1.0-alpha.70
|
|
108
|
+
|
|
109
|
+
### Patch Changes
|
|
110
|
+
|
|
111
|
+
- 1294757: Make available ABX updates a clear pre-deployment recommendation in the CLI and bundled agent skill,
|
|
112
|
+
including the matching skill refresh and compatibility expectations for existing projects.
|
|
113
|
+
|
|
114
|
+
## 0.1.0-alpha.69
|
|
115
|
+
|
|
116
|
+
### Patch Changes
|
|
117
|
+
|
|
118
|
+
- 719b9fe: Make the bundled skill read network and sponsorship support from CLI capabilities and the live
|
|
119
|
+
service descriptor instead of a hardcoded network list. Refresh public documentation references in
|
|
120
|
+
the published packages.
|
|
121
|
+
- Updated dependencies [719b9fe]
|
|
122
|
+
- @artblocks/abx-indexer@0.1.0-alpha.50
|
|
123
|
+
- @artblocks/abx-sdk@0.1.0-alpha.49
|
|
124
|
+
- @artblocks/abx-token-api@0.1.0-alpha.52
|
|
125
|
+
- @artblocks/abx-storage@0.1.0-alpha.49
|
|
126
|
+
|
|
127
|
+
## 0.1.0-alpha.68
|
|
128
|
+
|
|
129
|
+
### Patch Changes
|
|
130
|
+
|
|
131
|
+
- Updated dependencies [4d5e2b1]
|
|
132
|
+
- @artblocks/abx-sdk@0.1.0-alpha.48
|
|
133
|
+
- @artblocks/abx-token-api@0.1.0-alpha.51
|
|
134
|
+
- @artblocks/abx-indexer@0.1.0-alpha.49
|
|
135
|
+
- @artblocks/abx-storage@0.1.0-alpha.48
|
|
136
|
+
|
|
137
|
+
## 0.1.0-alpha.67
|
|
138
|
+
|
|
139
|
+
### Patch Changes
|
|
140
|
+
|
|
141
|
+
- 56973c4: Preserve `maxInvocations` as an exact uint256 value instead of narrowing it through a JavaScript
|
|
142
|
+
number. Reuse an existing hosted-service credential on login and add self-service API-key listing
|
|
143
|
+
and revocation for accounts at their active-key limit.
|
|
144
|
+
- Updated dependencies [56973c4]
|
|
145
|
+
- @artblocks/abx-sdk@0.1.0-alpha.47
|
|
146
|
+
- @artblocks/abx-indexer@0.1.0-alpha.48
|
|
147
|
+
- @artblocks/abx-storage@0.1.0-alpha.47
|
|
148
|
+
- @artblocks/abx-token-api@0.1.0-alpha.50
|
|
149
|
+
|
|
150
|
+
## 0.1.0-alpha.66
|
|
151
|
+
|
|
152
|
+
### Patch Changes
|
|
153
|
+
|
|
154
|
+
- ddb2e0b: Refuse irreversible URI locks when the current token or collection base uses `abx.io`. Clarify that
|
|
155
|
+
managed resolver URLs must remain mutable unless a creator-controlled domain is routed and verified.
|
|
156
|
+
- 76cfc6a: Follow each remote service interface's advertised origin so provider catalogs can separate token data from account and control APIs.
|
|
157
|
+
- Updated dependencies [ddb2e0b]
|
|
158
|
+
- Updated dependencies [76cfc6a]
|
|
159
|
+
- @artblocks/abx-sdk@0.1.0-alpha.46
|
|
160
|
+
- @artblocks/abx-indexer@0.1.0-alpha.47
|
|
161
|
+
- @artblocks/abx-storage@0.1.0-alpha.46
|
|
162
|
+
- @artblocks/abx-token-api@0.1.0-alpha.49
|
|
163
|
+
|
|
164
|
+
## 0.1.0-alpha.65
|
|
165
|
+
|
|
166
|
+
### Patch Changes
|
|
167
|
+
|
|
168
|
+
- 66cf489: Mark the qualified creator-wallet sponsorship lane as supported while preserving Base mainnet's protocol-beta warnings.
|
|
169
|
+
|
|
170
|
+
## 0.1.0-alpha.64
|
|
171
|
+
|
|
172
|
+
### Patch Changes
|
|
173
|
+
|
|
174
|
+
- 90bde50: Document the supported creator-wallet sponsorship lane in hook, mint, and transfer command help.
|
|
175
|
+
|
|
176
|
+
## 0.1.0-alpha.63
|
|
177
|
+
|
|
178
|
+
### Patch Changes
|
|
179
|
+
|
|
180
|
+
- d925eb1: Breaking only for SDK callers that directly prepared an unsupported sponsored `to: null` request;
|
|
181
|
+
drop-in for existing hot, wallet, and unsigned deployments. Route sponsored custom-contract
|
|
182
|
+
deployments through ABX's existing keyless CREATE2 proxy, expose the exact signer-bound salt and
|
|
183
|
+
predicted address, verify code after confirmation, and document the proxy constructor-caller boundary.
|
|
184
|
+
- Updated dependencies [d925eb1]
|
|
185
|
+
- @artblocks/abx-sdk@0.1.0-alpha.45
|
|
186
|
+
- @artblocks/abx-indexer@0.1.0-alpha.46
|
|
187
|
+
- @artblocks/abx-storage@0.1.0-alpha.45
|
|
188
|
+
- @artblocks/abx-token-api@0.1.0-alpha.48
|
|
189
|
+
|
|
190
|
+
## 0.1.0-alpha.62
|
|
191
|
+
|
|
192
|
+
### Minor Changes
|
|
193
|
+
|
|
194
|
+
- 22abce8: Generalize the creator-wallet sponsorship lane to direct zero-value contract creation and
|
|
195
|
+
receipt-dependent on-chain image staging. Add `abx deploy-contract` for exact Foundry artifact or
|
|
196
|
+
initcode deployment through any signing lane.
|
|
197
|
+
|
|
198
|
+
### Patch Changes
|
|
199
|
+
|
|
200
|
+
- Updated dependencies [22abce8]
|
|
201
|
+
- @artblocks/abx-sdk@0.1.0-alpha.44
|
|
202
|
+
- @artblocks/abx-indexer@0.1.0-alpha.45
|
|
203
|
+
- @artblocks/abx-storage@0.1.0-alpha.44
|
|
204
|
+
- @artblocks/abx-token-api@0.1.0-alpha.47
|
|
205
|
+
|
|
206
|
+
## 0.1.0-alpha.61
|
|
207
|
+
|
|
208
|
+
### Patch Changes
|
|
209
|
+
|
|
210
|
+
- 04c0919: Remove ABX's artificial 3,000,000-gas ceiling from sponsored transactions. Sponsored calls now use
|
|
211
|
+
the network estimate and remain subject to the active chain and provider sponsorship policy.
|
|
212
|
+
|
|
213
|
+
## 0.1.0-alpha.60
|
|
214
|
+
|
|
215
|
+
### Patch Changes
|
|
216
|
+
|
|
217
|
+
- 2290b0a: Recover ambiguous creator-wallet submissions through the existing operation status instead of replaying them. Sponsored sends now keep polling safely when the provider response is temporarily unknown and surface the operation ID if reconciliation cannot complete.
|
|
218
|
+
- Updated dependencies [2290b0a]
|
|
219
|
+
- @artblocks/abx-sdk@0.1.0-alpha.43
|
|
220
|
+
- @artblocks/abx-indexer@0.1.0-alpha.44
|
|
221
|
+
- @artblocks/abx-storage@0.1.0-alpha.43
|
|
222
|
+
- @artblocks/abx-token-api@0.1.0-alpha.46
|
|
223
|
+
|
|
224
|
+
## 0.1.0-alpha.59
|
|
225
|
+
|
|
226
|
+
### Patch Changes
|
|
227
|
+
|
|
228
|
+
- c324a8f: Make sponsored deployment previews resolve the existing ABX creator wallet without provisioning external state, so the preview and real send use the same owner, mint recipient, and deterministic salt.
|
|
229
|
+
|
|
230
|
+
## 0.1.0-alpha.58
|
|
231
|
+
|
|
232
|
+
### Patch Changes
|
|
233
|
+
|
|
234
|
+
- b8f2876: Keep sponsored deploy guidance consistent: an ABX creator wallet no longer receives a faucet warning when its native balance is intentionally zero.
|
|
235
|
+
- e89896a: Reject deterministic deploy salts reserved to a different signer before authorization or broadcast.
|
|
236
|
+
- cf2708c: Allow the beta creator-wallet sponsorship lane on Base mainnet when the live provider and account explicitly advertise eligibility, while retaining Base Sepolia as the recommended first run.
|
|
237
|
+
|
|
238
|
+
## 0.1.0-alpha.57
|
|
239
|
+
|
|
240
|
+
### Patch Changes
|
|
241
|
+
|
|
242
|
+
- 5164922: Teach the bundled agent skill to prefer live-advertised gas sponsorship for eligible operations while
|
|
243
|
+
keeping hot-key, browser-wallet, and unsigned signing as first-class choices.
|
|
244
|
+
|
|
245
|
+
## 0.1.0-alpha.56
|
|
246
|
+
|
|
247
|
+
### Minor Changes
|
|
248
|
+
|
|
249
|
+
- ea57f7a: Add provider-neutral remote interface discovery, the ABX Creators account API client, and the Base
|
|
250
|
+
Sepolia creator-wallet `--sponsor` signing lane. A provider catalog may advertise its account and
|
|
251
|
+
wallet interfaces at a separate HTTPS origin without changing existing same-origin remotes.
|
|
252
|
+
|
|
253
|
+
### Patch Changes
|
|
254
|
+
|
|
255
|
+
- f9ba363: Clarify edition live-supply caps, intentional ERC-721 self-transfer hook callbacks, and OP Stack
|
|
256
|
+
seed-source behavior in the bundled ABX skill.
|
|
257
|
+
- Updated dependencies [ea57f7a]
|
|
258
|
+
- @artblocks/abx-sdk@0.1.0-alpha.42
|
|
259
|
+
- @artblocks/abx-indexer@0.1.0-alpha.43
|
|
260
|
+
- @artblocks/abx-storage@0.1.0-alpha.42
|
|
261
|
+
- @artblocks/abx-token-api@0.1.0-alpha.45
|
|
262
|
+
|
|
263
|
+
## 0.1.0-alpha.55
|
|
264
|
+
|
|
265
|
+
### Patch Changes
|
|
266
|
+
|
|
267
|
+
- 8ccbede: Enable Robinhood Chain production as beta after canonical deployment, paired-testnet qualification,
|
|
268
|
+
and managed-service validation. Surface the same real-funds warning and testnet-first gate used for
|
|
269
|
+
other production beta networks.
|
|
270
|
+
- Updated dependencies [8ccbede]
|
|
271
|
+
- @artblocks/abx-sdk@0.1.0-alpha.41
|
|
272
|
+
- @artblocks/abx-indexer@0.1.0-alpha.42
|
|
273
|
+
- @artblocks/abx-storage@0.1.0-alpha.41
|
|
274
|
+
- @artblocks/abx-token-api@0.1.0-alpha.44
|
|
275
|
+
|
|
276
|
+
## 0.1.0-alpha.54
|
|
277
|
+
|
|
278
|
+
### Patch Changes
|
|
279
|
+
|
|
280
|
+
- f9d7a44: Clarify fully on-chain image deployment tradeoffs and make static-project verification report
|
|
281
|
+
`onChainUri.chainComplete` as not applicable instead of false.
|
|
282
|
+
- ee24497: Add machine-readable `--json` output to `contracturi` and `add`. Collection metadata reads now emit
|
|
283
|
+
the resolved document alone, while registration reports identify the target surface, chain and
|
|
284
|
+
address, scan floor, lifecycle status, and whether remote catch-up is complete or still backfilling.
|
|
285
|
+
- Updated dependencies [b9197bc]
|
|
286
|
+
- @artblocks/abx-sdk@0.1.0-alpha.40
|
|
287
|
+
- @artblocks/abx-indexer@0.1.0-alpha.41
|
|
288
|
+
- @artblocks/abx-storage@0.1.0-alpha.40
|
|
289
|
+
- @artblocks/abx-token-api@0.1.0-alpha.43
|
|
290
|
+
|
|
291
|
+
## 0.1.0-alpha.53
|
|
292
|
+
|
|
293
|
+
### Patch Changes
|
|
294
|
+
|
|
295
|
+
- d50cecd: Classify env-key signing risk from the shared chain registry so newly supported testnets, including
|
|
296
|
+
Robinhood Chain Testnet, work in bounded autonomous smoke tests without being mistaken for mainnet.
|
|
297
|
+
The contributor smoke runner now pins one testnet, gives the worker a fresh small-funded wallet,
|
|
298
|
+
copies only the requested hosted-provider credential, and records evidence without per-transaction
|
|
299
|
+
prompts. Remote discovery accepts `remote list`, and on-chain image planning now calls out the
|
|
300
|
+
single-transaction inline-SVG alternative when it applies.
|
|
301
|
+
|
|
302
|
+
## 0.1.0-alpha.52
|
|
303
|
+
|
|
304
|
+
### Patch Changes
|
|
305
|
+
|
|
306
|
+
- 3d7fe3c: Record the verified canonical Robinhood Chain Testnet deployment and enable the network for
|
|
307
|
+
experimental qualification with explicit CLI and agent guidance.
|
|
308
|
+
- Updated dependencies [3d7fe3c]
|
|
309
|
+
- Updated dependencies [7b462e2]
|
|
310
|
+
- @artblocks/abx-sdk@0.1.0-alpha.39
|
|
311
|
+
- @artblocks/abx-indexer@0.1.0-alpha.40
|
|
312
|
+
- @artblocks/abx-storage@0.1.0-alpha.39
|
|
313
|
+
- @artblocks/abx-token-api@0.1.0-alpha.42
|
|
314
|
+
|
|
315
|
+
## 0.1.0-alpha.51
|
|
316
|
+
|
|
317
|
+
### Patch Changes
|
|
318
|
+
|
|
319
|
+
- c2400a7: Stage Robinhood Chain and its testnet as disabled qualification targets, keep the network registry
|
|
320
|
+
focused on the current roadmap, and stop sale inspection from turning RPC read failures into false
|
|
321
|
+
zero-state results.
|
|
322
|
+
- Updated dependencies [c2400a7]
|
|
323
|
+
- @artblocks/abx-sdk@0.1.0-alpha.38
|
|
324
|
+
- @artblocks/abx-indexer@0.1.0-alpha.39
|
|
325
|
+
- @artblocks/abx-storage@0.1.0-alpha.38
|
|
326
|
+
- @artblocks/abx-token-api@0.1.0-alpha.41
|
|
327
|
+
|
|
328
|
+
## 0.1.0-alpha.50
|
|
329
|
+
|
|
330
|
+
### Patch Changes
|
|
331
|
+
|
|
332
|
+
- 4512962: Enable Base production as beta, add a keyless read fallback, and surface production risk and paired-testnet guidance in the CLI, agent skill, and public docs.
|
|
333
|
+
- Updated dependencies [4512962]
|
|
334
|
+
- @artblocks/abx-sdk@0.1.0-alpha.37
|
|
335
|
+
- @artblocks/abx-indexer@0.1.0-alpha.38
|
|
336
|
+
- @artblocks/abx-storage@0.1.0-alpha.37
|
|
337
|
+
- @artblocks/abx-token-api@0.1.0-alpha.40
|
|
338
|
+
|
|
339
|
+
## 0.1.0-alpha.49
|
|
340
|
+
|
|
341
|
+
### Patch Changes
|
|
342
|
+
|
|
343
|
+
- Updated dependencies [5522192]
|
|
344
|
+
- @artblocks/abx-sdk@0.1.0-alpha.36
|
|
345
|
+
- @artblocks/abx-indexer@0.1.0-alpha.37
|
|
346
|
+
- @artblocks/abx-storage@0.1.0-alpha.36
|
|
347
|
+
- @artblocks/abx-token-api@0.1.0-alpha.39
|
|
348
|
+
|
|
349
|
+
## 0.1.0-alpha.48
|
|
350
|
+
|
|
351
|
+
### Patch Changes
|
|
352
|
+
|
|
353
|
+
- 70d2761: Make release-candidate automation fail closed: accept the documented hot-signing flag for code
|
|
354
|
+
editions, simulate purchase dry-runs as the configured hot signer, and return a failed exit status
|
|
355
|
+
when any requested render fails.
|
|
356
|
+
|
|
357
|
+
## 0.1.0-alpha.46
|
|
358
|
+
|
|
359
|
+
### Patch Changes
|
|
360
|
+
|
|
361
|
+
- b6f941d: Preserve authorship fields in exact deploy replay commands, keep deferred-mint staging narration
|
|
362
|
+
accurate, and distinguish chain-resident image bytes from independently hash-verified content.
|
|
363
|
+
|
|
364
|
+
## 0.1.0-alpha.45
|
|
365
|
+
|
|
366
|
+
### Minor Changes
|
|
367
|
+
|
|
368
|
+
- 21e3d6c: Drop-in for existing v2 integrations; new deployments use the v3 production-candidate contracts.
|
|
369
|
+
Record the synchronized v3 factory generation and testnet deployments, retain full v2 service
|
|
370
|
+
compatibility (including already-assigned v2 sale minters), and update the renderer scaffold to
|
|
371
|
+
`abx-contracts` 3.0.0.
|
|
372
|
+
|
|
373
|
+
### Patch Changes
|
|
374
|
+
|
|
375
|
+
- Updated dependencies [21e3d6c]
|
|
376
|
+
- @artblocks/abx-sdk@0.1.0-alpha.35
|
|
377
|
+
- @artblocks/abx-token-api@0.1.0-alpha.38
|
|
378
|
+
- @artblocks/abx-indexer@0.1.0-alpha.36
|
|
379
|
+
- @artblocks/abx-storage@0.1.0-alpha.35
|
|
380
|
+
|
|
381
|
+
## 0.1.0-alpha.44
|
|
382
|
+
|
|
383
|
+
### Patch Changes
|
|
384
|
+
|
|
385
|
+
- Updated dependencies [3ddba71]
|
|
386
|
+
- Updated dependencies [9065128]
|
|
387
|
+
- @artblocks/abx-sdk@0.1.0-alpha.34
|
|
388
|
+
- @artblocks/abx-token-api@0.1.0-alpha.37
|
|
389
|
+
- @artblocks/abx-storage@0.1.0-alpha.34
|
|
390
|
+
- @artblocks/abx-indexer@0.1.0-alpha.35
|
|
391
|
+
|
|
392
|
+
## 0.1.0-alpha.43
|
|
393
|
+
|
|
394
|
+
### Patch Changes
|
|
395
|
+
|
|
396
|
+
- 9242a05: Prepare package metadata, release notes, and public-facing source comments for the initial public
|
|
397
|
+
source release.
|
|
398
|
+
- Updated dependencies [9242a05]
|
|
399
|
+
- @artblocks/abx-indexer@0.1.0-alpha.34
|
|
400
|
+
- @artblocks/abx-sdk@0.1.0-alpha.33
|
|
401
|
+
- @artblocks/abx-storage@0.1.0-alpha.33
|
|
402
|
+
- @artblocks/abx-token-api@0.1.0-alpha.36
|
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
# ABX
|
|
1
|
+
# ABX Solidity extension workspace
|
|
2
2
|
|
|
3
|
-
A ready-to-build Foundry project for
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
A ready-to-build Foundry project for ABX's actual Solidity extension surfaces. Each role remains a
|
|
4
|
+
separate deployable contract: image/traits rendering, configure-time validation, transfer lifecycle,
|
|
5
|
+
and read-time augmentation. Use only the roles your project needs. There is intentionally no
|
|
6
|
+
"minter hook": minting is an external-minter capability, while the three PostParam hooks are
|
|
7
|
+
configure, transfer and augment.
|
|
7
8
|
|
|
8
|
-
`abx` does **not** compile
|
|
9
|
-
Foundry
|
|
9
|
+
`abx` does **not** compile Solidity for you. Build and test with Foundry, then either deploy with
|
|
10
|
+
Foundry or pass exact compiled creation bytecode to `abx deploy-contract`. Hand the deployed
|
|
11
|
+
address(es) to `abx deploy-code`, which verifies they have code.
|
|
10
12
|
|
|
11
13
|
## What's here
|
|
12
14
|
|
|
13
15
|
- `src/MyRenderer.sol` — the **image** renderer: seed → geometry, a `palette` HexColor PostParam →
|
|
14
|
-
tint. **Fork the geometry/palette math for your own
|
|
16
|
+
tint. **Fork the geometry/palette math for your own work.**
|
|
15
17
|
- `src/MyTraits.sol` — the **attributes** renderer: reads the *same* seed math so traits agree with
|
|
16
18
|
the image by construction.
|
|
17
|
-
- `src/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
- `src/MyHooks.sol` — small wrappers around one reference implementation for each PostParam hook
|
|
20
|
+
role. Fork a role independently; do not merge their authority just because they share a workspace.
|
|
21
|
+
- `abx-contracts~3.0.0` — the exact-pinned canonical interfaces, 721/1155 fixed-price minters,
|
|
22
|
+
reference hooks, token implementations and real-clone test harness. The scaffold carries no
|
|
23
|
+
hand-copied ABX interface.
|
|
21
24
|
- `test/MyRenderer.t.sol` — proves `render()` never reverts (incl. no-seed, no-palette, the
|
|
22
25
|
collection surface, and a fuzz over every seed/tokenId) and that image ↔ traits stay coherent.
|
|
23
|
-
- `script/Deploy.s.sol`
|
|
26
|
+
- `script/Deploy.s.sol` deploys renderers; `script/DeployHooks.s.sol` deploys the three hook examples
|
|
27
|
+
after a token address exists.
|
|
28
|
+
- `script/Preview.s.sol` — a **local preview**, not a test: runs `render()` with representative
|
|
29
|
+
inputs and writes the actual output to `preview-out/` so you can look at it (open the `.svg` in a
|
|
30
|
+
browser). `forge test` proves render() behaves; this script is the only way to see what it drew.
|
|
24
31
|
|
|
25
32
|
## Build, test, deploy
|
|
26
33
|
|
|
@@ -29,10 +36,23 @@ forge soldeer install # fetch solady + forge-std (pinned in foundry.tom
|
|
|
29
36
|
forge build
|
|
30
37
|
forge test # MUST pass — especially the never-revert cases
|
|
31
38
|
|
|
39
|
+
# look at what the renderer actually produces (writes preview-out/image.svg + attributes.json):
|
|
40
|
+
forge script script/Preview.s.sol
|
|
41
|
+
# override the representative token id / seed / palette without editing the script:
|
|
42
|
+
PREVIEW_TOKEN_ID=42 PREVIEW_SEED=0x00...abc PREVIEW_PALETTE=0x00...ff3366 forge script script/Preview.s.sol
|
|
43
|
+
|
|
32
44
|
# deploy to your testnet, then copy the printed addresses:
|
|
33
45
|
forge script script/Deploy.s.sol --rpc-url <your-rpc-url> --private-key <key> --broadcast
|
|
46
|
+
|
|
47
|
+
# optional PostParam hooks, deployed separately after the token exists:
|
|
48
|
+
forge script script/DeployHooks.s.sol --sig "run(address,uint256)" <token> 1024 \
|
|
49
|
+
--rpc-url <your-rpc-url> --private-key <key> --broadcast
|
|
34
50
|
```
|
|
35
51
|
|
|
52
|
+
`script/Preview.s.sol`'s gas numbers are a local-EVM sanity check, not a production gas measurement —
|
|
53
|
+
see the disclaimer in that file. For real gas numbers, deploy (above) and read `tokenURI` on the
|
|
54
|
+
actual chain you're targeting.
|
|
55
|
+
|
|
36
56
|
## Wire it into a drop
|
|
37
57
|
|
|
38
58
|
```bash
|
|
@@ -44,6 +64,17 @@ abx deploy-code \
|
|
|
44
64
|
--name "Your Collection" --symbol SYM [--max N] --sign --for <your wallet>
|
|
45
65
|
```
|
|
46
66
|
|
|
67
|
+
Then, only if using the hook examples:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
abx set-param-hooks <token> --configure <configure> --augment <augment> --transfer <transfer>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The transfer hook is a veto surface and also runs on mint. The reference counts only real
|
|
74
|
+
non-zero-to-non-zero moves and pins `msg.sender` to the token. On ERC-1155 it counts copies moved per
|
|
75
|
+
id; it never pretends a multi-copy id has one current owner. Freeze the selected hook addresses with
|
|
76
|
+
`abx lock-param-hooks` when the project is ready to make that authority immutable.
|
|
77
|
+
|
|
47
78
|
- `--onchain-uri` (no `--script`/`--code-dir`) is the in-chain lane — a small Solidity SVG is a
|
|
48
79
|
great fit for an on-chain `tokenURI` (unlike a 200KB JS bundle).
|
|
49
80
|
- `--schema palette:HexColor:TokenOwner` declares the collector param your renderer reads. **Omit it
|
|
@@ -9,7 +9,12 @@ 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]
|
|
18
|
+
abx-contracts = "3.0.0"
|
|
14
19
|
solady = "0.1.26"
|
|
15
20
|
forge-std = "1.16.1"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.28;
|
|
3
|
+
|
|
4
|
+
import {Script, console2} from "forge-std/Script.sol";
|
|
5
|
+
import {MyConfigureHook, MyTransferHook, MyAugmentHook} from "../src/MyHooks.sol";
|
|
6
|
+
|
|
7
|
+
/// Deploy only the hook roles this project needs. TOKEN must already be deployed because every
|
|
8
|
+
/// write-time hook is pinned to its caller; this avoids a reusable hook accidentally trusting any
|
|
9
|
+
/// contract that knows its selector.
|
|
10
|
+
contract DeployHooks is Script {
|
|
11
|
+
function run(address token, uint256 maxDataLength) external {
|
|
12
|
+
vm.startBroadcast();
|
|
13
|
+
MyConfigureHook configure = new MyConfigureHook(token, maxDataLength);
|
|
14
|
+
MyTransferHook transfer = new MyTransferHook(token);
|
|
15
|
+
MyAugmentHook augment = new MyAugmentHook(transfer);
|
|
16
|
+
vm.stopBroadcast();
|
|
17
|
+
console2.log("configure hook:", address(configure));
|
|
18
|
+
console2.log("augment hook :", address(augment));
|
|
19
|
+
console2.log("transfer hook :", address(transfer));
|
|
20
|
+
console2.log(
|
|
21
|
+
"Next: abx set-param-hooks <token> --configure <configure> --augment <augment> --transfer <transfer>"
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity 0.8.28;
|
|
3
|
+
|
|
4
|
+
import {MaxDataLengthConfigureHook} from "abx-contracts/src/reference/MaxDataLengthConfigureHook.sol";
|
|
5
|
+
import {TransferCounterHook} from "abx-contracts/src/reference/TransferCounterHook.sol";
|
|
6
|
+
import {TransferCountAugmentHook} from "abx-contracts/src/reference/TransferCountAugmentHook.sol";
|
|
7
|
+
|
|
8
|
+
/// Fork these thin wrappers when your project needs different policy. Keeping each lifecycle role
|
|
9
|
+
/// in its own contract means a project only deploys and grants the authority it actually uses.
|
|
10
|
+
contract MyConfigureHook is MaxDataLengthConfigureHook {
|
|
11
|
+
constructor(address token, uint256 maxDataLength) MaxDataLengthConfigureHook(token, maxDataLength) {}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
contract MyTransferHook is TransferCounterHook {
|
|
15
|
+
constructor(address token) TransferCounterHook(token) {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
contract MyAugmentHook is TransferCountAugmentHook {
|
|
19
|
+
constructor(TransferCounterHook counter) TransferCountAugmentHook(counter) {}
|
|
20
|
+
}
|