create-0g-app 1.0.6 → 1.0.8

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/README.md ADDED
@@ -0,0 +1,219 @@
1
+ # create-0g-app
2
+
3
+ The fastest way to build on [0G](https://0g.ai). One command scaffolds a full-stack app pre-wired with working code for 0G Storage, Compute (AI inference), smart contracts, and INFTs.
4
+
5
+ ```bash
6
+ npx create-0g-app@latest
7
+ ```
8
+
9
+ ---
10
+
11
+ ## What gets generated
12
+
13
+ A monorepo with two workspaces:
14
+
15
+ ```
16
+ my-app/
17
+ ├── packages/
18
+ │ ├── web/ # Next.js 15 frontend
19
+ │ │ ├── app/
20
+ │ │ │ ├── page.tsx # Main page (edit this)
21
+ │ │ │ ├── layout.tsx
22
+ │ │ │ └── api/ # Server-side API routes (storage, compute, INFT)
23
+ │ │ ├── components/ # Feature UI components
24
+ │ │ ├── lib/ # Client-side SDK helpers
25
+ │ │ └── .env.local # Your private keys + config (never committed)
26
+ │ └── contracts/ # Hardhat project (if contracts or INFT selected)
27
+ │ ├── contracts/ # Solidity source files
28
+ │ └── scripts/ # Deploy scripts
29
+ ├── scripts/
30
+ │ └── patch-0g-sdk.js # Patches @0glabs/0g-ts-sdk ABI for current testnet
31
+ └── package.json # Root workspace scripts
32
+ ```
33
+
34
+ ---
35
+
36
+ ## Quick Start
37
+
38
+ ```bash
39
+ npx create-0g-app@latest my-app
40
+ cd my-app
41
+
42
+ # Add your private key to packages/web/.env.local
43
+ # Get testnet OG tokens at https://faucet.0g.ai
44
+
45
+ npm run dev # Start dev server at localhost:3000
46
+ npm run deploy # Deploy contracts to 0G Galileo testnet
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Features
52
+
53
+ ### Contracts (Hardhat + 0G Galileo)
54
+
55
+ Scaffolds a Hardhat project targeting the 0G Galileo testnet (chain ID `16602`).
56
+
57
+ **Key files:**
58
+ - `packages/contracts/contracts/MyContract.sol` — your Solidity contract
59
+ - `packages/contracts/scripts/deploy.ts` — deploys and writes address to `.env.local`
60
+ - `packages/contracts/hardhat.config.ts` — pre-configured for 0G Galileo
61
+
62
+ **Commands:**
63
+ ```bash
64
+ npm run deploy # compile + deploy to Galileo testnet
65
+ ```
66
+
67
+ **RPC:** `https://evmrpc-testnet.0g.ai`
68
+
69
+ **Explorer:** `https://chainscan-galileo.0g.ai`
70
+
71
+ **Docs:** https://docs.0g.ai/developer-hub/building-on-0g/contracts
72
+
73
+ ---
74
+
75
+ ### Storage (`@0glabs/0g-ts-sdk`)
76
+
77
+ Uploads and retrieves files from 0G decentralized storage. Files are split into chunks, Merkle-tree verified, and dispersed across storage nodes. The Merkle root (`rootHash`) is recorded on-chain as a permanent content address.
78
+
79
+ **Key files:**
80
+ - `packages/web/app/api/upload/route.ts` — server-side upload handler
81
+ - `packages/web/app/api/download/[rootHash]/route.ts` — server-side download handler
82
+ - `packages/web/lib/0g-storage.ts` — client helpers (`uploadFile`, `downloadFile`)
83
+ - `packages/web/components/StorageSection.tsx` — upload/download UI
84
+
85
+ **Key SDK calls:**
86
+ ```ts
87
+ import { ZgFile, Indexer } from "@0glabs/0g-ts-sdk";
88
+
89
+ const zgFile = await ZgFile.fromFilePath(tmpPath);
90
+ const [tree, err] = await zgFile.merkleTree(); // build Merkle tree
91
+ const [tx, uploadErr] = await indexer.upload(zgFile, RPC_URL, signer as any);
92
+ // tx.rootHash = permanent content address
93
+ // tx.txHash = on-chain submission transaction
94
+
95
+ const dlErr = await indexer.download(rootHash, outPath, false); // retrieve by root hash
96
+ ```
97
+
98
+ > **Note:** `scripts/patch-0g-sdk.js` patches the SDK's ABI to match the current testnet `FixedPriceFlow` contract. It runs automatically on `npm install` via `postinstall`.
99
+
100
+ **Docs:** https://docs.0g.ai/developer-hub/building-on-0g/storage/sdk
101
+
102
+ ---
103
+
104
+ ### Compute (`@0glabs/0g-serving-broker`)
105
+
106
+ Routes AI inference through the 0G compute network. Every query is cryptographically verified and paid for on-chain using OG tokens via a ledger/escrow system. The API is OpenAI-compatible.
107
+
108
+ **Key files:**
109
+ - `packages/web/app/api/compute/broker.ts` — broker singleton, ledger management
110
+ - `packages/web/app/api/compute/route.ts` — inference endpoint
111
+ - `packages/web/app/api/compute/setup/route.ts` — one-time provider setup
112
+ - `packages/web/components/ComputeSection.tsx` — chat UI
113
+
114
+ **Payment flow:**
115
+ 1. `broker.ledger.addLedger(3)` — deposit 3 OG into on-chain escrow (one-time per wallet)
116
+ 2. `broker.inference.acknowledgeProviderSigner(providerAddress)` — whitelist the provider
117
+ 3. `broker.ledger.transferFund(providerAddress, "inference", 1_OG)` — fund provider sub-account
118
+ 4. `broker.inference.getRequestHeaders(providerAddress, query)` — sign each request off-chain
119
+ 5. HTTP call to provider's OpenAI-compatible endpoint
120
+ 6. `broker.inference.processResponse(providerAddress, chatId, content)` — settle micropayment
121
+
122
+ **Key SDK calls:**
123
+ ```ts
124
+ import { createZGComputeNetworkBroker } from "@0glabs/0g-serving-broker";
125
+
126
+ const broker = await createZGComputeNetworkBroker(signer);
127
+ const { endpoint, model } = await broker.inference.getServiceMetadata(providerAddress);
128
+ const headers = await broker.inference.getRequestHeaders(providerAddress, query);
129
+ // use with openai client: new OpenAI({ baseURL: endpoint }).chat.completions.create(...)
130
+ await broker.inference.processResponse(providerAddress, chatId, content);
131
+ ```
132
+
133
+ **Env vars required:**
134
+ ```
135
+ PRIVATE_KEY= # pays for inference (server-side only)
136
+ ```
137
+
138
+ > **Important:** Run provider setup once per wallet. Each setup call transfers 1 OG to the provider sub-account.
139
+
140
+ **Docs:** https://docs.0g.ai/developer-hub/building-on-0g/compute-network/inference
141
+
142
+ ---
143
+
144
+ ### INFT — Intelligent NFTs (`@0glabs/0g-ts-sdk` + ERC-721)
145
+
146
+ Mints ERC-721 tokens whose metadata lives on 0G decentralized storage. The `storageRoot` (Merkle root of the metadata file) and `metadataHash` (keccak256 of the JSON) are recorded on-chain, making metadata verifiable and tamper-proof.
147
+
148
+ **Key files:**
149
+ - `packages/contracts/contracts/INFT.sol` — ERC-721 contract with `mint(to, storageRoot, metadataHash)`
150
+ - `packages/contracts/scripts/deployINFT.ts` — deploys and writes address to `.env.local`
151
+ - `packages/web/app/api/inft/mint/route.ts` — uploads metadata to 0G Storage then mints on-chain
152
+ - `packages/web/app/api/inft/token/route.ts` — fetches token owner + metadata from chain + storage
153
+ - `packages/web/lib/0g-inft.ts` — client helpers (`mintINFT`, `getToken`)
154
+ - `packages/web/components/INFTSection.tsx` — mint + lookup UI
155
+
156
+ **Mint flow:**
157
+ ```ts
158
+ // 1. Build metadata JSON
159
+ const metadata = { name, description, createdAt: Date.now() };
160
+
161
+ // 2. Upload to 0G Storage → get storageRoot
162
+ const [tx] = await indexer.upload(zgFile, RPC_URL, signer as any);
163
+ const storageRoot = tx.rootHash;
164
+
165
+ // 3. Compute metadata hash for tamper detection
166
+ const metadataHash = ethers.keccak256(ethers.toUtf8Bytes(JSON.stringify(metadata)));
167
+
168
+ // 4. Mint on-chain — records ownership + both hashes permanently
169
+ await contract.mint(recipient, storageRoot, metadataHash);
170
+
171
+ // 5. Parse INFTMinted event for tokenId
172
+ ```
173
+
174
+ **Env vars required:**
175
+ ```
176
+ PRIVATE_KEY= # deploy + sign storage + pay gas
177
+ NEXT_PUBLIC_INFT_ADDRESS= # auto-populated after `npm run deploy`
178
+ STORAGE_INDEXER_RPC=https://indexer-storage-testnet-turbo.0g.ai
179
+ ```
180
+
181
+ **Docs:** https://docs.0g.ai/developer-hub/building-on-0g/inft/integration
182
+
183
+ ---
184
+
185
+ ## Environment Variables
186
+
187
+ All env vars live in `packages/web/.env.local` (copied from `.env.example` on scaffold).
188
+
189
+ | Variable | Required for | Description |
190
+ |---|---|---|
191
+ | `NEXT_PUBLIC_RPC_URL` | All | 0G Galileo EVM RPC |
192
+ | `NEXT_PUBLIC_CHAIN_ID` | All | `16602` (Galileo testnet) |
193
+ | `PRIVATE_KEY` | Contracts, Storage, Compute, INFT | Server-side signing key. Never exposed to browser. |
194
+ | `STORAGE_INDEXER_RPC` | Storage, INFT | 0G Storage indexer endpoint |
195
+ | `NEXT_PUBLIC_CONTRACT_ADDRESS` | Contracts | Auto-written by deploy script |
196
+ | `NEXT_PUBLIC_INFT_ADDRESS` | INFT | Auto-written by deploy script |
197
+
198
+ ---
199
+
200
+ ## Testnet Resources
201
+
202
+ | Resource | URL |
203
+ |---|---|
204
+ | Faucet (get OG tokens) | https://faucet.0g.ai |
205
+ | Explorer | https://chainscan-galileo.0g.ai |
206
+ | RPC | https://evmrpc-testnet.0g.ai |
207
+ | Storage Indexer | https://indexer-storage-testnet-turbo.0g.ai |
208
+ | 0G Docs | https://docs.0g.ai |
209
+
210
+ ---
211
+
212
+ ## Stack
213
+
214
+ - **Frontend:** Next.js 15, React 19, TypeScript
215
+ - **Wallet:** wagmi 2 + viem (0G Galileo chain pre-configured)
216
+ - **Contracts:** Hardhat, Solidity, ethers v6
217
+ - **Storage:** `@0glabs/0g-ts-sdk`
218
+ - **Compute:** `@0glabs/0g-serving-broker`
219
+ - **INFT:** `@0glabs/0g-ts-sdk` + OpenZeppelin ERC-721
package/dist/index.js CHANGED
@@ -138,8 +138,7 @@ async function main() {
138
138
  needsPrivateKey ? ` ${picocolors_1.default.yellow("⚠")} Add your ${picocolors_1.default.bold("PRIVATE_KEY")} to ${picocolors_1.default.cyan(`${projectName}/packages/web/.env.local`)}` : "",
139
139
  needsPrivateKey ? ` ${picocolors_1.default.dim("Get testnet OG at https://faucet.0g.ai")}` : "",
140
140
  "",
141
- contracts ? ` ${picocolors_1.default.cyan("npm run deploy")} ${picocolors_1.default.dim("→ deploy contract to Galileo testnet")}` : "",
142
- inft ? ` ${picocolors_1.default.cyan("npm run deploy:inft")} ${picocolors_1.default.dim("→ deploy INFT contract to Galileo testnet")}` : "",
141
+ (contracts || inft) ? ` ${picocolors_1.default.cyan("npm run deploy")} ${picocolors_1.default.dim("→ deploy contract to Galileo testnet")}` : "",
143
142
  ` ${picocolors_1.default.cyan("npm run dev")} ${picocolors_1.default.dim("→ start local dev server")}`,
144
143
  "",
145
144
  ` ${picocolors_1.default.dim("Docs: https://docs.0g.ai")}`,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/scaffold.js CHANGED
@@ -98,12 +98,12 @@ function writeContractsPackageJson(targetDir, { inft }) {
98
98
  }
99
99
  function writeWebPackageJson(targetDir, { storage, compute, inft }) {
100
100
  const deps = {
101
- "@tanstack/react-query": "^5.62.0",
102
- next: "^15.0.0",
103
- react: "^19.0.0",
104
- "react-dom": "^19.0.0",
105
- viem: "^2.21.0",
106
- wagmi: "^2.13.0",
101
+ "@tanstack/react-query": "5.62.0",
102
+ next: "15.1.7",
103
+ react: "19.0.0",
104
+ "react-dom": "19.0.0",
105
+ viem: "2.21.58",
106
+ wagmi: "2.13.4",
107
107
  };
108
108
  if (storage) {
109
109
  deps["@0glabs/0g-ts-sdk"] = "^0.3.3";
@@ -181,6 +181,10 @@ function writePageTsx(targetDir, { contracts, storage, compute, inft }) {
181
181
  ? `
182
182
  return (
183
183
  <main className={styles.main}>
184
+ <div className={styles.hero}>
185
+ <h1 className={styles.heroTitle}>create-0g-app</h1>
186
+ <p className={styles.heroSubtitle}>The fastest way to build on 0G with one command</p>
187
+ </div>
184
188
  ${contracts ? "<ContractsSection />" : ""}
185
189
  ${storage ? "<StorageSection />" : ""}
186
190
  ${compute ? "<ComputeSection />" : ""}
@@ -221,7 +225,23 @@ function writePageCss(targetDir) {
221
225
  .main {
222
226
  max-width: 800px;
223
227
  margin: 0 auto;
224
- padding: 32px 24px 80px;
228
+ padding: 0 24px 80px;
229
+ }
230
+
231
+ .hero {
232
+ text-align: center;
233
+ padding: 56px 0 40px;
234
+ }
235
+ .heroTitle {
236
+ font-size: 3rem;
237
+ font-weight: 800;
238
+ color: #1e1b4b;
239
+ letter-spacing: -0.04em;
240
+ margin-bottom: 12px;
241
+ }
242
+ .heroSubtitle {
243
+ font-size: 1.05rem;
244
+ color: #4b5563;
225
245
  }
226
246
 
227
247
  /* Landing (no features selected) */
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":";;;;;AAaA,4BA0CC;AAvDD,wDAA0B;AAC1B,gDAAwB;AAUxB,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAE9D,SAAgB,QAAQ,CAAC,QAAkB,EAAE,SAAiB;IAC5D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAEvD,2CAA2C;IAC3C,kBAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjE,sBAAsB;IACtB,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7E,wFAAwF;IACxF,IAAI,SAAS,EAAE,CAAC;QACd,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,yEAAyE;QACzE,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClF,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,4BAA4B;IAC5B,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1C,IAAI,SAAS,IAAI,IAAI;QAAE,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,YAAY,CAAC,SAAS,CAAC,CAAC;IACxB,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEjC,oCAAoC;IACpC,MAAM,EAAE,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9C,IAAI,kBAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAAE,kBAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3E,oCAAoC;IACpC,MAAM,KAAK,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACvE,IAAI,kBAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,kBAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,MAAM,GAAG,GAAG,cAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAY;IAClG,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC,CAAC;IACpC,IAAI,SAAS,IAAI,IAAI;QAAE,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAE7D,MAAM,OAAO,GAA2B;QACtC,GAAG,EAAE,sCAAsC;QAC3C,KAAK,EAAE,wCAAwC;KAChD,CAAC;IACF,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,WAAW,GAAG,8BAA8B,CAAC;IACvD,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,CAAC,gDAAgD,CAAC,CAAC;QACvE,IAAI,SAAS;YAAE,WAAW,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACjF,IAAI,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACjF,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,GAAG,+CAA+C,CAAC;IACnE,CAAC;IAED,kBAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACrG,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAiB,EAAE,EAAE,IAAI,EAAY;IACtE,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,oDAAoD;YAC5D,aAAa,EAAE,wDAAwD;YACvE,MAAM,EAAE,8DAA8D;YACtE,IAAI,EAAE,cAAc;SACrB;QACD,YAAY,EAAE;YACZ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD;QACD,eAAe,EAAE;YACf,kCAAkC,EAAE,QAAQ;YAC5C,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;SACnB;KACF,CAAC;IAEF,kBAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,EAC7D,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAY;IAClF,MAAM,IAAI,GAA2B;QACnC,uBAAuB,EAAE,QAAQ;QACjC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,QAAQ;KAChB,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,2BAA2B,CAAC,GAAG,OAAO,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAClD,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE;QACzF,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE;YACf,aAAa,EAAE,SAAS;YACxB,cAAc,EAAE,SAAS;YACzB,kBAAkB,EAAE,SAAS;YAC7B,UAAU,EAAE,QAAQ;SACrB;KACF,CAAC;IAEF,kBAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,EACvD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAY;IACzF,MAAM,KAAK,GAAG;QACZ,sBAAsB;QACtB,4BAA4B;QAC5B,kDAAkD;KACnD,CAAC;IACF,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,OAAO,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QACpG,KAAK,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,CAAC;IAED,kBAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAY;IACtF,MAAM,WAAW,GAAG,SAAS,IAAI,OAAO,IAAI,OAAO,IAAI,IAAI,CAAC;IAE5D,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,mEAAmE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW;QACtB,CAAC,CAAC;;;;;;;QAOE,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;QACvC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;QACnC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;QACnC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;;KAEhC;QACD,CAAC,CAAC;;;;;;;;;;;;;;;;;;;KAmBD,CAAC;IAEJ,MAAM,OAAO,GAAG;;EAEhB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;kCAEc,IAAI;;CAErC,CAAC;IAEA,kBAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB;IACrC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Cb,CAAC,SAAS,EAAE,CAAC;IAEZ,kBAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAY;IAClG,MAAM,KAAK,GAAG;QACZ,KAAK,WAAW,EAAE;QAClB,EAAE;QACF,6GAA6G;QAC7G,EAAE;QACF,gBAAgB;QAChB,EAAE;QACF,SAAS;QACT,aAAa;QACb,sDAAsD;QACtD,oCAAoC;QACpC,aAAa;QACb,KAAK;KACN,CAAC;IAEF,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtG,IAAI,SAAS;YAAE,aAAa,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;QAC/H,IAAI,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;QACjH,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,yEAAyE,EAAE,iEAAiE,CAAC,CAAC;IACjL,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,wFAAwF,EAAE,iEAAiE,CAAC,CAAC;IAChM,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CACR,EAAE,EACF,4BAA4B,EAC5B,EAAE,EACF,uEAAuE,EACvE,kFAAkF,EAClF,EAAE,EACF,qEAAqE,CACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,+CAA+C,CAAC,CAAC;IAE3J,kBAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-0g-app",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Zero-config scaffold CLI for building on the 0G decentralized AI network",
5
5
  "bin": {
6
6
  "create-0g-app": "./dist/index.js"
@@ -1,19 +1,20 @@
1
1
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
2
2
 
3
3
  :root {
4
- --bg: #0a0a0f;
5
- --surface: #12121a;
6
- --border: #2a2a3a;
7
- --accent: #00d4ff;
8
- --accent-dim: rgba(0, 212, 255, 0.12);
9
- --text: #e8e8f0;
10
- --muted: #6b6b80;
11
- --error: #ff4444;
12
- --success: #00c896;
4
+ --bg: #faf5ff;
5
+ --surface: #ffffff;
6
+ --border: #e9d5ff;
7
+ --accent: #9333ea;
8
+ --accent-dim: rgba(147, 51, 234, 0.08);
9
+ --text: #111827;
10
+ --muted: #4b5563;
11
+ --error: #ef4444;
12
+ --success: #10b981;
13
13
  }
14
14
 
15
15
  body {
16
- background: var(--bg);
16
+ background: linear-gradient(135deg, #f5f3ff 0%, #faf5ff 50%, #eef2ff 100%);
17
+ background-attachment: fixed;
17
18
  color: var(--text);
18
19
  font-family: var(--font-geist-sans), system-ui, sans-serif;
19
20
  min-height: 100vh;
@@ -4,10 +4,12 @@
4
4
  justify-content: space-between;
5
5
  padding: 0 24px;
6
6
  height: 56px;
7
- border-bottom: 1px solid var(--border);
7
+ border-bottom: 1px solid #f3e8ff;
8
8
  position: sticky;
9
9
  top: 0;
10
- background: var(--bg);
10
+ background: rgba(255, 255, 255, 0.7);
11
+ backdrop-filter: blur(12px);
12
+ -webkit-backdrop-filter: blur(12px);
11
13
  z-index: 10;
12
14
  }
13
15
 
@@ -15,12 +17,12 @@
15
17
  font-size: 1rem;
16
18
  font-weight: 700;
17
19
  letter-spacing: -0.03em;
18
- color: var(--text);
20
+ color: #111827;
19
21
  text-decoration: none;
20
22
  }
21
23
  .logo:hover { text-decoration: none; }
22
24
 
23
- .accent { color: var(--accent); }
25
+ .accent { color: #9333ea; }
24
26
 
25
27
  .right {
26
28
  display: flex;
@@ -35,11 +37,11 @@
35
37
  }
36
38
 
37
39
  .btnPrimary {
38
- background: var(--accent);
39
- color: #000;
40
+ background: linear-gradient(135deg, #9333ea, #4f46e5);
41
+ color: #ffffff;
40
42
  border: none;
41
43
  padding: 7px 16px;
42
- border-radius: 8px;
44
+ border-radius: 20px;
43
45
  font-weight: 600;
44
46
  cursor: pointer;
45
47
  font-size: 0.85rem;
@@ -49,12 +51,12 @@
49
51
 
50
52
  .btnSecondary {
51
53
  background: transparent;
52
- color: var(--text);
53
- border: 1px solid var(--border);
54
+ color: #4b5563;
55
+ border: 1px solid #e9d5ff;
54
56
  padding: 5px 12px;
55
57
  border-radius: 8px;
56
58
  font-size: 0.8rem;
57
59
  cursor: pointer;
58
- transition: border-color 0.15s;
60
+ transition: border-color 0.15s, color 0.15s;
59
61
  }
60
- .btnSecondary:hover { border-color: var(--accent); color: var(--accent); }
62
+ .btnSecondary:hover { border-color: #9333ea; color: #9333ea; }
@@ -11,7 +11,7 @@ export function Navbar() {
11
11
  return (
12
12
  <nav className={styles.nav}>
13
13
  <Link href="/" className={styles.logo}>
14
- <span className={styles.accent}>create</span>-0g-app
14
+ create-<span className={styles.accent}>0G</span>-app
15
15
  </Link>
16
16
  <div className={styles.right}>
17
17
  {isConnected ? (
@@ -7,9 +7,11 @@
7
7
  }
8
8
  .section:last-child { border-bottom: none; }
9
9
 
10
- .heading { font-size: 1.25rem; font-weight: 700; }
10
+ .heading { font-size: 1.25rem; font-weight: 700; border-left: 3px solid var(--accent); padding-left: 12px; }
11
11
  .description { color: var(--muted); font-size: 0.9rem; margin-top: -8px; }
12
12
  .hint { color: var(--muted); font-size: 0.85rem; }
13
+ .docsLink { font-size: 0.8rem; color: var(--muted); text-decoration: none; }
14
+ .docsLink:hover { color: var(--accent); }
13
15
 
14
16
  /* Flow sections */
15
17
  .flow {
@@ -33,7 +35,7 @@
33
35
  user-select: none;
34
36
  }
35
37
  .flowHeading::-webkit-details-marker { display: none; }
36
- .flowHeading::before { content: ""; font-size: 0.6rem; transition: transform 0.15s; }
38
+ .flowHeading::before { content: ""; font-size: 0.75rem; transition: transform 0.15s; }
37
39
  details[open] > .flowHeading::before { transform: rotate(90deg); }
38
40
 
39
41
  .flowList {
@@ -117,7 +119,7 @@ details[open] > .flowHeading::before { transform: rotate(90deg); }
117
119
  user-select: none;
118
120
  }
119
121
  .setupSubtitle::-webkit-details-marker { display: none; }
120
- .setupSubtitle::before { content: ""; font-size: 0.6rem; transition: transform 0.15s; }
122
+ .setupSubtitle::before { content: ""; font-size: 0.75rem; transition: transform 0.15s; }
121
123
  details[open] > .setupSubtitle::before { transform: rotate(90deg); }
122
124
 
123
125
  .setupSteps {
@@ -159,17 +161,17 @@ details[open] > .setupSubtitle::before { transform: rotate(90deg); }
159
161
  }
160
162
 
161
163
  .btnSetup {
162
- background: var(--surface);
163
- color: var(--text);
164
- border: 1px solid var(--border);
164
+ background: #1e1b4b;
165
+ color: #ffffff;
166
+ border: none;
165
167
  padding: 8px 18px;
166
168
  border-radius: 8px;
167
169
  font-weight: 600;
168
170
  font-size: 0.88rem;
169
171
  cursor: pointer;
170
- transition: border-color 0.15s;
172
+ transition: background 0.15s;
171
173
  }
172
- .btnSetup:hover:not(:disabled) { border-color: var(--accent); }
174
+ .btnSetup:hover:not(:disabled) { background: #312e81; }
173
175
  .btnSetup:disabled { opacity: 0.4; cursor: not-allowed; }
174
176
 
175
177
  .setupSuccess { font-size: 0.85rem; color: #065f46; }
@@ -237,7 +239,7 @@ details[open] > .setupSubtitle::before { transform: rotate(90deg); }
237
239
 
238
240
  .btn {
239
241
  background: var(--accent);
240
- color: #000;
242
+ color: #fff;
241
243
  border: none;
242
244
  padding: 10px 20px;
243
245
  border-radius: 8px;
@@ -78,7 +78,7 @@ export function ComputeSection() {
78
78
  <h2 className={styles.heading}>Compute</h2>
79
79
  <p className={styles.description}>
80
80
  Just like making an OpenAI API call, except every query is cryptographically
81
- verified and paid for onchain using 0G tokens.
81
+ verified and paid for onchain using 0G tokens. <a className={styles.docsLink} href="https://docs.0g.ai/developer-hub/building-on-0g/compute-network/inference" target="_blank" rel="noopener noreferrer">Docs ↗</a>
82
82
  </p>
83
83
 
84
84
  {/* Main Flow */}
@@ -0,0 +1,13 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2020",
4
+ "module": "commonjs",
5
+ "moduleResolution": "node",
6
+ "esModuleInterop": true,
7
+ "strict": true,
8
+ "skipLibCheck": true,
9
+ "resolveJsonModule": true,
10
+ "outDir": "dist"
11
+ },
12
+ "include": ["hardhat.config.ts", "scripts/**/*.ts", "test/**/*.ts"]
13
+ }
@@ -7,7 +7,17 @@
7
7
  }
8
8
  .section:last-child { border-bottom: none; }
9
9
 
10
- .heading { font-size: 1.25rem; font-weight: 700; }
10
+ .heading { font-size: 1.25rem; font-weight: 700; border-left: 3px solid var(--accent); padding-left: 12px; }
11
+
12
+ .card {
13
+ background: var(--surface);
14
+ border: 1px solid var(--border);
15
+ border-radius: 12px;
16
+ padding: 20px 24px;
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: 12px;
20
+ }
11
21
 
12
22
  .line { color: var(--muted); font-size: 0.9rem; }
13
23
 
@@ -4,12 +4,14 @@ export function ContractsSection() {
4
4
  return (
5
5
  <section className={styles.section}>
6
6
  <h2 className={styles.heading}>Contracts</h2>
7
- <p className={styles.line}>
8
- Your contract lives at <code className={styles.code}>packages/contracts/contracts/MyContract.sol</code>
9
- </p>
10
- <p className={styles.line}>
11
- To deploy to 0G Galileo testnet, run <code className={styles.code}>npm run deploy</code>
12
- </p>
7
+ <div className={styles.card}>
8
+ <p className={styles.line}>
9
+ Your contract lives at <code className={styles.code}>packages/contracts/contracts/MyContract.sol</code>
10
+ </p>
11
+ <p className={styles.line}>
12
+ To deploy to 0G Galileo testnet, run <code className={styles.code}>npm run deploy</code>
13
+ </p>
14
+ </div>
13
15
  </section>
14
16
  );
15
17
  }
@@ -7,8 +7,58 @@
7
7
  }
8
8
  .section:last-child { border-bottom: none; }
9
9
 
10
- .heading { font-size: 1.25rem; font-weight: 700; }
10
+ .heading { font-size: 1.25rem; font-weight: 700; border-left: 3px solid var(--accent); padding-left: 12px; }
11
11
  .description { color: var(--muted); font-size: 0.9rem; margin-top: -8px; }
12
+ .docsLink { font-size: 0.8rem; color: var(--muted); text-decoration: none; }
13
+ .docsLink:hover { color: var(--accent); }
14
+
15
+ /* Flow sections */
16
+ .flow {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: 8px;
20
+ }
21
+
22
+ .flowHeading {
23
+ font-size: 0.78rem;
24
+ font-weight: 700;
25
+ text-transform: uppercase;
26
+ letter-spacing: 0.07em;
27
+ color: var(--muted);
28
+ margin: 0;
29
+ cursor: pointer;
30
+ list-style: none;
31
+ display: flex;
32
+ align-items: center;
33
+ gap: 6px;
34
+ user-select: none;
35
+ }
36
+ .flowHeading::-webkit-details-marker { display: none; }
37
+ .flowHeading::before { content: "›"; font-size: 0.75rem; transition: transform 0.15s; }
38
+ details[open] > .flowHeading::before { transform: rotate(90deg); }
39
+
40
+ .flowList {
41
+ margin-top: 8px;
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: 6px;
45
+ padding-left: 20px;
46
+ margin: 0;
47
+ }
48
+
49
+ .flowList li {
50
+ font-size: 0.875rem;
51
+ line-height: 1.6;
52
+ color: var(--text);
53
+ }
54
+
55
+ .flowList code {
56
+ font-family: monospace;
57
+ font-size: 0.82rem;
58
+ background: var(--border);
59
+ padding: 1px 5px;
60
+ border-radius: 4px;
61
+ }
12
62
 
13
63
  .card {
14
64
  background: var(--surface);
@@ -70,7 +120,7 @@
70
120
  .btn {
71
121
  align-self: flex-start;
72
122
  background: var(--accent);
73
- color: #000;
123
+ color: #fff;
74
124
  border: none;
75
125
  padding: 10px 20px;
76
126
  border-radius: 8px;
@@ -57,9 +57,53 @@ export function INFTSection() {
57
57
  <section className={styles.section}>
58
58
  <h2 className={styles.heading}>INFT</h2>
59
59
  <p className={styles.description}>
60
- Mint Intelligent NFTs — metadata stored on 0G Storage, ownership on 0G Chain.
60
+ Mint Intelligent NFTs — metadata stored on 0G Storage, ownership on 0G Chain. <a className={styles.docsLink} href="https://docs.0g.ai/developer-hub/building-on-0g/inft/integration" target="_blank" rel="noopener noreferrer">Docs ↗</a>
61
61
  </p>
62
62
 
63
+ {/* Mint flow */}
64
+ <details className={styles.flow}>
65
+ <summary className={styles.flowHeading}>Mint flow</summary>
66
+ <ol className={styles.flowList}>
67
+ <li>
68
+ Build metadata JSON <code>{"{ name, description, createdAt }"}</code> on the server
69
+ </li>
70
+ <li>
71
+ <code>indexer.upload(zgFile, RPC_URL, signer)</code> — upload metadata to
72
+ 0G Storage, returns <code>storageRoot</code> (Merkle root = content address)
73
+ </li>
74
+ <li>
75
+ <code>ethers.keccak256(metadataJSON)</code> — compute <code>metadataHash</code>{" "}
76
+ so anyone can verify the metadata hasn&apos;t been tampered with
77
+ </li>
78
+ <li>
79
+ <code>contract.mint(recipient, storageRoot, metadataHash)</code> — call{" "}
80
+ <code>INFT.sol</code> on-chain, recording ownership and both hashes permanently
81
+ </li>
82
+ <li>
83
+ Parse <code>INFTMinted</code> event log to extract the new <code>tokenId</code>
84
+ </li>
85
+ </ol>
86
+ </details>
87
+
88
+ {/* Lookup flow */}
89
+ <details className={styles.flow}>
90
+ <summary className={styles.flowHeading}>Lookup flow</summary>
91
+ <ol className={styles.flowList}>
92
+ <li>
93
+ Read <code>owner</code>, <code>storageRoot</code>, and <code>metadataHash</code>{" "}
94
+ from the contract on-chain by token ID
95
+ </li>
96
+ <li>
97
+ <code>indexer.download(storageRoot)</code> — fetch the metadata JSON from
98
+ 0G Storage nodes using the Merkle root
99
+ </li>
100
+ <li>
101
+ Recompute <code>keccak256</code> of fetched JSON and compare to on-chain{" "}
102
+ <code>metadataHash</code> to verify integrity
103
+ </li>
104
+ </ol>
105
+ </details>
106
+
63
107
  {/* ── Mint ── */}
64
108
  <div className={styles.card}>
65
109
  <h3 className={styles.cardTitle}>Mint an INFT</h3>
@@ -7,9 +7,59 @@
7
7
  }
8
8
  .section:last-child { border-bottom: none; }
9
9
 
10
- .heading { font-size: 1.25rem; font-weight: 700; }
10
+ .heading { font-size: 1.25rem; font-weight: 700; border-left: 3px solid var(--accent); padding-left: 12px; }
11
11
  .description { color: var(--muted); font-size: 0.9rem; margin-top: -8px; }
12
12
  .hint { color: var(--muted); font-size: 0.9rem; }
13
+ .docsLink { font-size: 0.8rem; color: var(--muted); text-decoration: none; }
14
+ .docsLink:hover { color: var(--accent); }
15
+
16
+ /* Flow sections */
17
+ .flow {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: 8px;
21
+ }
22
+
23
+ .flowHeading {
24
+ font-size: 0.78rem;
25
+ font-weight: 700;
26
+ text-transform: uppercase;
27
+ letter-spacing: 0.07em;
28
+ color: var(--muted);
29
+ margin: 0;
30
+ cursor: pointer;
31
+ list-style: none;
32
+ display: flex;
33
+ align-items: center;
34
+ gap: 6px;
35
+ user-select: none;
36
+ }
37
+ .flowHeading::-webkit-details-marker { display: none; }
38
+ .flowHeading::before { content: "›"; font-size: 0.75rem; transition: transform 0.15s; }
39
+ details[open] > .flowHeading::before { transform: rotate(90deg); }
40
+
41
+ .flowList {
42
+ margin-top: 8px;
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: 6px;
46
+ padding-left: 20px;
47
+ margin: 0;
48
+ }
49
+
50
+ .flowList li {
51
+ font-size: 0.875rem;
52
+ line-height: 1.6;
53
+ color: var(--text);
54
+ }
55
+
56
+ .flowList code {
57
+ font-family: monospace;
58
+ font-size: 0.82rem;
59
+ background: var(--border);
60
+ padding: 1px 5px;
61
+ border-radius: 4px;
62
+ }
13
63
 
14
64
  .dropzone {
15
65
  border: 2px dashed var(--border);
@@ -23,6 +73,7 @@
23
73
  align-items: center;
24
74
  gap: 8px;
25
75
  font-size: 0.9rem;
76
+ background: #ffffff;
26
77
  }
27
78
  .dropzone:hover, .over { border-color: var(--accent); background: var(--accent-dim); }
28
79
  .icon { font-size: 1.5rem; color: var(--accent); }
@@ -30,7 +30,43 @@ export function StorageSection() {
30
30
  return (
31
31
  <section className={styles.section}>
32
32
  <h2 className={styles.heading}>Storage</h2>
33
- <p className={styles.description}>Upload files to 0G decentralized storage.</p>
33
+ <p className={styles.description}>Upload files to 0G decentralized storage. <a className={styles.docsLink} href="https://docs.0g.ai/developer-hub/building-on-0g/storage/sdk" target="_blank" rel="noopener noreferrer">Docs ↗</a></p>
34
+
35
+ {/* Upload flow */}
36
+ <details className={styles.flow}>
37
+ <summary className={styles.flowHeading}>Upload flow</summary>
38
+ <ol className={styles.flowList}>
39
+ <li>
40
+ <code>ZgFile.fromFilePath</code> — wraps the file into a 0G file object
41
+ </li>
42
+ <li>
43
+ <code>zgFile.merkleTree()</code> — builds a Merkle tree of the file&apos;s
44
+ chunks so the network can verify data integrity during retrieval
45
+ </li>
46
+ <li>
47
+ <code>indexer.upload(zgFile, RPC_URL, signer)</code> — disperses file chunks
48
+ across 0G storage nodes and records the Merkle root on-chain, paying gas
49
+ </li>
50
+ <li>
51
+ Returns <code>rootHash</code> (Merkle root = permanent content address)
52
+ and <code>txHash</code> (on-chain record)
53
+ </li>
54
+ </ol>
55
+ </details>
56
+
57
+ {/* Download flow */}
58
+ <details className={styles.flow}>
59
+ <summary className={styles.flowHeading}>Download flow</summary>
60
+ <ol className={styles.flowList}>
61
+ <li>
62
+ <code>indexer.download(rootHash, tmpPath)</code> — fetches file chunks
63
+ from storage nodes by Merkle root, verifying each chunk against the tree
64
+ </li>
65
+ <li>
66
+ File is streamed back to the browser as a binary download
67
+ </li>
68
+ </ol>
69
+ </details>
34
70
 
35
71
  <div
36
72
  className={`${styles.dropzone} ${uploadState.status === "uploading" ? styles.over : ""}`}