[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GPKMFEXFQJQA3YJRQND06F":3,"skill-same:01M6GPKMFEXFQJQA3YJRQND06F":111},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":24,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":58,"ownerDescription":59,"updatedAt":60,"install":61,"resources":74},"01M6GPKMFEXFQJQA3YJRQND06F","vibenet",null,"Build on vibenet — Base's devnet for native account abstraction (EIP-8130), payer gas sponsorship (ERC-8168), and Cobalt 200ms native blocks. Use whenever the user mentions vibenet, EIP-8130, ERC-8168, 8130 accounts, native account abstraction, session keys, actors, policies, payers, gas sponsorship on Base, 200ms blocks, Cobalt, BaseTime, timestampMs \u002F blockTimestampMs, sub-second or millisecond block timestamps, migrating from Flashblocks, or newHeads \u002F WebSocket streaming on vibenet — or is writing code that creates or operates 8130 smart accounts, authorizes session-key actors, sends batched calls, sponsors gas with a payer, queries or streams vibenet blocks, times a transaction's inclusion, or wires a frontend\u002Fscript against the vibenet devnet or Base Sepolia.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002FSKILL.md",[19],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[5,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"inclusion","sponsorship","second","for","keys","calls","timestamps","streams","script","with","native","frontend","transaction","build","queries","use","session","gas","websocket","streaming","code","writing","2026-11-10 10:12:30",false,"---\nname: vibenet\ndescription: >-\n  Build on vibenet — Base's devnet for native account abstraction (EIP-8130),\n  payer gas sponsorship (ERC-8168), and Cobalt 200ms native blocks. Use\n  whenever the user mentions vibenet, EIP-8130, ERC-8168, 8130 accounts, native\n  account abstraction, session keys, actors, policies, payers, gas sponsorship\n  on Base, 200ms blocks, Cobalt, BaseTime, timestampMs \u002F blockTimestampMs,\n  sub-second or millisecond block timestamps, migrating from Flashblocks, or\n  newHeads \u002F WebSocket streaming on vibenet — or is writing code that creates\n  or operates 8130 smart accounts, authorizes session-key actors, sends batched\n  calls, sponsors gas with a payer, queries or streams vibenet blocks, times a\n  transaction's inclusion, or wires a frontend\u002Fscript against the vibenet\n  devnet or Base Sepolia.\n---\n\n# Vibenet\n\nVibenet is Base's devnet for **EIP-8130 native account abstraction**: account\nabstraction in the protocol itself. Accounts are portable across EVM chains,\nsupport multiple signer types (secp256k1, P-256, WebAuthn), key rotation\nwithout changing address, scoped session-key actors, on-chain policies, and\nnative **ERC-8168** gas sponsorship. The tooling lives in viem's `eip8130`\nmodule (fork branch — not yet in npm `viem`). Vibenet is also the first Base\nnetwork running **Cobalt 200ms native blocks** (five canonical blocks per\nsecond, with a millisecond `timestampMs` on every block) — that part needs no\nfork, stock `viem` works. See\n[references\u002F200ms-blocks.md](references\u002F200ms-blocks.md).\n\n## Network\n\n| Endpoint | Value |\n|----------|-------|\n| Chain ID | `84538453` |\n| Public execution RPC | `https:\u002F\u002Frpc.vibes.base.org` — 8130-capable (`AA_TX_TYPE` \u002F `0x79`), serves `access-control-allow-origin: *` |\n| WebSocket RPC | `wss:\u002F\u002Frpc.vibes.base.org\u002Fws` — `newHeads`, `logs`, `transactionReceipts` subscriptions (the `\u002Fws` path is required) |\n| Block time | **200ms** (Cobalt); blocks carry `timestampMs`, BaseTime predeploy at `0x4200000000000000000000000000000000000030` |\n| Browser RPC proxy | `https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Faccount\u002Frpc` — passes through all `eth_*`, including `0x79` broadcasts and receipt polling |\n| Hosted payer (ERC-8168) | `https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Faccount\u002Fpayer` |\n| Faucet | `POST https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Ffaucet\u002Fdrip` with `{ \"address\": \"0x…\" }` |\n| Faucet status | `GET https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Ffaucet\u002Fstatus` — drip size, cooldowns, USDV\u002FNFV token addresses |\n| Chain health | `GET https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Fchain-health` — key off `healthy` + `headAgeSecs`; `stuckSecs` is not actionable on its own (seen at 19000 on a healthy chain) |\n| Landing page \u002F explorer | `https:\u002F\u002Fchain.base.org\u002Fvibenet`, `https:\u002F\u002Fchain.base.org\u002Fvibenet\u002Fexplorer` |\n| Base Sepolia (also 8130-enabled) | `https:\u002F\u002Fsepolia.base.org`, chain id `84532` |\n\n**The API host is `api.vibes.base.org`, not `vibes.base.org`.** The bare host\n302-redirects to the `chain.base.org\u002Fvibenet` HTML page; viem's HTTP transport\nthen tries to parse that as JSON and throws `Unrecognized token '\u003C'`, which\nreads like a code bug rather than a wrong URL.\n\nAll `api.vibes.base.org` endpoints (RPC proxy, payer, faucet) send permissive\nCORS headers, and so does `rpc.vibes.base.org` — so browser apps can talk to\neither. Prefer `rpc.vibes.base.org` for execution and reserve the `account\u002Frpc`\nproxy for when you specifically want the hosted path. The public RPC is\nmethod-allowlisted: `eth_getHeaderBy*`, `eth_getBlockReceipts`,\n`eth_sendRawTransactionSync`, `eth_simulateV1` and `txpool_*` answer\n`rpc method is not whitelisted`.\n\n**Only 8130 \u002F 8168 code needs the fork below.** Querying blocks, streaming\n`newHeads`, and sending plain EOA transactions on vibenet work with stock\n`npm install viem`.\n\nThe 8130 modules are additive to viem itself, proposed upstream in\n[wevm\u002Fviem#5004](https:\u002F\u002Fgithub.com\u002Fwevm\u002Fviem\u002Fpull\u002F5004) (open, out of draft —\nnot yet merged or released to npm). Until it ships, they have to be built from the fork\nbranch the PR is opened from: `chunter-cb\u002Fviem` `feat\u002Feip-8130-production`.\n\n**Use the bundled installer** — it does the whole clone→build→link dance, which\nis error-prone by hand:\n\n```bash\nscripts\u002Fsetup-viem-8130.sh [APP_DIR] [BUILD_DIR]   # APP_DIR defaults to the current directory\n```\n\n`BUILD_DIR` defaults to `\u003CAPP_DIR>\u002F.viem-8130-src` — a full viem monorepo\ncheckout with its own `node_modules` (~500 MB). The script appends\n`.viem-8130-src\u002F` to the app's `.gitignore` so a `git add .` can't commit it;\nfor several apps, pass one shared `BUILD_DIR` outside them (npm records the\n`file:` path in `package.json`). Node 22 works despite the fork's\n`node >=24.5` engine warning.\n\nWhen PR #5004 merges and a viem release ships the modules, this collapses to\n`npm install viem@latest` — the imports (`viem\u002Feip8130`, `viem\u002Feip8168`) and\nAPIs are unchanged, so no code moves.\n\n\u003Cdetails>\u003Csummary>What the script does, and why each step is needed\u003C\u002Fsummary>\n\nThe tooling is **not installable from git directly**: viem's workspace uses\npnpm's `catalog:` protocol, so `npm install \"viem@github:…\"` fails outright, and\n`bun add \"viem@github:…\"` \"succeeds\" but leaves you an unbuilt monorepo with no\n`exports` field. So you clone, build, then depend on the built package (which\nlives in viem's `src\u002F`):\n\n```bash\ngit clone -b feat\u002Feip-8130-production https:\u002F\u002Fgithub.com\u002Fchunter-cb\u002Fviem viem-fork\ncd viem-fork && npx pnpm install --ignore-scripts && npx pnpm run build\n\n# then in your app — --install-links is required:\nnpm install --install-links \"viem@file:..\u002Fviem-fork\u002Fsrc\"\n```\n\n**`--install-links` is required.** Without it npm symlinks `node_modules\u002Fviem`\nto a path outside the project root, and Turbopack\u002FNext.js then fails with\n`Module not found: Can't resolve 'viem'` for a package that is plainly there\n(`tsc` resolves it fine, which makes it look like a bundler bug).\n\u003C\u002Fdetails>\n\nThen import from `viem\u002Feip8130` (and `viem\u002Feip8168` for payers). Core helpers\nlike `createPublicClient` \u002F `parseEther` come from plain `viem` — the 8130\nmodule does not re-export them.\n\nSet `\"target\": \"ES2020\"` or later in `tsconfig.json`. BigInt literals (`0n`)\ntrigger TS2737 on any lower `target` — the check depends on `target`, not\n`lib`, and many generated configs still default to an older target.\n\n## Accounts Have No Deploy Step\n\nCreating an account derives a CREATE2 address locally — synchronous, zero RPC,\n`eth_getCode` still `0x`. It becomes real as a **side effect of its first\ntransaction**, which carries `account.createChange` alongside your actual calls.\nThere is nothing else to call. The shortest path from nothing to a deployed\naccount is a *sponsored* first tx (no faucet, no funding — for a zero-value\nfirst tx; sponsorship covers gas, never value); the self-paid route needs the\naddress funded first. Read deployment state from `eth_getCode`, never\nfrom optimistic local state — it decides whether the next tx carries\n`createChange`. Full lifecycle:\n[references\u002Feip8130-accounts.md](references\u002Feip8130-accounts.md).\n\n## Safety Guardrails\n\n- **Never commit private keys** — generate throwaway keys for devnet scripts,\n  read real ones from env vars.\n- **`key.k1(...)` builds an actor identity, not a signer** — passing it (or a\n  raw private-key hex) as `signer` fails with an opaque `pad()` TypeError. Use\n  `privateKeyToAccount(pk)`.\n- **Verify config changes by on-chain read-back** (`isActor` \u002F\n  `getConfigSequence`), never by receipt logs or `status: success` — a\n  skipped authorize is silent.\n- **Read the live config sequence right before signing** — a hardcoded\n  sequence causes silent no-ops.\n\n## Task Routing\n\nRead the reference for your task:\n\n| Task | When to Use | Reference |\n|------|-------------|-----------|\n| **Accounts & transactions** | Create an 8130 smart account, the counterfactual→deployed lifecycle, send batched calls, attribution metadata, gas estimation, reading account state, locking, gotchas | [references\u002Feip8130-accounts.md](references\u002Feip8130-accounts.md) |\n| **Session keys & policies** | Authorize\u002Frevoke actors, scopes, SessionPolicy spend limits, config sequences, verifying \"silent\" changes | [references\u002Fsession-keys-and-policies.md](references\u002Fsession-keys-and-policies.md) |\n| **Gas sponsorship** | Sponsor gas with a payer (ERC-8168), gasless onboarding, `send` vs `sign` modes | [references\u002Fpayer-sponsorship.md](references\u002Fpayer-sponsorship.md) |\n| **200ms blocks & timing** | Read a block's millisecond timestamp (`timestampMs`), decode the BaseTime deposit \u002F predeploy, stream `newHeads` over WebSocket, send a tx and see which 200ms block it landed in, fix viem polling, migrate from Flashblocks | [references\u002F200ms-blocks.md](references\u002F200ms-blocks.md) |\n\n## Operating Procedure\n\n1. **Classify the task** using the table above and read the relevant reference\n   before implementing.\n2. **Pick the right RPC**: `rpc.vibes.base.org` works from both Node and the\n   browser; `wss:\u002F\u002Frpc.vibes.base.org\u002Fws` for subscriptions;\n   `api.vibes.base.org\u002Fapi\u002Fvibenet\u002Faccount\u002Frpc` is the hosted proxy to the same\n   chain. Never `vibes.base.org` — that host is not an API.\n3. **Implement** with explicit chain id, the `scripts\u002Fsetup-viem-8130.sh`\n   install (8130\u002F8168 only), read-back verification for any account-config\n   change, and an explicit `pollingInterval` (≈100ms) on every receipt wait or\n   block watch — viem's defaults (4000ms, or a 500ms floor) hide the 200ms\n   cadence.\n4. **Deliver** runnable code, install commands, and any manual steps (env\n   vars, faucet funding).\n\n## For Edge Cases and Latest API Changes\n\n- **EIP-8130 spec**: [eip.tools\u002Feip\u002F8130](https:\u002F\u002Feip.tools\u002Feip\u002F8130)\n  (payer standard: [eip.tools\u002Feip\u002F8168](https:\u002F\u002Feip.tools\u002Feip\u002F8168))\n- **viem fork**: [`chunter-cb\u002Fviem` `feat\u002Feip-8130-production`](https:\u002F\u002Fgithub.com\u002Fchunter-cb\u002Fviem\u002Ftree\u002Ffeat\u002Feip-8130-production)\n  (upstream PR: [wevm\u002Fviem#5004](https:\u002F\u002Fgithub.com\u002Fwevm\u002Fviem\u002Fpull\u002F5004); API\n  surface: `src\u002Feip8130\u002Findex.ts`; docs: `site\u002Fpages\u002Feip8130`)\n- **Deep guide (chaptered)**: `github.com\u002Fchunter-cb\u002Feip-8130-web` (`\u002Fguide\u002F*`)\n- **Session-key walkthrough** (names are stale — map `to8130Account` →\n  `toAccount`, `isActor8130` → `isActor`, `sendCalls` → `sendTransaction`; its\n  `managerActor` step is the PolicyManager-as-operator authorize in the session\n  reference):\n  [gist.github.com\u002Fchunter-cb\u002Fbf70c53a5ab6d8361ce7f4215b776114](https:\u002F\u002Fgist.github.com\u002Fchunter-cb\u002Fbf70c53a5ab6d8361ce7f4215b776114)\n- **200ms blocks (Cobalt)**:\n  [docs.base.org\u002Fupgrades\u002Fcobalt\u002F200ms-blocks](https:\u002F\u002Fdocs.base.org\u002Fupgrades\u002Fcobalt\u002F200ms-blocks),\n  [migrate-from-flashblocks](https:\u002F\u002Fdocs.base.org\u002Fupgrades\u002Fcobalt\u002Fmigrate-from-flashblocks),\n  [test-on-vibenet](https:\u002F\u002Fdocs.base.org\u002Fbuild-on-base\u002Ftest-on-vibenet)\n\n## Installation\n\n```bash\nnpx skills add base\u002Fskills --skill vibenet\n```\n","# Vibenet\n\nVibenet is Base's devnet for **EIP-8130 native account abstraction**: account\nabstraction in the protocol itself. Accounts are portable across EVM chains,\nsupport multiple signer types (secp256k1, P-256, WebAuthn), key rotation\nwithout changing address, scoped session-key actors, on-chain policies, and\nnative **ERC-8168** gas sponsorship. The tooling lives in viem's `eip8130`\nmodule (fork branch — not yet in npm `viem`). Vibenet is also the first Base\nnetwork running **Cobalt 200ms native blocks** (five canonical blocks per\nsecond, with a millisecond `timestampMs` on every block) — that part needs no\nfork, stock `viem` works. See\n[references\u002F200ms-blocks.md](references\u002F200ms-blocks.md).\n\n## Network\n\n| Endpoint | Value |\n|----------|-------|\n| Chain ID | `84538453` |\n| Public execution RPC | `https:\u002F\u002Frpc.vibes.base.org` — 8130-capable (`AA_TX_TYPE` \u002F `0x79`), serves `access-control-allow-origin: *` |\n| WebSocket RPC | `wss:\u002F\u002Frpc.vibes.base.org\u002Fws` — `newHeads`, `logs`, `transactionReceipts` subscriptions (the `\u002Fws` path is required) |\n| Block time | **200ms** (Cobalt); blocks carry `timestampMs`, BaseTime predeploy at `0x4200000000000000000000000000000000000030` |\n| Browser RPC proxy | `https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Faccount\u002Frpc` — passes through all `eth_*`, including `0x79` broadcasts and receipt polling |\n| Hosted payer (ERC-8168) | `https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Faccount\u002Fpayer` |\n| Faucet | `POST https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Ffaucet\u002Fdrip` with `{ \"address\": \"0x…\" }` |\n| Faucet status | `GET https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Ffaucet\u002Fstatus` — drip size, cooldowns, USDV\u002FNFV token addresses |\n| Chain health | `GET https:\u002F\u002Fapi.vibes.base.org\u002Fapi\u002Fvibenet\u002Fchain-health` — key off `healthy` + `headAgeSecs`; `stuckSecs` is not actionable on its own (seen at 19000 on a healthy chain) |\n| Landing page \u002F explorer | `https:\u002F\u002Fchain.base.org\u002Fvibenet`, `https:\u002F\u002Fchain.base.org\u002Fvibenet\u002Fexplorer` |\n| Base Sepolia (also 8130-enabled) | `https:\u002F\u002Fsepolia.base.org`, chain id `84532` |\n\n**The API host is `api.vibes.base.org`, not `vibes.base.org`.** The bare host\n302-redirects to the `chain.base.org\u002Fvibenet` HTML page; viem's HTTP transport\nthen tries to parse that as JSON and throws `Unrecognized token '\u003C'`, which\nreads like a code bug rather than a wrong URL.\n\nAll `api.vibes.base.org` endpoints (RPC proxy, payer, faucet) send permissive\nCORS headers, and so does `rpc.vibes.base.org` — so browser apps can talk to\neither. Prefer `rpc.vibes.base.org` for execution and reserve the `account\u002Frpc`\nproxy for when you specifically want the hosted path. The public RPC is\nmethod-allowlisted: `eth_getHeaderBy*`, `eth_getBlockReceipts`,\n`eth_sendRawTransactionSync`, `eth_simulateV1` and `txpool_*` answer\n`rpc method is not whitelisted`.\n\n**Only 8130 \u002F 8168 code needs the fork below.** Querying blocks, streaming\n`newHeads`, and sending plain EOA transactions on vibenet work with stock\n`npm install viem`.\n\nThe 8130 modules are additive to viem itself, proposed upstream in\n[wevm\u002Fviem#5004](https:\u002F\u002Fgithub.com\u002Fwevm\u002Fviem\u002Fpull\u002F5004) (open, out of draft —\nnot yet merged or released to npm). Until it ships, they have to be built from the fork\nbranch the PR is opened from: `chunter-cb\u002Fviem` `feat\u002Feip-8130-production`.\n\n**Use the bundled installer** — it does the whole clone→build→link dance, which\nis error-prone by hand:\n\n```bash\nscripts\u002Fsetup-viem-8130.sh [APP_DIR] [BUILD_DIR]   # APP_DIR defaults to the current directory\n```\n\n`BUILD_DIR` defaults to `\u003CAPP_DIR>\u002F.viem-8130-src` — a full viem monorepo\ncheckout with its own `node_modules` (~500 MB). The script appends\n`.viem-8130-src\u002F` to the app's `.gitignore` so a `git add .` can't commit it;\nfor several apps, pass one shared `BUILD_DIR` outside them (npm records the\n`file:` path in `package.json`). Node 22 works despite the fork's\n`node >=24.5` engine warning.\n\nWhen PR #5004 merges and a viem release ships the modules, this collapses to\n`npm install viem@latest` — the imports (`viem\u002Feip8130`, `viem\u002Feip8168`) and\nAPIs are unchanged, so no code moves.\n\n\u003Cdetails>\u003Csummary>What the script does, and why each step is needed\u003C\u002Fsummary>\n\nThe tooling is **not installable from git directly**: viem's workspace uses\npnpm's `catalog:` protocol, so `npm install \"viem@github:…\"` fails outright, and\n`bun add \"viem@github:…\"` \"succeeds\" but leaves you an unbuilt monorepo with no\n`exports` field. So you clone, build, then depend on the built package (which\nlives in viem's `src\u002F`):\n\n```bash\ngit clone -b feat\u002Feip-8130-production https:\u002F\u002Fgithub.com\u002Fchunter-cb\u002Fviem viem-fork\ncd viem-fork && npx pnpm install --ignore-scripts && npx pnpm run build\n\n# then in your app — --install-links is required:\nnpm install --install-links \"viem@file:..\u002Fviem-fork\u002Fsrc\"\n```\n\n**`--install-links` is required.** Without it npm symlinks `node_modules\u002Fviem`\nto a path outside the project root, and Turbopack\u002FNext.js then fails with\n`Module not found: Can't resolve 'viem'` for a package that is plainly there\n(`tsc` resolves it fine, which makes it look like a bundler bug).\n\u003C\u002Fdetails>\n\nThen import from `viem\u002Feip8130` (and `viem\u002Feip8168` for payers). Core helpers\nlike `createPublicClient` \u002F `parseEther` come from plain `viem` — the 8130\nmodule does not re-export them.\n\nSet `\"target\": \"ES2020\"` or later in `tsconfig.json`. BigInt literals (`0n`)\ntrigger TS2737 on any lower `target` — the check depends on `target`, not\n`lib`, and many generated configs still default to an older target.\n\n## Accounts Have No Deploy Step\n\nCreating an account derives a CREATE2 address locally — synchronous, zero RPC,\n`eth_getCode` still `0x`. It becomes real as a **side effect of its first\ntransaction**, which carries `account.createChange` alongside your actual calls.\nThere is nothing else to call. The shortest path from nothing to a deployed\naccount is a *sponsored* first tx (no faucet, no funding — for a zero-value\nfirst tx; sponsorship covers gas, never value); the self-paid route needs the\naddress funded first. Read deployment state from `eth_getCode`, never\nfrom optimistic local state — it decides whether the next tx carries\n`createChange`. Full lifecycle:\n[references\u002Feip8130-accounts.md](references\u002Feip8130-accounts.md).\n\n## Safety Guardrails\n\n- **Never commit private keys** — generate throwaway keys for devnet scripts,\n  read real ones from env vars.\n- **`key.k1(...)` builds an actor identity, not a signer** — passing it (or a\n  raw private-key hex) as `signer` fails with an opaque `pad()` TypeError. Use\n  `privateKeyToAccount(pk)`.\n- **Verify config changes by on-chain read-back** (`isActor` \u002F\n  `getConfigSequence`), never by receipt logs or `status: success` — a\n  skipped authorize is silent.\n- **Read the live config sequence right before signing** — a hardcoded\n  sequence causes silent no-ops.\n\n## Task Routing\n\nRead the reference for your task:\n\n| Task | When to Use | Reference |\n|------|-------------|-----------|\n| **Accounts & transactions** | Create an 8130 smart account, the counterfactual→deployed lifecycle, send batched calls, attribution metadata, gas estimation, reading account state, locking, gotchas | [references\u002Feip8130-accounts.md](references\u002Feip8130-accounts.md) |\n| **Session keys & policies** | Authorize\u002Frevoke actors, scopes, SessionPolicy spend limits, config sequences, verifying \"silent\" changes | [references\u002Fsession-keys-and-policies.md](references\u002Fsession-keys-and-policies.md) |\n| **Gas sponsorship** | Sponsor gas with a payer (ERC-8168), gasless onboarding, `send` vs `sign` modes | [references\u002Fpayer-sponsorship.md](references\u002Fpayer-sponsorship.md) |\n| **200ms blocks & timing** | Read a block's millisecond timestamp (`timestampMs`), decode the BaseTime deposit \u002F predeploy, stream `newHeads` over WebSocket, send a tx and see which 200ms block it landed in, fix viem polling, migrate from Flashblocks | [references\u002F200ms-blocks.md](references\u002F200ms-blocks.md) |\n\n## Operating Procedure\n\n1. **Classify the task** using the table above and read the relevant reference\n   before implementing.\n2. **Pick the right RPC**: `rpc.vibes.base.org` works from both Node and the\n   browser; `wss:\u002F\u002Frpc.vibes.base.org\u002Fws` for subscriptions;\n   `api.vibes.base.org\u002Fapi\u002Fvibenet\u002Faccount\u002Frpc` is the hosted proxy to the same\n   chain. Never `vibes.base.org` — that host is not an API.\n3. **Implement** with explicit chain id, the `scripts\u002Fsetup-viem-8130.sh`\n   install (8130\u002F8168 only), read-back verification for any account-config\n   change, and an explicit `pollingInterval` (≈100ms) on every receipt wait or\n   block watch — viem's defaults (4000ms, or a 500ms floor) hide the 200ms\n   cadence.\n4. **Deliver** runnable code, install commands, and any manual steps (env\n   vars, faucet funding).\n\n## For Edge Cases and Latest API Changes\n\n- **EIP-8130 spec**: [eip.tools\u002Feip\u002F8130](https:\u002F\u002Feip.tools\u002Feip\u002F8130)\n  (payer standard: [eip.tools\u002Feip\u002F8168](https:\u002F\u002Feip.tools\u002Feip\u002F8168))\n- **viem fork**: [`chunter-cb\u002Fviem` `feat\u002Feip-8130-production`](https:\u002F\u002Fgithub.com\u002Fchunter-cb\u002Fviem\u002Ftree\u002Ffeat\u002Feip-8130-production)\n  (upstream PR: [wevm\u002Fviem#5004](https:\u002F\u002Fgithub.com\u002Fwevm\u002Fviem\u002Fpull\u002F5004); API\n  surface: `src\u002Feip8130\u002Findex.ts`; docs: `site\u002Fpages\u002Feip8130`)\n- **Deep guide (chaptered)**: `github.com\u002Fchunter-cb\u002Feip-8130-web` (`\u002Fguide\u002F*`)\n- **Session-key walkthrough** (names are stale — map `to8130Account` →\n  `toAccount`, `isActor8130` → `isActor`, `sendCalls` → `sendTransaction`; its\n  `managerActor` step is the PolicyManager-as-operator authorize in the session\n  reference):\n  [gist.github.com\u002Fchunter-cb\u002Fbf70c53a5ab6d8361ce7f4215b776114](https:\u002F\u002Fgist.github.com\u002Fchunter-cb\u002Fbf70c53a5ab6d8361ce7f4215b776114)\n- **200ms blocks (Cobalt)**:\n  [docs.base.org\u002Fupgrades\u002Fcobalt\u002F200ms-blocks](https:\u002F\u002Fdocs.base.org\u002Fupgrades\u002Fcobalt\u002F200ms-blocks),\n  [migrate-from-flashblocks](https:\u002F\u002Fdocs.base.org\u002Fupgrades\u002Fcobalt\u002Fmigrate-from-flashblocks),\n  [test-on-vibenet](https:\u002F\u002Fdocs.base.org\u002Fbuild-on-base\u002Ftest-on-vibenet)\n\n## Installation\n\n```bash\nnpx skills add base\u002Fskills --skill vibenet\n```\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fchains\u002Fbase-official-vibenet",17,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia","https:\u002F\u002Feth2030.com","Hardcore infra. Building @alt-research and applied cryptography.","2026-11-14 02:27:51",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill vibenet",{"tool":67,"command":68},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill vibenet",{"tool":70,"command":71},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill vibenet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002FSKILL.md",true,[75,79,85,89,93,97,103,107],{"path":76,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":16},"LICENSE","许可证",1061,{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002F200ms-blocks.md","REFERENCE","参考文档",15931,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002Freferences\u002F200ms-blocks.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Feip8130-accounts.md",19030,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002Freferences\u002Feip8130-accounts.md",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Fpayer-sponsorship.md",5993,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002Freferences\u002Fpayer-sponsorship.md",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fsession-keys-and-policies.md",11730,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002Freferences\u002Fsession-keys-and-policies.md",{"path":98,"resourceType":99,"resourceTypeDesc":100,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Fsetup-viem-8130.sh","SCRIPT","脚本",3931,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002Fscripts\u002Fsetup-viem-8130.sh",{"path":104,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":105,"sourceHtmlUrl":106},"SOURCE.md",312,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002FSOURCE.md",{"path":108,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":109,"sourceHtmlUrl":110},"TRUST.auto.yaml",2169,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fbase-official-vibenet\u002FTRUST.auto.yaml",[112,140,159,177,190,200],{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":116,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":47},"01M712C436EQYE43342Q4E7GG1","recipe-performance","Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold\u002Fwarm\u002Fbackground-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout\u002Fpaint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FSKILL.md",[],[120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":144,"licenseFileUrl":145,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":47},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FSKILL.md",[],[149,150,43,151,152,153,154,32,155,29,28,156,157,158],"mexc spot websocket","spot","api","workflows","public","listen","depth","api keys","maintenance","protobuf",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":144,"licenseFileUrl":163,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":47},"01M70XT0MBXN3WZY1BKN0CPNKR","mexc-spot-rest","MEXC Spot REST workflows for public data, signed account requests, orders, wallet\u002Fadmin actions, and secure signing without exposing API keys.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FSKILL.md",[],[167,150,168,169,170,171,172,156,28,29,173,174,175,153,176,152,151],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":144,"licenseFileUrl":181,"sourceHtmlUrl":182,"categories":183,"keywords":184,"publishedAt":47},"01M70XSYSVZ2N0N91XCAR2CAK0","mexc-futures-websocket","MEXC Futures WebSocket workflows for public streams, private account\u002Forder\u002Fposition streams, ping\u002Fpong, subscriptions, and depth maintenance.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FSKILL.md",[],[185,186,43,187,188,157,28,189,155,32,153,152],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":191,"name":192,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":193,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":47},"01M6H0ZWHVE5W04WG2DKQE2SQC","0xklen-version-and-refresh-sanctions-lists","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FSKILL.md",[],[197,198,199],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":204,"sourceHtmlUrl":205,"categories":206,"keywords":207,"publishedAt":47},"01M6H0Z28Q3R8J0S799GJQWXM3","verify-tests-cover-changed-lines","Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FSKILL.md",[],[208,209,210,211,212,213,214,40,215,45,216],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","share"]