[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-uniswap-permissioned-pools-configurator":3,"mdc--fqtwer-key":36,"related-org-uniswap-permissioned-pools-configurator":2786,"related-repo-uniswap-permissioned-pools-configurator":2936},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"permissioned-pools-configurator","configure Uniswap v4 permissioned pools","Interactively collect and validate the parameters for a Uniswap v4 Permissioned Pool setup - chain, underlying token, allowlist checker, adapter owner, verification deposit, the four wrapper registrations, hook, and pool pricing - and emit the JSON config the deployer skill consumes. Use when the user says \"configure a permissioned pool\", \"permissioned pool config\", \"adapter parameters\", \"permissioned pool setup parameters\", \"PermissionsAdapter configuration\", or asks to set up parameters for a permissioned pool before deploying. Covers contract mechanics only - does not constitute legal, financial, investment, tax, or compliance advice, and is not a compliance review.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"uniswap","Uniswap","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Funiswap.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Configuration","configuration","tag",{"name":17,"slug":18,"type":15},"DeFi","defi",{"name":20,"slug":21,"type":15},"Smart Contracts","smart-contracts",{"name":23,"slug":24,"type":15},"Ethereum","ethereum",215,"https:\u002F\u002Fgithub.com\u002FUniswap\u002Funiswap-ai","2026-08-14T04:52:02.764143","MIT",35,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"AI tools for building on Uniswap — skills, plugins, and agents for any coding agent.","https:\u002F\u002Fgithub.com\u002FUniswap\u002Funiswap-ai\u002Ftree\u002FHEAD\u002Fpackages\u002Fplugins\u002Funiswap-permissioned-pools\u002Fskills\u002Fpermissioned-pools-configurator","---\nname: permissioned-pools-configurator\ndescription: Interactively collect and validate the parameters for a Uniswap v4 Permissioned Pool setup - chain, underlying token, allowlist checker, adapter owner, verification deposit, the four wrapper registrations, hook, and pool pricing - and emit the JSON config the deployer skill consumes. Use when the user says \"configure a permissioned pool\", \"permissioned pool config\", \"adapter parameters\", \"permissioned pool setup parameters\", \"PermissionsAdapter configuration\", or asks to set up parameters for a permissioned pool before deploying. Covers contract mechanics only - does not constitute legal, financial, investment, tax, or compliance advice, and is not a compliance review.\nallowed-tools: Read, Write, Edit, Glob, Grep, AskUserQuestion\nmodel: opus\nlicense: MIT\nmetadata:\n  author: uniswap\n  version: '0.1.0'\n---\n\n# Permissioned Pools Configurator\n\nInteractive bulk-form configurator for a Uniswap v4 Permissioned Pool. Collects every\nparameter the setup journey needs, validates each one, and displays a single JSON\nconfiguration object that the `permissioned-pools-deployer` skill consumes to run the\non-chain sequence. For the contract mechanics behind any of these parameters, see\n[`permissioned-pools-issuer`](..\u002Fpermissioned-pools-issuer\u002FSKILL.md).\n\n> **Runtime Compatibility:** This skill uses `AskUserQuestion` to collect parameters in\n> batches. If `AskUserQuestion` is not available in your runtime, collect the same\n> parameters through natural language conversation instead, in the same batch groupings\n> and with the same validation after each group.\n\n## Scope and Disclaimer\n\n**This is a configuration tool, not deployment guidance and not a compliance review.**\n\n- ✅ It collects and validates the inputs a permissioned-pool setup needs and produces a\n  JSON document. It does not call any contract, does not broadcast anything, and holds\n  no signing keys.\n- ✅ **Treat this as contract mechanics only.** This skill does not constitute legal, financial, investment, or tax advice, and it is **not** a compliance review of your token, your allowlist, your KYC or AML program, or your configuration. It covers what each parameter means and what breaks if it is wrong.\n- ✅ It never invents a contract address. Addresses you supply are recorded as given;\n  addresses you do not yet have — whether because they still need to be looked up\n  against the deploy guide's table or because the issuer has not decided on them yet —\n  are stored as the literal string `\"RESOLVE\"`, never guessed or recalled from memory.\n- ✅ Review the emitted configuration yourself, and re-resolve every address it marks for\n  resolution, before handing it to a deployment flow.\n- ✅ **Read the repo's usage guidelines.** The repo root `DISCLAIMER.md` governs every skill in\n  this repository: they are provided as is without warranty, they do not constitute legal,\n  financial, investment, or tax advice, and it sets out use limits plus an AI-disclosure duty\n  that applies when you use a skill to generate financial information and present it directly\n  to individuals or consumers. Point the user to it.\n\nState this framing inline (quoted or in your own words) and continue with the\nconfiguration flow in the same response — this is reference and data-collection\ncontent, not an action-oriented deployment step, so no acknowledgment gate is needed\nhere. The deployer skill gates on acknowledgment before anything gas-spending.\n\n## What This Config Is (and Isn't)\n\nThe output is a **pre-deployment plan**, not a record of what already exists on-chain.\n\n- The **`PermissionsAdapter` address does not appear in this config.** It does not exist\n  until the deployer's Step 2 (`createPermissionsAdapter`) creates it. If the issuer\n  already has a deployed adapter for this token, that is a re-run\u002Fimport scenario this\n  skill does not currently handle — collect its address as a note and confirm with the\n  deployer skill's preflight checks instead of adding it here. **This declines only the\n  adapter address itself — it does not block the rest of the request.** Continue\n  validating and including every other field the user supplied (or marked `\"RESOLVE\"`)\n  in the emitted configuration exactly as the flow below describes.\n- The **underlying permissioned token is the only token address this config records.**\n  See the two-addresses distinction in `permissioned-pools-issuer` — the pool currency\n  the deployer builds later is the adapter, derived at deploy time, not configured here.\n- Wrapper and hook addresses are **chain-specific and change over time.** This skill asks\n  whether you already have them resolved for your target chain; if not, it marks them\n  for resolution rather than filling in a value.\n\n## Configuration Flow\n\nCollect parameters in four batches of at most four questions each. After each batch,\nvalidate every answer against [`config-schema.md`](.\u002Freferences\u002Fconfig-schema.md) before\nmoving on, and show a running summary of what has been collected and what remains.\nField-by-field meaning, how to choose each value, and what breaks if it is wrong are all\nin [`parameter-reference.md`](.\u002Freferences\u002Fparameter-reference.md).\n\n### Front-loaded or skip-ahead answers\n\nA user may answer several batches' worth of questions in one free-form message, or ask\nto skip the remaining questions and finish immediately. Do not withhold the whole\nconfiguration while asking whether to proceed. Instead: validate everything the user did\nsupply against `config-schema.md`, apply the literal string `\"RESOLVE\"` (or `null` for\n`allowlistChecker.address` when the checker is `to-be-deployed`) to every address-type\nfield left open, and produce that partial configuration in the same response. Fields with\nno `\"RESOLVE\"` sentinel — the verification deposit amount, pool currency, fee tier, tick\nspacing, starting price, and seeding — have no safe default; flag each one explicitly as\nstill needing an answer rather than guessing at it, and ask only about those. **This\nincludes the verification deposit amount even though Batch 2 lists \"1 wei\" as the\nrecommended option:** a menu option a user has not actually picked is not a value the\nskill may silently apply on their behalf — treat an unanswered verification deposit\namount exactly like the other sentinel-less fields, never as an already-resolved `\"1\"`.\nSkipping the batch-by-batch confirmation step never means skipping validation — every\nrule above still applies to whatever the user did supply.\n\n### Batch 1: Network, Token & Ownership (4 questions)\n\n**Question 1 — Network**\n\n- Prompt: \"Which network is this permissioned pool for?\"\n- Options: \"Ethereum Mainnet (chain ID 1)\", \"Unichain (chain ID 130)\", \"Sepolia (chain ID\n  11155111)\", Custom chain ID (via \"Other\")\n- Note in the prompt: availability of the permissioned-pools contracts on a given chain is\n  not something this skill asserts — confirm the chain has a row in the deploy guide's\n  `#deployment-addresses` table before proceeding.\n- Store: `chainId`\n\n**Question 2 — Underlying permissioned token**\n\n- Prompt: \"What is the address of the permissioned ERC-20 being listed?\"\n- Options: \"Not deployed yet\" (stores the literal string `\"RESOLVE\"`), custom address\n  (via \"Other\")\n- Validation: `^0x[a-fA-F0-9]{40}$`, or the literal string `\"RESOLVE\"` if not yet deployed\n- Store: `permissionedToken`\n\n**Question 3 — Allowlist checker**\n\n- Prompt: \"Do you already have an allowlist checker deployed for this token?\"\n- Options, each mapped to the exact `allowlistChecker` value it produces:\n  - \"Yes, use an existing address\" (then ask for the address via \"Other\") →\n    `mode: \"existing\"`, `address` set to that address.\n  - \"No, I still need to deploy one\" → `mode: \"to-be-deployed\"`, `address` set to `null`.\n- Validation: address form above when \"existing\" is chosen\n- Store: `allowlistChecker.mode` (`existing` | `to-be-deployed`), `allowlistChecker.address`\n\n**Question 4 — Adapter owner**\n\n- Prompt: \"What address should own the `PermissionsAdapter` (`initialOwner`)?\"\n- Options: \"Not yet decided — mark for resolution\" (stores the literal string\n  `\"RESOLVE\"`), custom address (via \"Other\")\n- Note in the prompt: this key can change the allowlist checker, add or remove wrappers,\n  pause and resume swapping, and force-exit any LP position — the published guide\n  recommends a multisig. Do not pick this in a hurry just to finish the flow; use the\n  resolution marker instead if the multisig or key is not decided yet.\n- Validation: `^0x[a-fA-F0-9]{40}$` and not the zero address, or the literal string\n  `\"RESOLVE\"`\n- Store: `adapterOwner`\n\n**Validate:** confirm chain ID is a positive integer, the token address is either a\nvalid address or the literal string `\"RESOLVE\"`, the checker address (if \"existing\" was\nchosen) matches the address regex, and the adapter owner is either a valid non-zero\naddress or the literal string `\"RESOLVE\"`. Show a summary of the four collected values,\nflagging any field still marked `\"RESOLVE\"`.\n\n---\n\n### Batch 2: Verification & Core Wrappers (4 questions)\n\n**Question 1 — Verification deposit amount**\n\n- Prompt: \"How much of the underlying token should be deposited for verification?\"\n- Options: \"1 wei (recommended)\", Custom amount (via \"Other\")\n- Note in the prompt: this deposit becomes the adapter's mintable headroom, there is no\n  withdraw function, and 1 wei is sufficient — see\n  [Parameter Reference](.\u002Freferences\u002Fparameter-reference.md#verificationdepositamount)\n  before choosing anything larger.\n- \"Recommended\" describes the value if asked and picked — it is never a license to fill\n  in `\"1\"` on the user's behalf when this question was skipped. See\n  [Front-loaded or skip-ahead answers](#front-loaded-or-skip-ahead-answers) above.\n- Store: `verificationDepositAmount`\n\n**Question 2 — `PermissionedPositionManager` address**\n\n- Prompt: \"Do you have the `PermissionedPositionManager` address resolved for this\n  chain?\"\n- Options: \"Not yet resolved — mark for resolution\" (stores the literal string\n  `\"RESOLVE\"`), custom address (via \"Other\")\n- Validation: address form, or the literal string `\"RESOLVE\"`\n- Store: `allowedWrappers.permissionedPositionManager`\n\n**Question 3 — Universal Router (v2.2+) address**\n\n- Prompt: \"Do you have the Universal Router `#v2.2` (or higher) address resolved for\n  this chain?\"\n- Options: \"Not yet resolved — mark for resolution\" (stores the literal string\n  `\"RESOLVE\"`), custom address (via \"Other\")\n- Note in the prompt: the plain `UniversalRouter` deployments key is a different,\n  non-permissioned router — only the `#v2.2` deployment works here.\n- Validation: address form, or the literal string `\"RESOLVE\"`\n- Store: `allowedWrappers.universalRouterV2_2`\n\n**Question 4 — `PermissionedHooks` address**\n\n- Prompt: \"Do you have the `PermissionedHooks` address resolved for this chain, for\n  `setAllowedHook`?\"\n- Options: \"Not yet resolved — mark for resolution\" (stores the literal string\n  `\"RESOLVE\"`), custom address (via \"Other\")\n- Note in the prompt: this is the shared hook address, registered with\n  `setAllowedHook` on the position manager — it is never registered as a wrapper.\n- Validation: address form, or the literal string `\"RESOLVE\"`\n- Store: `hook`\n\n**Validate:** confirm the deposit amount is a positive integer (not zero) expressed in\nthe token's smallest unit, and that every address field is either a valid address or the\nliteral string `\"RESOLVE\"` — never a guessed or invented value. Show a summary.\n\n---\n\n### Batch 3: Remaining Wrappers & Pool Currency (4 questions)\n\n**Question 1 — `V4Quoter` address**\n\n- Prompt: \"Do you have the `V4Quoter` address resolved for this chain?\"\n- Options: \"Not yet resolved — mark for resolution\" (stores the literal string\n  `\"RESOLVE\"`), custom address (via \"Other\")\n- Validation: address form, or the literal string `\"RESOLVE\"`\n- Store: `allowedWrappers.v4Quoter`\n\n**Question 2 — `MixedRouteQuoterV2` address**\n\n- Prompt: \"Do you have the `MixedRouteQuoterV2` address resolved for this chain?\"\n- Options: \"Not yet resolved — mark for resolution\" (stores the literal string\n  `\"RESOLVE\"`), custom address (via \"Other\")\n- Validation: address form, or the literal string `\"RESOLVE\"`\n- Store: `allowedWrappers.mixedRouteQuoterV2`\n\n**Question 3 — Paired currency**\n\n- Prompt: \"What currency should the pool pair against the permissioned token?\"\n- Options: \"Native ETH\", custom ERC-20 address (via \"Other\")\n- Note in the prompt: the permissioned token's side of the pool is always the adapter,\n  never the underlying token — this question is only about the _other_ currency.\n- Validation: address form for an ERC-20 and not the zero address, or the literal string\n  `\"native\"` (the native-currency sentinel; see [Address Validation](.\u002Freferences\u002Fconfig-schema.md#address-validation)\n  for the full semantics). A user who supplies the zero address here means `\"native\"` —\n  record `\"native\"`, never the zero address.\n- Store: `pool.pairedCurrency`\n\n**Question 4 — Fee tier**\n\n- Prompt: \"What fee tier should the pool use?\"\n- Options: \"0.05% (500)\", \"0.30% (3000)\", \"1.00% (10000)\", Custom (via \"Other\")\n- Validation: positive integer, hundredths of a basis point\n- Store: `pool.feeTier`\n\n**Validate:** confirm both remaining wrapper fields are a valid address or the literal\nstring `\"RESOLVE\"`, the paired currency is a valid non-zero address or the literal string\n`\"native\"`, and the fee tier is a positive integer. When the paired currency is a resolved\naddress and `permissionedToken` is also a resolved address, confirm the two differ —\npairing the permissioned token against itself builds a `PoolKey` that either fails at the\nPoolManager level or creates a pool nobody intended (see\n[Parameter Reference](.\u002Freferences\u002Fparameter-reference.md#poolpairedcurrency)). Show a\nsummary of all four wrappers,\nthe hook, and the pool currency collected so far, and flag every field still marked\n`\"RESOLVE\"`.\n\n---\n\n### Batch 4: Pricing & Seeding (3 questions)\n\n**Question 1 — Tick spacing**\n\n- Prompt: \"What tick spacing should the pool use?\"\n- Options: \"10 (stable-like pairs)\", \"60 (standard)\", \"200 (wide-range pairs)\", Custom\n  (via \"Other\")\n- Validation: positive integer\n- Store: `pool.tickSpacing`\n\n**Question 2 — Starting price**\n\n- Prompt: \"What should the pool's starting price be, expressed as paired-currency per\n  permissioned-token?\"\n- Options: \"1:1 (equal value ratio)\", Custom ratio (via \"Other\")\n- Validation: positive number\n- Store: `pool.startingPriceRatio` (a human-readable ratio; the deployer skill converts\n  this to `sqrtPriceX96` at initialization time, since that conversion depends on the\n  decimals of both currencies, which are not yet resolved at configuration time)\n\n**Question 3 — Seeding intent**\n\n- Prompt: \"Do you plan to seed liquidity as part of this same setup?\"\n- Options, each mapped to the exact `seeding.intent` value it produces:\n  - \"Yes, from the adapter owner's wallet\" → `intent: \"seed-now\"`, `wallet` set to the\n    same address already collected as `adapterOwner` in Batch 1. **Offer this option\n    only when `adapterOwner` is a real address — not when it is the literal string\n    `\"RESOLVE\"`.** `seeding.wallet` must always be a real address (see Validation\n    below), so this option cannot copy forward an unresolved owner.\n  - \"Yes, from a different wallet\" (then ask for the address via \"Other\") →\n    `intent: \"seed-now\"`, `wallet` set to that address\n  - \"Not yet — pool creation only\" → `intent: \"none\"`, `wallet: null`\n- If `adapterOwner` is `\"RESOLVE\"`, present only the second and third options — drop the\n  first option from the list entirely rather than showing it disabled.\n- Note in the prompt: whichever wallet seeds liquidity, and the wallet that will receive\n  the position, both need `LIQUIDITY_ALLOWED` on the issuer's own allowlist before the\n  first mint — being the adapter owner grants nothing on the liquidity path.\n- Validation: when `intent` is `\"seed-now\"`, `wallet` is required and must match the\n  address regex — never the literal string `\"RESOLVE\"` or any other sentinel; when\n  `intent` is `\"none\"`, `wallet` must be `null`. This flow never produces `\"seed-later\"`\n  — that enum value exists in the schema for a config edited or extended outside this\n  flow, not for output from these three options.\n- Store: `seeding.intent`, `seeding.wallet`\n\n**Validate:** confirm tick spacing is a positive integer, the starting price ratio is a\npositive number, and — per the branch taken above — either `seeding.wallet` is a valid,\nnon-`\"RESOLVE\"` address (when `intent` is `\"seed-now\"`) or it is `null` (when `intent` is\n`\"none\"`). `seeding.wallet` never accepts the literal string `\"RESOLVE\"`, even when it\nwas going to be copied from `adapterOwner` — see the option restriction above. Show the\nfull configuration collected across all four batches.\n\n---\n\n## Generate and Display the Configuration\n\nAssemble everything collected into the JSON shape defined in\n[`config-schema.md`](.\u002Freferences\u002Fconfig-schema.md), keyed by `chainId` at the top\nlevel:\n\n```json\n{\n  \"\u003CchainId>\": {\n    \"permissionedToken\": \"...\",\n    \"allowlistChecker\": { \"mode\": \"...\", \"address\": \"...\" },\n    \"adapterOwner\": \"...\",\n    \"verificationDepositAmount\": \"...\",\n    \"allowedWrappers\": {\n      \"permissionedPositionManager\": \"...\",\n      \"universalRouterV2_2\": \"...\",\n      \"v4Quoter\": \"...\",\n      \"mixedRouteQuoterV2\": \"...\"\n    },\n    \"hook\": \"...\",\n    \"pool\": {\n      \"pairedCurrency\": \"native\",\n      \"feeTier\": 3000,\n      \"tickSpacing\": 60,\n      \"startingPriceRatio\": 1\n    },\n    \"seeding\": { \"intent\": \"seed-now\", \"wallet\": \"...\" }\n  }\n}\n```\n\n**Display this JSON directly in the transcript. Do not automatically create a file.**\nLet the user copy it or choose a filepath in the next-steps question below.\n\n## Display Summary\n\nImmediately after the JSON, show a human-readable summary:\n\n- Network and chain ID.\n- Underlying token and allowlist-checker mode.\n- Adapter owner.\n- Verification deposit amount, with a one-line reminder that it is not recoverable.\n- Every wrapper and the hook, each flagged **resolved** or **needs resolution**.\n- Pool currency, fee tier, tick spacing, starting price ratio.\n- Seeding intent and wallet, with a reminder that the wallet needs `LIQUIDITY_ALLOWED`.\n- A validation checklist: which rules from `config-schema.md` passed, and which fields\n  still need a real address before this config can be used to deploy anything.\n\n## Next Steps\n\nAsk the user what they want to do:\n\n- \"Save to file\" — ask for a filepath, default `permissioned-pool-config.json`. Require\n  a relative path ending in `.json`; reject an absolute path (leading `\u002F`), reject a\n  leading `~` (a runtime that expands it can write outside the working directory —\n  including over Claude Code's own config store), and reject any path containing a `..`\n  segment. Resolve the path and confirm it still stays within the current working\n  directory before writing. If the resolved path already exists, ask for confirmation\n  before overwriting it — including a file that looks unrelated to this skill, such as\n  `package.json` or `tsconfig.json`. Re-prompt once on a rejected path rather than\n  silently substituting the default. Then write exactly the JSON object shown above.\n  (This validation is intentionally stricter than other skills' \"save to file\" steps in\n  this repo — the `~` and `..` rejections were added in response to a security audit\n  finding that a leading `~` could target `~\u002F.claude.json`, so keep them here rather\n  than trimming to match a lighter-weight equivalent elsewhere.)\n- \"View the setup walkthrough\" — point at `permissioned-pools-deployer`.\n- \"Modify configuration\" — re-run the relevant batch above.\n- \"Exit\" — end here; the user can copy the JSON from the transcript.\n\n## Notes for Implementers of This Flow\n\n- **Never fill in a token, wrapper, hook, or adapter-owner address from memory.** If the\n  user does not supply one, store the exact literal string `\"RESOLVE\"` in that field —\n  full stop. This includes not \"helpfully\" completing a partially-typed address.\n- **Batch, validate, summarize — every time.** Do not run all four batches back to back\n  without the validation and summary steps in between; that is what keeps a bad input\n  from propagating into the next batch's defaults.\n- **This skill does not read chain state, fetch an RPC, or consult a deployments JSON\n  file.** It has no `Bash` or `WebFetch` in its tool list, on purpose — resolving\n  addresses against `Uniswap\u002Fcontracts` `deployments\u002Fjson\u002F\u003CchainId>.json` and the deploy\n  guide's table is the user's job, or a later step in the deployer skill's preflight.\n",{"data":37,"body":42},{"name":4,"description":6,"allowed-tools":38,"model":39,"license":28,"metadata":40},"Read, Write, Edit, Glob, Grep, AskUserQuestion","opus",{"author":8,"version":41},"0.1.0",{"type":43,"children":44},"root",[45,53,81,111,118,126,192,197,203,215,288,294,322,329,394,400,408,445,453,503,511,618,626,691,721,725,731,739,794,810,856,864,929,944,1007,1023,1026,1032,1047,1090,1104,1146,1154,1225,1233,1261,1312,1315,1321,1329,1357,1365,1403,1411,1639,1717,1720,1726,1748,2490,2500,2506,2511,2580,2586,2591,2704,2710,2780],{"type":46,"tag":47,"props":48,"children":49},"element","h1",{"id":4},[50],{"type":51,"value":52},"text","Permissioned Pools Configurator",{"type":46,"tag":54,"props":55,"children":56},"p",{},[57,59,66,68,79],{"type":51,"value":58},"Interactive bulk-form configurator for a Uniswap v4 Permissioned Pool. Collects every\nparameter the setup journey needs, validates each one, and displays a single JSON\nconfiguration object that the ",{"type":46,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":51,"value":65},"permissioned-pools-deployer",{"type":51,"value":67}," skill consumes to run the\non-chain sequence. For the contract mechanics behind any of these parameters, see\n",{"type":46,"tag":69,"props":70,"children":72},"a",{"href":71},"..\u002Fpermissioned-pools-issuer\u002FSKILL.md",[73],{"type":46,"tag":60,"props":74,"children":76},{"className":75},[],[77],{"type":51,"value":78},"permissioned-pools-issuer",{"type":51,"value":80},".",{"type":46,"tag":82,"props":83,"children":84},"blockquote",{},[85],{"type":46,"tag":54,"props":86,"children":87},{},[88,94,96,102,104,109],{"type":46,"tag":89,"props":90,"children":91},"strong",{},[92],{"type":51,"value":93},"Runtime Compatibility:",{"type":51,"value":95}," This skill uses ",{"type":46,"tag":60,"props":97,"children":99},{"className":98},[],[100],{"type":51,"value":101},"AskUserQuestion",{"type":51,"value":103}," to collect parameters in\nbatches. If ",{"type":46,"tag":60,"props":105,"children":107},{"className":106},[],[108],{"type":51,"value":101},{"type":51,"value":110}," is not available in your runtime, collect the same\nparameters through natural language conversation instead, in the same batch groupings\nand with the same validation after each group.",{"type":46,"tag":112,"props":113,"children":115},"h2",{"id":114},"scope-and-disclaimer",[116],{"type":51,"value":117},"Scope and Disclaimer",{"type":46,"tag":54,"props":119,"children":120},{},[121],{"type":46,"tag":89,"props":122,"children":123},{},[124],{"type":51,"value":125},"This is a configuration tool, not deployment guidance and not a compliance review.",{"type":46,"tag":127,"props":128,"children":129},"ul",{},[130,136,155,168,173],{"type":46,"tag":131,"props":132,"children":133},"li",{},[134],{"type":51,"value":135},"✅ It collects and validates the inputs a permissioned-pool setup needs and produces a\nJSON document. It does not call any contract, does not broadcast anything, and holds\nno signing keys.",{"type":46,"tag":131,"props":137,"children":138},{},[139,141,146,148,153],{"type":51,"value":140},"✅ ",{"type":46,"tag":89,"props":142,"children":143},{},[144],{"type":51,"value":145},"Treat this as contract mechanics only.",{"type":51,"value":147}," This skill does not constitute legal, financial, investment, or tax advice, and it is ",{"type":46,"tag":89,"props":149,"children":150},{},[151],{"type":51,"value":152},"not",{"type":51,"value":154}," a compliance review of your token, your allowlist, your KYC or AML program, or your configuration. It covers what each parameter means and what breaks if it is wrong.",{"type":46,"tag":131,"props":156,"children":157},{},[158,160,166],{"type":51,"value":159},"✅ It never invents a contract address. Addresses you supply are recorded as given;\naddresses you do not yet have — whether because they still need to be looked up\nagainst the deploy guide's table or because the issuer has not decided on them yet —\nare stored as the literal string ",{"type":46,"tag":60,"props":161,"children":163},{"className":162},[],[164],{"type":51,"value":165},"\"RESOLVE\"",{"type":51,"value":167},", never guessed or recalled from memory.",{"type":46,"tag":131,"props":169,"children":170},{},[171],{"type":51,"value":172},"✅ Review the emitted configuration yourself, and re-resolve every address it marks for\nresolution, before handing it to a deployment flow.",{"type":46,"tag":131,"props":174,"children":175},{},[176,177,182,184,190],{"type":51,"value":140},{"type":46,"tag":89,"props":178,"children":179},{},[180],{"type":51,"value":181},"Read the repo's usage guidelines.",{"type":51,"value":183}," The repo root ",{"type":46,"tag":60,"props":185,"children":187},{"className":186},[],[188],{"type":51,"value":189},"DISCLAIMER.md",{"type":51,"value":191}," governs every skill in\nthis repository: they are provided as is without warranty, they do not constitute legal,\nfinancial, investment, or tax advice, and it sets out use limits plus an AI-disclosure duty\nthat applies when you use a skill to generate financial information and present it directly\nto individuals or consumers. Point the user to it.",{"type":46,"tag":54,"props":193,"children":194},{},[195],{"type":51,"value":196},"State this framing inline (quoted or in your own words) and continue with the\nconfiguration flow in the same response — this is reference and data-collection\ncontent, not an action-oriented deployment step, so no acknowledgment gate is needed\nhere. The deployer skill gates on acknowledgment before anything gas-spending.",{"type":46,"tag":112,"props":198,"children":200},{"id":199},"what-this-config-is-and-isnt",[201],{"type":51,"value":202},"What This Config Is (and Isn't)",{"type":46,"tag":54,"props":204,"children":205},{},[206,208,213],{"type":51,"value":207},"The output is a ",{"type":46,"tag":89,"props":209,"children":210},{},[211],{"type":51,"value":212},"pre-deployment plan",{"type":51,"value":214},", not a record of what already exists on-chain.",{"type":46,"tag":127,"props":216,"children":217},{},[218,258,276],{"type":46,"tag":131,"props":219,"children":220},{},[221,223,234,236,242,244,249,251,256],{"type":51,"value":222},"The ",{"type":46,"tag":89,"props":224,"children":225},{},[226,232],{"type":46,"tag":60,"props":227,"children":229},{"className":228},[],[230],{"type":51,"value":231},"PermissionsAdapter",{"type":51,"value":233}," address does not appear in this config.",{"type":51,"value":235}," It does not exist\nuntil the deployer's Step 2 (",{"type":46,"tag":60,"props":237,"children":239},{"className":238},[],[240],{"type":51,"value":241},"createPermissionsAdapter",{"type":51,"value":243},") creates it. If the issuer\nalready has a deployed adapter for this token, that is a re-run\u002Fimport scenario this\nskill does not currently handle — collect its address as a note and confirm with the\ndeployer skill's preflight checks instead of adding it here. ",{"type":46,"tag":89,"props":245,"children":246},{},[247],{"type":51,"value":248},"This declines only the\nadapter address itself — it does not block the rest of the request.",{"type":51,"value":250}," Continue\nvalidating and including every other field the user supplied (or marked ",{"type":46,"tag":60,"props":252,"children":254},{"className":253},[],[255],{"type":51,"value":165},{"type":51,"value":257},")\nin the emitted configuration exactly as the flow below describes.",{"type":46,"tag":131,"props":259,"children":260},{},[261,262,267,269,274],{"type":51,"value":222},{"type":46,"tag":89,"props":263,"children":264},{},[265],{"type":51,"value":266},"underlying permissioned token is the only token address this config records.",{"type":51,"value":268},"\nSee the two-addresses distinction in ",{"type":46,"tag":60,"props":270,"children":272},{"className":271},[],[273],{"type":51,"value":78},{"type":51,"value":275}," — the pool currency\nthe deployer builds later is the adapter, derived at deploy time, not configured here.",{"type":46,"tag":131,"props":277,"children":278},{},[279,281,286],{"type":51,"value":280},"Wrapper and hook addresses are ",{"type":46,"tag":89,"props":282,"children":283},{},[284],{"type":51,"value":285},"chain-specific and change over time.",{"type":51,"value":287}," This skill asks\nwhether you already have them resolved for your target chain; if not, it marks them\nfor resolution rather than filling in a value.",{"type":46,"tag":112,"props":289,"children":291},{"id":290},"configuration-flow",[292],{"type":51,"value":293},"Configuration Flow",{"type":46,"tag":54,"props":295,"children":296},{},[297,299,309,311,321],{"type":51,"value":298},"Collect parameters in four batches of at most four questions each. After each batch,\nvalidate every answer against ",{"type":46,"tag":69,"props":300,"children":302},{"href":301},".\u002Freferences\u002Fconfig-schema.md",[303],{"type":46,"tag":60,"props":304,"children":306},{"className":305},[],[307],{"type":51,"value":308},"config-schema.md",{"type":51,"value":310}," before\nmoving on, and show a running summary of what has been collected and what remains.\nField-by-field meaning, how to choose each value, and what breaks if it is wrong are all\nin ",{"type":46,"tag":69,"props":312,"children":314},{"href":313},".\u002Freferences\u002Fparameter-reference.md",[315],{"type":46,"tag":60,"props":316,"children":318},{"className":317},[],[319],{"type":51,"value":320},"parameter-reference.md",{"type":51,"value":80},{"type":46,"tag":323,"props":324,"children":326},"h3",{"id":325},"front-loaded-or-skip-ahead-answers",[327],{"type":51,"value":328},"Front-loaded or skip-ahead answers",{"type":46,"tag":54,"props":330,"children":331},{},[332,334,339,341,346,348,354,356,362,364,370,372,377,379,384,386,392],{"type":51,"value":333},"A user may answer several batches' worth of questions in one free-form message, or ask\nto skip the remaining questions and finish immediately. Do not withhold the whole\nconfiguration while asking whether to proceed. Instead: validate everything the user did\nsupply against ",{"type":46,"tag":60,"props":335,"children":337},{"className":336},[],[338],{"type":51,"value":308},{"type":51,"value":340},", apply the literal string ",{"type":46,"tag":60,"props":342,"children":344},{"className":343},[],[345],{"type":51,"value":165},{"type":51,"value":347}," (or ",{"type":46,"tag":60,"props":349,"children":351},{"className":350},[],[352],{"type":51,"value":353},"null",{"type":51,"value":355}," for\n",{"type":46,"tag":60,"props":357,"children":359},{"className":358},[],[360],{"type":51,"value":361},"allowlistChecker.address",{"type":51,"value":363}," when the checker is ",{"type":46,"tag":60,"props":365,"children":367},{"className":366},[],[368],{"type":51,"value":369},"to-be-deployed",{"type":51,"value":371},") to every address-type\nfield left open, and produce that partial configuration in the same response. Fields with\nno ",{"type":46,"tag":60,"props":373,"children":375},{"className":374},[],[376],{"type":51,"value":165},{"type":51,"value":378}," sentinel — the verification deposit amount, pool currency, fee tier, tick\nspacing, starting price, and seeding — have no safe default; flag each one explicitly as\nstill needing an answer rather than guessing at it, and ask only about those. ",{"type":46,"tag":89,"props":380,"children":381},{},[382],{"type":51,"value":383},"This\nincludes the verification deposit amount even though Batch 2 lists \"1 wei\" as the\nrecommended option:",{"type":51,"value":385}," a menu option a user has not actually picked is not a value the\nskill may silently apply on their behalf — treat an unanswered verification deposit\namount exactly like the other sentinel-less fields, never as an already-resolved ",{"type":46,"tag":60,"props":387,"children":389},{"className":388},[],[390],{"type":51,"value":391},"\"1\"",{"type":51,"value":393},".\nSkipping the batch-by-batch confirmation step never means skipping validation — every\nrule above still applies to whatever the user did supply.",{"type":46,"tag":323,"props":395,"children":397},{"id":396},"batch-1-network-token-ownership-4-questions",[398],{"type":51,"value":399},"Batch 1: Network, Token & Ownership (4 questions)",{"type":46,"tag":54,"props":401,"children":402},{},[403],{"type":46,"tag":89,"props":404,"children":405},{},[406],{"type":51,"value":407},"Question 1 — Network",{"type":46,"tag":127,"props":409,"children":410},{},[411,416,421,434],{"type":46,"tag":131,"props":412,"children":413},{},[414],{"type":51,"value":415},"Prompt: \"Which network is this permissioned pool for?\"",{"type":46,"tag":131,"props":417,"children":418},{},[419],{"type":51,"value":420},"Options: \"Ethereum Mainnet (chain ID 1)\", \"Unichain (chain ID 130)\", \"Sepolia (chain ID\n11155111)\", Custom chain ID (via \"Other\")",{"type":46,"tag":131,"props":422,"children":423},{},[424,426,432],{"type":51,"value":425},"Note in the prompt: availability of the permissioned-pools contracts on a given chain is\nnot something this skill asserts — confirm the chain has a row in the deploy guide's\n",{"type":46,"tag":60,"props":427,"children":429},{"className":428},[],[430],{"type":51,"value":431},"#deployment-addresses",{"type":51,"value":433}," table before proceeding.",{"type":46,"tag":131,"props":435,"children":436},{},[437,439],{"type":51,"value":438},"Store: ",{"type":46,"tag":60,"props":440,"children":442},{"className":441},[],[443],{"type":51,"value":444},"chainId",{"type":46,"tag":54,"props":446,"children":447},{},[448],{"type":46,"tag":89,"props":449,"children":450},{},[451],{"type":51,"value":452},"Question 2 — Underlying permissioned token",{"type":46,"tag":127,"props":454,"children":455},{},[456,461,473,493],{"type":46,"tag":131,"props":457,"children":458},{},[459],{"type":51,"value":460},"Prompt: \"What is the address of the permissioned ERC-20 being listed?\"",{"type":46,"tag":131,"props":462,"children":463},{},[464,466,471],{"type":51,"value":465},"Options: \"Not deployed yet\" (stores the literal string ",{"type":46,"tag":60,"props":467,"children":469},{"className":468},[],[470],{"type":51,"value":165},{"type":51,"value":472},"), custom address\n(via \"Other\")",{"type":46,"tag":131,"props":474,"children":475},{},[476,478,484,486,491],{"type":51,"value":477},"Validation: ",{"type":46,"tag":60,"props":479,"children":481},{"className":480},[],[482],{"type":51,"value":483},"^0x[a-fA-F0-9]{40}$",{"type":51,"value":485},", or the literal string ",{"type":46,"tag":60,"props":487,"children":489},{"className":488},[],[490],{"type":51,"value":165},{"type":51,"value":492}," if not yet deployed",{"type":46,"tag":131,"props":494,"children":495},{},[496,497],{"type":51,"value":438},{"type":46,"tag":60,"props":498,"children":500},{"className":499},[],[501],{"type":51,"value":502},"permissionedToken",{"type":46,"tag":54,"props":504,"children":505},{},[506],{"type":46,"tag":89,"props":507,"children":508},{},[509],{"type":51,"value":510},"Question 3 — Allowlist checker",{"type":46,"tag":127,"props":512,"children":513},{},[514,519,581,586],{"type":46,"tag":131,"props":515,"children":516},{},[517],{"type":51,"value":518},"Prompt: \"Do you already have an allowlist checker deployed for this token?\"",{"type":46,"tag":131,"props":520,"children":521},{},[522,524,530,532],{"type":51,"value":523},"Options, each mapped to the exact ",{"type":46,"tag":60,"props":525,"children":527},{"className":526},[],[528],{"type":51,"value":529},"allowlistChecker",{"type":51,"value":531}," value it produces:\n",{"type":46,"tag":127,"props":533,"children":534},{},[535,556],{"type":46,"tag":131,"props":536,"children":537},{},[538,540,546,548,554],{"type":51,"value":539},"\"Yes, use an existing address\" (then ask for the address via \"Other\") →\n",{"type":46,"tag":60,"props":541,"children":543},{"className":542},[],[544],{"type":51,"value":545},"mode: \"existing\"",{"type":51,"value":547},", ",{"type":46,"tag":60,"props":549,"children":551},{"className":550},[],[552],{"type":51,"value":553},"address",{"type":51,"value":555}," set to that address.",{"type":46,"tag":131,"props":557,"children":558},{},[559,561,567,568,573,575,580],{"type":51,"value":560},"\"No, I still need to deploy one\" → ",{"type":46,"tag":60,"props":562,"children":564},{"className":563},[],[565],{"type":51,"value":566},"mode: \"to-be-deployed\"",{"type":51,"value":547},{"type":46,"tag":60,"props":569,"children":571},{"className":570},[],[572],{"type":51,"value":553},{"type":51,"value":574}," set to ",{"type":46,"tag":60,"props":576,"children":578},{"className":577},[],[579],{"type":51,"value":353},{"type":51,"value":80},{"type":46,"tag":131,"props":582,"children":583},{},[584],{"type":51,"value":585},"Validation: address form above when \"existing\" is chosen",{"type":46,"tag":131,"props":587,"children":588},{},[589,590,596,598,604,606,611,613],{"type":51,"value":438},{"type":46,"tag":60,"props":591,"children":593},{"className":592},[],[594],{"type":51,"value":595},"allowlistChecker.mode",{"type":51,"value":597}," (",{"type":46,"tag":60,"props":599,"children":601},{"className":600},[],[602],{"type":51,"value":603},"existing",{"type":51,"value":605}," | ",{"type":46,"tag":60,"props":607,"children":609},{"className":608},[],[610],{"type":51,"value":369},{"type":51,"value":612},"), ",{"type":46,"tag":60,"props":614,"children":616},{"className":615},[],[617],{"type":51,"value":361},{"type":46,"tag":54,"props":619,"children":620},{},[621],{"type":46,"tag":89,"props":622,"children":623},{},[624],{"type":51,"value":625},"Question 4 — Adapter owner",{"type":46,"tag":127,"props":627,"children":628},{},[629,648,660,665,681],{"type":46,"tag":131,"props":630,"children":631},{},[632,634,639,640,646],{"type":51,"value":633},"Prompt: \"What address should own the ",{"type":46,"tag":60,"props":635,"children":637},{"className":636},[],[638],{"type":51,"value":231},{"type":51,"value":597},{"type":46,"tag":60,"props":641,"children":643},{"className":642},[],[644],{"type":51,"value":645},"initialOwner",{"type":51,"value":647},")?\"",{"type":46,"tag":131,"props":649,"children":650},{},[651,653,658],{"type":51,"value":652},"Options: \"Not yet decided — mark for resolution\" (stores the literal string\n",{"type":46,"tag":60,"props":654,"children":656},{"className":655},[],[657],{"type":51,"value":165},{"type":51,"value":659},"), custom address (via \"Other\")",{"type":46,"tag":131,"props":661,"children":662},{},[663],{"type":51,"value":664},"Note in the prompt: this key can change the allowlist checker, add or remove wrappers,\npause and resume swapping, and force-exit any LP position — the published guide\nrecommends a multisig. Do not pick this in a hurry just to finish the flow; use the\nresolution marker instead if the multisig or key is not decided yet.",{"type":46,"tag":131,"props":666,"children":667},{},[668,669,674,676],{"type":51,"value":477},{"type":46,"tag":60,"props":670,"children":672},{"className":671},[],[673],{"type":51,"value":483},{"type":51,"value":675}," and not the zero address, or the literal string\n",{"type":46,"tag":60,"props":677,"children":679},{"className":678},[],[680],{"type":51,"value":165},{"type":46,"tag":131,"props":682,"children":683},{},[684,685],{"type":51,"value":438},{"type":46,"tag":60,"props":686,"children":688},{"className":687},[],[689],{"type":51,"value":690},"adapterOwner",{"type":46,"tag":54,"props":692,"children":693},{},[694,699,701,706,708,713,715,720],{"type":46,"tag":89,"props":695,"children":696},{},[697],{"type":51,"value":698},"Validate:",{"type":51,"value":700}," confirm chain ID is a positive integer, the token address is either a\nvalid address or the literal string ",{"type":46,"tag":60,"props":702,"children":704},{"className":703},[],[705],{"type":51,"value":165},{"type":51,"value":707},", the checker address (if \"existing\" was\nchosen) matches the address regex, and the adapter owner is either a valid non-zero\naddress or the literal string ",{"type":46,"tag":60,"props":709,"children":711},{"className":710},[],[712],{"type":51,"value":165},{"type":51,"value":714},". Show a summary of the four collected values,\nflagging any field still marked ",{"type":46,"tag":60,"props":716,"children":718},{"className":717},[],[719],{"type":51,"value":165},{"type":51,"value":80},{"type":46,"tag":722,"props":723,"children":724},"hr",{},[],{"type":46,"tag":323,"props":726,"children":728},{"id":727},"batch-2-verification-core-wrappers-4-questions",[729],{"type":51,"value":730},"Batch 2: Verification & Core Wrappers (4 questions)",{"type":46,"tag":54,"props":732,"children":733},{},[734],{"type":46,"tag":89,"props":735,"children":736},{},[737],{"type":51,"value":738},"Question 1 — Verification deposit amount",{"type":46,"tag":127,"props":740,"children":741},{},[742,747,752,765,784],{"type":46,"tag":131,"props":743,"children":744},{},[745],{"type":51,"value":746},"Prompt: \"How much of the underlying token should be deposited for verification?\"",{"type":46,"tag":131,"props":748,"children":749},{},[750],{"type":51,"value":751},"Options: \"1 wei (recommended)\", Custom amount (via \"Other\")",{"type":46,"tag":131,"props":753,"children":754},{},[755,757,763],{"type":51,"value":756},"Note in the prompt: this deposit becomes the adapter's mintable headroom, there is no\nwithdraw function, and 1 wei is sufficient — see\n",{"type":46,"tag":69,"props":758,"children":760},{"href":759},".\u002Freferences\u002Fparameter-reference.md#verificationdepositamount",[761],{"type":51,"value":762},"Parameter Reference",{"type":51,"value":764},"\nbefore choosing anything larger.",{"type":46,"tag":131,"props":766,"children":767},{},[768,770,775,777,782],{"type":51,"value":769},"\"Recommended\" describes the value if asked and picked — it is never a license to fill\nin ",{"type":46,"tag":60,"props":771,"children":773},{"className":772},[],[774],{"type":51,"value":391},{"type":51,"value":776}," on the user's behalf when this question was skipped. See\n",{"type":46,"tag":69,"props":778,"children":780},{"href":779},"#front-loaded-or-skip-ahead-answers",[781],{"type":51,"value":328},{"type":51,"value":783}," above.",{"type":46,"tag":131,"props":785,"children":786},{},[787,788],{"type":51,"value":438},{"type":46,"tag":60,"props":789,"children":791},{"className":790},[],[792],{"type":51,"value":793},"verificationDepositAmount",{"type":46,"tag":54,"props":795,"children":796},{},[797],{"type":46,"tag":89,"props":798,"children":799},{},[800,802,808],{"type":51,"value":801},"Question 2 — ",{"type":46,"tag":60,"props":803,"children":805},{"className":804},[],[806],{"type":51,"value":807},"PermissionedPositionManager",{"type":51,"value":809}," address",{"type":46,"tag":127,"props":811,"children":812},{},[813,825,836,846],{"type":46,"tag":131,"props":814,"children":815},{},[816,818,823],{"type":51,"value":817},"Prompt: \"Do you have the ",{"type":46,"tag":60,"props":819,"children":821},{"className":820},[],[822],{"type":51,"value":807},{"type":51,"value":824}," address resolved for this\nchain?\"",{"type":46,"tag":131,"props":826,"children":827},{},[828,830,835],{"type":51,"value":829},"Options: \"Not yet resolved — mark for resolution\" (stores the literal string\n",{"type":46,"tag":60,"props":831,"children":833},{"className":832},[],[834],{"type":51,"value":165},{"type":51,"value":659},{"type":46,"tag":131,"props":837,"children":838},{},[839,841],{"type":51,"value":840},"Validation: address form, or the literal string ",{"type":46,"tag":60,"props":842,"children":844},{"className":843},[],[845],{"type":51,"value":165},{"type":46,"tag":131,"props":847,"children":848},{},[849,850],{"type":51,"value":438},{"type":46,"tag":60,"props":851,"children":853},{"className":852},[],[854],{"type":51,"value":855},"allowedWrappers.permissionedPositionManager",{"type":46,"tag":54,"props":857,"children":858},{},[859],{"type":46,"tag":89,"props":860,"children":861},{},[862],{"type":51,"value":863},"Question 3 — Universal Router (v2.2+) address",{"type":46,"tag":127,"props":865,"children":866},{},[867,880,890,910,919],{"type":46,"tag":131,"props":868,"children":869},{},[870,872,878],{"type":51,"value":871},"Prompt: \"Do you have the Universal Router ",{"type":46,"tag":60,"props":873,"children":875},{"className":874},[],[876],{"type":51,"value":877},"#v2.2",{"type":51,"value":879}," (or higher) address resolved for\nthis chain?\"",{"type":46,"tag":131,"props":881,"children":882},{},[883,884,889],{"type":51,"value":829},{"type":46,"tag":60,"props":885,"children":887},{"className":886},[],[888],{"type":51,"value":165},{"type":51,"value":659},{"type":46,"tag":131,"props":891,"children":892},{},[893,895,901,903,908],{"type":51,"value":894},"Note in the prompt: the plain ",{"type":46,"tag":60,"props":896,"children":898},{"className":897},[],[899],{"type":51,"value":900},"UniversalRouter",{"type":51,"value":902}," deployments key is a different,\nnon-permissioned router — only the ",{"type":46,"tag":60,"props":904,"children":906},{"className":905},[],[907],{"type":51,"value":877},{"type":51,"value":909}," deployment works here.",{"type":46,"tag":131,"props":911,"children":912},{},[913,914],{"type":51,"value":840},{"type":46,"tag":60,"props":915,"children":917},{"className":916},[],[918],{"type":51,"value":165},{"type":46,"tag":131,"props":920,"children":921},{},[922,923],{"type":51,"value":438},{"type":46,"tag":60,"props":924,"children":926},{"className":925},[],[927],{"type":51,"value":928},"allowedWrappers.universalRouterV2_2",{"type":46,"tag":54,"props":930,"children":931},{},[932],{"type":46,"tag":89,"props":933,"children":934},{},[935,937,943],{"type":51,"value":936},"Question 4 — ",{"type":46,"tag":60,"props":938,"children":940},{"className":939},[],[941],{"type":51,"value":942},"PermissionedHooks",{"type":51,"value":809},{"type":46,"tag":127,"props":945,"children":946},{},[947,966,976,988,997],{"type":46,"tag":131,"props":948,"children":949},{},[950,951,956,958,964],{"type":51,"value":817},{"type":46,"tag":60,"props":952,"children":954},{"className":953},[],[955],{"type":51,"value":942},{"type":51,"value":957}," address resolved for this chain, for\n",{"type":46,"tag":60,"props":959,"children":961},{"className":960},[],[962],{"type":51,"value":963},"setAllowedHook",{"type":51,"value":965},"?\"",{"type":46,"tag":131,"props":967,"children":968},{},[969,970,975],{"type":51,"value":829},{"type":46,"tag":60,"props":971,"children":973},{"className":972},[],[974],{"type":51,"value":165},{"type":51,"value":659},{"type":46,"tag":131,"props":977,"children":978},{},[979,981,986],{"type":51,"value":980},"Note in the prompt: this is the shared hook address, registered with\n",{"type":46,"tag":60,"props":982,"children":984},{"className":983},[],[985],{"type":51,"value":963},{"type":51,"value":987}," on the position manager — it is never registered as a wrapper.",{"type":46,"tag":131,"props":989,"children":990},{},[991,992],{"type":51,"value":840},{"type":46,"tag":60,"props":993,"children":995},{"className":994},[],[996],{"type":51,"value":165},{"type":46,"tag":131,"props":998,"children":999},{},[1000,1001],{"type":51,"value":438},{"type":46,"tag":60,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":51,"value":1006},"hook",{"type":46,"tag":54,"props":1008,"children":1009},{},[1010,1014,1016,1021],{"type":46,"tag":89,"props":1011,"children":1012},{},[1013],{"type":51,"value":698},{"type":51,"value":1015}," confirm the deposit amount is a positive integer (not zero) expressed in\nthe token's smallest unit, and that every address field is either a valid address or the\nliteral string ",{"type":46,"tag":60,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":51,"value":165},{"type":51,"value":1022}," — never a guessed or invented value. Show a summary.",{"type":46,"tag":722,"props":1024,"children":1025},{},[],{"type":46,"tag":323,"props":1027,"children":1029},{"id":1028},"batch-3-remaining-wrappers-pool-currency-4-questions",[1030],{"type":51,"value":1031},"Batch 3: Remaining Wrappers & Pool Currency (4 questions)",{"type":46,"tag":54,"props":1033,"children":1034},{},[1035],{"type":46,"tag":89,"props":1036,"children":1037},{},[1038,1040,1046],{"type":51,"value":1039},"Question 1 — ",{"type":46,"tag":60,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":51,"value":1045},"V4Quoter",{"type":51,"value":809},{"type":46,"tag":127,"props":1048,"children":1049},{},[1050,1061,1071,1080],{"type":46,"tag":131,"props":1051,"children":1052},{},[1053,1054,1059],{"type":51,"value":817},{"type":46,"tag":60,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":51,"value":1045},{"type":51,"value":1060}," address resolved for this chain?\"",{"type":46,"tag":131,"props":1062,"children":1063},{},[1064,1065,1070],{"type":51,"value":829},{"type":46,"tag":60,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":51,"value":165},{"type":51,"value":659},{"type":46,"tag":131,"props":1072,"children":1073},{},[1074,1075],{"type":51,"value":840},{"type":46,"tag":60,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":51,"value":165},{"type":46,"tag":131,"props":1081,"children":1082},{},[1083,1084],{"type":51,"value":438},{"type":46,"tag":60,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":51,"value":1089},"allowedWrappers.v4Quoter",{"type":46,"tag":54,"props":1091,"children":1092},{},[1093],{"type":46,"tag":89,"props":1094,"children":1095},{},[1096,1097,1103],{"type":51,"value":801},{"type":46,"tag":60,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":51,"value":1102},"MixedRouteQuoterV2",{"type":51,"value":809},{"type":46,"tag":127,"props":1105,"children":1106},{},[1107,1117,1127,1136],{"type":46,"tag":131,"props":1108,"children":1109},{},[1110,1111,1116],{"type":51,"value":817},{"type":46,"tag":60,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":51,"value":1102},{"type":51,"value":1060},{"type":46,"tag":131,"props":1118,"children":1119},{},[1120,1121,1126],{"type":51,"value":829},{"type":46,"tag":60,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":51,"value":165},{"type":51,"value":659},{"type":46,"tag":131,"props":1128,"children":1129},{},[1130,1131],{"type":51,"value":840},{"type":46,"tag":60,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":51,"value":165},{"type":46,"tag":131,"props":1137,"children":1138},{},[1139,1140],{"type":51,"value":438},{"type":46,"tag":60,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":51,"value":1145},"allowedWrappers.mixedRouteQuoterV2",{"type":46,"tag":54,"props":1147,"children":1148},{},[1149],{"type":46,"tag":89,"props":1150,"children":1151},{},[1152],{"type":51,"value":1153},"Question 3 — Paired currency",{"type":46,"tag":127,"props":1155,"children":1156},{},[1157,1162,1167,1180,1215],{"type":46,"tag":131,"props":1158,"children":1159},{},[1160],{"type":51,"value":1161},"Prompt: \"What currency should the pool pair against the permissioned token?\"",{"type":46,"tag":131,"props":1163,"children":1164},{},[1165],{"type":51,"value":1166},"Options: \"Native ETH\", custom ERC-20 address (via \"Other\")",{"type":46,"tag":131,"props":1168,"children":1169},{},[1170,1172,1178],{"type":51,"value":1171},"Note in the prompt: the permissioned token's side of the pool is always the adapter,\nnever the underlying token — this question is only about the ",{"type":46,"tag":1173,"props":1174,"children":1175},"em",{},[1176],{"type":51,"value":1177},"other",{"type":51,"value":1179}," currency.",{"type":46,"tag":131,"props":1181,"children":1182},{},[1183,1185,1191,1193,1199,1201,1206,1208,1213],{"type":51,"value":1184},"Validation: address form for an ERC-20 and not the zero address, or the literal string\n",{"type":46,"tag":60,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":51,"value":1190},"\"native\"",{"type":51,"value":1192}," (the native-currency sentinel; see ",{"type":46,"tag":69,"props":1194,"children":1196},{"href":1195},".\u002Freferences\u002Fconfig-schema.md#address-validation",[1197],{"type":51,"value":1198},"Address Validation",{"type":51,"value":1200},"\nfor the full semantics). A user who supplies the zero address here means ",{"type":46,"tag":60,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":51,"value":1190},{"type":51,"value":1207}," —\nrecord ",{"type":46,"tag":60,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":51,"value":1190},{"type":51,"value":1214},", never the zero address.",{"type":46,"tag":131,"props":1216,"children":1217},{},[1218,1219],{"type":51,"value":438},{"type":46,"tag":60,"props":1220,"children":1222},{"className":1221},[],[1223],{"type":51,"value":1224},"pool.pairedCurrency",{"type":46,"tag":54,"props":1226,"children":1227},{},[1228],{"type":46,"tag":89,"props":1229,"children":1230},{},[1231],{"type":51,"value":1232},"Question 4 — Fee tier",{"type":46,"tag":127,"props":1234,"children":1235},{},[1236,1241,1246,1251],{"type":46,"tag":131,"props":1237,"children":1238},{},[1239],{"type":51,"value":1240},"Prompt: \"What fee tier should the pool use?\"",{"type":46,"tag":131,"props":1242,"children":1243},{},[1244],{"type":51,"value":1245},"Options: \"0.05% (500)\", \"0.30% (3000)\", \"1.00% (10000)\", Custom (via \"Other\")",{"type":46,"tag":131,"props":1247,"children":1248},{},[1249],{"type":51,"value":1250},"Validation: positive integer, hundredths of a basis point",{"type":46,"tag":131,"props":1252,"children":1253},{},[1254,1255],{"type":51,"value":438},{"type":46,"tag":60,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":51,"value":1260},"pool.feeTier",{"type":46,"tag":54,"props":1262,"children":1263},{},[1264,1268,1270,1275,1277,1282,1284,1289,1291,1297,1299,1304,1306,1311],{"type":46,"tag":89,"props":1265,"children":1266},{},[1267],{"type":51,"value":698},{"type":51,"value":1269}," confirm both remaining wrapper fields are a valid address or the literal\nstring ",{"type":46,"tag":60,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":51,"value":165},{"type":51,"value":1276},", the paired currency is a valid non-zero address or the literal string\n",{"type":46,"tag":60,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":51,"value":1190},{"type":51,"value":1283},", and the fee tier is a positive integer. When the paired currency is a resolved\naddress and ",{"type":46,"tag":60,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":51,"value":502},{"type":51,"value":1290}," is also a resolved address, confirm the two differ —\npairing the permissioned token against itself builds a ",{"type":46,"tag":60,"props":1292,"children":1294},{"className":1293},[],[1295],{"type":51,"value":1296},"PoolKey",{"type":51,"value":1298}," that either fails at the\nPoolManager level or creates a pool nobody intended (see\n",{"type":46,"tag":69,"props":1300,"children":1302},{"href":1301},".\u002Freferences\u002Fparameter-reference.md#poolpairedcurrency",[1303],{"type":51,"value":762},{"type":51,"value":1305},"). Show a\nsummary of all four wrappers,\nthe hook, and the pool currency collected so far, and flag every field still marked\n",{"type":46,"tag":60,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":51,"value":165},{"type":51,"value":80},{"type":46,"tag":722,"props":1313,"children":1314},{},[],{"type":46,"tag":323,"props":1316,"children":1318},{"id":1317},"batch-4-pricing-seeding-3-questions",[1319],{"type":51,"value":1320},"Batch 4: Pricing & Seeding (3 questions)",{"type":46,"tag":54,"props":1322,"children":1323},{},[1324],{"type":46,"tag":89,"props":1325,"children":1326},{},[1327],{"type":51,"value":1328},"Question 1 — Tick spacing",{"type":46,"tag":127,"props":1330,"children":1331},{},[1332,1337,1342,1347],{"type":46,"tag":131,"props":1333,"children":1334},{},[1335],{"type":51,"value":1336},"Prompt: \"What tick spacing should the pool use?\"",{"type":46,"tag":131,"props":1338,"children":1339},{},[1340],{"type":51,"value":1341},"Options: \"10 (stable-like pairs)\", \"60 (standard)\", \"200 (wide-range pairs)\", Custom\n(via \"Other\")",{"type":46,"tag":131,"props":1343,"children":1344},{},[1345],{"type":51,"value":1346},"Validation: positive integer",{"type":46,"tag":131,"props":1348,"children":1349},{},[1350,1351],{"type":51,"value":438},{"type":46,"tag":60,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":51,"value":1356},"pool.tickSpacing",{"type":46,"tag":54,"props":1358,"children":1359},{},[1360],{"type":46,"tag":89,"props":1361,"children":1362},{},[1363],{"type":51,"value":1364},"Question 2 — Starting price",{"type":46,"tag":127,"props":1366,"children":1367},{},[1368,1373,1378,1383],{"type":46,"tag":131,"props":1369,"children":1370},{},[1371],{"type":51,"value":1372},"Prompt: \"What should the pool's starting price be, expressed as paired-currency per\npermissioned-token?\"",{"type":46,"tag":131,"props":1374,"children":1375},{},[1376],{"type":51,"value":1377},"Options: \"1:1 (equal value ratio)\", Custom ratio (via \"Other\")",{"type":46,"tag":131,"props":1379,"children":1380},{},[1381],{"type":51,"value":1382},"Validation: positive number",{"type":46,"tag":131,"props":1384,"children":1385},{},[1386,1387,1393,1395,1401],{"type":51,"value":438},{"type":46,"tag":60,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":51,"value":1392},"pool.startingPriceRatio",{"type":51,"value":1394}," (a human-readable ratio; the deployer skill converts\nthis to ",{"type":46,"tag":60,"props":1396,"children":1398},{"className":1397},[],[1399],{"type":51,"value":1400},"sqrtPriceX96",{"type":51,"value":1402}," at initialization time, since that conversion depends on the\ndecimals of both currencies, which are not yet resolved at configuration time)",{"type":46,"tag":54,"props":1404,"children":1405},{},[1406],{"type":46,"tag":89,"props":1407,"children":1408},{},[1409],{"type":51,"value":1410},"Question 3 — Seeding intent",{"type":46,"tag":127,"props":1412,"children":1413},{},[1414,1419,1524,1543,1556,1624],{"type":46,"tag":131,"props":1415,"children":1416},{},[1417],{"type":51,"value":1418},"Prompt: \"Do you plan to seed liquidity as part of this same setup?\"",{"type":46,"tag":131,"props":1420,"children":1421},{},[1422,1423,1429,1430],{"type":51,"value":523},{"type":46,"tag":60,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":51,"value":1428},"seeding.intent",{"type":51,"value":531},{"type":46,"tag":127,"props":1431,"children":1432},{},[1433,1488,1506],{"type":46,"tag":131,"props":1434,"children":1435},{},[1436,1438,1444,1445,1451,1453,1458,1460,1478,1480,1486],{"type":51,"value":1437},"\"Yes, from the adapter owner's wallet\" → ",{"type":46,"tag":60,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":51,"value":1443},"intent: \"seed-now\"",{"type":51,"value":547},{"type":46,"tag":60,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":51,"value":1450},"wallet",{"type":51,"value":1452}," set to the\nsame address already collected as ",{"type":46,"tag":60,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":51,"value":690},{"type":51,"value":1459}," in Batch 1. ",{"type":46,"tag":89,"props":1461,"children":1462},{},[1463,1465,1470,1472,1477],{"type":51,"value":1464},"Offer this option\nonly when ",{"type":46,"tag":60,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":51,"value":690},{"type":51,"value":1471}," is a real address — not when it is the literal string\n",{"type":46,"tag":60,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":51,"value":165},{"type":51,"value":80},{"type":51,"value":1479}," ",{"type":46,"tag":60,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":51,"value":1485},"seeding.wallet",{"type":51,"value":1487}," must always be a real address (see Validation\nbelow), so this option cannot copy forward an unresolved owner.",{"type":46,"tag":131,"props":1489,"children":1490},{},[1491,1493,1498,1499,1504],{"type":51,"value":1492},"\"Yes, from a different wallet\" (then ask for the address via \"Other\") →\n",{"type":46,"tag":60,"props":1494,"children":1496},{"className":1495},[],[1497],{"type":51,"value":1443},{"type":51,"value":547},{"type":46,"tag":60,"props":1500,"children":1502},{"className":1501},[],[1503],{"type":51,"value":1450},{"type":51,"value":1505}," set to that address",{"type":46,"tag":131,"props":1507,"children":1508},{},[1509,1511,1517,1518],{"type":51,"value":1510},"\"Not yet — pool creation only\" → ",{"type":46,"tag":60,"props":1512,"children":1514},{"className":1513},[],[1515],{"type":51,"value":1516},"intent: \"none\"",{"type":51,"value":547},{"type":46,"tag":60,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":51,"value":1523},"wallet: null",{"type":46,"tag":131,"props":1525,"children":1526},{},[1527,1529,1534,1536,1541],{"type":51,"value":1528},"If ",{"type":46,"tag":60,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":51,"value":690},{"type":51,"value":1535}," is ",{"type":46,"tag":60,"props":1537,"children":1539},{"className":1538},[],[1540],{"type":51,"value":165},{"type":51,"value":1542},", present only the second and third options — drop the\nfirst option from the list entirely rather than showing it disabled.",{"type":46,"tag":131,"props":1544,"children":1545},{},[1546,1548,1554],{"type":51,"value":1547},"Note in the prompt: whichever wallet seeds liquidity, and the wallet that will receive\nthe position, both need ",{"type":46,"tag":60,"props":1549,"children":1551},{"className":1550},[],[1552],{"type":51,"value":1553},"LIQUIDITY_ALLOWED",{"type":51,"value":1555}," on the issuer's own allowlist before the\nfirst mint — being the adapter owner grants nothing on the liquidity path.",{"type":46,"tag":131,"props":1557,"children":1558},{},[1559,1561,1567,1568,1574,1575,1580,1582,1587,1589,1594,1595,1601,1602,1607,1609,1614,1616,1622],{"type":51,"value":1560},"Validation: when ",{"type":46,"tag":60,"props":1562,"children":1564},{"className":1563},[],[1565],{"type":51,"value":1566},"intent",{"type":51,"value":1535},{"type":46,"tag":60,"props":1569,"children":1571},{"className":1570},[],[1572],{"type":51,"value":1573},"\"seed-now\"",{"type":51,"value":547},{"type":46,"tag":60,"props":1576,"children":1578},{"className":1577},[],[1579],{"type":51,"value":1450},{"type":51,"value":1581}," is required and must match the\naddress regex — never the literal string ",{"type":46,"tag":60,"props":1583,"children":1585},{"className":1584},[],[1586],{"type":51,"value":165},{"type":51,"value":1588}," or any other sentinel; when\n",{"type":46,"tag":60,"props":1590,"children":1592},{"className":1591},[],[1593],{"type":51,"value":1566},{"type":51,"value":1535},{"type":46,"tag":60,"props":1596,"children":1598},{"className":1597},[],[1599],{"type":51,"value":1600},"\"none\"",{"type":51,"value":547},{"type":46,"tag":60,"props":1603,"children":1605},{"className":1604},[],[1606],{"type":51,"value":1450},{"type":51,"value":1608}," must be ",{"type":46,"tag":60,"props":1610,"children":1612},{"className":1611},[],[1613],{"type":51,"value":353},{"type":51,"value":1615},". This flow never produces ",{"type":46,"tag":60,"props":1617,"children":1619},{"className":1618},[],[1620],{"type":51,"value":1621},"\"seed-later\"",{"type":51,"value":1623},"\n— that enum value exists in the schema for a config edited or extended outside this\nflow, not for output from these three options.",{"type":46,"tag":131,"props":1625,"children":1626},{},[1627,1628,1633,1634],{"type":51,"value":438},{"type":46,"tag":60,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":51,"value":1428},{"type":51,"value":547},{"type":46,"tag":60,"props":1635,"children":1637},{"className":1636},[],[1638],{"type":51,"value":1485},{"type":46,"tag":54,"props":1640,"children":1641},{},[1642,1646,1648,1653,1655,1660,1662,1667,1668,1673,1675,1680,1682,1687,1689,1694,1696,1701,1703,1708,1710,1715],{"type":46,"tag":89,"props":1643,"children":1644},{},[1645],{"type":51,"value":698},{"type":51,"value":1647}," confirm tick spacing is a positive integer, the starting price ratio is a\npositive number, and — per the branch taken above — either ",{"type":46,"tag":60,"props":1649,"children":1651},{"className":1650},[],[1652],{"type":51,"value":1485},{"type":51,"value":1654}," is a valid,\nnon-",{"type":46,"tag":60,"props":1656,"children":1658},{"className":1657},[],[1659],{"type":51,"value":165},{"type":51,"value":1661}," address (when ",{"type":46,"tag":60,"props":1663,"children":1665},{"className":1664},[],[1666],{"type":51,"value":1566},{"type":51,"value":1535},{"type":46,"tag":60,"props":1669,"children":1671},{"className":1670},[],[1672],{"type":51,"value":1573},{"type":51,"value":1674},") or it is ",{"type":46,"tag":60,"props":1676,"children":1678},{"className":1677},[],[1679],{"type":51,"value":353},{"type":51,"value":1681}," (when ",{"type":46,"tag":60,"props":1683,"children":1685},{"className":1684},[],[1686],{"type":51,"value":1566},{"type":51,"value":1688}," is\n",{"type":46,"tag":60,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":51,"value":1600},{"type":51,"value":1695},"). ",{"type":46,"tag":60,"props":1697,"children":1699},{"className":1698},[],[1700],{"type":51,"value":1485},{"type":51,"value":1702}," never accepts the literal string ",{"type":46,"tag":60,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":51,"value":165},{"type":51,"value":1709},", even when it\nwas going to be copied from ",{"type":46,"tag":60,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":51,"value":690},{"type":51,"value":1716}," — see the option restriction above. Show the\nfull configuration collected across all four batches.",{"type":46,"tag":722,"props":1718,"children":1719},{},[],{"type":46,"tag":112,"props":1721,"children":1723},{"id":1722},"generate-and-display-the-configuration",[1724],{"type":51,"value":1725},"Generate and Display the Configuration",{"type":46,"tag":54,"props":1727,"children":1728},{},[1729,1731,1739,1741,1746],{"type":51,"value":1730},"Assemble everything collected into the JSON shape defined in\n",{"type":46,"tag":69,"props":1732,"children":1733},{"href":301},[1734],{"type":46,"tag":60,"props":1735,"children":1737},{"className":1736},[],[1738],{"type":51,"value":308},{"type":51,"value":1740},", keyed by ",{"type":46,"tag":60,"props":1742,"children":1744},{"className":1743},[],[1745],{"type":51,"value":444},{"type":51,"value":1747}," at the top\nlevel:",{"type":46,"tag":1749,"props":1750,"children":1755},"pre",{"className":1751,"code":1752,"language":1753,"meta":1754,"style":1754},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"\u003CchainId>\": {\n    \"permissionedToken\": \"...\",\n    \"allowlistChecker\": { \"mode\": \"...\", \"address\": \"...\" },\n    \"adapterOwner\": \"...\",\n    \"verificationDepositAmount\": \"...\",\n    \"allowedWrappers\": {\n      \"permissionedPositionManager\": \"...\",\n      \"universalRouterV2_2\": \"...\",\n      \"v4Quoter\": \"...\",\n      \"mixedRouteQuoterV2\": \"...\"\n    },\n    \"hook\": \"...\",\n    \"pool\": {\n      \"pairedCurrency\": \"native\",\n      \"feeTier\": 3000,\n      \"tickSpacing\": 60,\n      \"startingPriceRatio\": 1\n    },\n    \"seeding\": { \"intent\": \"seed-now\", \"wallet\": \"...\" }\n  }\n}\n","json","",[1756],{"type":46,"tag":60,"props":1757,"children":1758},{"__ignoreMap":1754},[1759,1771,1801,1843,1936,1972,2008,2033,2071,2108,2145,2179,2188,2224,2249,2287,2317,2347,2373,2381,2472,2481],{"type":46,"tag":1760,"props":1761,"children":1764},"span",{"class":1762,"line":1763},"line",1,[1765],{"type":46,"tag":1760,"props":1766,"children":1768},{"style":1767},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1769],{"type":51,"value":1770},"{\n",{"type":46,"tag":1760,"props":1772,"children":1774},{"class":1762,"line":1773},2,[1775,1780,1786,1791,1796],{"type":46,"tag":1760,"props":1776,"children":1777},{"style":1767},[1778],{"type":51,"value":1779},"  \"",{"type":46,"tag":1760,"props":1781,"children":1783},{"style":1782},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1784],{"type":51,"value":1785},"\u003CchainId>",{"type":46,"tag":1760,"props":1787,"children":1788},{"style":1767},[1789],{"type":51,"value":1790},"\"",{"type":46,"tag":1760,"props":1792,"children":1793},{"style":1767},[1794],{"type":51,"value":1795},":",{"type":46,"tag":1760,"props":1797,"children":1798},{"style":1767},[1799],{"type":51,"value":1800}," {\n",{"type":46,"tag":1760,"props":1802,"children":1804},{"class":1762,"line":1803},3,[1805,1810,1815,1819,1823,1828,1834,1838],{"type":46,"tag":1760,"props":1806,"children":1807},{"style":1767},[1808],{"type":51,"value":1809},"    \"",{"type":46,"tag":1760,"props":1811,"children":1813},{"style":1812},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1814],{"type":51,"value":502},{"type":46,"tag":1760,"props":1816,"children":1817},{"style":1767},[1818],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1820,"children":1821},{"style":1767},[1822],{"type":51,"value":1795},{"type":46,"tag":1760,"props":1824,"children":1825},{"style":1767},[1826],{"type":51,"value":1827}," \"",{"type":46,"tag":1760,"props":1829,"children":1831},{"style":1830},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1832],{"type":51,"value":1833},"...",{"type":46,"tag":1760,"props":1835,"children":1836},{"style":1767},[1837],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1839,"children":1840},{"style":1767},[1841],{"type":51,"value":1842},",\n",{"type":46,"tag":1760,"props":1844,"children":1846},{"class":1762,"line":1845},4,[1847,1851,1855,1859,1863,1868,1872,1878,1882,1886,1890,1894,1898,1903,1907,1911,1915,1919,1923,1927,1931],{"type":46,"tag":1760,"props":1848,"children":1849},{"style":1767},[1850],{"type":51,"value":1809},{"type":46,"tag":1760,"props":1852,"children":1853},{"style":1812},[1854],{"type":51,"value":529},{"type":46,"tag":1760,"props":1856,"children":1857},{"style":1767},[1858],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1860,"children":1861},{"style":1767},[1862],{"type":51,"value":1795},{"type":46,"tag":1760,"props":1864,"children":1865},{"style":1767},[1866],{"type":51,"value":1867}," {",{"type":46,"tag":1760,"props":1869,"children":1870},{"style":1767},[1871],{"type":51,"value":1827},{"type":46,"tag":1760,"props":1873,"children":1875},{"style":1874},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1876],{"type":51,"value":1877},"mode",{"type":46,"tag":1760,"props":1879,"children":1880},{"style":1767},[1881],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1883,"children":1884},{"style":1767},[1885],{"type":51,"value":1795},{"type":46,"tag":1760,"props":1887,"children":1888},{"style":1767},[1889],{"type":51,"value":1827},{"type":46,"tag":1760,"props":1891,"children":1892},{"style":1830},[1893],{"type":51,"value":1833},{"type":46,"tag":1760,"props":1895,"children":1896},{"style":1767},[1897],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1899,"children":1900},{"style":1767},[1901],{"type":51,"value":1902},",",{"type":46,"tag":1760,"props":1904,"children":1905},{"style":1767},[1906],{"type":51,"value":1827},{"type":46,"tag":1760,"props":1908,"children":1909},{"style":1874},[1910],{"type":51,"value":553},{"type":46,"tag":1760,"props":1912,"children":1913},{"style":1767},[1914],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1916,"children":1917},{"style":1767},[1918],{"type":51,"value":1795},{"type":46,"tag":1760,"props":1920,"children":1921},{"style":1767},[1922],{"type":51,"value":1827},{"type":46,"tag":1760,"props":1924,"children":1925},{"style":1830},[1926],{"type":51,"value":1833},{"type":46,"tag":1760,"props":1928,"children":1929},{"style":1767},[1930],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1932,"children":1933},{"style":1767},[1934],{"type":51,"value":1935}," },\n",{"type":46,"tag":1760,"props":1937,"children":1939},{"class":1762,"line":1938},5,[1940,1944,1948,1952,1956,1960,1964,1968],{"type":46,"tag":1760,"props":1941,"children":1942},{"style":1767},[1943],{"type":51,"value":1809},{"type":46,"tag":1760,"props":1945,"children":1946},{"style":1812},[1947],{"type":51,"value":690},{"type":46,"tag":1760,"props":1949,"children":1950},{"style":1767},[1951],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1953,"children":1954},{"style":1767},[1955],{"type":51,"value":1795},{"type":46,"tag":1760,"props":1957,"children":1958},{"style":1767},[1959],{"type":51,"value":1827},{"type":46,"tag":1760,"props":1961,"children":1962},{"style":1830},[1963],{"type":51,"value":1833},{"type":46,"tag":1760,"props":1965,"children":1966},{"style":1767},[1967],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1969,"children":1970},{"style":1767},[1971],{"type":51,"value":1842},{"type":46,"tag":1760,"props":1973,"children":1975},{"class":1762,"line":1974},6,[1976,1980,1984,1988,1992,1996,2000,2004],{"type":46,"tag":1760,"props":1977,"children":1978},{"style":1767},[1979],{"type":51,"value":1809},{"type":46,"tag":1760,"props":1981,"children":1982},{"style":1812},[1983],{"type":51,"value":793},{"type":46,"tag":1760,"props":1985,"children":1986},{"style":1767},[1987],{"type":51,"value":1790},{"type":46,"tag":1760,"props":1989,"children":1990},{"style":1767},[1991],{"type":51,"value":1795},{"type":46,"tag":1760,"props":1993,"children":1994},{"style":1767},[1995],{"type":51,"value":1827},{"type":46,"tag":1760,"props":1997,"children":1998},{"style":1830},[1999],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2001,"children":2002},{"style":1767},[2003],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2005,"children":2006},{"style":1767},[2007],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2009,"children":2011},{"class":1762,"line":2010},7,[2012,2016,2021,2025,2029],{"type":46,"tag":1760,"props":2013,"children":2014},{"style":1767},[2015],{"type":51,"value":1809},{"type":46,"tag":1760,"props":2017,"children":2018},{"style":1812},[2019],{"type":51,"value":2020},"allowedWrappers",{"type":46,"tag":1760,"props":2022,"children":2023},{"style":1767},[2024],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2026,"children":2027},{"style":1767},[2028],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2030,"children":2031},{"style":1767},[2032],{"type":51,"value":1800},{"type":46,"tag":1760,"props":2034,"children":2036},{"class":1762,"line":2035},8,[2037,2042,2047,2051,2055,2059,2063,2067],{"type":46,"tag":1760,"props":2038,"children":2039},{"style":1767},[2040],{"type":51,"value":2041},"      \"",{"type":46,"tag":1760,"props":2043,"children":2044},{"style":1874},[2045],{"type":51,"value":2046},"permissionedPositionManager",{"type":46,"tag":1760,"props":2048,"children":2049},{"style":1767},[2050],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2052,"children":2053},{"style":1767},[2054],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2056,"children":2057},{"style":1767},[2058],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2060,"children":2061},{"style":1830},[2062],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2064,"children":2065},{"style":1767},[2066],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2068,"children":2069},{"style":1767},[2070],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2072,"children":2074},{"class":1762,"line":2073},9,[2075,2079,2084,2088,2092,2096,2100,2104],{"type":46,"tag":1760,"props":2076,"children":2077},{"style":1767},[2078],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2080,"children":2081},{"style":1874},[2082],{"type":51,"value":2083},"universalRouterV2_2",{"type":46,"tag":1760,"props":2085,"children":2086},{"style":1767},[2087],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2089,"children":2090},{"style":1767},[2091],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2093,"children":2094},{"style":1767},[2095],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2097,"children":2098},{"style":1830},[2099],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2101,"children":2102},{"style":1767},[2103],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2105,"children":2106},{"style":1767},[2107],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2109,"children":2111},{"class":1762,"line":2110},10,[2112,2116,2121,2125,2129,2133,2137,2141],{"type":46,"tag":1760,"props":2113,"children":2114},{"style":1767},[2115],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2117,"children":2118},{"style":1874},[2119],{"type":51,"value":2120},"v4Quoter",{"type":46,"tag":1760,"props":2122,"children":2123},{"style":1767},[2124],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2126,"children":2127},{"style":1767},[2128],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2130,"children":2131},{"style":1767},[2132],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2134,"children":2135},{"style":1830},[2136],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2138,"children":2139},{"style":1767},[2140],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2142,"children":2143},{"style":1767},[2144],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2146,"children":2148},{"class":1762,"line":2147},11,[2149,2153,2158,2162,2166,2170,2174],{"type":46,"tag":1760,"props":2150,"children":2151},{"style":1767},[2152],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2154,"children":2155},{"style":1874},[2156],{"type":51,"value":2157},"mixedRouteQuoterV2",{"type":46,"tag":1760,"props":2159,"children":2160},{"style":1767},[2161],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2163,"children":2164},{"style":1767},[2165],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2167,"children":2168},{"style":1767},[2169],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2171,"children":2172},{"style":1830},[2173],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2175,"children":2176},{"style":1767},[2177],{"type":51,"value":2178},"\"\n",{"type":46,"tag":1760,"props":2180,"children":2182},{"class":1762,"line":2181},12,[2183],{"type":46,"tag":1760,"props":2184,"children":2185},{"style":1767},[2186],{"type":51,"value":2187},"    },\n",{"type":46,"tag":1760,"props":2189,"children":2191},{"class":1762,"line":2190},13,[2192,2196,2200,2204,2208,2212,2216,2220],{"type":46,"tag":1760,"props":2193,"children":2194},{"style":1767},[2195],{"type":51,"value":1809},{"type":46,"tag":1760,"props":2197,"children":2198},{"style":1812},[2199],{"type":51,"value":1006},{"type":46,"tag":1760,"props":2201,"children":2202},{"style":1767},[2203],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2205,"children":2206},{"style":1767},[2207],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2209,"children":2210},{"style":1767},[2211],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2213,"children":2214},{"style":1830},[2215],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2217,"children":2218},{"style":1767},[2219],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2221,"children":2222},{"style":1767},[2223],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2225,"children":2227},{"class":1762,"line":2226},14,[2228,2232,2237,2241,2245],{"type":46,"tag":1760,"props":2229,"children":2230},{"style":1767},[2231],{"type":51,"value":1809},{"type":46,"tag":1760,"props":2233,"children":2234},{"style":1812},[2235],{"type":51,"value":2236},"pool",{"type":46,"tag":1760,"props":2238,"children":2239},{"style":1767},[2240],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2242,"children":2243},{"style":1767},[2244],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2246,"children":2247},{"style":1767},[2248],{"type":51,"value":1800},{"type":46,"tag":1760,"props":2250,"children":2252},{"class":1762,"line":2251},15,[2253,2257,2262,2266,2270,2274,2279,2283],{"type":46,"tag":1760,"props":2254,"children":2255},{"style":1767},[2256],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2258,"children":2259},{"style":1874},[2260],{"type":51,"value":2261},"pairedCurrency",{"type":46,"tag":1760,"props":2263,"children":2264},{"style":1767},[2265],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2267,"children":2268},{"style":1767},[2269],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2271,"children":2272},{"style":1767},[2273],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2275,"children":2276},{"style":1830},[2277],{"type":51,"value":2278},"native",{"type":46,"tag":1760,"props":2280,"children":2281},{"style":1767},[2282],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2284,"children":2285},{"style":1767},[2286],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2288,"children":2290},{"class":1762,"line":2289},16,[2291,2295,2300,2304,2308,2313],{"type":46,"tag":1760,"props":2292,"children":2293},{"style":1767},[2294],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2296,"children":2297},{"style":1874},[2298],{"type":51,"value":2299},"feeTier",{"type":46,"tag":1760,"props":2301,"children":2302},{"style":1767},[2303],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2305,"children":2306},{"style":1767},[2307],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2309,"children":2310},{"style":1874},[2311],{"type":51,"value":2312}," 3000",{"type":46,"tag":1760,"props":2314,"children":2315},{"style":1767},[2316],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2318,"children":2320},{"class":1762,"line":2319},17,[2321,2325,2330,2334,2338,2343],{"type":46,"tag":1760,"props":2322,"children":2323},{"style":1767},[2324],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2326,"children":2327},{"style":1874},[2328],{"type":51,"value":2329},"tickSpacing",{"type":46,"tag":1760,"props":2331,"children":2332},{"style":1767},[2333],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2335,"children":2336},{"style":1767},[2337],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2339,"children":2340},{"style":1874},[2341],{"type":51,"value":2342}," 60",{"type":46,"tag":1760,"props":2344,"children":2345},{"style":1767},[2346],{"type":51,"value":1842},{"type":46,"tag":1760,"props":2348,"children":2350},{"class":1762,"line":2349},18,[2351,2355,2360,2364,2368],{"type":46,"tag":1760,"props":2352,"children":2353},{"style":1767},[2354],{"type":51,"value":2041},{"type":46,"tag":1760,"props":2356,"children":2357},{"style":1874},[2358],{"type":51,"value":2359},"startingPriceRatio",{"type":46,"tag":1760,"props":2361,"children":2362},{"style":1767},[2363],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2365,"children":2366},{"style":1767},[2367],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2369,"children":2370},{"style":1874},[2371],{"type":51,"value":2372}," 1\n",{"type":46,"tag":1760,"props":2374,"children":2376},{"class":1762,"line":2375},19,[2377],{"type":46,"tag":1760,"props":2378,"children":2379},{"style":1767},[2380],{"type":51,"value":2187},{"type":46,"tag":1760,"props":2382,"children":2384},{"class":1762,"line":2383},20,[2385,2389,2394,2398,2402,2406,2410,2414,2418,2422,2426,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467],{"type":46,"tag":1760,"props":2386,"children":2387},{"style":1767},[2388],{"type":51,"value":1809},{"type":46,"tag":1760,"props":2390,"children":2391},{"style":1812},[2392],{"type":51,"value":2393},"seeding",{"type":46,"tag":1760,"props":2395,"children":2396},{"style":1767},[2397],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2399,"children":2400},{"style":1767},[2401],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2403,"children":2404},{"style":1767},[2405],{"type":51,"value":1867},{"type":46,"tag":1760,"props":2407,"children":2408},{"style":1767},[2409],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2411,"children":2412},{"style":1874},[2413],{"type":51,"value":1566},{"type":46,"tag":1760,"props":2415,"children":2416},{"style":1767},[2417],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2419,"children":2420},{"style":1767},[2421],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2423,"children":2424},{"style":1767},[2425],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2427,"children":2428},{"style":1830},[2429],{"type":51,"value":2430},"seed-now",{"type":46,"tag":1760,"props":2432,"children":2433},{"style":1767},[2434],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2436,"children":2437},{"style":1767},[2438],{"type":51,"value":1902},{"type":46,"tag":1760,"props":2440,"children":2441},{"style":1767},[2442],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2444,"children":2445},{"style":1874},[2446],{"type":51,"value":1450},{"type":46,"tag":1760,"props":2448,"children":2449},{"style":1767},[2450],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2452,"children":2453},{"style":1767},[2454],{"type":51,"value":1795},{"type":46,"tag":1760,"props":2456,"children":2457},{"style":1767},[2458],{"type":51,"value":1827},{"type":46,"tag":1760,"props":2460,"children":2461},{"style":1830},[2462],{"type":51,"value":1833},{"type":46,"tag":1760,"props":2464,"children":2465},{"style":1767},[2466],{"type":51,"value":1790},{"type":46,"tag":1760,"props":2468,"children":2469},{"style":1767},[2470],{"type":51,"value":2471}," }\n",{"type":46,"tag":1760,"props":2473,"children":2475},{"class":1762,"line":2474},21,[2476],{"type":46,"tag":1760,"props":2477,"children":2478},{"style":1767},[2479],{"type":51,"value":2480},"  }\n",{"type":46,"tag":1760,"props":2482,"children":2484},{"class":1762,"line":2483},22,[2485],{"type":46,"tag":1760,"props":2486,"children":2487},{"style":1767},[2488],{"type":51,"value":2489},"}\n",{"type":46,"tag":54,"props":2491,"children":2492},{},[2493,2498],{"type":46,"tag":89,"props":2494,"children":2495},{},[2496],{"type":51,"value":2497},"Display this JSON directly in the transcript. Do not automatically create a file.",{"type":51,"value":2499},"\nLet the user copy it or choose a filepath in the next-steps question below.",{"type":46,"tag":112,"props":2501,"children":2503},{"id":2502},"display-summary",[2504],{"type":51,"value":2505},"Display Summary",{"type":46,"tag":54,"props":2507,"children":2508},{},[2509],{"type":51,"value":2510},"Immediately after the JSON, show a human-readable summary:",{"type":46,"tag":127,"props":2512,"children":2513},{},[2514,2519,2524,2529,2534,2552,2557,2568],{"type":46,"tag":131,"props":2515,"children":2516},{},[2517],{"type":51,"value":2518},"Network and chain ID.",{"type":46,"tag":131,"props":2520,"children":2521},{},[2522],{"type":51,"value":2523},"Underlying token and allowlist-checker mode.",{"type":46,"tag":131,"props":2525,"children":2526},{},[2527],{"type":51,"value":2528},"Adapter owner.",{"type":46,"tag":131,"props":2530,"children":2531},{},[2532],{"type":51,"value":2533},"Verification deposit amount, with a one-line reminder that it is not recoverable.",{"type":46,"tag":131,"props":2535,"children":2536},{},[2537,2539,2544,2546,2551],{"type":51,"value":2538},"Every wrapper and the hook, each flagged ",{"type":46,"tag":89,"props":2540,"children":2541},{},[2542],{"type":51,"value":2543},"resolved",{"type":51,"value":2545}," or ",{"type":46,"tag":89,"props":2547,"children":2548},{},[2549],{"type":51,"value":2550},"needs resolution",{"type":51,"value":80},{"type":46,"tag":131,"props":2553,"children":2554},{},[2555],{"type":51,"value":2556},"Pool currency, fee tier, tick spacing, starting price ratio.",{"type":46,"tag":131,"props":2558,"children":2559},{},[2560,2562,2567],{"type":51,"value":2561},"Seeding intent and wallet, with a reminder that the wallet needs ",{"type":46,"tag":60,"props":2563,"children":2565},{"className":2564},[],[2566],{"type":51,"value":1553},{"type":51,"value":80},{"type":46,"tag":131,"props":2569,"children":2570},{},[2571,2573,2578],{"type":51,"value":2572},"A validation checklist: which rules from ",{"type":46,"tag":60,"props":2574,"children":2576},{"className":2575},[],[2577],{"type":51,"value":308},{"type":51,"value":2579}," passed, and which fields\nstill need a real address before this config can be used to deploy anything.",{"type":46,"tag":112,"props":2581,"children":2583},{"id":2582},"next-steps",[2584],{"type":51,"value":2585},"Next Steps",{"type":46,"tag":54,"props":2587,"children":2588},{},[2589],{"type":51,"value":2590},"Ask the user what they want to do:",{"type":46,"tag":127,"props":2592,"children":2593},{},[2594,2683,2694,2699],{"type":46,"tag":131,"props":2595,"children":2596},{},[2597,2599,2605,2607,2613,2615,2621,2623,2629,2631,2637,2639,2645,2646,2652,2654,2659,2661,2666,2668,2673,2675,2681],{"type":51,"value":2598},"\"Save to file\" — ask for a filepath, default ",{"type":46,"tag":60,"props":2600,"children":2602},{"className":2601},[],[2603],{"type":51,"value":2604},"permissioned-pool-config.json",{"type":51,"value":2606},". Require\na relative path ending in ",{"type":46,"tag":60,"props":2608,"children":2610},{"className":2609},[],[2611],{"type":51,"value":2612},".json",{"type":51,"value":2614},"; reject an absolute path (leading ",{"type":46,"tag":60,"props":2616,"children":2618},{"className":2617},[],[2619],{"type":51,"value":2620},"\u002F",{"type":51,"value":2622},"), reject a\nleading ",{"type":46,"tag":60,"props":2624,"children":2626},{"className":2625},[],[2627],{"type":51,"value":2628},"~",{"type":51,"value":2630}," (a runtime that expands it can write outside the working directory —\nincluding over Claude Code's own config store), and reject any path containing a ",{"type":46,"tag":60,"props":2632,"children":2634},{"className":2633},[],[2635],{"type":51,"value":2636},"..",{"type":51,"value":2638},"\nsegment. Resolve the path and confirm it still stays within the current working\ndirectory before writing. If the resolved path already exists, ask for confirmation\nbefore overwriting it — including a file that looks unrelated to this skill, such as\n",{"type":46,"tag":60,"props":2640,"children":2642},{"className":2641},[],[2643],{"type":51,"value":2644},"package.json",{"type":51,"value":2545},{"type":46,"tag":60,"props":2647,"children":2649},{"className":2648},[],[2650],{"type":51,"value":2651},"tsconfig.json",{"type":51,"value":2653},". Re-prompt once on a rejected path rather than\nsilently substituting the default. Then write exactly the JSON object shown above.\n(This validation is intentionally stricter than other skills' \"save to file\" steps in\nthis repo — the ",{"type":46,"tag":60,"props":2655,"children":2657},{"className":2656},[],[2658],{"type":51,"value":2628},{"type":51,"value":2660}," and ",{"type":46,"tag":60,"props":2662,"children":2664},{"className":2663},[],[2665],{"type":51,"value":2636},{"type":51,"value":2667}," rejections were added in response to a security audit\nfinding that a leading ",{"type":46,"tag":60,"props":2669,"children":2671},{"className":2670},[],[2672],{"type":51,"value":2628},{"type":51,"value":2674}," could target ",{"type":46,"tag":60,"props":2676,"children":2678},{"className":2677},[],[2679],{"type":51,"value":2680},"~\u002F.claude.json",{"type":51,"value":2682},", so keep them here rather\nthan trimming to match a lighter-weight equivalent elsewhere.)",{"type":46,"tag":131,"props":2684,"children":2685},{},[2686,2688,2693],{"type":51,"value":2687},"\"View the setup walkthrough\" — point at ",{"type":46,"tag":60,"props":2689,"children":2691},{"className":2690},[],[2692],{"type":51,"value":65},{"type":51,"value":80},{"type":46,"tag":131,"props":2695,"children":2696},{},[2697],{"type":51,"value":2698},"\"Modify configuration\" — re-run the relevant batch above.",{"type":46,"tag":131,"props":2700,"children":2701},{},[2702],{"type":51,"value":2703},"\"Exit\" — end here; the user can copy the JSON from the transcript.",{"type":46,"tag":112,"props":2705,"children":2707},{"id":2706},"notes-for-implementers-of-this-flow",[2708],{"type":51,"value":2709},"Notes for Implementers of This Flow",{"type":46,"tag":127,"props":2711,"children":2712},{},[2713,2730,2740],{"type":46,"tag":131,"props":2714,"children":2715},{},[2716,2721,2723,2728],{"type":46,"tag":89,"props":2717,"children":2718},{},[2719],{"type":51,"value":2720},"Never fill in a token, wrapper, hook, or adapter-owner address from memory.",{"type":51,"value":2722}," If the\nuser does not supply one, store the exact literal string ",{"type":46,"tag":60,"props":2724,"children":2726},{"className":2725},[],[2727],{"type":51,"value":165},{"type":51,"value":2729}," in that field —\nfull stop. This includes not \"helpfully\" completing a partially-typed address.",{"type":46,"tag":131,"props":2731,"children":2732},{},[2733,2738],{"type":46,"tag":89,"props":2734,"children":2735},{},[2736],{"type":51,"value":2737},"Batch, validate, summarize — every time.",{"type":51,"value":2739}," Do not run all four batches back to back\nwithout the validation and summary steps in between; that is what keeps a bad input\nfrom propagating into the next batch's defaults.",{"type":46,"tag":131,"props":2741,"children":2742},{},[2743,2748,2750,2756,2757,2763,2765,2771,2772,2778],{"type":46,"tag":89,"props":2744,"children":2745},{},[2746],{"type":51,"value":2747},"This skill does not read chain state, fetch an RPC, or consult a deployments JSON\nfile.",{"type":51,"value":2749}," It has no ",{"type":46,"tag":60,"props":2751,"children":2753},{"className":2752},[],[2754],{"type":51,"value":2755},"Bash",{"type":51,"value":2545},{"type":46,"tag":60,"props":2758,"children":2760},{"className":2759},[],[2761],{"type":51,"value":2762},"WebFetch",{"type":51,"value":2764}," in its tool list, on purpose — resolving\naddresses against ",{"type":46,"tag":60,"props":2766,"children":2768},{"className":2767},[],[2769],{"type":51,"value":2770},"Uniswap\u002Fcontracts",{"type":51,"value":1479},{"type":46,"tag":60,"props":2773,"children":2775},{"className":2774},[],[2776],{"type":51,"value":2777},"deployments\u002Fjson\u002F\u003CchainId>.json",{"type":51,"value":2779}," and the deploy\nguide's table is the user's job, or a later step in the deployer skill's preflight.",{"type":46,"tag":2781,"props":2782,"children":2783},"style",{},[2784],{"type":51,"value":2785},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2787,"total":2935},[2788,2801,2816,2827,2840,2853,2866,2879,2893,2904,2911,2921],{"slug":2789,"name":2789,"fn":2790,"description":2791,"org":2792,"tags":2793,"stars":25,"repoUrl":26,"updatedAt":2800},"configurator","configure auction smart contract parameters","Configure CCA (Continuous Clearing Auction) smart contract parameters through an interactive bulk form flow. Use when user says \"configure auction\", \"cca auction\", \"setup token auction\", \"auction configuration\", \"continuous auction\", or mentions CCA contracts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2794,2795,2796,2797],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":2798,"slug":2799,"type":15},"Web3","web3","2026-07-17T06:08:08.974641",{"slug":2802,"name":2802,"fn":2803,"description":2804,"org":2805,"tags":2806,"stars":25,"repoUrl":26,"updatedAt":2815},"copy-trade","copy trades from crypto wallets","This skill should be used when the user asks to \"copy trades from\" a wallet, \"mirror a wallet\", \"follow this address\", set up \"copy trading\", \"track and replicate a trader\", or mirror another account's swaps bounded by guardrails. Watches a target wallet and mirrors its trades, filtered by chain, asset match, position size, and the follower's own portfolio state.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2807,2810,2811,2814],{"name":2808,"slug":2809,"type":15},"Automation","automation",{"name":23,"slug":24,"type":15},{"name":2812,"slug":2813,"type":15},"Trading","trading",{"name":2798,"slug":2799,"type":15},"2026-07-17T06:04:21.974052",{"slug":2817,"name":2817,"fn":2818,"description":2819,"org":2820,"tags":2821,"stars":25,"repoUrl":26,"updatedAt":2826},"dca-bot","automate dollar cost average token purchases","This skill should be used when the user wants to \"dca into\" a token, \"buy X every day\", set up a \"recurring buy\", \"dollar cost average\" into an asset, \"schedule a buy\", or \"auto-buy on a dip\". Buys a fixed amount into a token on a schedule, optionally only when a condition holds (for example only when ETH is below a price threshold). The host agent's scheduler wakes the skill on a cadence; each wake is one self-contained run.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2822,2823,2824,2825],{"name":2808,"slug":2809,"type":15},{"name":17,"slug":18,"type":15},{"name":2812,"slug":2813,"type":15},{"name":2798,"slug":2799,"type":15},"2026-07-17T06:05:37.160647",{"slug":2828,"name":2828,"fn":2829,"description":2830,"org":2831,"tags":2832,"stars":25,"repoUrl":26,"updatedAt":2839},"deployer","deploy Uniswap CCA smart contracts","Deploy CCA (Continuous Clearing Auction) smart contracts using the Factory pattern. Use when user says \"deploy auction\", \"deploy cca\", \"factory deployment\", or wants to deploy a configured auction.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2833,2836,2837,2838],{"name":2834,"slug":2835,"type":15},"Deployment","deployment",{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":2798,"slug":2799,"type":15},"2026-07-17T06:08:09.661977",{"slug":2841,"name":2841,"fn":2842,"description":2843,"org":2844,"tags":2845,"stars":25,"repoUrl":26,"updatedAt":2852},"index-bot","create and rebalance asset portfolios","This skill should be used when the user asks to \"create an index\", \"build a basket of top assets\", \"buy a weighted basket\", \"make a portfolio of assets\", \"equal-weight basket\", \"rebalance my portfolio\", \"track the top N tokens\", or wants an automated, weighted multi-asset basket that buys in one pass and rebalances on a cadence. Builds the basket spec, delegates each buy and rebalance swap to the swap-integration Trading API flow, and records target weights in state.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2846,2847,2850,2851],{"name":23,"slug":24,"type":15},{"name":2848,"slug":2849,"type":15},"Portfolio Management","portfolio-management",{"name":2812,"slug":2813,"type":15},{"name":2798,"slug":2799,"type":15},"2026-07-17T06:04:22.328253",{"slug":2854,"name":2854,"fn":2855,"description":2856,"org":2857,"tags":2858,"stars":25,"repoUrl":26,"updatedAt":2865},"liquidity-planner","plan and create liquidity positions","This skill should be used when the user asks to \"provide liquidity\", \"create LP position\", \"add liquidity to pool\", \"become a liquidity provider\", \"create v3 position\", \"create v4 position\", \"concentrated liquidity\", \"set price range\", or mentions providing liquidity, LP positions, or liquidity pools on Uniswap. Generates deep links to create positions in the Uniswap interface.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2859,2860,2861,2864],{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":2862,"slug":2863,"type":15},"Liquidity","liquidity",{"name":2798,"slug":2799,"type":15},"2026-08-08T03:55:37.214112",{"slug":2867,"name":2867,"fn":2868,"description":2869,"org":2870,"tags":2871,"stars":25,"repoUrl":26,"updatedAt":2878},"lp-integration","integrate Uniswap liquidity provisioning","Integrate Uniswap liquidity provisioning (LP) into applications via the LP REST API. Use when the user says \"LP API\", \"liquidity provisioning API\", \"provide liquidity programmatically\", \"create LP position via API\", \"add liquidity via API\", \"increase liquidity\", \"decrease liquidity\", \"remove liquidity\", \"claim LP fees\", \"collect LP fees\", \"manage LP positions in code\", or mentions building a backend, bot, or frontend that creates or manages Uniswap v2\u002Fv3\u002Fv4 liquidity positions through an API. Also use when debugging LP API calls (e.g. \u002Flp\u002Fcreate, \u002Flp\u002Fcheck_approval, \u002Flp\u002Fincrease, \u002Flp\u002Fdecrease, \u002Flp\u002Fclaim_fees), unexpected response fields, the approval or EIP-712 permit flow, or transaction-building errors for liquidity positions. For generating deep links to the Uniswap web app instead of calling the API, use the liquidity-planner skill; for using the Uniswap v4 SDK directly rather than the REST API, use the v4-sdk-integration skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2872,2875,2876,2877],{"name":2873,"slug":2874,"type":15},"API Development","api-development",{"name":17,"slug":18,"type":15},{"name":2862,"slug":2863,"type":15},{"name":2798,"slug":2799,"type":15},"2026-08-08T03:55:34.112025",{"slug":2880,"name":2880,"fn":2881,"description":2882,"org":2883,"tags":2884,"stars":25,"repoUrl":26,"updatedAt":2892},"pay-with-any-token","pay HTTP 402 challenges with Uniswap","Pay HTTP 402 payment challenges using tokens via the Tempo CLI and Uniswap Trading API. Use when the user encounters a 402 Payment Required response, needs to fulfill a machine payment, mentions \"MPP\", \"Tempo payment\", \"pay for API access\", \"HTTP 402\", \"x402\", \"machine payment protocol\", \"pay-with-any-token\", \"use tempo\", \"tempo request\", or \"tempo wallet\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2885,2886,2889,2890],{"name":17,"slug":18,"type":15},{"name":2887,"slug":2888,"type":15},"Payments","payments",{"name":2812,"slug":2813,"type":15},{"name":2891,"slug":2891,"type":15},"x402","2026-08-08T03:55:36.210847",{"slug":2894,"name":2894,"fn":2895,"description":2896,"org":2897,"tags":2898,"stars":25,"repoUrl":26,"updatedAt":2903},"pay-with-app","pay 402 payment challenges","Pay HTTP 402 payment challenges issued by OKX's Agent Payments Protocol (APP) on X Layer using tokens from any chain via the Uniswap Trading API. Use this skill whenever the user encounters a 402 challenge whose network resolves to X Layer (chain 196), mentions \"APP\", \"Agent Payments Protocol\", \"OKX agent payment\", \"OKX Onchain OS\", \"OKX agentic wallet\", \"x402 on X Layer\", \"USDT0\", \"x42\", \"Instant Payment\", \"Batch Payment\", \"pay for X Layer API\", or wants to pay an OKX-backed merchant. Even when the user does not explicitly say APP, prefer this skill for any 402 challenge whose network resolves to X Layer (chain 196). For 402 challenges on other chains (Ethereum, Base, Arbitrum, Tempo) use pay-with-any-token instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2899,2900,2901,2902],{"name":2873,"slug":2874,"type":15},{"name":2887,"slug":2888,"type":15},{"name":2798,"slug":2799,"type":15},{"name":2891,"slug":2891,"type":15},"2026-08-08T03:55:32.164995",{"slug":4,"name":4,"fn":5,"description":6,"org":2905,"tags":2906,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2907,2908,2909,2910],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"slug":65,"name":65,"fn":2912,"description":2913,"org":2914,"tags":2915,"stars":25,"repoUrl":26,"updatedAt":2920},"deploy Uniswap v4 permissioned pools","Guided walkthrough for executing the on-chain setup sequence for a Uniswap v4 Permissioned Pool from a permissioned-pools-configurator JSON config - allowlist checker deployment, createPermissionsAdapter, allowlisting and funding the adapter, verification, wrapper and hook registration, pool initialization, swap enablement, liquidity seeding, and the routing-allowlist request. Use when the user says \"deploy a permissioned pool\", \"run the permissioned pool setup\", \"execute the permissioned pools journey\", \"createPermissionsAdapter\", \"verify my permissions adapter\", \"walk me through the permissioned pool deployment\", or asks to execute the on-chain steps after generating a permissioned-pools-configurator config. Covers contract mechanics only - does not constitute legal, financial, investment, tax, or compliance advice, and is not a compliance review - and never emits a broadcastable command before an explicit acknowledgment.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2916,2917,2918,2919],{"name":17,"slug":18,"type":15},{"name":2834,"slug":2835,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},"2026-08-14T04:52:10.10212",{"slug":78,"name":78,"fn":2922,"description":2923,"org":2924,"tags":2925,"stars":25,"repoUrl":26,"updatedAt":2934},"set up Uniswap v4 permissioned pools","Reference guide for engineering teams setting up a Uniswap v4 Permissioned Pool for a transfer-restricted (RWA \u002F tokenized-asset) ERC-20. Use when the user says \"permissioned pool\", \"PermissionsAdapter\", \"PermissionsAdapterFactory\", \"PermissionedPositionManager\", \"PermissionedHooks\", \"allowlist checker\", \"BaseAllowlistChecker\", \"adapter verification\", \"verifyPermissionsAdapter\", \"updateAllowedWrapper\", \"setAllowedHook\", \"unwindPosition\", \"wrap a permissioned token for v4\", or asks how an RWA issuer lists a restricted token on Uniswap v4. Explains the contract architecture, the ordered setup journey, the code-enforced ordering, and the trust model. Covers contract mechanics only - does not constitute legal, financial, investment, tax, or compliance advice, and is not a compliance review.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2926,2929,2930,2933],{"name":2927,"slug":2928,"type":15},"Engineering","engineering",{"name":23,"slug":24,"type":15},{"name":2931,"slug":2932,"type":15},"Permissions","permissions",{"name":2798,"slug":2799,"type":15},"2026-08-14T04:26:06.815467",24,{"items":2937,"total":2349},[2938,2945,2952,2959,2966,2973,2980],{"slug":2789,"name":2789,"fn":2790,"description":2791,"org":2939,"tags":2940,"stars":25,"repoUrl":26,"updatedAt":2800},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2941,2942,2943,2944],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":2798,"slug":2799,"type":15},{"slug":2802,"name":2802,"fn":2803,"description":2804,"org":2946,"tags":2947,"stars":25,"repoUrl":26,"updatedAt":2815},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2948,2949,2950,2951],{"name":2808,"slug":2809,"type":15},{"name":23,"slug":24,"type":15},{"name":2812,"slug":2813,"type":15},{"name":2798,"slug":2799,"type":15},{"slug":2817,"name":2817,"fn":2818,"description":2819,"org":2953,"tags":2954,"stars":25,"repoUrl":26,"updatedAt":2826},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2955,2956,2957,2958],{"name":2808,"slug":2809,"type":15},{"name":17,"slug":18,"type":15},{"name":2812,"slug":2813,"type":15},{"name":2798,"slug":2799,"type":15},{"slug":2828,"name":2828,"fn":2829,"description":2830,"org":2960,"tags":2961,"stars":25,"repoUrl":26,"updatedAt":2839},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2962,2963,2964,2965],{"name":2834,"slug":2835,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":2798,"slug":2799,"type":15},{"slug":2841,"name":2841,"fn":2842,"description":2843,"org":2967,"tags":2968,"stars":25,"repoUrl":26,"updatedAt":2852},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2969,2970,2971,2972],{"name":23,"slug":24,"type":15},{"name":2848,"slug":2849,"type":15},{"name":2812,"slug":2813,"type":15},{"name":2798,"slug":2799,"type":15},{"slug":2854,"name":2854,"fn":2855,"description":2856,"org":2974,"tags":2975,"stars":25,"repoUrl":26,"updatedAt":2865},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2976,2977,2978,2979],{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":2862,"slug":2863,"type":15},{"name":2798,"slug":2799,"type":15},{"slug":2867,"name":2867,"fn":2868,"description":2869,"org":2981,"tags":2982,"stars":25,"repoUrl":26,"updatedAt":2878},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2983,2984,2985,2986],{"name":2873,"slug":2874,"type":15},{"name":17,"slug":18,"type":15},{"name":2862,"slug":2863,"type":15},{"name":2798,"slug":2799,"type":15}]