create-avalanche-app 0.1.6 → 0.1.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/dist/index.js CHANGED
@@ -6,11 +6,11 @@ import {
6
6
 
7
7
  // src/index.ts
8
8
  import { spawnSync } from "child_process";
9
- import { existsSync, readdirSync } from "fs";
9
+ import { existsSync, readdirSync, readFileSync } from "fs";
10
10
  import path from "path";
11
11
  import * as p from "@clack/prompts";
12
12
  import pc from "picocolors";
13
- var VERSION = "0.1.6";
13
+ var VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
14
14
  var AVAKIT_DEP_VERSION = "0.1.2";
15
15
  function parseArgs(argv) {
16
16
  const opts = { yes: false, local: false, install: true };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { existsSync, readdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { type ChainId, listTemplates, scaffoldApp, type WalletId } from \"./api.js\";\n\nconst VERSION = \"0.1.6\";\n\n// The @avakit/* dependency version stamped into scaffolded apps' package.json\n// (as `^AVAKIT_DEP_VERSION`). Kept separate from the CLI's own VERSION: it must\n// resolve every published @avakit package, so it tracks the LOWEST current\n// @avakit version (core 0.1.2 · react 0.1.3 → ^0.1.2 satisfies both). Bump only\n// when the minimum @avakit version a fresh app needs goes up.\nconst AVAKIT_DEP_VERSION = \"0.1.2\";\n\ntype PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\ninterface Options {\n projectName?: string;\n template?: string;\n wallet?: WalletId;\n chain?: ChainId;\n pm?: PackageManager;\n yes: boolean;\n local: boolean;\n install: boolean;\n}\n\nfunction parseArgs(argv: string[]): Options {\n const opts: Options = { yes: false, local: false, install: true };\n const rest = argv.slice(2);\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i];\n const next = () => rest[++i];\n switch (arg) {\n case \"--yes\":\n case \"-y\":\n opts.yes = true;\n break;\n case \"--local\":\n opts.local = true;\n break;\n case \"--no-install\":\n opts.install = false;\n break;\n case \"--template\":\n case \"-t\":\n opts.template = next();\n break;\n case \"--wallet\":\n case \"-w\":\n opts.wallet = next() as WalletId;\n break;\n case \"--chain\":\n case \"-c\":\n opts.chain = next() as ChainId;\n break;\n case \"--pm\":\n opts.pm = next() as PackageManager;\n break;\n case \"--version\":\n case \"-v\":\n process.stdout.write(`${VERSION}\\n`);\n process.exit(0);\n break;\n case \"--help\":\n case \"-h\":\n printHelp();\n process.exit(0);\n break;\n default:\n if (arg && !arg.startsWith(\"-\") && !opts.projectName) {\n opts.projectName = arg;\n }\n }\n }\n return opts;\n}\n\nfunction printHelp(): void {\n process.stdout.write(\n [\n \"create-avalanche-app — scaffold a batteries-included Avalanche dapp\",\n \"\",\n \"Usage: npm create avalanche-app@latest [name] [options]\",\n \"\",\n \"Options:\",\n \" -t, --template <id> minimal | nft-mint | token-gated-app | erc20-token |\",\n \" icm-messenger | eerc-token | l1-launch | token-bridge\",\n \" -w, --wallet <id> web3auth | injected (default: web3auth)\",\n \" -c, --chain <id> fuji | c-chain (default: fuji)\",\n \" --pm <manager> pnpm | npm | yarn | bun\",\n \" -y, --yes skip prompts (non-interactive)\",\n \" --no-install do not install dependencies\",\n \" --local link @avakit/* via workspace (repo dev only)\",\n \" -v, --version print version\",\n \" -h, --help print this help\",\n \"\",\n ].join(\"\\n\"),\n );\n}\n\nfunction isValidName(name: string): boolean {\n return /^[a-z0-9][a-z0-9._-]*$/.test(name);\n}\n\nasync function resolveOptions(\n opts: Options,\n): Promise<Required<Omit<Options, \"yes\" | \"local\" | \"install\">>> {\n const templates = listTemplates();\n const templateIds = templates.map((t) => t.id);\n\n if (opts.yes) {\n const projectName = opts.projectName ?? \"my-avax-app\";\n return {\n projectName,\n template: opts.template && templateIds.includes(opts.template) ? opts.template : \"minimal\",\n wallet: opts.wallet ?? \"web3auth\",\n chain: opts.chain ?? \"fuji\",\n pm: opts.pm ?? \"pnpm\",\n };\n }\n\n p.intro(pc.bgCyan(pc.black(\" create-avalanche-app \")));\n\n const projectName =\n opts.projectName ??\n (await p.text({\n message: \"Project name?\",\n placeholder: \"my-avax-app\",\n defaultValue: \"my-avax-app\",\n validate: (v) => (!v || isValidName(v) ? undefined : \"Use lowercase letters, digits, - . _\"),\n }));\n if (p.isCancel(projectName)) cancel();\n\n const template =\n opts.template ??\n (await p.select({\n message: \"Template?\",\n options: templates.map((t) => ({ value: t.id, label: t.title, hint: t.description })),\n initialValue: \"minimal\",\n }));\n if (p.isCancel(template)) cancel();\n\n const wallet =\n opts.wallet ??\n (await p.select({\n message: \"Wallet provider?\",\n options: [\n { value: \"web3auth\", label: \"Social login (Web3Auth)\", hint: \"free, recommended\" },\n { value: \"injected\", label: \"Browser wallet (Core / MetaMask)\" },\n ],\n initialValue: \"web3auth\",\n }));\n if (p.isCancel(wallet)) cancel();\n\n const chain =\n opts.chain ??\n (await p.select({\n message: \"Target chain?\",\n options: [\n { value: \"fuji\", label: \"Avalanche Fuji (testnet)\", hint: \"recommended\" },\n { value: \"c-chain\", label: \"Avalanche C-Chain (mainnet)\" },\n ],\n initialValue: \"fuji\",\n }));\n if (p.isCancel(chain)) cancel();\n\n const pm =\n opts.pm ??\n (await p.select({\n message: \"Package manager?\",\n options: ([\"pnpm\", \"npm\", \"yarn\", \"bun\"] as const).map((m) => ({ value: m, label: m })),\n initialValue: \"pnpm\",\n }));\n if (p.isCancel(pm)) cancel();\n\n return {\n projectName: projectName as string,\n template: template as string,\n wallet: wallet as WalletId,\n chain: chain as ChainId,\n pm: pm as PackageManager,\n };\n}\n\nfunction cancel(): never {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n}\n\nasync function main(): Promise<void> {\n const opts = parseArgs(process.argv);\n const resolved = await resolveOptions(opts);\n\n const targetDir = path.resolve(process.cwd(), resolved.projectName);\n if (existsSync(targetDir) && readdirSync(targetDir).length > 0) {\n process.stderr.write(\n pc.red(`\\nDirectory \"${resolved.projectName}\" already exists and is not empty.\\n`),\n );\n process.exit(1);\n }\n\n const spin = opts.yes ? null : p.spinner();\n spin?.start(\"Scaffolding project\");\n const { files } = await scaffoldApp({\n projectName: resolved.projectName,\n targetDir,\n template: resolved.template,\n wallet: resolved.wallet,\n chain: resolved.chain,\n local: opts.local,\n avakitVersion: AVAKIT_DEP_VERSION,\n });\n spin?.stop(`Created ${files.length} files`);\n\n if (opts.install) {\n const installSpin = opts.yes ? null : p.spinner();\n installSpin?.start(`Installing dependencies with ${resolved.pm}`);\n const result = spawnSync(resolved.pm, [\"install\"], {\n cwd: targetDir,\n stdio: opts.yes ? \"inherit\" : \"ignore\",\n });\n if (result.status === 0) {\n installSpin?.stop(\"Dependencies installed\");\n } else {\n installSpin?.stop(pc.yellow(\"Install skipped/failed — run it manually\"));\n }\n }\n\n const next = [\n `cd ${resolved.projectName}`,\n ...(opts.install ? [] : [`${resolved.pm} install`]),\n ...(resolved.wallet === \"web3auth\"\n ? [\"cp .env.example .env.local # add your Web3Auth client ID\"]\n : []),\n `${resolved.pm} run dev`,\n ];\n\n if (opts.yes) {\n process.stdout.write(`\\nDone. Next steps:\\n ${next.join(\"\\n \")}\\n`);\n } else {\n p.note(next.join(\"\\n\"), \"Next steps\");\n p.outro(pc.green(\"Your Avalanche dapp is ready.\"));\n }\n}\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n `\\n${pc.red(\"Error:\")} ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exit(1);\n});\n"],"mappings":"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","names":["projectName","cancel"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { type ChainId, listTemplates, scaffoldApp, type WalletId } from \"./api.js\";\n\n// The CLI's own version — read from package.json at runtime (single source of\n// truth, can never drift). dist/index.js ships next to package.json.\nconst VERSION = (\n JSON.parse(readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\")) as {\n version: string;\n }\n).version;\n\n// The @avakit/* dependency version stamped into scaffolded apps' package.json\n// (as `^AVAKIT_DEP_VERSION`). Kept separate from the CLI's own VERSION: it must\n// resolve every published @avakit package, so it tracks the LOWEST current\n// @avakit version (core 0.1.2 · react 0.1.3 → ^0.1.2 satisfies both). Bump only\n// when the minimum @avakit version a fresh app needs goes up.\nconst AVAKIT_DEP_VERSION = \"0.1.2\";\n\ntype PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\ninterface Options {\n projectName?: string;\n template?: string;\n wallet?: WalletId;\n chain?: ChainId;\n pm?: PackageManager;\n yes: boolean;\n local: boolean;\n install: boolean;\n}\n\nfunction parseArgs(argv: string[]): Options {\n const opts: Options = { yes: false, local: false, install: true };\n const rest = argv.slice(2);\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i];\n const next = () => rest[++i];\n switch (arg) {\n case \"--yes\":\n case \"-y\":\n opts.yes = true;\n break;\n case \"--local\":\n opts.local = true;\n break;\n case \"--no-install\":\n opts.install = false;\n break;\n case \"--template\":\n case \"-t\":\n opts.template = next();\n break;\n case \"--wallet\":\n case \"-w\":\n opts.wallet = next() as WalletId;\n break;\n case \"--chain\":\n case \"-c\":\n opts.chain = next() as ChainId;\n break;\n case \"--pm\":\n opts.pm = next() as PackageManager;\n break;\n case \"--version\":\n case \"-v\":\n process.stdout.write(`${VERSION}\\n`);\n process.exit(0);\n break;\n case \"--help\":\n case \"-h\":\n printHelp();\n process.exit(0);\n break;\n default:\n if (arg && !arg.startsWith(\"-\") && !opts.projectName) {\n opts.projectName = arg;\n }\n }\n }\n return opts;\n}\n\nfunction printHelp(): void {\n process.stdout.write(\n [\n \"create-avalanche-app — scaffold a batteries-included Avalanche dapp\",\n \"\",\n \"Usage: npm create avalanche-app@latest [name] [options]\",\n \"\",\n \"Options:\",\n \" -t, --template <id> minimal | nft-mint | token-gated-app | erc20-token |\",\n \" icm-messenger | eerc-token | l1-launch | token-bridge\",\n \" -w, --wallet <id> web3auth | injected (default: web3auth)\",\n \" -c, --chain <id> fuji | c-chain (default: fuji)\",\n \" --pm <manager> pnpm | npm | yarn | bun\",\n \" -y, --yes skip prompts (non-interactive)\",\n \" --no-install do not install dependencies\",\n \" --local link @avakit/* via workspace (repo dev only)\",\n \" -v, --version print version\",\n \" -h, --help print this help\",\n \"\",\n ].join(\"\\n\"),\n );\n}\n\nfunction isValidName(name: string): boolean {\n return /^[a-z0-9][a-z0-9._-]*$/.test(name);\n}\n\nasync function resolveOptions(\n opts: Options,\n): Promise<Required<Omit<Options, \"yes\" | \"local\" | \"install\">>> {\n const templates = listTemplates();\n const templateIds = templates.map((t) => t.id);\n\n if (opts.yes) {\n const projectName = opts.projectName ?? \"my-avax-app\";\n return {\n projectName,\n template: opts.template && templateIds.includes(opts.template) ? opts.template : \"minimal\",\n wallet: opts.wallet ?? \"web3auth\",\n chain: opts.chain ?? \"fuji\",\n pm: opts.pm ?? \"pnpm\",\n };\n }\n\n p.intro(pc.bgCyan(pc.black(\" create-avalanche-app \")));\n\n const projectName =\n opts.projectName ??\n (await p.text({\n message: \"Project name?\",\n placeholder: \"my-avax-app\",\n defaultValue: \"my-avax-app\",\n validate: (v) => (!v || isValidName(v) ? undefined : \"Use lowercase letters, digits, - . _\"),\n }));\n if (p.isCancel(projectName)) cancel();\n\n const template =\n opts.template ??\n (await p.select({\n message: \"Template?\",\n options: templates.map((t) => ({ value: t.id, label: t.title, hint: t.description })),\n initialValue: \"minimal\",\n }));\n if (p.isCancel(template)) cancel();\n\n const wallet =\n opts.wallet ??\n (await p.select({\n message: \"Wallet provider?\",\n options: [\n { value: \"web3auth\", label: \"Social login (Web3Auth)\", hint: \"free, recommended\" },\n { value: \"injected\", label: \"Browser wallet (Core / MetaMask)\" },\n ],\n initialValue: \"web3auth\",\n }));\n if (p.isCancel(wallet)) cancel();\n\n const chain =\n opts.chain ??\n (await p.select({\n message: \"Target chain?\",\n options: [\n { value: \"fuji\", label: \"Avalanche Fuji (testnet)\", hint: \"recommended\" },\n { value: \"c-chain\", label: \"Avalanche C-Chain (mainnet)\" },\n ],\n initialValue: \"fuji\",\n }));\n if (p.isCancel(chain)) cancel();\n\n const pm =\n opts.pm ??\n (await p.select({\n message: \"Package manager?\",\n options: ([\"pnpm\", \"npm\", \"yarn\", \"bun\"] as const).map((m) => ({ value: m, label: m })),\n initialValue: \"pnpm\",\n }));\n if (p.isCancel(pm)) cancel();\n\n return {\n projectName: projectName as string,\n template: template as string,\n wallet: wallet as WalletId,\n chain: chain as ChainId,\n pm: pm as PackageManager,\n };\n}\n\nfunction cancel(): never {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n}\n\nasync function main(): Promise<void> {\n const opts = parseArgs(process.argv);\n const resolved = await resolveOptions(opts);\n\n const targetDir = path.resolve(process.cwd(), resolved.projectName);\n if (existsSync(targetDir) && readdirSync(targetDir).length > 0) {\n process.stderr.write(\n pc.red(`\\nDirectory \"${resolved.projectName}\" already exists and is not empty.\\n`),\n );\n process.exit(1);\n }\n\n const spin = opts.yes ? null : p.spinner();\n spin?.start(\"Scaffolding project\");\n const { files } = await scaffoldApp({\n projectName: resolved.projectName,\n targetDir,\n template: resolved.template,\n wallet: resolved.wallet,\n chain: resolved.chain,\n local: opts.local,\n avakitVersion: AVAKIT_DEP_VERSION,\n });\n spin?.stop(`Created ${files.length} files`);\n\n if (opts.install) {\n const installSpin = opts.yes ? null : p.spinner();\n installSpin?.start(`Installing dependencies with ${resolved.pm}`);\n const result = spawnSync(resolved.pm, [\"install\"], {\n cwd: targetDir,\n stdio: opts.yes ? \"inherit\" : \"ignore\",\n });\n if (result.status === 0) {\n installSpin?.stop(\"Dependencies installed\");\n } else {\n installSpin?.stop(pc.yellow(\"Install skipped/failed — run it manually\"));\n }\n }\n\n const next = [\n `cd ${resolved.projectName}`,\n ...(opts.install ? [] : [`${resolved.pm} install`]),\n ...(resolved.wallet === \"web3auth\"\n ? [\"cp .env.example .env.local # add your Web3Auth client ID\"]\n : []),\n `${resolved.pm} run dev`,\n ];\n\n if (opts.yes) {\n process.stdout.write(`\\nDone. Next steps:\\n ${next.join(\"\\n \")}\\n`);\n } else {\n p.note(next.join(\"\\n\"), \"Next steps\");\n p.outro(pc.green(\"Your Avalanche dapp is ready.\"));\n }\n}\n\nmain().catch((error: unknown) => {\n process.stderr.write(\n `\\n${pc.red(\"Error:\")} ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n process.exit(1);\n});\n"],"mappings":"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","names":["projectName","cancel"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-avalanche-app",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Scaffold a batteries-included Avalanche dapp: social-login onboarding, deploy-ready, AI-native.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -70,6 +70,44 @@ cross-chain transfer to the P-Chain), (2) a **bootstrap validator** — your mac
70
70
  It is a multi-step, multi-minute process, not one command. There is no automatic hosted explorer for
71
71
  a custom Fuji L1 — this app's built-in explorer keeps working by pointing at your Fuji L1's RPC.
72
72
 
73
+ ## AI guide: state-aware Fuji walkthrough
74
+
75
+ When the user asks for help getting their L1 onto Fuji, first figure out WHERE they are, then give
76
+ the ONE next command. Detect state like this:
77
+
78
+ 1. **Do they have a funded key?** Run `avalanche key list --keys <name>` (or create one:
79
+ `avalanche key create <name>`). Check the key's **C-Chain** balance — if it's 0, the next step is
80
+ the faucet: send them to `https://build.avax.network/console/primary-network/faucet` for their key's
81
+ C-Chain address, and wait until the balance is non-zero. Budget ~1–2 test AVAX (validators pay a
82
+ continuous P-Chain fee, ~1 AVAX ≈ 1 month).
83
+ 2. **Is the balance on the P-Chain?** The L1 deploy spends from the **P-Chain**, but the faucet funds
84
+ the **C-Chain**. If P-Chain balance is 0, next command:
85
+ `avalanche key transfer --key <name> --fuji --c-chain-sender --p-chain-receiver --amount <x>`
86
+ (the C/P selectors are the boolean flags `--c-chain-sender` / `--p-chain-receiver`, NOT
87
+ `--sender-blockchain c`).
88
+ 3. **Is the blockchain config created?** If `~/.avalanche-cli/subnets/<name>` doesn't exist, create it:
89
+ `avalanche blockchain create <name> --evm --latest --evm-chain-id <id> --evm-token <TOK>
90
+ --proof-of-authority --validator-manager-owner <yourAddr> --proxy-contract-owner <yourAddr>
91
+ --production-defaults --force`.
92
+ 4. **Deploy to Fuji.** `avalanche blockchain deploy <name> --fuji --key <name> --use-local-machine
93
+ --num-bootstrap-validators 1 --balance 0.1 --vmc-L1`. Notes for driving this non-interactively:
94
+ `--vmc-L1` pre-answers the "deploy Validator Manager into an external blockchain?" prompt; the final
95
+ "fund the relayer?" prompt is optional and can be skipped (the L1 still deploys — the relayer only
96
+ matters for cross-chain messaging). If it complains a **local deploy already exists**, the machine
97
+ has stale state — `avalanche network clean` (or pick a fresh `<name>`) and retry. The node
98
+ bootstraps to Fuji first (downloads a multi-hundred-MB archive, a few minutes) — that wait is
99
+ normal, not a hang.
100
+ 5. **Verify it's live.** The deploy prints an `RPC Endpoint`. Point this app at it (set
101
+ `l1.config.json` → `network: "fuji"`, `rpcUrl`, `blockchainIdHex`). Confirm: `cast chain-id
102
+ --rpc-url <rpc>` returns your chain id, `cast block-number` advances, and the blockchain is listed
103
+ on Fuji's P-Chain via `platform.getBlockchains` on `https://api.avax-test.network/ext/bc/P`.
104
+ 6. **Remind them of the ongoing cost:** the validator node must stay running, and its balance drains —
105
+ top it up (`avalanche blockchain addValidator` / increase-balance) or the L1 goes inactive. For an
106
+ always-on chain, run the node on a server, not a laptop.
107
+
108
+ Also available with the visual version of this flow: **AvaKit Studio** (`npx @avakit/studio`) has a
109
+ "Launch on Fuji" wizard that runs these exact steps with a balance poller and a live progress log.
110
+
73
111
  ## Editing the demo contract
74
112
 
75
113
  After changing `contracts/src/AvaKitToken.sol`: `cd contracts && forge build`, then copy
@@ -8,7 +8,7 @@ import {
8
8
  useAvaAccount,
9
9
  useAvaKit,
10
10
  } from "@avakit/react";
11
- import { Blocks, Check, Copy, Moon, Rocket, Sun } from "lucide-react";
11
+ import { Blocks, Check, Copy, ExternalLink, Moon, Rocket, Sun, Wallet } from "lucide-react";
12
12
  import { useTheme } from "next-themes";
13
13
  import { useCallback, useEffect, useState } from "react";
14
14
  import { type Address, type Hash, formatEther, formatUnits } from "viem";
@@ -274,11 +274,109 @@ function Dashboard() {
274
274
  </div>
275
275
  </section>
276
276
 
277
+ <NextSteps hasToken={Boolean(token)} />
278
+
277
279
  {error ? <p className="text-muted-foreground text-sm break-all">{error}</p> : null}
278
280
  </>
279
281
  );
280
282
  }
281
283
 
284
+ // Guides the user through what to do once their L1 is live: add it to a wallet,
285
+ // get gas, deploy something, and (on Fuji) the realities of keeping it running.
286
+ function NextSteps({ hasToken }: { hasToken: boolean }) {
287
+ const { provider } = useAvaKit();
288
+ const [added, setAdded] = useState(false);
289
+ const isFuji = l1.network === "fuji";
290
+
291
+ const addToWallet = useCallback(async () => {
292
+ if (!provider) return;
293
+ try {
294
+ await provider.request({
295
+ method: "wallet_addEthereumChain",
296
+ params: [
297
+ {
298
+ chainId: `0x${chain.id.toString(16)}`,
299
+ chainName: chain.name,
300
+ rpcUrls: [chain.rpcUrl],
301
+ nativeCurrency: { name: l1.token, symbol: l1.token, decimals: 18 },
302
+ },
303
+ ],
304
+ });
305
+ setAdded(true);
306
+ setTimeout(() => setAdded(false), 2000);
307
+ } catch {
308
+ // user rejected or wallet unavailable
309
+ }
310
+ }, [provider]);
311
+
312
+ return (
313
+ <section className="flex flex-col gap-3 rounded-xl border p-5">
314
+ <p className="text-muted-foreground text-xs uppercase tracking-wide">Next steps</p>
315
+ <div className="flex flex-col gap-2">
316
+ <StepRow n={1} done={added} label="Add this L1 to your wallet">
317
+ <Button size="sm" variant="outline" onClick={addToWallet}>
318
+ <Wallet className="size-4" />
319
+ {added ? "Added" : "Add network"}
320
+ </Button>
321
+ </StepRow>
322
+
323
+ <StepRow n={2} label={isFuji ? "Get gas — fund your wallet with test AVAX" : "Get gas — import the EWOQ dev key"}>
324
+ {isFuji ? (
325
+ <a
326
+ href="https://build.avax.network/console/primary-network/faucet"
327
+ target="_blank"
328
+ rel="noreferrer"
329
+ className="text-muted-foreground inline-flex items-center gap-1 text-xs underline underline-offset-4"
330
+ >
331
+ Fuji faucet <ExternalLink className="size-3" />
332
+ </a>
333
+ ) : (
334
+ <span className="text-muted-foreground text-xs">
335
+ EWOQ key is pre-funded (printed by <span className="font-mono">pnpm l1</span>).
336
+ </span>
337
+ )}
338
+ </StepRow>
339
+
340
+ <StepRow n={3} done={hasToken} label="Deploy your first contract (the demo token above)" />
341
+ </div>
342
+
343
+ {isFuji ? (
344
+ <p className="text-muted-foreground border-t pt-3 text-xs">
345
+ ⚠︎ Your L1 only produces blocks while its validator node stays running, and the
346
+ validator's balance drains over time (~1 AVAX ≈ 1 month) — top it up, or the chain goes
347
+ inactive. For an always-on L1, run the validator on a server rather than your laptop.
348
+ </p>
349
+ ) : null}
350
+ </section>
351
+ );
352
+ }
353
+
354
+ function StepRow({
355
+ n,
356
+ label,
357
+ done,
358
+ children,
359
+ }: {
360
+ n: number;
361
+ label: string;
362
+ done?: boolean;
363
+ children?: React.ReactNode;
364
+ }) {
365
+ return (
366
+ <div className="flex items-center justify-between gap-3">
367
+ <span className="flex items-center gap-2 text-sm">
368
+ <span
369
+ className={`flex size-5 items-center justify-center rounded-full border text-xs ${done ? "bg-foreground text-background" : "text-muted-foreground"}`}
370
+ >
371
+ {done ? <Check className="size-3" /> : n}
372
+ </span>
373
+ {label}
374
+ </span>
375
+ {children}
376
+ </div>
377
+ );
378
+ }
379
+
282
380
  function ago(timestamp: bigint): string {
283
381
  const secs = Math.max(0, Math.floor(Date.now() / 1000) - Number(timestamp));
284
382
  if (secs < 60) return `${secs}s ago`;
@@ -49,9 +49,11 @@ hex — NOT the EVM chainId — via `blockchainIdOf(chain)` in `lib/ictt.ts`.
49
49
 
50
50
  ## Editing / regenerating the contracts
51
51
 
52
- The bundled artifacts are compiled from `ava-labs/icm-contracts` (`contracts/ictt`) with solc + the
53
- optimizer (runs 200) the optimizer keeps ERC20TokenHome/Remote under the 24 KB EVM code-size limit.
54
- To regenerate, compile those contracts with any optimizing toolchain (Hardhat or solc standard-JSON)
52
+ The bundled artifacts are compiled from `ava-labs/icm-contracts` (`contracts/ictt`, non-upgradeable
53
+ variants, tag v1.0.9) with **solc 0.8.25, optimizer runs 200, and `evmVersion: cancun`** the
54
+ optimizer keeps ERC20TokenHome/Remote under the 24 KB EVM code-size limit, and Cancun is required
55
+ because the compiled code uses the `MCOPY` opcode (building for Shanghai changes the bytecode).
56
+ To regenerate, compile those contracts with those exact settings (Hardhat or solc standard-JSON)
55
57
  and replace the `abi`/`bytecode` in `lib/ictt-artifacts.json`. (Note: `avalanche interchain
56
58
  tokenTransferrer deploy` can also deploy an ICTT bridge, but it requires a specific pinned Foundry
57
59
  build to compile under the size limit — this template ships pre-compiled bytecode to avoid that.)
@@ -1 +0,0 @@
1
- {"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"src","tests":"test","scripts":"script","libraries":["lib"]},"files":{"src/AvaKitMessenger.sol":{"lastModificationDate":1782927411629,"contentHash":"f62fa8345d09a4e8","interfaceReprHash":null,"sourceName":"src/AvaKitMessenger.sol","imports":[],"versionRequirement":"^0.8.25","artifacts":{"AvaKitMessenger":{"0.8.28":{"default":{"path":"AvaKitMessenger.sol/AvaKitMessenger.json","build_id":"790b55b96be74f23"}}},"ITeleporterMessenger":{"0.8.28":{"default":{"path":"AvaKitMessenger.sol/ITeleporterMessenger.json","build_id":"790b55b96be74f23"}}},"ITeleporterReceiver":{"0.8.28":{"default":{"path":"AvaKitMessenger.sol/ITeleporterReceiver.json","build_id":"790b55b96be74f23"}}}},"seenByCompiler":true}},"builds":["790b55b96be74f23"],"profiles":{"default":{"solc":{"optimizer":{"enabled":true,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode.object","evm.bytecode.sourceMap","evm.bytecode.linkReferences","evm.deployedBytecode.object","evm.deployedBytecode.sourceMap","evm.deployedBytecode.linkReferences","evm.deployedBytecode.immutableReferences","evm.methodIdentifiers","metadata"]}},"evmVersion":"osaka","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"osaka","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}}},"preprocessed":false,"mocks":[]}
@@ -1 +0,0 @@
1
- {"abi":[{"type":"function","name":"TELEPORTER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITeleporterMessenger"}],"stateMutability":"view"},{"type":"function","name":"lastMessage","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"lastOriginSender","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"lastSourceBlockchainID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"messagesReceived","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"receiveTeleporterMessage","inputs":[{"name":"sourceBlockchainID","type":"bytes32","internalType":"bytes32"},{"name":"originSenderAddress","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sendMessage","inputs":[{"name":"destinationBlockchainID","type":"bytes32","internalType":"bytes32"},{"name":"destinationAddress","type":"address","internalType":"address"},{"name":"message","type":"string","internalType":"string"}],"outputs":[{"name":"messageID","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"event","name":"MessageReceived","inputs":[{"name":"sourceBlockchainID","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"message","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"MessageSent","inputs":[{"name":"messageID","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"destinationBlockchainID","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"destinationAddress","type":"address","indexed":false,"internalType":"address"},{"name":"message","type":"string","indexed":false,"internalType":"string"}],"anonymous":false}],"bytecode":{"object":"0x6080604052348015600e575f5ffd5b506108f08061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061007a575f3560e01c80635be63c71116100585780635be63c71146100e4578063813275bc146100ed578063c0207bb814610108578063c868efaa14610111575f5ffd5b8063103070051461007e5780632ed2e8e0146100ae57806332970710146100cf575b5f5ffd5b600254610091906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c16100bc3660046104aa565b610126565b6040519081526020016100a5565b6100d76102a6565b6040516100a5919061052e565b6100c160035481565b61009173253b2784c75e510dd0ff1da844684a1ac0aa5fcf81565b6100c160015481565b61012461011f3660046104aa565b610331565b005b5f73253b2784c75e510dd0ff1da844684a1ac0aa5fcf6001600160a01b031663624488506040518060c00160405280888152602001876001600160a01b0316815260200160405180604001604052805f6001600160a01b031681526020015f81525081526020016203d09081526020015f67ffffffffffffffff8111156101af576101af610547565b6040519080825280602002602001820160405280156101d8578160200160208202803683370190505b50815260200186866040516020016101f1929190610583565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161021f91906105e1565b6020604051808303815f875af115801561023b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025f9190610668565b905084817f4c6ebdf8689746d81e856c78d4049f7c9ae732786dd632398e24775ade8f62748686866040516102969392919061067f565b60405180910390a3949350505050565b5f80546102b2906106a3565b80601f01602080910402602001604051908101604052809291908181526020018280546102de906106a3565b80156103295780601f1061030057610100808354040283529160200191610329565b820191905f5260205f20905b81548152906001019060200180831161030c57829003601f168201915b505050505081565b3373253b2784c75e510dd0ff1da844684a1ac0aa5fcf146103ae5760405162461bcd60e51b815260206004820152602d60248201527f4176614b69744d657373656e6765723a2063616c6c6572206973206e6f74207460448201526c3432902a32b632b837b93a32b960991b606482015260840160405180910390fd5b5f6103bb828401846106db565b90505f6103c882826107da565b506001858155600280546001600160a01b0319166001600160a01b038716179055600380545f906103fa908490610895565b92505081905550836001600160a01b0316857fb668d57046ecd82ea44ba2a8fbfe10de34bec187561b8386394fed442e0de5468360405161043b919061052e565b60405180910390a35050505050565b80356001600160a01b0381168114610460575f5ffd5b919050565b5f5f83601f840112610475575f5ffd5b50813567ffffffffffffffff81111561048c575f5ffd5b6020830191508360208285010111156104a3575f5ffd5b9250929050565b5f5f5f5f606085870312156104bd575f5ffd5b843593506104cd6020860161044a565b9250604085013567ffffffffffffffff8111156104e8575f5ffd5b6104f487828801610465565b95989497509550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6105406020830184610500565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f61059660208301848661055b565b949350505050565b5f8151808452602084019350602083015f5b828110156105d75781516001600160a01b03168652602095860195909101906001016105b0565b5093949350505050565b602081528151602082015260018060a01b0360208301511660408201525f604083015160018060a01b0381511660608401526020810151608084015250606083015160a0830152608083015160e060c084015261064261010084018261059e565b905060a0840151601f198483030160e085015261065f8282610500565b95945050505050565b5f60208284031215610678575f5ffd5b5051919050565b6001600160a01b03841681526040602082018190525f9061065f908301848661055b565b600181811c908216806106b757607f821691505b6020821081036106d557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156106eb575f5ffd5b813567ffffffffffffffff811115610701575f5ffd5b8201601f81018413610711575f5ffd5b803567ffffffffffffffff81111561072b5761072b610547565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561075a5761075a610547565b604052818152828201602001861015610771575f5ffd5b816020840160208301375f91810160200191909152949350505050565b601f8211156107d557805f5260205f20601f840160051c810160208510156107b35750805b601f840160051c820191505b818110156107d2575f81556001016107bf565b50505b505050565b815167ffffffffffffffff8111156107f4576107f4610547565b6108088161080284546106a3565b8461078e565b6020601f82116001811461083a575f83156108235750848201515b5f19600385901b1c1916600184901b1784556107d2565b5f84815260208120601f198516915b828110156108695787850151825560209485019460019092019101610849565b508482101561088657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156108b457634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220edd28d4270dcbf530c3f8f54e0b5659e1f054d971e767fac9a41dbc42de8ada264736f6c634300081c0033","sourceMap":"1255:2468:0:-:0;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f5ffd5b506004361061007a575f3560e01c80635be63c71116100585780635be63c71146100e4578063813275bc146100ed578063c0207bb814610108578063c868efaa14610111575f5ffd5b8063103070051461007e5780632ed2e8e0146100ae57806332970710146100cf575b5f5ffd5b600254610091906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100c16100bc3660046104aa565b610126565b6040519081526020016100a5565b6100d76102a6565b6040516100a5919061052e565b6100c160035481565b61009173253b2784c75e510dd0ff1da844684a1ac0aa5fcf81565b6100c160015481565b61012461011f3660046104aa565b610331565b005b5f73253b2784c75e510dd0ff1da844684a1ac0aa5fcf6001600160a01b031663624488506040518060c00160405280888152602001876001600160a01b0316815260200160405180604001604052805f6001600160a01b031681526020015f81525081526020016203d09081526020015f67ffffffffffffffff8111156101af576101af610547565b6040519080825280602002602001820160405280156101d8578160200160208202803683370190505b50815260200186866040516020016101f1929190610583565b6040516020818303038152906040528152506040518263ffffffff1660e01b815260040161021f91906105e1565b6020604051808303815f875af115801561023b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025f9190610668565b905084817f4c6ebdf8689746d81e856c78d4049f7c9ae732786dd632398e24775ade8f62748686866040516102969392919061067f565b60405180910390a3949350505050565b5f80546102b2906106a3565b80601f01602080910402602001604051908101604052809291908181526020018280546102de906106a3565b80156103295780601f1061030057610100808354040283529160200191610329565b820191905f5260205f20905b81548152906001019060200180831161030c57829003601f168201915b505050505081565b3373253b2784c75e510dd0ff1da844684a1ac0aa5fcf146103ae5760405162461bcd60e51b815260206004820152602d60248201527f4176614b69744d657373656e6765723a2063616c6c6572206973206e6f74207460448201526c3432902a32b632b837b93a32b960991b606482015260840160405180910390fd5b5f6103bb828401846106db565b90505f6103c882826107da565b506001858155600280546001600160a01b0319166001600160a01b038716179055600380545f906103fa908490610895565b92505081905550836001600160a01b0316857fb668d57046ecd82ea44ba2a8fbfe10de34bec187561b8386394fed442e0de5468360405161043b919061052e565b60405180910390a35050505050565b80356001600160a01b0381168114610460575f5ffd5b919050565b5f5f83601f840112610475575f5ffd5b50813567ffffffffffffffff81111561048c575f5ffd5b6020830191508360208285010111156104a3575f5ffd5b9250929050565b5f5f5f5f606085870312156104bd575f5ffd5b843593506104cd6020860161044a565b9250604085013567ffffffffffffffff8111156104e8575f5ffd5b6104f487828801610465565b95989497509550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6105406020830184610500565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f61059660208301848661055b565b949350505050565b5f8151808452602084019350602083015f5b828110156105d75781516001600160a01b03168652602095860195909101906001016105b0565b5093949350505050565b602081528151602082015260018060a01b0360208301511660408201525f604083015160018060a01b0381511660608401526020810151608084015250606083015160a0830152608083015160e060c084015261064261010084018261059e565b905060a0840151601f198483030160e085015261065f8282610500565b95945050505050565b5f60208284031215610678575f5ffd5b5051919050565b6001600160a01b03841681526040602082018190525f9061065f908301848661055b565b600181811c908216806106b757607f821691505b6020821081036106d557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156106eb575f5ffd5b813567ffffffffffffffff811115610701575f5ffd5b8201601f81018413610711575f5ffd5b803567ffffffffffffffff81111561072b5761072b610547565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561075a5761075a610547565b604052818152828201602001861015610771575f5ffd5b816020840160208301375f91810160200191909152949350505050565b601f8211156107d557805f5260205f20601f840160051c810160208510156107b35750805b601f840160051c820191505b818110156107d2575f81556001016107bf565b50505b505050565b815167ffffffffffffffff8111156107f4576107f4610547565b6108088161080284546106a3565b8461078e565b6020601f82116001811461083a575f83156108235750848201515b5f19600385901b1c1916600184901b1784556107d2565b5f84815260208120601f198516915b828110156108695787850151825560209485019460019092019101610849565b508482101561088657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156108b457634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220edd28d4270dcbf530c3f8f54e0b5659e1f054d971e767fac9a41dbc42de8ada264736f6c634300081c0033","sourceMap":"1255:2468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1627:31;;;;;-1:-1:-1;;;;;1627:31:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;1627:31:0;;;;;;;;2324:743;;;;;;:::i;:::-;;:::i;:::-;;;1503:25:1;;;1491:2;1476:18;2324:743:0;1357:177:1;1553:25:0;;;:::i;:::-;;;;;;;:::i;1664:31::-;;;;;;1424:122;;1503:42;1424:122;;1584:37;;;;;;3153:568;;;;;;:::i;:::-;;:::i;:::-;;2324:743;2479:17;1503:42;-1:-1:-1;;;;;2520:32:0;;2566:393;;;;;;;;2632:23;2566:393;;;;2693:18;-1:-1:-1;;;;;2566:393:0;;;;;2738:59;;;;;;;;2782:1;-1:-1:-1;;;;;2738:59:0;;;;;2794:1;2738:59;;;2566:393;;;;2833:6;2566:393;;;;2896:1;2882:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2882:16:0;;2566:393;;;;2936:7;;2925:19;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2566:393;;;2520:449;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2508:461;;3007:23;2996:9;2984:76;3032:18;3052:7;;2984:76;;;;;;;;:::i;:::-;;;;;;;;2324:743;;;;;;:::o;1553:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3153:568::-;3325:10;1503:42;3325:33;3317:91;;;;-1:-1:-1;;;3317:91:0;;6294:2:1;3317:91:0;;;6276:21:1;6333:2;6313:18;;;6306:30;6372:34;6352:18;;;6345:62;-1:-1:-1;;;6423:18:1;;;6416:43;6476:19;;3317:91:0;;;;;;;;3418:21;3442:29;;;;3453:7;3442:29;:::i;:::-;3418:53;-1:-1:-1;3481:11:0;:21;3418:53;3481:11;:21;:::i;:::-;-1:-1:-1;3512:22:0;:43;;;3565:16;:38;;-1:-1:-1;;;;;;3565:38:0;-1:-1:-1;;;;;3565:38:0;;;;;3613:16;:21;;-1:-1:-1;;3613:21:0;;3512:22;;3613:21;:::i;:::-;;;;;;;;3685:19;-1:-1:-1;;;;;3649:65:0;3665:18;3649:65;3706:7;3649:65;;;;;;:::i;:::-;;;;;;;;3307:414;3153:568;;;;:::o;222:173:1:-;290:20;;-1:-1:-1;;;;;339:31:1;;329:42;;319:70;;385:1;382;375:12;319:70;222:173;;;:::o;400:348::-;452:8;462:6;516:3;509:4;501:6;497:17;493:27;483:55;;534:1;531;524:12;483:55;-1:-1:-1;557:20:1;;600:18;589:30;;586:50;;;632:1;629;622:12;586:50;669:4;661:6;657:17;645:29;;721:3;714:4;705:6;697;693:19;689:30;686:39;683:59;;;738:1;735;728:12;683:59;400:348;;;;;:::o;753:599::-;842:6;850;858;866;919:2;907:9;898:7;894:23;890:32;887:52;;;935:1;932;925:12;887:52;980:23;;;-1:-1:-1;1046:38:1;1080:2;1065:18;;1046:38;:::i;:::-;1036:48;;1135:2;1124:9;1120:18;1107:32;1162:18;1154:6;1151:30;1148:50;;;1194:1;1191;1184:12;1148:50;1233:59;1284:7;1275:6;1264:9;1260:22;1233:59;:::i;:::-;753:599;;;;-1:-1:-1;1311:8:1;-1:-1:-1;;;;753:599:1:o;1539:289::-;1581:3;1619:5;1613:12;1646:6;1641:3;1634:19;1702:6;1695:4;1688:5;1684:16;1677:4;1672:3;1668:14;1662:47;1754:1;1747:4;1738:6;1733:3;1729:16;1725:27;1718:38;1817:4;1810:2;1806:7;1801:2;1793:6;1789:15;1785:29;1780:3;1776:39;1772:50;1765:57;;;1539:289;;;;:::o;1833:220::-;1982:2;1971:9;1964:21;1945:4;2002:45;2043:2;2032:9;2028:18;2020:6;2002:45;:::i;:::-;1994:53;1833:220;-1:-1:-1;;;1833:220:1:o;3078:127::-;3139:10;3134:3;3130:20;3127:1;3120:31;3170:4;3167:1;3160:15;3194:4;3191:1;3184:15;3210:267;3299:6;3294:3;3287:19;3351:6;3344:5;3337:4;3332:3;3328:14;3315:43;-1:-1:-1;3403:1:1;3378:16;;;3396:4;3374:27;;;3367:38;;;;3459:2;3438:15;;;-1:-1:-1;;3434:29:1;3425:39;;;3421:50;;3210:267::o;3482:247::-;3641:2;3630:9;3623:21;3604:4;3661:62;3719:2;3708:9;3704:18;3696:6;3688;3661:62;:::i;:::-;3653:70;3482:247;-1:-1:-1;;;;3482:247:1:o;3734:446::-;3787:3;3825:5;3819:12;3852:6;3847:3;3840:19;3884:4;3879:3;3875:14;3868:21;;3923:4;3916:5;3912:16;3946:1;3956:199;3970:6;3967:1;3964:13;3956:199;;;4035:13;;-1:-1:-1;;;;;4031:39:1;4019:52;;4100:4;4091:14;;;;4128:17;;;;4067:1;3985:9;3956:199;;;-1:-1:-1;4171:3:1;;3734:446;-1:-1:-1;;;;3734:446:1:o;4185:979::-;4390:2;4379:9;4372:21;4435:6;4429:13;4424:2;4413:9;4409:18;4402:41;4524:1;4520;4515:3;4511:11;4507:19;4501:2;4493:6;4489:15;4483:22;4479:48;4474:2;4463:9;4459:18;4452:76;4353:4;4575:2;4567:6;4563:15;4557:22;4657:1;4653;4648:3;4644:11;4640:19;4625:12;4619:19;4615:45;4610:2;4599:9;4595:18;4588:73;4722:2;4708:12;4704:21;4698:28;4692:3;4681:9;4677:19;4670:57;;4782:2;4774:6;4770:15;4764:22;4758:3;4747:9;4743:19;4736:51;4836:3;4828:6;4824:16;4818:23;4878:4;4872:3;4861:9;4857:19;4850:33;4906:65;4966:3;4955:9;4951:19;4935:14;4906:65;:::i;:::-;4892:79;;5020:3;5012:6;5008:16;5002:23;5095:2;5091:7;5079:9;5071:6;5067:22;5063:36;5056:4;5045:9;5041:20;5034:66;5117:41;5151:6;5135:14;5117:41;:::i;:::-;5109:49;4185:979;-1:-1:-1;;;;;4185:979:1:o;5169:184::-;5239:6;5292:2;5280:9;5271:7;5267:23;5263:32;5260:52;;;5308:1;5305;5298:12;5260:52;-1:-1:-1;5331:16:1;;5169:184;-1:-1:-1;5169:184:1:o;5358:344::-;-1:-1:-1;;;;;5545:32:1;;5527:51;;5614:2;5609;5594:18;;5587:30;;;-1:-1:-1;;5634:62:1;;5677:18;;5669:6;5661;5634:62;:::i;5707:380::-;5786:1;5782:12;;;;5829;;;5850:61;;5904:4;5896:6;5892:17;5882:27;;5850:61;5957:2;5949:6;5946:14;5926:18;5923:38;5920:161;;6003:10;5998:3;5994:20;5991:1;5984:31;6038:4;6035:1;6028:15;6066:4;6063:1;6056:15;5920:161;;5707:380;;;:::o;6506:945::-;6575:6;6628:2;6616:9;6607:7;6603:23;6599:32;6596:52;;;6644:1;6641;6634:12;6596:52;6684:9;6671:23;6717:18;6709:6;6706:30;6703:50;;;6749:1;6746;6739:12;6703:50;6772:22;;6825:4;6817:13;;6813:27;-1:-1:-1;6803:55:1;;6854:1;6851;6844:12;6803:55;6894:2;6881:16;6920:18;6912:6;6909:30;6906:56;;;6942:18;;:::i;:::-;6991:2;6985:9;7083:2;7045:17;;-1:-1:-1;;7041:31:1;;;7074:2;7037:40;7033:54;7021:67;;7118:18;7103:34;;7139:22;;;7100:62;7097:88;;;7165:18;;:::i;:::-;7201:2;7194:22;7225;;;7266:15;;;7283:2;7262:24;7259:37;-1:-1:-1;7256:57:1;;;7309:1;7306;7299:12;7256:57;7365:6;7360:2;7356;7352:11;7347:2;7339:6;7335:15;7322:50;7418:1;7392:19;;;7413:2;7388:28;7381:39;;;;7396:6;6506:945;-1:-1:-1;;;;6506:945:1:o;7582:518::-;7684:2;7679:3;7676:11;7673:421;;;7720:5;7717:1;7710:16;7764:4;7761:1;7751:18;7834:2;7822:10;7818:19;7815:1;7811:27;7805:4;7801:38;7870:4;7858:10;7855:20;7852:47;;;-1:-1:-1;7893:4:1;7852:47;7948:2;7943:3;7939:12;7936:1;7932:20;7926:4;7922:31;7912:41;;8003:81;8021:2;8014:5;8011:13;8003:81;;;8080:1;8066:16;;8047:1;8036:13;8003:81;;;8007:3;;7673:421;7582:518;;;:::o;8276:1299::-;8402:3;8396:10;8429:18;8421:6;8418:30;8415:56;;;8451:18;;:::i;:::-;8480:97;8570:6;8530:38;8562:4;8556:11;8530:38;:::i;:::-;8524:4;8480:97;:::i;:::-;8626:4;8657:2;8646:14;;8674:1;8669:649;;;;9362:1;9379:6;9376:89;;;-1:-1:-1;9431:19:1;;;9425:26;9376:89;-1:-1:-1;;8233:1:1;8229:11;;;8225:24;8221:29;8211:40;8257:1;8253:11;;;8208:57;9478:81;;8639:930;;8669:649;7529:1;7522:14;;;7566:4;7553:18;;-1:-1:-1;;8705:20:1;;;8823:222;8837:7;8834:1;8831:14;8823:222;;;8919:19;;;8913:26;8898:42;;9026:4;9011:20;;;;8979:1;8967:14;;;;8853:12;8823:222;;;8827:3;9073:6;9064:7;9061:19;9058:201;;;9134:19;;;9128:26;-1:-1:-1;;9217:1:1;9213:14;;;9229:3;9209:24;9205:37;9201:42;9186:58;9171:74;;9058:201;-1:-1:-1;;;;9305:1:1;9289:14;;;9285:22;9272:36;;-1:-1:-1;8276:1299:1:o;9580:222::-;9645:9;;;9666:10;;;9663:133;;;9718:10;9713:3;9709:20;9706:1;9699:31;9753:4;9750:1;9743:15;9781:4;9778:1;9771:15;9663:133;9580:222;;;;:::o","linkReferences":{}},"methodIdentifiers":{"TELEPORTER()":"813275bc","lastMessage()":"32970710","lastOriginSender()":"10307005","lastSourceBlockchainID()":"c0207bb8","messagesReceived()":"5be63c71","receiveTeleporterMessage(bytes32,address,bytes)":"c868efaa","sendMessage(bytes32,address,string)":"2ed2e8e0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"TELEPORTER\",\"outputs\":[{\"internalType\":\"contract ITeleporterMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastMessage\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastOriginSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSourceBlockchainID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messagesReceived\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"sendMessage(bytes32,address,string)\":{\"params\":{\"destinationAddress\":\"The AvaKitMessenger address on the destination L1.\",\"destinationBlockchainID\":\"The destination L1's blockchain ID \\u2014 a bytes32, NOT an EVM chainId. Get it from `avalanche blockchain describe`.\"}}},\"title\":\"AvaKitMessenger \\u2014 a cross-chain message board over Avalanche ICM.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"TELEPORTER()\":{\"notice\":\"The TeleporterMessenger predeploy, at the same fixed address on every ICM-enabled Avalanche chain.\"},\"receiveTeleporterMessage(bytes32,address,bytes)\":{\"notice\":\"Called by the local TeleporterMessenger when a message arrives.\"},\"sendMessage(bytes32,address,string)\":{\"notice\":\"Send `message` to an AvaKitMessenger on another Avalanche L1.\"}},\"notice\":\"Deploy the same contract on two Avalanche L1s. Sending a string from one L1 delivers it to the contract on the other L1 via Interchain Messaging; the relayer carries the message and calls `receiveTeleporterMessage`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AvaKitMessenger.sol\":\"AvaKitMessenger\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/AvaKitMessenger.sol\":{\"keccak256\":\"0x2b5bbe26f504a40e93e62e676fb993e4c58a1ddf541e7f26b3987d8e6237fbce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33fb058ae81fea833bdfb158ebba6454b99fabd9b9259a125f70b7535f1df981\",\"dweb:/ipfs/QmWcawkhzMgmuduVyRrYbwruXDeRsQf6pLHdqjxC5LMZSy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"sourceBlockchainID","type":"bytes32","indexed":true},{"internalType":"address","name":"originSender","type":"address","indexed":true},{"internalType":"string","name":"message","type":"string","indexed":false}],"type":"event","name":"MessageReceived","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"messageID","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"destinationBlockchainID","type":"bytes32","indexed":true},{"internalType":"address","name":"destinationAddress","type":"address","indexed":false},{"internalType":"string","name":"message","type":"string","indexed":false}],"type":"event","name":"MessageSent","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"TELEPORTER","outputs":[{"internalType":"contract ITeleporterMessenger","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastMessage","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastOriginSender","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastSourceBlockchainID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"messagesReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"sourceBlockchainID","type":"bytes32"},{"internalType":"address","name":"originSenderAddress","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"receiveTeleporterMessage"},{"inputs":[{"internalType":"bytes32","name":"destinationBlockchainID","type":"bytes32"},{"internalType":"address","name":"destinationAddress","type":"address"},{"internalType":"string","name":"message","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"messageID","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"sendMessage(bytes32,address,string)":{"params":{"destinationAddress":"The AvaKitMessenger address on the destination L1.","destinationBlockchainID":"The destination L1's blockchain ID — a bytes32, NOT an EVM chainId. Get it from `avalanche blockchain describe`."}}},"version":1},"userdoc":{"kind":"user","methods":{"TELEPORTER()":{"notice":"The TeleporterMessenger predeploy, at the same fixed address on every ICM-enabled Avalanche chain."},"receiveTeleporterMessage(bytes32,address,bytes)":{"notice":"Called by the local TeleporterMessenger when a message arrives."},"sendMessage(bytes32,address,string)":{"notice":"Send `message` to an AvaKitMessenger on another Avalanche L1."}},"version":1}},"settings":{"remappings":[],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AvaKitMessenger.sol":"AvaKitMessenger"},"evmVersion":"prague","libraries":{}},"sources":{"src/AvaKitMessenger.sol":{"keccak256":"0x2b5bbe26f504a40e93e62e676fb993e4c58a1ddf541e7f26b3987d8e6237fbce","urls":["bzz-raw://33fb058ae81fea833bdfb158ebba6454b99fabd9b9259a125f70b7535f1df981","dweb:/ipfs/QmWcawkhzMgmuduVyRrYbwruXDeRsQf6pLHdqjxC5LMZSy"],"license":"MIT"}},"version":1},"id":0}
@@ -1 +0,0 @@
1
- {"abi":[{"type":"function","name":"sendCrossChainMessage","inputs":[{"name":"messageInput","type":"tuple","internalType":"struct TeleporterMessageInput","components":[{"name":"destinationBlockchainID","type":"bytes32","internalType":"bytes32"},{"name":"destinationAddress","type":"address","internalType":"address"},{"name":"feeInfo","type":"tuple","internalType":"struct TeleporterFeeInfo","components":[{"name":"feeTokenAddress","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"requiredGasLimit","type":"uint256","internalType":"uint256"},{"name":"allowedRelayerAddresses","type":"address[]","internalType":"address[]"},{"name":"message","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"messageID","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"sendCrossChainMessage((bytes32,address,(address,uint256),uint256,address[],bytes))":"62448850"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"destinationBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destinationAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct TeleporterFeeInfo\",\"name\":\"feeInfo\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"requiredGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"allowedRelayerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct TeleporterMessageInput\",\"name\":\"messageInput\",\"type\":\"tuple\"}],\"name\":\"sendCrossChainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AvaKitMessenger.sol\":\"ITeleporterMessenger\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/AvaKitMessenger.sol\":{\"keccak256\":\"0x2b5bbe26f504a40e93e62e676fb993e4c58a1ddf541e7f26b3987d8e6237fbce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33fb058ae81fea833bdfb158ebba6454b99fabd9b9259a125f70b7535f1df981\",\"dweb:/ipfs/QmWcawkhzMgmuduVyRrYbwruXDeRsQf6pLHdqjxC5LMZSy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct TeleporterMessageInput","name":"messageInput","type":"tuple","components":[{"internalType":"bytes32","name":"destinationBlockchainID","type":"bytes32"},{"internalType":"address","name":"destinationAddress","type":"address"},{"internalType":"struct TeleporterFeeInfo","name":"feeInfo","type":"tuple","components":[{"internalType":"address","name":"feeTokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}]},{"internalType":"uint256","name":"requiredGasLimit","type":"uint256"},{"internalType":"address[]","name":"allowedRelayerAddresses","type":"address[]"},{"internalType":"bytes","name":"message","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"sendCrossChainMessage","outputs":[{"internalType":"bytes32","name":"messageID","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":[],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AvaKitMessenger.sol":"ITeleporterMessenger"},"evmVersion":"prague","libraries":{}},"sources":{"src/AvaKitMessenger.sol":{"keccak256":"0x2b5bbe26f504a40e93e62e676fb993e4c58a1ddf541e7f26b3987d8e6237fbce","urls":["bzz-raw://33fb058ae81fea833bdfb158ebba6454b99fabd9b9259a125f70b7535f1df981","dweb:/ipfs/QmWcawkhzMgmuduVyRrYbwruXDeRsQf6pLHdqjxC5LMZSy"],"license":"MIT"}},"version":1},"id":0}
@@ -1 +0,0 @@
1
- {"abi":[{"type":"function","name":"receiveTeleporterMessage","inputs":[{"name":"sourceBlockchainID","type":"bytes32","internalType":"bytes32"},{"name":"originSenderAddress","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"receiveTeleporterMessage(bytes32,address,bytes)":"c868efaa"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"originSenderAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"receiveTeleporterMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AvaKitMessenger.sol\":\"ITeleporterReceiver\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/AvaKitMessenger.sol\":{\"keccak256\":\"0x2b5bbe26f504a40e93e62e676fb993e4c58a1ddf541e7f26b3987d8e6237fbce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33fb058ae81fea833bdfb158ebba6454b99fabd9b9259a125f70b7535f1df981\",\"dweb:/ipfs/QmWcawkhzMgmuduVyRrYbwruXDeRsQf6pLHdqjxC5LMZSy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"sourceBlockchainID","type":"bytes32"},{"internalType":"address","name":"originSenderAddress","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"receiveTeleporterMessage"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":[],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AvaKitMessenger.sol":"ITeleporterReceiver"},"evmVersion":"prague","libraries":{}},"sources":{"src/AvaKitMessenger.sol":{"keccak256":"0x2b5bbe26f504a40e93e62e676fb993e4c58a1ddf541e7f26b3987d8e6237fbce","urls":["bzz-raw://33fb058ae81fea833bdfb158ebba6454b99fabd9b9259a125f70b7535f1df981","dweb:/ipfs/QmWcawkhzMgmuduVyRrYbwruXDeRsQf6pLHdqjxC5LMZSy"],"license":"MIT"}},"version":1},"id":0}
@@ -1 +0,0 @@
1
- {"id":"790b55b96be74f23","source_id_to_path":{"0":"src/AvaKitMessenger.sol"},"language":"Solidity"}