[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-circle-recover-eco-funds":3,"mdc-ffdfdc-key":34,"related-repo-circle-recover-eco-funds":3208,"related-org-circle-recover-eco-funds":3298},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"recover-eco-funds","recover stuck USDC funds from Circle","Recover USDC from a legacy Circle CLI Gateway `--method eco` deposit whose fixed refund recipient is the SCA's backing EOA. Use this skill for legacy Eco intents that are stuck, expired, waiting for refund, refunded to `eoaOwnerAddress`, missing from Gateway, or need a permissionless self-refund. Do not use its executable recovery phases for current Gateway v2 deposits, which set `refundRecipient` to the SCA. It covers calling Eco's Portal `refund(...)` with exact onchain intent data, then moving refunded USDC from the backing EOA to the linked SCA with ERC-3009, relayed by the SCA so the backing EOA needs no gas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"circle","Circle","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fcircle.png","circlefin",[13,17,20],{"name":14,"slug":15,"type":16},"Operations","operations","tag",{"name":18,"slug":19,"type":16},"Finance","finance",{"name":21,"slug":22,"type":16},"Trading","trading",143,"https:\u002F\u002Fgithub.com\u002Fcirclefin\u002Fskills","2026-08-20T03:52:55.224684",null,44,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Circle's open source skills for AI-assisted development.","https:\u002F\u002Fgithub.com\u002Fcirclefin\u002Fskills\u002Ftree\u002FHEAD\u002Fplugins\u002Fcircle\u002Fskills\u002Frecover-eco-funds","---\nname: recover-eco-funds\ndescription: \"Recover USDC from a legacy Circle CLI Gateway `--method eco` deposit whose fixed refund recipient is the SCA's backing EOA. Use this skill for legacy Eco intents that are stuck, expired, waiting for refund, refunded to `eoaOwnerAddress`, missing from Gateway, or need a permissionless self-refund. Do not use its executable recovery phases for current Gateway v2 deposits, which set `refundRecipient` to the SCA. It covers calling Eco's Portal `refund(...)` with exact onchain intent data, then moving refunded USDC from the backing EOA to the linked SCA with ERC-3009, relayed by the SCA so the backing EOA needs no gas.\"\nallowed-tools: [\"Read\", \"Bash(mkdir -p .\u002Feco-recovery-evidence)\", \"Bash(circle --version)\", \"Bash(circle wallet status --output json)\", \"Bash(circle gateway deposit --help)\", \"Bash(circle wallet execute --help)\", \"Bash(circle contract query --help)\", \"Bash(circle wallet list --chain * --type agent --output json)\", \"Bash(circle wallet balance --address * --chain * --output json)\", \"Bash(circle gateway balance --address * --chain * --output json)\", \"Bash(circle transaction list --address * --chain * --operation transfer --tx-type outbound --state confirmed --output json)\", \"Bash(curl -fsS \\\"https:\u002F\u002Fapi.eco.com\u002Fcircle-gateway\u002Fv2\u002FdepositAddresses\u002F*\\\")\", \"Bash(curl -fsS --request POST --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus --header \\\"Content-Type: application\u002Fjson\\\" --data '{\\\"intentHash\\\":\\\"*\\\"}')\", \"Bash(curl -fsS --request POST --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus --header \\\"Content-Type: application\u002Fjson\\\" --data '{\\\"intentCreatedHash\\\":\\\"*\\\"}')\", \"Bash(*\u002Fnode_modules\u002F.bin\u002Ftsx *\u002Fscripts\u002Feco-self-refund.mjs *)\", \"Bash(*\u002Fnode_modules\u002F.bin\u002Ftsx *\u002Fscripts\u002Feoa-to-sca.mjs *)\"]\n---\n\n# Recover Legacy Eco Funds\n\n## Overview\n\nRecover funds from a legacy Circle CLI Eco deposit without guessing intent data, refund recipients, or transaction state. The workflow is evidence-first and defaults to read-only inspection.\n\n> **Legacy-only recovery:** The executable recovery phases in this skill are for deposits whose already-published intent fixes `reward.creator` to the Circle SCA's API-verified `eoaOwnerAddress`. Current Gateway v2\u002FCircle CLI deposits set `refundRecipient` to the SCA and should refund directly there. For a current deposit, use the read-only status checks below, reconcile the SCA and Gateway balances, and escalate through the normal support path if necessary; do not run the legacy backing-EOA sweep.\n\nDo not classify a deposit as legacy from its age or endpoint version alone. Decode the `IntentPublished` event and compare the fixed `reward.creator` with both the SCA and its API-verified `eoaOwnerAddress`:\n\n- `reward.creator == eoaOwnerAddress`: legacy recovery may apply after all read-only checks.\n- `reward.creator == SCA`: current direct-to-SCA refund behavior; stop before the executable legacy phases.\n- neither: stop because the selected Circle wallet does not own the fixed refund recipient.\n\nUse the `use-circle-cli` and `use-agent-wallet` skills first if the Circle CLI is not installed, the Terms gate is unresolved, or the agent session is invalid. Do not trigger multiple login requests: each fresh request invalidates the prior OTP.\n\n## Understand the two recovery legs\n\nA legacy Eco deposit can require two separate operations:\n\n1. **Eco self-refund:** call `Portal.refund(destination, routeHash, reward)` on the vault\u002Frefund chain after the reward deadline. The Portal validates the intent and instructs its deterministic vault to return funds to `reward.creator`. Anyone may relay this call, but the recipient is fixed by the original intent.\n2. **Backing EOA sweep:** if `reward.creator` was the SCA's backing EOA, authorize USDC to move from that EOA to the linked SCA with ERC-3009. The SCA relays the token call and pays gas; the backing EOA does not need native gas.\n\nCurrent Gateway v2\u002FCircle CLI Eco deposits set the SCA as the refund recipient. They are outside the executable scope of this skill: use status and balance reconciliation, and do not run the backing-EOA sweep.\n\n## Safety boundary\n\n- Treat event\u002Fcreation chain, vault\u002Frefund chain, intent destination value, Gateway destination chain, SCA, backing EOA, creation-chain Portal, refund-chain Portal, vault, token, amount, route hash, intent hash, and deadline as different fields. Never substitute one for another. A composed Eco flow can publish the event on one chain while leaving the refundable vault on another, and Portal deployment addresses need not match across chains.\n- Derive the backing EOA from the Circle wallet API's `eoaOwnerAddress`; do not accept a user-supplied owner without comparing it to that field.\n- Before a legacy self-refund broadcast, require `reward.creator` to equal the selected Circle wallet's API-verified `eoaOwnerAddress`. If it equals the SCA, classify it as the current direct-to-SCA flow and stop before executable recovery. Although `refund(...)` is permissionless, never spend the user's gas to refund an unrelated wallet.\n- Reconstruct the refund tuple from the source-chain `IntentPublished` event. The Eco status API is useful context but is not authoritative enough to build calldata.\n- Verify the reconstructed intent hash equals the event's indexed intent hash.\n- Refuse a refund before the onchain deadline or when reward status is already `Withdrawn` or `Refunded`.\n- Simulate the exact calldata from the exact SCA before broadcasting.\n- Ask for explicit approval immediately before each money-moving action. Present chain, token, raw and decimal amount, source, destination, contract, intent\u002Fnonce, and estimated gas.\n- Use one persisted idempotency key per intended broadcast. On an ambiguous response, reconcile onchain state before attempting anything new.\n- Never log user tokens, session secrets, OTPs, private keys, or raw EIP-712 signatures. Log a signature hash instead.\n- If `CIRCLE_PROXY_URL` overrides Circle's default, inspect the exact origin and obtain explicit user trust before sending an agent session token through it. The helpers require `--allow-proxy-origin \u003Cscheme:\u002F\u002Fhost>` when an override is present.\n- Never use `refundTo(...)` as a shortcut. It can change the recipient and is creator-restricted on current Eco contracts. The permissionless `refund(...)` path is sufficient.\n\n## Create an evidence directory\n\nCreate a dedicated directory before diagnosis, for example:\n\n```bash\nmkdir -p .\u002Feco-recovery-evidence\n```\n\nCapture command time, CLI version, Circle chain code, RPC URL host, public addresses, intent and transaction hashes, sanitized stdout\u002Fstderr, exit code, pre\u002Fpost balances, simulation result, idempotency key, and final explorer link. Keep the directory private because public addresses and account relationships may still be sensitive.\n\nDo not place raw signatures or authentication material in this directory.\n\n## Phase 1: Diagnose without changing state\n\nRun current help before relying on remembered flags:\n\n```bash\ncircle --version\ncircle wallet status --output json\ncircle gateway deposit --help\ncircle wallet execute --help\ncircle contract query --help\n```\n\nIdentify the SCA and inspect the creation chain, candidate vault\u002Frefund chains, and Gateway destination:\n\n```bash\ncircle wallet list --chain \u003CSOURCE_CHAIN> --type agent --output json\ncircle wallet balance --address \u003CSCA> --chain \u003CSOURCE_CHAIN> --output json\ncircle gateway balance --address \u003CSCA> --chain \u003CGATEWAY_DESTINATION_CHAIN> --output json\n```\n\nCollect at least one intent identifier:\n\n- Eco intent hash, or\n- creation-chain transaction hash that published the intent, or\n- Eco deposit address plus the funding transaction that reached it.\n\n### Check the current Eco intent status for a Circle SCA\n\nEco does not provide a list-intents-by-SCA endpoint. Map the SCA to the single-use Eco vault created for the deposit, then query that vault and its intent:\n\n1. Identify the source-chain SCA:\n\n   ```bash\n   circle wallet list --chain \u003CSOURCE_CHAIN> --type agent --output json\n   ```\n\n2. Get `\u003CVAULT_ADDRESS>` from the original `circle gateway deposit --output json` result or the saved evidence. Its `vaultAddress`, `sourceAddress`, `sourceBlockchain`, `transferTxHash`, and `deadline` fields identify the deposit. If that output was not saved, list the SCA's confirmed outbound transfers and find the exact USDC funding transaction; its `destinationAddress` is the Eco vault:\n\n   ```bash\n   circle transaction list \\\n     --address \u003CSCA> \\\n     --chain \u003CSOURCE_CHAIN> \\\n     --operation transfer \\\n     --tx-type outbound \\\n     --state confirmed \\\n     --output json\n   ```\n\n   Match the intended amount, time, USDC token, and transaction hash. Do not select a vault from address alone when multiple deposits exist.\n\n3. Query the current Gateway deposit-vault record. Use the EVM chain ID for the chain that funded the vault (`8453` for Base mainnet or `84532` for Base Sepolia; verify current CLI support with `circle gateway deposit --help`):\n\n   ```bash\n   curl -fsS \\\n     \"https:\u002F\u002Fapi.eco.com\u002Fcircle-gateway\u002Fv2\u002FdepositAddresses\u002F\u003CVAULT_ADDRESS>?sourceChainId=\u003CSOURCE_CHAIN_EVM_ID>\"\n   ```\n\n   Record `state`, `vaultAddress`, `amount`, `deadline`, `sourceChainId`, and `intentHash`. States such as `PENDING` and `FUNDING_DETECTED` are still in progress; `PUBLISHED` means an intent was published, while `FAILED`, `REFUNDED_BY_USER`, and `RECOVERY_PUBLISHED` require reconciliation before another action.\n\n4. When the vault record contains an `intentHash`, query the intent lifecycle:\n\n   ```bash\n   curl -fsS \\\n     --request POST \\\n     --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus \\\n     --header \"Content-Type: application\u002Fjson\" \\\n     --data '{\"intentHash\":\"\u003CINTENT_HASH>\"}'\n   ```\n\n   If only the creation transaction hash is available, use the alternate accepted identifier:\n\n   ```bash\n   curl -fsS \\\n     --request POST \\\n     --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus \\\n     --header \"Content-Type: application\u002Fjson\" \\\n     --data '{\"intentCreatedHash\":\"\u003CCREATION_TRANSACTION_HASH>\"}'\n   ```\n\n   Capture `data.status`, `data.intentCreated`, `data.fulfillment`, and `data.refund`, including every transaction hash and explorer URL present.\n\nThese APIs are supporting evidence. If the response says `WaitingForRefund`, continue with onchain reconstruction; never build refund calldata or broadcast from an API status alone.\n\nClassify the state:\n\n| Observed state | Action |\n|---|---|\n| Intent still before deadline | Wait or escalate; do not refund |\n| Intent fulfilled\u002Fcompleted | Reconcile Gateway or destination funds; do not refund |\n| Legacy intent, deadline passed, unfulfilled, vault funded | Run the Eco self-refund leg |\n| Fixed refund recipient is the SCA | Current flow: reconcile or escalate; do not run legacy recovery |\n| Reward status already `Refunded` | Locate the refund recipient balance; do not call refund again |\n| USDC is at the SCA | Recovery is complete |\n| USDC is at the verified backing EOA | Run the backing EOA sweep leg |\n| Vault and both wallet balances are zero | Stop and trace transfer events; do not guess |\n\n## Helper prerequisites\n\nThe bundled helpers require a trusted `circle-cli` developer checkout with dependencies installed because the current public command surface does not expose either raw contract calldata submission or backing-EOA typed-data signing. They reuse Circle CLI's existing secure session and challenge code; they do not read or print keychain secrets directly.\n\nResolve both paths explicitly:\n\n```text\n\u003CSKILL_DIR>       directory containing this SKILL.md\n\u003CCIRCLE_CLI_REPO> trusted circle-cli checkout containing apps\u002Fcli and node_modules\n```\n\nIf a newer installed CLI exposes native recovery, raw-calldata, or backing-owner commands in `--help`, prefer those commands and retain the same preflight, approval, and evidence requirements.\n\n## Phase 2: Self-issue the Eco refund\n\nDo not enter this phase until the onchain event proves the deposit is legacy or otherwise proves that the fixed recipient is owned by the selected wallet and requires this manual path. If `reward.creator` is the SCA, stop and use the current-flow reconciliation path.\n\nRead [references\u002Fself-refund.md](references\u002Fself-refund.md) before acting. It defines the exact event fields, tuple, onchain checks, and raw-calldata fallback.\n\nPrefer a native Circle CLI recovery command if the installed CLI exposes one in `--help`. Otherwise use the bundled helper from a trusted `circle-cli` checkout:\n\n```bash\n\u003CCIRCLE_CLI_REPO>\u002Fnode_modules\u002F.bin\u002Ftsx \\\n  \u003CSKILL_DIR>\u002Fscripts\u002Feco-self-refund.mjs \\\n  --circle-cli-repo \u003CCIRCLE_CLI_REPO> \\\n  --chain \u003CREFUND_CHAIN> \\\n  --event-chain-id \u003CCREATION_CHAIN_EVM_ID> \\\n  --refund-chain-id \u003CREFUND_CHAIN_EVM_ID> \\\n  --event-rpc-url \u003CCREATION_CHAIN_RPC_URL> \\\n  --refund-rpc-url \u003CREFUND_CHAIN_RPC_URL> \\\n  --sca \u003CSCA> \\\n  --event-portal \u003CCREATION_CHAIN_ECO_PORTAL> \\\n  --portal \u003CREFUND_CHAIN_ECO_PORTAL> \\\n  --creation-tx \u003CSOURCE_TX_HASH> \\\n  --intent-hash \u003CINTENT_HASH> \\\n  --evidence-dir \u003CEVIDENCE_DIR> \\\n  --estimate-fee\n```\n\nThe invocation is read-only. It decodes `IntentPublished` from the explicitly selected creation-chain Portal, verifies the intent hash, then reads reward status and vault balances from the separately selected refund-chain Portal, constructs the exact `refund(...)` calldata, and performs `eth_call` from the SCA. `--estimate-fee` additionally loads the Circle session, verifies that the fixed recipient is the selected SCA or its API-reported backing EOA, and includes the fee estimate in the approval preflight. Omit that flag only for session-free diagnosis; such output is not sufficient for approval. If the selected chain has no funded vault, stop and inspect other chains indicated by the composed Eco route; do not assume the event chain owns the vault or that both Portal addresses are identical.\n\nAfter showing a preflight with `recipientOwnership.checked: true` and an `estimatedFee`, and receiving explicit user approval, re-run with both:\n\n```bash\n--submit --confirm-intent \u003CINTENT_HASH>\n```\n\nThe confirmation value binds approval to one intent rather than to an open-ended refund operation.\n\nWhen `CIRCLE_PROXY_URL` is set, the helper stops before sending a session token. Inspect the reported origin, ask the user to trust that exact origin, and only then add `--allow-proxy-origin \u003Cscheme:\u002F\u002Fhost>`.\n\nAfter confirmation, verify:\n\n- Circle transaction state is confirmed and has a transaction hash.\n- Portal reward status is `Refunded`.\n- Each reward-token vault balance is zero or lower by the refunded amount.\n- The fixed refund recipient's balance increased.\n- The receipt includes `IntentRefunded` for the expected intent and recipient.\n\nThe optional normal `circle wallet execute` tuple-form estimate is not preauthorized by this skill's `allowed-tools` because its dynamic tuple arguments cannot be narrowly scoped. Run it only through the host's normal interactive command approval. If that estimate fails while direct RPC simulation succeeds, use the preauthorized helper's raw calldata path. Do not change tuple values to make the hosted parser accept them.\n\n## Phase 3: Move backing-EOA USDC to the linked SCA\n\nSkip this phase when the refund already reached the SCA.\n\nRead [references\u002Feoa-to-sca.md](references\u002Feoa-to-sca.md) before acting. This is a standard USDC ERC-3009 transfer authorized by the backing EOA and relayed by its linked SCA.\n\nInspect only:\n\n```bash\n\u003CCIRCLE_CLI_REPO>\u002Fnode_modules\u002F.bin\u002Ftsx \\\n  \u003CSKILL_DIR>\u002Fscripts\u002Feoa-to-sca.mjs \\\n  --circle-cli-repo \u003CCIRCLE_CLI_REPO> \\\n  --chain \u003CSOURCE_CHAIN> \\\n  --chain-id \u003CEVM_CHAIN_ID> \\\n  --rpc-url \u003CSOURCE_RPC_URL> \\\n  --sca \u003CSCA> \\\n  --usdc \u003CUSDC_CONTRACT> \\\n  --amount-atomic \u003CRAW_USDC_AMOUNT> \\\n  --evidence-dir \u003CEVIDENCE_DIR> \\\n  --estimate-fee\n```\n\nThis resolves `eoaOwnerAddress`, reads balances, checks USDC metadata, and prints the unsigned authorization plan with a pre-signing fee estimate. The fee probe uses an ephemeral local signer and a zero-value ERC-3009 authorization, so it cannot move user funds and does not request a Circle signature from the backing EOA.\n\nAfter showing the estimate and receiving explicit user approval for both the transfer and a native-token fee ceiling, run:\n\n```bash\n--submit \\\n  --confirm-transfer \u003CBACKING_EOA>:\u003CSCA>:\u003CRAW_USDC_AMOUNT> \\\n  --max-network-fee \u003CAPPROVED_DECIMAL_NATIVE_TOKEN_AMOUNT>\n```\n\nThe helper repeats the zero-value fee probe and refuses before requesting the backing EOA signature when it exceeds `--max-network-fee`. After signing, it estimates the exact calldata and refuses before broadcast if that exact fee exceeds the same ceiling. If this post-signing refusal occurs, retain the nonce evidence and let the authorization expire before creating another.\n\nWhen `CIRCLE_PROXY_URL` is set, apply the same explicit `--allow-proxy-origin \u003Cscheme:\u002F\u002Fhost>` gate before resolving or signing with the backing EOA.\n\nThe helper then:\n\n1. Verifies the fresh pre-signing fee estimate is within the explicitly approved ceiling.\n2. Builds `TransferWithAuthorization` with `from=backing EOA`, `to=linked SCA`, exact raw amount, a fresh 32-byte nonce, and a short expiry.\n3. Requests typed-data signing with `walletAddress=\u003Cbacking EOA>` and `blockchain=\u003CSOURCE_CHAIN>`. Signing by the SCA wallet ID is incorrect because it can produce an EIP-1271 replay-safe SCA wrapper instead of the raw EOA signature USDC expects.\n4. Recovers the signer locally and requires it to equal `eoaOwnerAddress`.\n5. Requires `authorizationState(backing EOA, nonce) == false`, simulates the exact USDC call from the SCA, and verifies its exact fee is still within the approved ceiling.\n6. Submits `transferWithAuthorization(...)` through the linked SCA as relayer.\n\nAfter confirmation, verify:\n\n- Backing EOA USDC decreased by the exact amount.\n- SCA USDC increased by the exact amount.\n- `authorizationState(backing EOA, nonce)` is true.\n- The receipt contains the expected USDC transfer.\n\n## Ambiguous or failed submissions\n\nDo not create a fresh authorization or idempotency key just because a client timed out.\n\nFor Eco refund ambiguity, check reward status, vault balance, recipient balance, transaction list, and `IntentRefunded` logs. If any proves success, record the result and stop.\n\nFor ERC-3009 ambiguity, check `authorizationState`, both USDC balances, transaction list, and transfer logs. A consumed nonce or completed balance movement proves the authorization was used. Never sign a second transfer until the first is reconciled.\n\nIf a signed authorization was never submitted, let its `validBefore` expire before creating another with the same amount unless onchain state proves the nonce unused and the original signature cannot be replayed by an unintended party.\n\n## Completion report\n\nReport:\n\n- Initial diagnosis and selected branch.\n- Creation\u002Fevent, vault\u002Frefund, intent-destination, and Gateway-destination chain names and IDs.\n- SCA, verified backing EOA, creation-chain Portal, refund-chain Portal, vault, token, and fixed refund recipient.\n- Intent hash, route hash, deadline, reward status before\u002Fafter.\n- Amounts in atomic units and USDC.\n- Simulation results and gas estimate.\n- Circle transaction IDs, onchain transaction hashes, and explorer links.\n- Pre\u002Fpost balances and ERC-3009 authorization state.\n- Evidence-directory path and a note that secrets\u002Fsignatures were excluded.\n\n## Reference links\n\n- Eco Portal contract: https:\u002F\u002Fdocs.eco.com\u002Froutes\u002Farchitecture\u002Fportal\n- Eco vaults: https:\u002F\u002Fdocs.eco.com\u002Froutes\u002Farchitecture\u002Fvault\n- Eco intent status API: https:\u002F\u002Fdocs.eco.com\u002Fapi-reference\u002Fquotes-v3\u002Fget-intent-status\n- Eco contracts: https:\u002F\u002Fgithub.com\u002Feco\u002Feco-routes\n- EIP-3009: https:\u002F\u002Feips.ethereum.org\u002FEIPS\u002Feip-3009\n- Circle USDC contracts: https:\u002F\u002Fdevelopers.circle.com\u002Fstablecoins\u002Fusdc-contract-addresses\n- Circle Agent Wallet setup skill: `use-agent-wallet`\n\n---\n\nDISCLAIMER: This skill is provided \"as is\" without warranties, is subject to the [Circle Developer Terms](https:\u002F\u002Fconsole.circle.com\u002Flegal\u002Fdeveloper-terms), and output generated may contain errors. Review every address, amount, deadline, contract, simulation, fee, and approval before broadcasting a transaction.\n",{"data":35,"body":53},{"name":4,"description":6,"allowed-tools":36},[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"Read","Bash(mkdir -p .\u002Feco-recovery-evidence)","Bash(circle --version)","Bash(circle wallet status --output json)","Bash(circle gateway deposit --help)","Bash(circle wallet execute --help)","Bash(circle contract query --help)","Bash(circle wallet list --chain * --type agent --output json)","Bash(circle wallet balance --address * --chain * --output json)","Bash(circle gateway balance --address * --chain * --output json)","Bash(circle transaction list --address * --chain * --operation transfer --tx-type outbound --state confirmed --output json)","Bash(curl -fsS \"https:\u002F\u002Fapi.eco.com\u002Fcircle-gateway\u002Fv2\u002FdepositAddresses\u002F*\")","Bash(curl -fsS --request POST --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus --header \"Content-Type: application\u002Fjson\" --data '{\"intentHash\":\"*\"}')","Bash(curl -fsS --request POST --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus --header \"Content-Type: application\u002Fjson\" --data '{\"intentCreatedHash\":\"*\"}')","Bash(*\u002Fnode_modules\u002F.bin\u002Ftsx *\u002Fscripts\u002Feco-self-refund.mjs *)","Bash(*\u002Fnode_modules\u002F.bin\u002Ftsx *\u002Fscripts\u002Feoa-to-sca.mjs *)",{"type":54,"children":55},"root",[56,65,72,78,118,145,177,198,204,209,255,260,266,412,418,423,457,462,467,473,478,591,596,795,800,818,825,830,1532,1545,1550,1687,1693,1706,1711,1721,1734,1740,1752,1765,1784,2206,2241,2262,2299,2304,2322,2327,2369,2390,2396,2401,2412,2417,2699,2711,2716,2828,2841,2859,2864,2957,2961,2990,2996,3001,3013,3026,3039,3045,3050,3098,3104,3184,3188,3202],{"type":57,"tag":58,"props":59,"children":61},"element","h1",{"id":60},"recover-legacy-eco-funds",[62],{"type":63,"value":64},"text","Recover Legacy Eco Funds",{"type":57,"tag":66,"props":67,"children":69},"h2",{"id":68},"overview",[70],{"type":63,"value":71},"Overview",{"type":57,"tag":73,"props":74,"children":75},"p",{},[76],{"type":63,"value":77},"Recover funds from a legacy Circle CLI Eco deposit without guessing intent data, refund recipients, or transaction state. The workflow is evidence-first and defaults to read-only inspection.",{"type":57,"tag":79,"props":80,"children":81},"blockquote",{},[82],{"type":57,"tag":73,"props":83,"children":84},{},[85,91,93,100,102,108,110,116],{"type":57,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":63,"value":90},"Legacy-only recovery:",{"type":63,"value":92}," The executable recovery phases in this skill are for deposits whose already-published intent fixes ",{"type":57,"tag":94,"props":95,"children":97},"code",{"className":96},[],[98],{"type":63,"value":99},"reward.creator",{"type":63,"value":101}," to the Circle SCA's API-verified ",{"type":57,"tag":94,"props":103,"children":105},{"className":104},[],[106],{"type":63,"value":107},"eoaOwnerAddress",{"type":63,"value":109},". Current Gateway v2\u002FCircle CLI deposits set ",{"type":57,"tag":94,"props":111,"children":113},{"className":112},[],[114],{"type":63,"value":115},"refundRecipient",{"type":63,"value":117}," to the SCA and should refund directly there. For a current deposit, use the read-only status checks below, reconcile the SCA and Gateway balances, and escalate through the normal support path if necessary; do not run the legacy backing-EOA sweep.",{"type":57,"tag":73,"props":119,"children":120},{},[121,123,129,131,136,138,143],{"type":63,"value":122},"Do not classify a deposit as legacy from its age or endpoint version alone. Decode the ",{"type":57,"tag":94,"props":124,"children":126},{"className":125},[],[127],{"type":63,"value":128},"IntentPublished",{"type":63,"value":130}," event and compare the fixed ",{"type":57,"tag":94,"props":132,"children":134},{"className":133},[],[135],{"type":63,"value":99},{"type":63,"value":137}," with both the SCA and its API-verified ",{"type":57,"tag":94,"props":139,"children":141},{"className":140},[],[142],{"type":63,"value":107},{"type":63,"value":144},":",{"type":57,"tag":146,"props":147,"children":148},"ul",{},[149,161,172],{"type":57,"tag":150,"props":151,"children":152},"li",{},[153,159],{"type":57,"tag":94,"props":154,"children":156},{"className":155},[],[157],{"type":63,"value":158},"reward.creator == eoaOwnerAddress",{"type":63,"value":160},": legacy recovery may apply after all read-only checks.",{"type":57,"tag":150,"props":162,"children":163},{},[164,170],{"type":57,"tag":94,"props":165,"children":167},{"className":166},[],[168],{"type":63,"value":169},"reward.creator == SCA",{"type":63,"value":171},": current direct-to-SCA refund behavior; stop before the executable legacy phases.",{"type":57,"tag":150,"props":173,"children":174},{},[175],{"type":63,"value":176},"neither: stop because the selected Circle wallet does not own the fixed refund recipient.",{"type":57,"tag":73,"props":178,"children":179},{},[180,182,188,190,196],{"type":63,"value":181},"Use the ",{"type":57,"tag":94,"props":183,"children":185},{"className":184},[],[186],{"type":63,"value":187},"use-circle-cli",{"type":63,"value":189}," and ",{"type":57,"tag":94,"props":191,"children":193},{"className":192},[],[194],{"type":63,"value":195},"use-agent-wallet",{"type":63,"value":197}," skills first if the Circle CLI is not installed, the Terms gate is unresolved, or the agent session is invalid. Do not trigger multiple login requests: each fresh request invalidates the prior OTP.",{"type":57,"tag":66,"props":199,"children":201},{"id":200},"understand-the-two-recovery-legs",[202],{"type":63,"value":203},"Understand the two recovery legs",{"type":57,"tag":73,"props":205,"children":206},{},[207],{"type":63,"value":208},"A legacy Eco deposit can require two separate operations:",{"type":57,"tag":210,"props":211,"children":212},"ol",{},[213,238],{"type":57,"tag":150,"props":214,"children":215},{},[216,221,223,229,231,236],{"type":57,"tag":86,"props":217,"children":218},{},[219],{"type":63,"value":220},"Eco self-refund:",{"type":63,"value":222}," call ",{"type":57,"tag":94,"props":224,"children":226},{"className":225},[],[227],{"type":63,"value":228},"Portal.refund(destination, routeHash, reward)",{"type":63,"value":230}," on the vault\u002Frefund chain after the reward deadline. The Portal validates the intent and instructs its deterministic vault to return funds to ",{"type":57,"tag":94,"props":232,"children":234},{"className":233},[],[235],{"type":63,"value":99},{"type":63,"value":237},". Anyone may relay this call, but the recipient is fixed by the original intent.",{"type":57,"tag":150,"props":239,"children":240},{},[241,246,248,253],{"type":57,"tag":86,"props":242,"children":243},{},[244],{"type":63,"value":245},"Backing EOA sweep:",{"type":63,"value":247}," if ",{"type":57,"tag":94,"props":249,"children":251},{"className":250},[],[252],{"type":63,"value":99},{"type":63,"value":254}," was the SCA's backing EOA, authorize USDC to move from that EOA to the linked SCA with ERC-3009. The SCA relays the token call and pays gas; the backing EOA does not need native gas.",{"type":57,"tag":73,"props":256,"children":257},{},[258],{"type":63,"value":259},"Current Gateway v2\u002FCircle CLI Eco deposits set the SCA as the refund recipient. They are outside the executable scope of this skill: use status and balance reconciliation, and do not run the backing-EOA sweep.",{"type":57,"tag":66,"props":261,"children":263},{"id":262},"safety-boundary",[264],{"type":63,"value":265},"Safety boundary",{"type":57,"tag":146,"props":267,"children":268},{},[269,274,286,313,325,330,351,356,361,366,371,392],{"type":57,"tag":150,"props":270,"children":271},{},[272],{"type":63,"value":273},"Treat event\u002Fcreation chain, vault\u002Frefund chain, intent destination value, Gateway destination chain, SCA, backing EOA, creation-chain Portal, refund-chain Portal, vault, token, amount, route hash, intent hash, and deadline as different fields. Never substitute one for another. A composed Eco flow can publish the event on one chain while leaving the refundable vault on another, and Portal deployment addresses need not match across chains.",{"type":57,"tag":150,"props":275,"children":276},{},[277,279,284],{"type":63,"value":278},"Derive the backing EOA from the Circle wallet API's ",{"type":57,"tag":94,"props":280,"children":282},{"className":281},[],[283],{"type":63,"value":107},{"type":63,"value":285},"; do not accept a user-supplied owner without comparing it to that field.",{"type":57,"tag":150,"props":287,"children":288},{},[289,291,296,298,303,305,311],{"type":63,"value":290},"Before a legacy self-refund broadcast, require ",{"type":57,"tag":94,"props":292,"children":294},{"className":293},[],[295],{"type":63,"value":99},{"type":63,"value":297}," to equal the selected Circle wallet's API-verified ",{"type":57,"tag":94,"props":299,"children":301},{"className":300},[],[302],{"type":63,"value":107},{"type":63,"value":304},". If it equals the SCA, classify it as the current direct-to-SCA flow and stop before executable recovery. Although ",{"type":57,"tag":94,"props":306,"children":308},{"className":307},[],[309],{"type":63,"value":310},"refund(...)",{"type":63,"value":312}," is permissionless, never spend the user's gas to refund an unrelated wallet.",{"type":57,"tag":150,"props":314,"children":315},{},[316,318,323],{"type":63,"value":317},"Reconstruct the refund tuple from the source-chain ",{"type":57,"tag":94,"props":319,"children":321},{"className":320},[],[322],{"type":63,"value":128},{"type":63,"value":324}," event. The Eco status API is useful context but is not authoritative enough to build calldata.",{"type":57,"tag":150,"props":326,"children":327},{},[328],{"type":63,"value":329},"Verify the reconstructed intent hash equals the event's indexed intent hash.",{"type":57,"tag":150,"props":331,"children":332},{},[333,335,341,343,349],{"type":63,"value":334},"Refuse a refund before the onchain deadline or when reward status is already ",{"type":57,"tag":94,"props":336,"children":338},{"className":337},[],[339],{"type":63,"value":340},"Withdrawn",{"type":63,"value":342}," or ",{"type":57,"tag":94,"props":344,"children":346},{"className":345},[],[347],{"type":63,"value":348},"Refunded",{"type":63,"value":350},".",{"type":57,"tag":150,"props":352,"children":353},{},[354],{"type":63,"value":355},"Simulate the exact calldata from the exact SCA before broadcasting.",{"type":57,"tag":150,"props":357,"children":358},{},[359],{"type":63,"value":360},"Ask for explicit approval immediately before each money-moving action. Present chain, token, raw and decimal amount, source, destination, contract, intent\u002Fnonce, and estimated gas.",{"type":57,"tag":150,"props":362,"children":363},{},[364],{"type":63,"value":365},"Use one persisted idempotency key per intended broadcast. On an ambiguous response, reconcile onchain state before attempting anything new.",{"type":57,"tag":150,"props":367,"children":368},{},[369],{"type":63,"value":370},"Never log user tokens, session secrets, OTPs, private keys, or raw EIP-712 signatures. Log a signature hash instead.",{"type":57,"tag":150,"props":372,"children":373},{},[374,376,382,384,390],{"type":63,"value":375},"If ",{"type":57,"tag":94,"props":377,"children":379},{"className":378},[],[380],{"type":63,"value":381},"CIRCLE_PROXY_URL",{"type":63,"value":383}," overrides Circle's default, inspect the exact origin and obtain explicit user trust before sending an agent session token through it. The helpers require ",{"type":57,"tag":94,"props":385,"children":387},{"className":386},[],[388],{"type":63,"value":389},"--allow-proxy-origin \u003Cscheme:\u002F\u002Fhost>",{"type":63,"value":391}," when an override is present.",{"type":57,"tag":150,"props":393,"children":394},{},[395,397,403,405,410],{"type":63,"value":396},"Never use ",{"type":57,"tag":94,"props":398,"children":400},{"className":399},[],[401],{"type":63,"value":402},"refundTo(...)",{"type":63,"value":404}," as a shortcut. It can change the recipient and is creator-restricted on current Eco contracts. The permissionless ",{"type":57,"tag":94,"props":406,"children":408},{"className":407},[],[409],{"type":63,"value":310},{"type":63,"value":411}," path is sufficient.",{"type":57,"tag":66,"props":413,"children":415},{"id":414},"create-an-evidence-directory",[416],{"type":63,"value":417},"Create an evidence directory",{"type":57,"tag":73,"props":419,"children":420},{},[421],{"type":63,"value":422},"Create a dedicated directory before diagnosis, for example:",{"type":57,"tag":424,"props":425,"children":430},"pre",{"className":426,"code":427,"language":428,"meta":429,"style":429},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","mkdir -p .\u002Feco-recovery-evidence\n","bash","",[431],{"type":57,"tag":94,"props":432,"children":433},{"__ignoreMap":429},[434],{"type":57,"tag":435,"props":436,"children":439},"span",{"class":437,"line":438},"line",1,[440,446,452],{"type":57,"tag":435,"props":441,"children":443},{"style":442},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[444],{"type":63,"value":445},"mkdir",{"type":57,"tag":435,"props":447,"children":449},{"style":448},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[450],{"type":63,"value":451}," -p",{"type":57,"tag":435,"props":453,"children":454},{"style":448},[455],{"type":63,"value":456}," .\u002Feco-recovery-evidence\n",{"type":57,"tag":73,"props":458,"children":459},{},[460],{"type":63,"value":461},"Capture command time, CLI version, Circle chain code, RPC URL host, public addresses, intent and transaction hashes, sanitized stdout\u002Fstderr, exit code, pre\u002Fpost balances, simulation result, idempotency key, and final explorer link. Keep the directory private because public addresses and account relationships may still be sensitive.",{"type":57,"tag":73,"props":463,"children":464},{},[465],{"type":63,"value":466},"Do not place raw signatures or authentication material in this directory.",{"type":57,"tag":66,"props":468,"children":470},{"id":469},"phase-1-diagnose-without-changing-state",[471],{"type":63,"value":472},"Phase 1: Diagnose without changing state",{"type":57,"tag":73,"props":474,"children":475},{},[476],{"type":63,"value":477},"Run current help before relying on remembered flags:",{"type":57,"tag":424,"props":479,"children":481},{"className":426,"code":480,"language":428,"meta":429,"style":429},"circle --version\ncircle wallet status --output json\ncircle gateway deposit --help\ncircle wallet execute --help\ncircle contract query --help\n",[482],{"type":57,"tag":94,"props":483,"children":484},{"__ignoreMap":429},[485,497,525,548,569],{"type":57,"tag":435,"props":486,"children":487},{"class":437,"line":438},[488,492],{"type":57,"tag":435,"props":489,"children":490},{"style":442},[491],{"type":63,"value":8},{"type":57,"tag":435,"props":493,"children":494},{"style":448},[495],{"type":63,"value":496}," --version\n",{"type":57,"tag":435,"props":498,"children":500},{"class":437,"line":499},2,[501,505,510,515,520],{"type":57,"tag":435,"props":502,"children":503},{"style":442},[504],{"type":63,"value":8},{"type":57,"tag":435,"props":506,"children":507},{"style":448},[508],{"type":63,"value":509}," wallet",{"type":57,"tag":435,"props":511,"children":512},{"style":448},[513],{"type":63,"value":514}," status",{"type":57,"tag":435,"props":516,"children":517},{"style":448},[518],{"type":63,"value":519}," --output",{"type":57,"tag":435,"props":521,"children":522},{"style":448},[523],{"type":63,"value":524}," json\n",{"type":57,"tag":435,"props":526,"children":528},{"class":437,"line":527},3,[529,533,538,543],{"type":57,"tag":435,"props":530,"children":531},{"style":442},[532],{"type":63,"value":8},{"type":57,"tag":435,"props":534,"children":535},{"style":448},[536],{"type":63,"value":537}," gateway",{"type":57,"tag":435,"props":539,"children":540},{"style":448},[541],{"type":63,"value":542}," deposit",{"type":57,"tag":435,"props":544,"children":545},{"style":448},[546],{"type":63,"value":547}," --help\n",{"type":57,"tag":435,"props":549,"children":551},{"class":437,"line":550},4,[552,556,560,565],{"type":57,"tag":435,"props":553,"children":554},{"style":442},[555],{"type":63,"value":8},{"type":57,"tag":435,"props":557,"children":558},{"style":448},[559],{"type":63,"value":509},{"type":57,"tag":435,"props":561,"children":562},{"style":448},[563],{"type":63,"value":564}," execute",{"type":57,"tag":435,"props":566,"children":567},{"style":448},[568],{"type":63,"value":547},{"type":57,"tag":435,"props":570,"children":572},{"class":437,"line":571},5,[573,577,582,587],{"type":57,"tag":435,"props":574,"children":575},{"style":442},[576],{"type":63,"value":8},{"type":57,"tag":435,"props":578,"children":579},{"style":448},[580],{"type":63,"value":581}," contract",{"type":57,"tag":435,"props":583,"children":584},{"style":448},[585],{"type":63,"value":586}," query",{"type":57,"tag":435,"props":588,"children":589},{"style":448},[590],{"type":63,"value":547},{"type":57,"tag":73,"props":592,"children":593},{},[594],{"type":63,"value":595},"Identify the SCA and inspect the creation chain, candidate vault\u002Frefund chains, and Gateway destination:",{"type":57,"tag":424,"props":597,"children":599},{"className":426,"code":598,"language":428,"meta":429,"style":429},"circle wallet list --chain \u003CSOURCE_CHAIN> --type agent --output json\ncircle wallet balance --address \u003CSCA> --chain \u003CSOURCE_CHAIN> --output json\ncircle gateway balance --address \u003CSCA> --chain \u003CGATEWAY_DESTINATION_CHAIN> --output json\n",[600],{"type":57,"tag":94,"props":601,"children":602},{"__ignoreMap":429},[603,664,731],{"type":57,"tag":435,"props":604,"children":605},{"class":437,"line":438},[606,610,614,619,624,630,635,641,646,651,656,660],{"type":57,"tag":435,"props":607,"children":608},{"style":442},[609],{"type":63,"value":8},{"type":57,"tag":435,"props":611,"children":612},{"style":448},[613],{"type":63,"value":509},{"type":57,"tag":435,"props":615,"children":616},{"style":448},[617],{"type":63,"value":618}," list",{"type":57,"tag":435,"props":620,"children":621},{"style":448},[622],{"type":63,"value":623}," --chain",{"type":57,"tag":435,"props":625,"children":627},{"style":626},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[628],{"type":63,"value":629}," \u003C",{"type":57,"tag":435,"props":631,"children":632},{"style":448},[633],{"type":63,"value":634},"SOURCE_CHAI",{"type":57,"tag":435,"props":636,"children":638},{"style":637},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[639],{"type":63,"value":640},"N",{"type":57,"tag":435,"props":642,"children":643},{"style":626},[644],{"type":63,"value":645},">",{"type":57,"tag":435,"props":647,"children":648},{"style":448},[649],{"type":63,"value":650}," --type",{"type":57,"tag":435,"props":652,"children":653},{"style":448},[654],{"type":63,"value":655}," agent",{"type":57,"tag":435,"props":657,"children":658},{"style":448},[659],{"type":63,"value":519},{"type":57,"tag":435,"props":661,"children":662},{"style":448},[663],{"type":63,"value":524},{"type":57,"tag":435,"props":665,"children":666},{"class":437,"line":499},[667,671,675,680,685,689,694,699,703,707,711,715,719,723,727],{"type":57,"tag":435,"props":668,"children":669},{"style":442},[670],{"type":63,"value":8},{"type":57,"tag":435,"props":672,"children":673},{"style":448},[674],{"type":63,"value":509},{"type":57,"tag":435,"props":676,"children":677},{"style":448},[678],{"type":63,"value":679}," balance",{"type":57,"tag":435,"props":681,"children":682},{"style":448},[683],{"type":63,"value":684}," --address",{"type":57,"tag":435,"props":686,"children":687},{"style":626},[688],{"type":63,"value":629},{"type":57,"tag":435,"props":690,"children":691},{"style":448},[692],{"type":63,"value":693},"SC",{"type":57,"tag":435,"props":695,"children":696},{"style":637},[697],{"type":63,"value":698},"A",{"type":57,"tag":435,"props":700,"children":701},{"style":626},[702],{"type":63,"value":645},{"type":57,"tag":435,"props":704,"children":705},{"style":448},[706],{"type":63,"value":623},{"type":57,"tag":435,"props":708,"children":709},{"style":626},[710],{"type":63,"value":629},{"type":57,"tag":435,"props":712,"children":713},{"style":448},[714],{"type":63,"value":634},{"type":57,"tag":435,"props":716,"children":717},{"style":637},[718],{"type":63,"value":640},{"type":57,"tag":435,"props":720,"children":721},{"style":626},[722],{"type":63,"value":645},{"type":57,"tag":435,"props":724,"children":725},{"style":448},[726],{"type":63,"value":519},{"type":57,"tag":435,"props":728,"children":729},{"style":448},[730],{"type":63,"value":524},{"type":57,"tag":435,"props":732,"children":733},{"class":437,"line":527},[734,738,742,746,750,754,758,762,766,770,774,779,783,787,791],{"type":57,"tag":435,"props":735,"children":736},{"style":442},[737],{"type":63,"value":8},{"type":57,"tag":435,"props":739,"children":740},{"style":448},[741],{"type":63,"value":537},{"type":57,"tag":435,"props":743,"children":744},{"style":448},[745],{"type":63,"value":679},{"type":57,"tag":435,"props":747,"children":748},{"style":448},[749],{"type":63,"value":684},{"type":57,"tag":435,"props":751,"children":752},{"style":626},[753],{"type":63,"value":629},{"type":57,"tag":435,"props":755,"children":756},{"style":448},[757],{"type":63,"value":693},{"type":57,"tag":435,"props":759,"children":760},{"style":637},[761],{"type":63,"value":698},{"type":57,"tag":435,"props":763,"children":764},{"style":626},[765],{"type":63,"value":645},{"type":57,"tag":435,"props":767,"children":768},{"style":448},[769],{"type":63,"value":623},{"type":57,"tag":435,"props":771,"children":772},{"style":626},[773],{"type":63,"value":629},{"type":57,"tag":435,"props":775,"children":776},{"style":448},[777],{"type":63,"value":778},"GATEWAY_DESTINATION_CHAI",{"type":57,"tag":435,"props":780,"children":781},{"style":637},[782],{"type":63,"value":640},{"type":57,"tag":435,"props":784,"children":785},{"style":626},[786],{"type":63,"value":645},{"type":57,"tag":435,"props":788,"children":789},{"style":448},[790],{"type":63,"value":519},{"type":57,"tag":435,"props":792,"children":793},{"style":448},[794],{"type":63,"value":524},{"type":57,"tag":73,"props":796,"children":797},{},[798],{"type":63,"value":799},"Collect at least one intent identifier:",{"type":57,"tag":146,"props":801,"children":802},{},[803,808,813],{"type":57,"tag":150,"props":804,"children":805},{},[806],{"type":63,"value":807},"Eco intent hash, or",{"type":57,"tag":150,"props":809,"children":810},{},[811],{"type":63,"value":812},"creation-chain transaction hash that published the intent, or",{"type":57,"tag":150,"props":814,"children":815},{},[816],{"type":63,"value":817},"Eco deposit address plus the funding transaction that reached it.",{"type":57,"tag":819,"props":820,"children":822},"h3",{"id":821},"check-the-current-eco-intent-status-for-a-circle-sca",[823],{"type":63,"value":824},"Check the current Eco intent status for a Circle SCA",{"type":57,"tag":73,"props":826,"children":827},{},[828],{"type":63,"value":829},"Eco does not provide a list-intents-by-SCA endpoint. Map the SCA to the single-use Eco vault created for the deposit, then query that vault and its intent:",{"type":57,"tag":210,"props":831,"children":832},{},[833,896,1118,1280],{"type":57,"tag":150,"props":834,"children":835},{},[836,838],{"type":63,"value":837},"Identify the source-chain SCA:",{"type":57,"tag":424,"props":839,"children":841},{"className":426,"code":840,"language":428,"meta":429,"style":429},"circle wallet list --chain \u003CSOURCE_CHAIN> --type agent --output json\n",[842],{"type":57,"tag":94,"props":843,"children":844},{"__ignoreMap":429},[845],{"type":57,"tag":435,"props":846,"children":847},{"class":437,"line":438},[848,852,856,860,864,868,872,876,880,884,888,892],{"type":57,"tag":435,"props":849,"children":850},{"style":442},[851],{"type":63,"value":8},{"type":57,"tag":435,"props":853,"children":854},{"style":448},[855],{"type":63,"value":509},{"type":57,"tag":435,"props":857,"children":858},{"style":448},[859],{"type":63,"value":618},{"type":57,"tag":435,"props":861,"children":862},{"style":448},[863],{"type":63,"value":623},{"type":57,"tag":435,"props":865,"children":866},{"style":626},[867],{"type":63,"value":629},{"type":57,"tag":435,"props":869,"children":870},{"style":448},[871],{"type":63,"value":634},{"type":57,"tag":435,"props":873,"children":874},{"style":637},[875],{"type":63,"value":640},{"type":57,"tag":435,"props":877,"children":878},{"style":626},[879],{"type":63,"value":645},{"type":57,"tag":435,"props":881,"children":882},{"style":448},[883],{"type":63,"value":650},{"type":57,"tag":435,"props":885,"children":886},{"style":448},[887],{"type":63,"value":655},{"type":57,"tag":435,"props":889,"children":890},{"style":448},[891],{"type":63,"value":519},{"type":57,"tag":435,"props":893,"children":894},{"style":448},[895],{"type":63,"value":524},{"type":57,"tag":150,"props":897,"children":898},{},[899,901,907,909,915,917,923,925,931,932,938,939,945,947,953,955,961,963,1112,1116],{"type":63,"value":900},"Get ",{"type":57,"tag":94,"props":902,"children":904},{"className":903},[],[905],{"type":63,"value":906},"\u003CVAULT_ADDRESS>",{"type":63,"value":908}," from the original ",{"type":57,"tag":94,"props":910,"children":912},{"className":911},[],[913],{"type":63,"value":914},"circle gateway deposit --output json",{"type":63,"value":916}," result or the saved evidence. Its ",{"type":57,"tag":94,"props":918,"children":920},{"className":919},[],[921],{"type":63,"value":922},"vaultAddress",{"type":63,"value":924},", ",{"type":57,"tag":94,"props":926,"children":928},{"className":927},[],[929],{"type":63,"value":930},"sourceAddress",{"type":63,"value":924},{"type":57,"tag":94,"props":933,"children":935},{"className":934},[],[936],{"type":63,"value":937},"sourceBlockchain",{"type":63,"value":924},{"type":57,"tag":94,"props":940,"children":942},{"className":941},[],[943],{"type":63,"value":944},"transferTxHash",{"type":63,"value":946},", and ",{"type":57,"tag":94,"props":948,"children":950},{"className":949},[],[951],{"type":63,"value":952},"deadline",{"type":63,"value":954}," fields identify the deposit. If that output was not saved, list the SCA's confirmed outbound transfers and find the exact USDC funding transaction; its ",{"type":57,"tag":94,"props":956,"children":958},{"className":957},[],[959],{"type":63,"value":960},"destinationAddress",{"type":63,"value":962}," is the Eco vault:",{"type":57,"tag":424,"props":964,"children":966},{"className":426,"code":965,"language":428,"meta":429,"style":429},"circle transaction list \\\n  --address \u003CSCA> \\\n  --chain \u003CSOURCE_CHAIN> \\\n  --operation transfer \\\n  --tx-type outbound \\\n  --state confirmed \\\n  --output json\n",[967],{"type":57,"tag":94,"props":968,"children":969},{"__ignoreMap":429},[970,991,1019,1047,1064,1081,1099],{"type":57,"tag":435,"props":971,"children":972},{"class":437,"line":438},[973,977,982,986],{"type":57,"tag":435,"props":974,"children":975},{"style":442},[976],{"type":63,"value":8},{"type":57,"tag":435,"props":978,"children":979},{"style":448},[980],{"type":63,"value":981}," transaction",{"type":57,"tag":435,"props":983,"children":984},{"style":448},[985],{"type":63,"value":618},{"type":57,"tag":435,"props":987,"children":988},{"style":637},[989],{"type":63,"value":990}," \\\n",{"type":57,"tag":435,"props":992,"children":993},{"class":437,"line":499},[994,999,1003,1007,1011,1015],{"type":57,"tag":435,"props":995,"children":996},{"style":448},[997],{"type":63,"value":998},"  --address",{"type":57,"tag":435,"props":1000,"children":1001},{"style":626},[1002],{"type":63,"value":629},{"type":57,"tag":435,"props":1004,"children":1005},{"style":448},[1006],{"type":63,"value":693},{"type":57,"tag":435,"props":1008,"children":1009},{"style":637},[1010],{"type":63,"value":698},{"type":57,"tag":435,"props":1012,"children":1013},{"style":626},[1014],{"type":63,"value":645},{"type":57,"tag":435,"props":1016,"children":1017},{"style":637},[1018],{"type":63,"value":990},{"type":57,"tag":435,"props":1020,"children":1021},{"class":437,"line":527},[1022,1027,1031,1035,1039,1043],{"type":57,"tag":435,"props":1023,"children":1024},{"style":448},[1025],{"type":63,"value":1026},"  --chain",{"type":57,"tag":435,"props":1028,"children":1029},{"style":626},[1030],{"type":63,"value":629},{"type":57,"tag":435,"props":1032,"children":1033},{"style":448},[1034],{"type":63,"value":634},{"type":57,"tag":435,"props":1036,"children":1037},{"style":637},[1038],{"type":63,"value":640},{"type":57,"tag":435,"props":1040,"children":1041},{"style":626},[1042],{"type":63,"value":645},{"type":57,"tag":435,"props":1044,"children":1045},{"style":637},[1046],{"type":63,"value":990},{"type":57,"tag":435,"props":1048,"children":1049},{"class":437,"line":550},[1050,1055,1060],{"type":57,"tag":435,"props":1051,"children":1052},{"style":448},[1053],{"type":63,"value":1054},"  --operation",{"type":57,"tag":435,"props":1056,"children":1057},{"style":448},[1058],{"type":63,"value":1059}," transfer",{"type":57,"tag":435,"props":1061,"children":1062},{"style":637},[1063],{"type":63,"value":990},{"type":57,"tag":435,"props":1065,"children":1066},{"class":437,"line":571},[1067,1072,1077],{"type":57,"tag":435,"props":1068,"children":1069},{"style":448},[1070],{"type":63,"value":1071},"  --tx-type",{"type":57,"tag":435,"props":1073,"children":1074},{"style":448},[1075],{"type":63,"value":1076}," outbound",{"type":57,"tag":435,"props":1078,"children":1079},{"style":637},[1080],{"type":63,"value":990},{"type":57,"tag":435,"props":1082,"children":1084},{"class":437,"line":1083},6,[1085,1090,1095],{"type":57,"tag":435,"props":1086,"children":1087},{"style":448},[1088],{"type":63,"value":1089},"  --state",{"type":57,"tag":435,"props":1091,"children":1092},{"style":448},[1093],{"type":63,"value":1094}," confirmed",{"type":57,"tag":435,"props":1096,"children":1097},{"style":637},[1098],{"type":63,"value":990},{"type":57,"tag":435,"props":1100,"children":1102},{"class":437,"line":1101},7,[1103,1108],{"type":57,"tag":435,"props":1104,"children":1105},{"style":448},[1106],{"type":63,"value":1107},"  --output",{"type":57,"tag":435,"props":1109,"children":1110},{"style":448},[1111],{"type":63,"value":524},{"type":57,"tag":1113,"props":1114,"children":1115},"br",{},[],{"type":63,"value":1117},"Match the intended amount, time, USDC token, and transaction hash. Do not select a vault from address alone when multiple deposits exist.",{"type":57,"tag":150,"props":1119,"children":1120},{},[1121,1123,1129,1131,1137,1139,1145,1147,1189,1192,1194,1200,1201,1206,1207,1213,1214,1219,1220,1226,1227,1233,1235,1241,1242,1248,1250,1256,1258,1264,1265,1271,1272,1278],{"type":63,"value":1122},"Query the current Gateway deposit-vault record. Use the EVM chain ID for the chain that funded the vault (",{"type":57,"tag":94,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":63,"value":1128},"8453",{"type":63,"value":1130}," for Base mainnet or ",{"type":57,"tag":94,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":63,"value":1136},"84532",{"type":63,"value":1138}," for Base Sepolia; verify current CLI support with ",{"type":57,"tag":94,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":63,"value":1144},"circle gateway deposit --help",{"type":63,"value":1146},"):",{"type":57,"tag":424,"props":1148,"children":1150},{"className":426,"code":1149,"language":428,"meta":429,"style":429},"curl -fsS \\\n  \"https:\u002F\u002Fapi.eco.com\u002Fcircle-gateway\u002Fv2\u002FdepositAddresses\u002F\u003CVAULT_ADDRESS>?sourceChainId=\u003CSOURCE_CHAIN_EVM_ID>\"\n",[1151],{"type":57,"tag":94,"props":1152,"children":1153},{"__ignoreMap":429},[1154,1171],{"type":57,"tag":435,"props":1155,"children":1156},{"class":437,"line":438},[1157,1162,1167],{"type":57,"tag":435,"props":1158,"children":1159},{"style":442},[1160],{"type":63,"value":1161},"curl",{"type":57,"tag":435,"props":1163,"children":1164},{"style":448},[1165],{"type":63,"value":1166}," -fsS",{"type":57,"tag":435,"props":1168,"children":1169},{"style":637},[1170],{"type":63,"value":990},{"type":57,"tag":435,"props":1172,"children":1173},{"class":437,"line":499},[1174,1179,1184],{"type":57,"tag":435,"props":1175,"children":1176},{"style":626},[1177],{"type":63,"value":1178},"  \"",{"type":57,"tag":435,"props":1180,"children":1181},{"style":448},[1182],{"type":63,"value":1183},"https:\u002F\u002Fapi.eco.com\u002Fcircle-gateway\u002Fv2\u002FdepositAddresses\u002F\u003CVAULT_ADDRESS>?sourceChainId=\u003CSOURCE_CHAIN_EVM_ID>",{"type":57,"tag":435,"props":1185,"children":1186},{"style":626},[1187],{"type":63,"value":1188},"\"\n",{"type":57,"tag":1113,"props":1190,"children":1191},{},[],{"type":63,"value":1193},"Record ",{"type":57,"tag":94,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":63,"value":1199},"state",{"type":63,"value":924},{"type":57,"tag":94,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":63,"value":922},{"type":63,"value":924},{"type":57,"tag":94,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":63,"value":1212},"amount",{"type":63,"value":924},{"type":57,"tag":94,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":63,"value":952},{"type":63,"value":924},{"type":57,"tag":94,"props":1221,"children":1223},{"className":1222},[],[1224],{"type":63,"value":1225},"sourceChainId",{"type":63,"value":946},{"type":57,"tag":94,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":63,"value":1232},"intentHash",{"type":63,"value":1234},". States such as ",{"type":57,"tag":94,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":63,"value":1240},"PENDING",{"type":63,"value":189},{"type":57,"tag":94,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":63,"value":1247},"FUNDING_DETECTED",{"type":63,"value":1249}," are still in progress; ",{"type":57,"tag":94,"props":1251,"children":1253},{"className":1252},[],[1254],{"type":63,"value":1255},"PUBLISHED",{"type":63,"value":1257}," means an intent was published, while ",{"type":57,"tag":94,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":63,"value":1263},"FAILED",{"type":63,"value":924},{"type":57,"tag":94,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":63,"value":1270},"REFUNDED_BY_USER",{"type":63,"value":946},{"type":57,"tag":94,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":63,"value":1277},"RECOVERY_PUBLISHED",{"type":63,"value":1279}," require reconciliation before another action.",{"type":57,"tag":150,"props":1281,"children":1282},{},[1283,1285,1290,1292,1398,1401,1403,1498,1501,1503,1509,1510,1516,1517,1523,1524,1530],{"type":63,"value":1284},"When the vault record contains an ",{"type":57,"tag":94,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":63,"value":1232},{"type":63,"value":1291},", query the intent lifecycle:",{"type":57,"tag":424,"props":1293,"children":1295},{"className":426,"code":1294,"language":428,"meta":429,"style":429},"curl -fsS \\\n  --request POST \\\n  --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus \\\n  --header \"Content-Type: application\u002Fjson\" \\\n  --data '{\"intentHash\":\"\u003CINTENT_HASH>\"}'\n",[1296],{"type":57,"tag":94,"props":1297,"children":1298},{"__ignoreMap":429},[1299,1314,1331,1348,1375],{"type":57,"tag":435,"props":1300,"children":1301},{"class":437,"line":438},[1302,1306,1310],{"type":57,"tag":435,"props":1303,"children":1304},{"style":442},[1305],{"type":63,"value":1161},{"type":57,"tag":435,"props":1307,"children":1308},{"style":448},[1309],{"type":63,"value":1166},{"type":57,"tag":435,"props":1311,"children":1312},{"style":637},[1313],{"type":63,"value":990},{"type":57,"tag":435,"props":1315,"children":1316},{"class":437,"line":499},[1317,1322,1327],{"type":57,"tag":435,"props":1318,"children":1319},{"style":448},[1320],{"type":63,"value":1321},"  --request",{"type":57,"tag":435,"props":1323,"children":1324},{"style":448},[1325],{"type":63,"value":1326}," POST",{"type":57,"tag":435,"props":1328,"children":1329},{"style":637},[1330],{"type":63,"value":990},{"type":57,"tag":435,"props":1332,"children":1333},{"class":437,"line":527},[1334,1339,1344],{"type":57,"tag":435,"props":1335,"children":1336},{"style":448},[1337],{"type":63,"value":1338},"  --url",{"type":57,"tag":435,"props":1340,"children":1341},{"style":448},[1342],{"type":63,"value":1343}," https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus",{"type":57,"tag":435,"props":1345,"children":1346},{"style":637},[1347],{"type":63,"value":990},{"type":57,"tag":435,"props":1349,"children":1350},{"class":437,"line":550},[1351,1356,1361,1366,1371],{"type":57,"tag":435,"props":1352,"children":1353},{"style":448},[1354],{"type":63,"value":1355},"  --header",{"type":57,"tag":435,"props":1357,"children":1358},{"style":626},[1359],{"type":63,"value":1360}," \"",{"type":57,"tag":435,"props":1362,"children":1363},{"style":448},[1364],{"type":63,"value":1365},"Content-Type: application\u002Fjson",{"type":57,"tag":435,"props":1367,"children":1368},{"style":626},[1369],{"type":63,"value":1370},"\"",{"type":57,"tag":435,"props":1372,"children":1373},{"style":637},[1374],{"type":63,"value":990},{"type":57,"tag":435,"props":1376,"children":1377},{"class":437,"line":571},[1378,1383,1388,1393],{"type":57,"tag":435,"props":1379,"children":1380},{"style":448},[1381],{"type":63,"value":1382},"  --data",{"type":57,"tag":435,"props":1384,"children":1385},{"style":626},[1386],{"type":63,"value":1387}," '",{"type":57,"tag":435,"props":1389,"children":1390},{"style":448},[1391],{"type":63,"value":1392},"{\"intentHash\":\"\u003CINTENT_HASH>\"}",{"type":57,"tag":435,"props":1394,"children":1395},{"style":626},[1396],{"type":63,"value":1397},"'\n",{"type":57,"tag":1113,"props":1399,"children":1400},{},[],{"type":63,"value":1402},"If only the creation transaction hash is available, use the alternate accepted identifier:",{"type":57,"tag":424,"props":1404,"children":1406},{"className":426,"code":1405,"language":428,"meta":429,"style":429},"curl -fsS \\\n  --request POST \\\n  --url https:\u002F\u002Fquotes.eco.com\u002Fapi\u002Fv3\u002Fintents\u002FintentStatus \\\n  --header \"Content-Type: application\u002Fjson\" \\\n  --data '{\"intentCreatedHash\":\"\u003CCREATION_TRANSACTION_HASH>\"}'\n",[1407],{"type":57,"tag":94,"props":1408,"children":1409},{"__ignoreMap":429},[1410,1425,1440,1455,1478],{"type":57,"tag":435,"props":1411,"children":1412},{"class":437,"line":438},[1413,1417,1421],{"type":57,"tag":435,"props":1414,"children":1415},{"style":442},[1416],{"type":63,"value":1161},{"type":57,"tag":435,"props":1418,"children":1419},{"style":448},[1420],{"type":63,"value":1166},{"type":57,"tag":435,"props":1422,"children":1423},{"style":637},[1424],{"type":63,"value":990},{"type":57,"tag":435,"props":1426,"children":1427},{"class":437,"line":499},[1428,1432,1436],{"type":57,"tag":435,"props":1429,"children":1430},{"style":448},[1431],{"type":63,"value":1321},{"type":57,"tag":435,"props":1433,"children":1434},{"style":448},[1435],{"type":63,"value":1326},{"type":57,"tag":435,"props":1437,"children":1438},{"style":637},[1439],{"type":63,"value":990},{"type":57,"tag":435,"props":1441,"children":1442},{"class":437,"line":527},[1443,1447,1451],{"type":57,"tag":435,"props":1444,"children":1445},{"style":448},[1446],{"type":63,"value":1338},{"type":57,"tag":435,"props":1448,"children":1449},{"style":448},[1450],{"type":63,"value":1343},{"type":57,"tag":435,"props":1452,"children":1453},{"style":637},[1454],{"type":63,"value":990},{"type":57,"tag":435,"props":1456,"children":1457},{"class":437,"line":550},[1458,1462,1466,1470,1474],{"type":57,"tag":435,"props":1459,"children":1460},{"style":448},[1461],{"type":63,"value":1355},{"type":57,"tag":435,"props":1463,"children":1464},{"style":626},[1465],{"type":63,"value":1360},{"type":57,"tag":435,"props":1467,"children":1468},{"style":448},[1469],{"type":63,"value":1365},{"type":57,"tag":435,"props":1471,"children":1472},{"style":626},[1473],{"type":63,"value":1370},{"type":57,"tag":435,"props":1475,"children":1476},{"style":637},[1477],{"type":63,"value":990},{"type":57,"tag":435,"props":1479,"children":1480},{"class":437,"line":571},[1481,1485,1489,1494],{"type":57,"tag":435,"props":1482,"children":1483},{"style":448},[1484],{"type":63,"value":1382},{"type":57,"tag":435,"props":1486,"children":1487},{"style":626},[1488],{"type":63,"value":1387},{"type":57,"tag":435,"props":1490,"children":1491},{"style":448},[1492],{"type":63,"value":1493},"{\"intentCreatedHash\":\"\u003CCREATION_TRANSACTION_HASH>\"}",{"type":57,"tag":435,"props":1495,"children":1496},{"style":626},[1497],{"type":63,"value":1397},{"type":57,"tag":1113,"props":1499,"children":1500},{},[],{"type":63,"value":1502},"Capture ",{"type":57,"tag":94,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":63,"value":1508},"data.status",{"type":63,"value":924},{"type":57,"tag":94,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":63,"value":1515},"data.intentCreated",{"type":63,"value":924},{"type":57,"tag":94,"props":1518,"children":1520},{"className":1519},[],[1521],{"type":63,"value":1522},"data.fulfillment",{"type":63,"value":946},{"type":57,"tag":94,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":63,"value":1529},"data.refund",{"type":63,"value":1531},", including every transaction hash and explorer URL present.",{"type":57,"tag":73,"props":1533,"children":1534},{},[1535,1537,1543],{"type":63,"value":1536},"These APIs are supporting evidence. If the response says ",{"type":57,"tag":94,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":63,"value":1542},"WaitingForRefund",{"type":63,"value":1544},", continue with onchain reconstruction; never build refund calldata or broadcast from an API status alone.",{"type":57,"tag":73,"props":1546,"children":1547},{},[1548],{"type":63,"value":1549},"Classify the state:",{"type":57,"tag":1551,"props":1552,"children":1553},"table",{},[1554,1573],{"type":57,"tag":1555,"props":1556,"children":1557},"thead",{},[1558],{"type":57,"tag":1559,"props":1560,"children":1561},"tr",{},[1562,1568],{"type":57,"tag":1563,"props":1564,"children":1565},"th",{},[1566],{"type":63,"value":1567},"Observed state",{"type":57,"tag":1563,"props":1569,"children":1570},{},[1571],{"type":63,"value":1572},"Action",{"type":57,"tag":1574,"props":1575,"children":1576},"tbody",{},[1577,1591,1604,1617,1630,1648,1661,1674],{"type":57,"tag":1559,"props":1578,"children":1579},{},[1580,1586],{"type":57,"tag":1581,"props":1582,"children":1583},"td",{},[1584],{"type":63,"value":1585},"Intent still before deadline",{"type":57,"tag":1581,"props":1587,"children":1588},{},[1589],{"type":63,"value":1590},"Wait or escalate; do not refund",{"type":57,"tag":1559,"props":1592,"children":1593},{},[1594,1599],{"type":57,"tag":1581,"props":1595,"children":1596},{},[1597],{"type":63,"value":1598},"Intent fulfilled\u002Fcompleted",{"type":57,"tag":1581,"props":1600,"children":1601},{},[1602],{"type":63,"value":1603},"Reconcile Gateway or destination funds; do not refund",{"type":57,"tag":1559,"props":1605,"children":1606},{},[1607,1612],{"type":57,"tag":1581,"props":1608,"children":1609},{},[1610],{"type":63,"value":1611},"Legacy intent, deadline passed, unfulfilled, vault funded",{"type":57,"tag":1581,"props":1613,"children":1614},{},[1615],{"type":63,"value":1616},"Run the Eco self-refund leg",{"type":57,"tag":1559,"props":1618,"children":1619},{},[1620,1625],{"type":57,"tag":1581,"props":1621,"children":1622},{},[1623],{"type":63,"value":1624},"Fixed refund recipient is the SCA",{"type":57,"tag":1581,"props":1626,"children":1627},{},[1628],{"type":63,"value":1629},"Current flow: reconcile or escalate; do not run legacy recovery",{"type":57,"tag":1559,"props":1631,"children":1632},{},[1633,1643],{"type":57,"tag":1581,"props":1634,"children":1635},{},[1636,1638],{"type":63,"value":1637},"Reward status already ",{"type":57,"tag":94,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":63,"value":348},{"type":57,"tag":1581,"props":1644,"children":1645},{},[1646],{"type":63,"value":1647},"Locate the refund recipient balance; do not call refund again",{"type":57,"tag":1559,"props":1649,"children":1650},{},[1651,1656],{"type":57,"tag":1581,"props":1652,"children":1653},{},[1654],{"type":63,"value":1655},"USDC is at the SCA",{"type":57,"tag":1581,"props":1657,"children":1658},{},[1659],{"type":63,"value":1660},"Recovery is complete",{"type":57,"tag":1559,"props":1662,"children":1663},{},[1664,1669],{"type":57,"tag":1581,"props":1665,"children":1666},{},[1667],{"type":63,"value":1668},"USDC is at the verified backing EOA",{"type":57,"tag":1581,"props":1670,"children":1671},{},[1672],{"type":63,"value":1673},"Run the backing EOA sweep leg",{"type":57,"tag":1559,"props":1675,"children":1676},{},[1677,1682],{"type":57,"tag":1581,"props":1678,"children":1679},{},[1680],{"type":63,"value":1681},"Vault and both wallet balances are zero",{"type":57,"tag":1581,"props":1683,"children":1684},{},[1685],{"type":63,"value":1686},"Stop and trace transfer events; do not guess",{"type":57,"tag":66,"props":1688,"children":1690},{"id":1689},"helper-prerequisites",[1691],{"type":63,"value":1692},"Helper prerequisites",{"type":57,"tag":73,"props":1694,"children":1695},{},[1696,1698,1704],{"type":63,"value":1697},"The bundled helpers require a trusted ",{"type":57,"tag":94,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":63,"value":1703},"circle-cli",{"type":63,"value":1705}," developer checkout with dependencies installed because the current public command surface does not expose either raw contract calldata submission or backing-EOA typed-data signing. They reuse Circle CLI's existing secure session and challenge code; they do not read or print keychain secrets directly.",{"type":57,"tag":73,"props":1707,"children":1708},{},[1709],{"type":63,"value":1710},"Resolve both paths explicitly:",{"type":57,"tag":424,"props":1712,"children":1716},{"className":1713,"code":1715,"language":63,"meta":429},[1714],"language-text","\u003CSKILL_DIR>       directory containing this SKILL.md\n\u003CCIRCLE_CLI_REPO> trusted circle-cli checkout containing apps\u002Fcli and node_modules\n",[1717],{"type":57,"tag":94,"props":1718,"children":1719},{"__ignoreMap":429},[1720],{"type":63,"value":1715},{"type":57,"tag":73,"props":1722,"children":1723},{},[1724,1726,1732],{"type":63,"value":1725},"If a newer installed CLI exposes native recovery, raw-calldata, or backing-owner commands in ",{"type":57,"tag":94,"props":1727,"children":1729},{"className":1728},[],[1730],{"type":63,"value":1731},"--help",{"type":63,"value":1733},", prefer those commands and retain the same preflight, approval, and evidence requirements.",{"type":57,"tag":66,"props":1735,"children":1737},{"id":1736},"phase-2-self-issue-the-eco-refund",[1738],{"type":63,"value":1739},"Phase 2: Self-issue the Eco refund",{"type":57,"tag":73,"props":1741,"children":1742},{},[1743,1745,1750],{"type":63,"value":1744},"Do not enter this phase until the onchain event proves the deposit is legacy or otherwise proves that the fixed recipient is owned by the selected wallet and requires this manual path. If ",{"type":57,"tag":94,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":63,"value":99},{"type":63,"value":1751}," is the SCA, stop and use the current-flow reconciliation path.",{"type":57,"tag":73,"props":1753,"children":1754},{},[1755,1757,1763],{"type":63,"value":1756},"Read ",{"type":57,"tag":1758,"props":1759,"children":1761},"a",{"href":1760},"references\u002Fself-refund.md",[1762],{"type":63,"value":1760},{"type":63,"value":1764}," before acting. It defines the exact event fields, tuple, onchain checks, and raw-calldata fallback.",{"type":57,"tag":73,"props":1766,"children":1767},{},[1768,1770,1775,1777,1782],{"type":63,"value":1769},"Prefer a native Circle CLI recovery command if the installed CLI exposes one in ",{"type":57,"tag":94,"props":1771,"children":1773},{"className":1772},[],[1774],{"type":63,"value":1731},{"type":63,"value":1776},". Otherwise use the bundled helper from a trusted ",{"type":57,"tag":94,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":63,"value":1703},{"type":63,"value":1783}," checkout:",{"type":57,"tag":424,"props":1785,"children":1787},{"className":426,"code":1786,"language":428,"meta":429,"style":429},"\u003CCIRCLE_CLI_REPO>\u002Fnode_modules\u002F.bin\u002Ftsx \\\n  \u003CSKILL_DIR>\u002Fscripts\u002Feco-self-refund.mjs \\\n  --circle-cli-repo \u003CCIRCLE_CLI_REPO> \\\n  --chain \u003CREFUND_CHAIN> \\\n  --event-chain-id \u003CCREATION_CHAIN_EVM_ID> \\\n  --refund-chain-id \u003CREFUND_CHAIN_EVM_ID> \\\n  --event-rpc-url \u003CCREATION_CHAIN_RPC_URL> \\\n  --refund-rpc-url \u003CREFUND_CHAIN_RPC_URL> \\\n  --sca \u003CSCA> \\\n  --event-portal \u003CCREATION_CHAIN_ECO_PORTAL> \\\n  --portal \u003CREFUND_CHAIN_ECO_PORTAL> \\\n  --creation-tx \u003CSOURCE_TX_HASH> \\\n  --intent-hash \u003CINTENT_HASH> \\\n  --evidence-dir \u003CEVIDENCE_DIR> \\\n  --estimate-fee\n",[1788],{"type":57,"tag":94,"props":1789,"children":1790},{"__ignoreMap":429},[1791,1813,1839,1869,1897,1927,1956,1986,2016,2045,2075,2105,2136,2166,2197],{"type":57,"tag":435,"props":1792,"children":1793},{"class":437,"line":438},[1794,1799,1804,1808],{"type":57,"tag":435,"props":1795,"children":1796},{"style":626},[1797],{"type":63,"value":1798},"\u003C",{"type":57,"tag":435,"props":1800,"children":1801},{"style":637},[1802],{"type":63,"value":1803},"CIRCLE_CLI_REPO",{"type":57,"tag":435,"props":1805,"children":1806},{"style":626},[1807],{"type":63,"value":645},{"type":57,"tag":435,"props":1809,"children":1810},{"style":637},[1811],{"type":63,"value":1812},"\u002Fnode_modules\u002F.bin\u002Ftsx \\\n",{"type":57,"tag":435,"props":1814,"children":1815},{"class":437,"line":499},[1816,1821,1826,1830,1835],{"type":57,"tag":435,"props":1817,"children":1818},{"style":626},[1819],{"type":63,"value":1820},"  \u003C",{"type":57,"tag":435,"props":1822,"children":1823},{"style":442},[1824],{"type":63,"value":1825},"SKILL_DIR",{"type":57,"tag":435,"props":1827,"children":1828},{"style":637},[1829],{"type":63,"value":645},{"type":57,"tag":435,"props":1831,"children":1832},{"style":448},[1833],{"type":63,"value":1834},"\u002Fscripts\u002Feco-self-refund.mjs",{"type":57,"tag":435,"props":1836,"children":1837},{"style":637},[1838],{"type":63,"value":990},{"type":57,"tag":435,"props":1840,"children":1841},{"class":437,"line":527},[1842,1847,1851,1856,1861,1865],{"type":57,"tag":435,"props":1843,"children":1844},{"style":448},[1845],{"type":63,"value":1846},"  --circle-cli-repo",{"type":57,"tag":435,"props":1848,"children":1849},{"style":626},[1850],{"type":63,"value":629},{"type":57,"tag":435,"props":1852,"children":1853},{"style":448},[1854],{"type":63,"value":1855},"CIRCLE_CLI_REP",{"type":57,"tag":435,"props":1857,"children":1858},{"style":637},[1859],{"type":63,"value":1860},"O",{"type":57,"tag":435,"props":1862,"children":1863},{"style":626},[1864],{"type":63,"value":645},{"type":57,"tag":435,"props":1866,"children":1867},{"style":637},[1868],{"type":63,"value":990},{"type":57,"tag":435,"props":1870,"children":1871},{"class":437,"line":550},[1872,1876,1880,1885,1889,1893],{"type":57,"tag":435,"props":1873,"children":1874},{"style":448},[1875],{"type":63,"value":1026},{"type":57,"tag":435,"props":1877,"children":1878},{"style":626},[1879],{"type":63,"value":629},{"type":57,"tag":435,"props":1881,"children":1882},{"style":448},[1883],{"type":63,"value":1884},"REFUND_CHAI",{"type":57,"tag":435,"props":1886,"children":1887},{"style":637},[1888],{"type":63,"value":640},{"type":57,"tag":435,"props":1890,"children":1891},{"style":626},[1892],{"type":63,"value":645},{"type":57,"tag":435,"props":1894,"children":1895},{"style":637},[1896],{"type":63,"value":990},{"type":57,"tag":435,"props":1898,"children":1899},{"class":437,"line":571},[1900,1905,1909,1914,1919,1923],{"type":57,"tag":435,"props":1901,"children":1902},{"style":448},[1903],{"type":63,"value":1904},"  --event-chain-id",{"type":57,"tag":435,"props":1906,"children":1907},{"style":626},[1908],{"type":63,"value":629},{"type":57,"tag":435,"props":1910,"children":1911},{"style":448},[1912],{"type":63,"value":1913},"CREATION_CHAIN_EVM_I",{"type":57,"tag":435,"props":1915,"children":1916},{"style":637},[1917],{"type":63,"value":1918},"D",{"type":57,"tag":435,"props":1920,"children":1921},{"style":626},[1922],{"type":63,"value":645},{"type":57,"tag":435,"props":1924,"children":1925},{"style":637},[1926],{"type":63,"value":990},{"type":57,"tag":435,"props":1928,"children":1929},{"class":437,"line":1083},[1930,1935,1939,1944,1948,1952],{"type":57,"tag":435,"props":1931,"children":1932},{"style":448},[1933],{"type":63,"value":1934},"  --refund-chain-id",{"type":57,"tag":435,"props":1936,"children":1937},{"style":626},[1938],{"type":63,"value":629},{"type":57,"tag":435,"props":1940,"children":1941},{"style":448},[1942],{"type":63,"value":1943},"REFUND_CHAIN_EVM_I",{"type":57,"tag":435,"props":1945,"children":1946},{"style":637},[1947],{"type":63,"value":1918},{"type":57,"tag":435,"props":1949,"children":1950},{"style":626},[1951],{"type":63,"value":645},{"type":57,"tag":435,"props":1953,"children":1954},{"style":637},[1955],{"type":63,"value":990},{"type":57,"tag":435,"props":1957,"children":1958},{"class":437,"line":1101},[1959,1964,1968,1973,1978,1982],{"type":57,"tag":435,"props":1960,"children":1961},{"style":448},[1962],{"type":63,"value":1963},"  --event-rpc-url",{"type":57,"tag":435,"props":1965,"children":1966},{"style":626},[1967],{"type":63,"value":629},{"type":57,"tag":435,"props":1969,"children":1970},{"style":448},[1971],{"type":63,"value":1972},"CREATION_CHAIN_RPC_UR",{"type":57,"tag":435,"props":1974,"children":1975},{"style":637},[1976],{"type":63,"value":1977},"L",{"type":57,"tag":435,"props":1979,"children":1980},{"style":626},[1981],{"type":63,"value":645},{"type":57,"tag":435,"props":1983,"children":1984},{"style":637},[1985],{"type":63,"value":990},{"type":57,"tag":435,"props":1987,"children":1989},{"class":437,"line":1988},8,[1990,1995,1999,2004,2008,2012],{"type":57,"tag":435,"props":1991,"children":1992},{"style":448},[1993],{"type":63,"value":1994},"  --refund-rpc-url",{"type":57,"tag":435,"props":1996,"children":1997},{"style":626},[1998],{"type":63,"value":629},{"type":57,"tag":435,"props":2000,"children":2001},{"style":448},[2002],{"type":63,"value":2003},"REFUND_CHAIN_RPC_UR",{"type":57,"tag":435,"props":2005,"children":2006},{"style":637},[2007],{"type":63,"value":1977},{"type":57,"tag":435,"props":2009,"children":2010},{"style":626},[2011],{"type":63,"value":645},{"type":57,"tag":435,"props":2013,"children":2014},{"style":637},[2015],{"type":63,"value":990},{"type":57,"tag":435,"props":2017,"children":2019},{"class":437,"line":2018},9,[2020,2025,2029,2033,2037,2041],{"type":57,"tag":435,"props":2021,"children":2022},{"style":448},[2023],{"type":63,"value":2024},"  --sca",{"type":57,"tag":435,"props":2026,"children":2027},{"style":626},[2028],{"type":63,"value":629},{"type":57,"tag":435,"props":2030,"children":2031},{"style":448},[2032],{"type":63,"value":693},{"type":57,"tag":435,"props":2034,"children":2035},{"style":637},[2036],{"type":63,"value":698},{"type":57,"tag":435,"props":2038,"children":2039},{"style":626},[2040],{"type":63,"value":645},{"type":57,"tag":435,"props":2042,"children":2043},{"style":637},[2044],{"type":63,"value":990},{"type":57,"tag":435,"props":2046,"children":2048},{"class":437,"line":2047},10,[2049,2054,2058,2063,2067,2071],{"type":57,"tag":435,"props":2050,"children":2051},{"style":448},[2052],{"type":63,"value":2053},"  --event-portal",{"type":57,"tag":435,"props":2055,"children":2056},{"style":626},[2057],{"type":63,"value":629},{"type":57,"tag":435,"props":2059,"children":2060},{"style":448},[2061],{"type":63,"value":2062},"CREATION_CHAIN_ECO_PORTA",{"type":57,"tag":435,"props":2064,"children":2065},{"style":637},[2066],{"type":63,"value":1977},{"type":57,"tag":435,"props":2068,"children":2069},{"style":626},[2070],{"type":63,"value":645},{"type":57,"tag":435,"props":2072,"children":2073},{"style":637},[2074],{"type":63,"value":990},{"type":57,"tag":435,"props":2076,"children":2078},{"class":437,"line":2077},11,[2079,2084,2088,2093,2097,2101],{"type":57,"tag":435,"props":2080,"children":2081},{"style":448},[2082],{"type":63,"value":2083},"  --portal",{"type":57,"tag":435,"props":2085,"children":2086},{"style":626},[2087],{"type":63,"value":629},{"type":57,"tag":435,"props":2089,"children":2090},{"style":448},[2091],{"type":63,"value":2092},"REFUND_CHAIN_ECO_PORTA",{"type":57,"tag":435,"props":2094,"children":2095},{"style":637},[2096],{"type":63,"value":1977},{"type":57,"tag":435,"props":2098,"children":2099},{"style":626},[2100],{"type":63,"value":645},{"type":57,"tag":435,"props":2102,"children":2103},{"style":637},[2104],{"type":63,"value":990},{"type":57,"tag":435,"props":2106,"children":2108},{"class":437,"line":2107},12,[2109,2114,2118,2123,2128,2132],{"type":57,"tag":435,"props":2110,"children":2111},{"style":448},[2112],{"type":63,"value":2113},"  --creation-tx",{"type":57,"tag":435,"props":2115,"children":2116},{"style":626},[2117],{"type":63,"value":629},{"type":57,"tag":435,"props":2119,"children":2120},{"style":448},[2121],{"type":63,"value":2122},"SOURCE_TX_HAS",{"type":57,"tag":435,"props":2124,"children":2125},{"style":637},[2126],{"type":63,"value":2127},"H",{"type":57,"tag":435,"props":2129,"children":2130},{"style":626},[2131],{"type":63,"value":645},{"type":57,"tag":435,"props":2133,"children":2134},{"style":637},[2135],{"type":63,"value":990},{"type":57,"tag":435,"props":2137,"children":2139},{"class":437,"line":2138},13,[2140,2145,2149,2154,2158,2162],{"type":57,"tag":435,"props":2141,"children":2142},{"style":448},[2143],{"type":63,"value":2144},"  --intent-hash",{"type":57,"tag":435,"props":2146,"children":2147},{"style":626},[2148],{"type":63,"value":629},{"type":57,"tag":435,"props":2150,"children":2151},{"style":448},[2152],{"type":63,"value":2153},"INTENT_HAS",{"type":57,"tag":435,"props":2155,"children":2156},{"style":637},[2157],{"type":63,"value":2127},{"type":57,"tag":435,"props":2159,"children":2160},{"style":626},[2161],{"type":63,"value":645},{"type":57,"tag":435,"props":2163,"children":2164},{"style":637},[2165],{"type":63,"value":990},{"type":57,"tag":435,"props":2167,"children":2169},{"class":437,"line":2168},14,[2170,2175,2179,2184,2189,2193],{"type":57,"tag":435,"props":2171,"children":2172},{"style":448},[2173],{"type":63,"value":2174},"  --evidence-dir",{"type":57,"tag":435,"props":2176,"children":2177},{"style":626},[2178],{"type":63,"value":629},{"type":57,"tag":435,"props":2180,"children":2181},{"style":448},[2182],{"type":63,"value":2183},"EVIDENCE_DI",{"type":57,"tag":435,"props":2185,"children":2186},{"style":637},[2187],{"type":63,"value":2188},"R",{"type":57,"tag":435,"props":2190,"children":2191},{"style":626},[2192],{"type":63,"value":645},{"type":57,"tag":435,"props":2194,"children":2195},{"style":637},[2196],{"type":63,"value":990},{"type":57,"tag":435,"props":2198,"children":2200},{"class":437,"line":2199},15,[2201],{"type":57,"tag":435,"props":2202,"children":2203},{"style":448},[2204],{"type":63,"value":2205},"  --estimate-fee\n",{"type":57,"tag":73,"props":2207,"children":2208},{},[2209,2211,2216,2218,2223,2225,2231,2233,2239],{"type":63,"value":2210},"The invocation is read-only. It decodes ",{"type":57,"tag":94,"props":2212,"children":2214},{"className":2213},[],[2215],{"type":63,"value":128},{"type":63,"value":2217}," from the explicitly selected creation-chain Portal, verifies the intent hash, then reads reward status and vault balances from the separately selected refund-chain Portal, constructs the exact ",{"type":57,"tag":94,"props":2219,"children":2221},{"className":2220},[],[2222],{"type":63,"value":310},{"type":63,"value":2224}," calldata, and performs ",{"type":57,"tag":94,"props":2226,"children":2228},{"className":2227},[],[2229],{"type":63,"value":2230},"eth_call",{"type":63,"value":2232}," from the SCA. ",{"type":57,"tag":94,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":63,"value":2238},"--estimate-fee",{"type":63,"value":2240}," additionally loads the Circle session, verifies that the fixed recipient is the selected SCA or its API-reported backing EOA, and includes the fee estimate in the approval preflight. Omit that flag only for session-free diagnosis; such output is not sufficient for approval. If the selected chain has no funded vault, stop and inspect other chains indicated by the composed Eco route; do not assume the event chain owns the vault or that both Portal addresses are identical.",{"type":57,"tag":73,"props":2242,"children":2243},{},[2244,2246,2252,2254,2260],{"type":63,"value":2245},"After showing a preflight with ",{"type":57,"tag":94,"props":2247,"children":2249},{"className":2248},[],[2250],{"type":63,"value":2251},"recipientOwnership.checked: true",{"type":63,"value":2253}," and an ",{"type":57,"tag":94,"props":2255,"children":2257},{"className":2256},[],[2258],{"type":63,"value":2259},"estimatedFee",{"type":63,"value":2261},", and receiving explicit user approval, re-run with both:",{"type":57,"tag":424,"props":2263,"children":2265},{"className":426,"code":2264,"language":428,"meta":429,"style":429},"--submit --confirm-intent \u003CINTENT_HASH>\n",[2266],{"type":57,"tag":94,"props":2267,"children":2268},{"__ignoreMap":429},[2269],{"type":57,"tag":435,"props":2270,"children":2271},{"class":437,"line":438},[2272,2277,2282,2286,2290,2294],{"type":57,"tag":435,"props":2273,"children":2274},{"style":442},[2275],{"type":63,"value":2276},"--submit",{"type":57,"tag":435,"props":2278,"children":2279},{"style":448},[2280],{"type":63,"value":2281}," --confirm-intent",{"type":57,"tag":435,"props":2283,"children":2284},{"style":626},[2285],{"type":63,"value":629},{"type":57,"tag":435,"props":2287,"children":2288},{"style":448},[2289],{"type":63,"value":2153},{"type":57,"tag":435,"props":2291,"children":2292},{"style":637},[2293],{"type":63,"value":2127},{"type":57,"tag":435,"props":2295,"children":2296},{"style":626},[2297],{"type":63,"value":2298},">\n",{"type":57,"tag":73,"props":2300,"children":2301},{},[2302],{"type":63,"value":2303},"The confirmation value binds approval to one intent rather than to an open-ended refund operation.",{"type":57,"tag":73,"props":2305,"children":2306},{},[2307,2309,2314,2316,2321],{"type":63,"value":2308},"When ",{"type":57,"tag":94,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":63,"value":381},{"type":63,"value":2315}," is set, the helper stops before sending a session token. Inspect the reported origin, ask the user to trust that exact origin, and only then add ",{"type":57,"tag":94,"props":2317,"children":2319},{"className":2318},[],[2320],{"type":63,"value":389},{"type":63,"value":350},{"type":57,"tag":73,"props":2323,"children":2324},{},[2325],{"type":63,"value":2326},"After confirmation, verify:",{"type":57,"tag":146,"props":2328,"children":2329},{},[2330,2335,2346,2351,2356],{"type":57,"tag":150,"props":2331,"children":2332},{},[2333],{"type":63,"value":2334},"Circle transaction state is confirmed and has a transaction hash.",{"type":57,"tag":150,"props":2336,"children":2337},{},[2338,2340,2345],{"type":63,"value":2339},"Portal reward status is ",{"type":57,"tag":94,"props":2341,"children":2343},{"className":2342},[],[2344],{"type":63,"value":348},{"type":63,"value":350},{"type":57,"tag":150,"props":2347,"children":2348},{},[2349],{"type":63,"value":2350},"Each reward-token vault balance is zero or lower by the refunded amount.",{"type":57,"tag":150,"props":2352,"children":2353},{},[2354],{"type":63,"value":2355},"The fixed refund recipient's balance increased.",{"type":57,"tag":150,"props":2357,"children":2358},{},[2359,2361,2367],{"type":63,"value":2360},"The receipt includes ",{"type":57,"tag":94,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":63,"value":2366},"IntentRefunded",{"type":63,"value":2368}," for the expected intent and recipient.",{"type":57,"tag":73,"props":2370,"children":2371},{},[2372,2374,2380,2382,2388],{"type":63,"value":2373},"The optional normal ",{"type":57,"tag":94,"props":2375,"children":2377},{"className":2376},[],[2378],{"type":63,"value":2379},"circle wallet execute",{"type":63,"value":2381}," tuple-form estimate is not preauthorized by this skill's ",{"type":57,"tag":94,"props":2383,"children":2385},{"className":2384},[],[2386],{"type":63,"value":2387},"allowed-tools",{"type":63,"value":2389}," because its dynamic tuple arguments cannot be narrowly scoped. Run it only through the host's normal interactive command approval. If that estimate fails while direct RPC simulation succeeds, use the preauthorized helper's raw calldata path. Do not change tuple values to make the hosted parser accept them.",{"type":57,"tag":66,"props":2391,"children":2393},{"id":2392},"phase-3-move-backing-eoa-usdc-to-the-linked-sca",[2394],{"type":63,"value":2395},"Phase 3: Move backing-EOA USDC to the linked SCA",{"type":57,"tag":73,"props":2397,"children":2398},{},[2399],{"type":63,"value":2400},"Skip this phase when the refund already reached the SCA.",{"type":57,"tag":73,"props":2402,"children":2403},{},[2404,2405,2410],{"type":63,"value":1756},{"type":57,"tag":1758,"props":2406,"children":2408},{"href":2407},"references\u002Feoa-to-sca.md",[2409],{"type":63,"value":2407},{"type":63,"value":2411}," before acting. This is a standard USDC ERC-3009 transfer authorized by the backing EOA and relayed by its linked SCA.",{"type":57,"tag":73,"props":2413,"children":2414},{},[2415],{"type":63,"value":2416},"Inspect only:",{"type":57,"tag":424,"props":2418,"children":2420},{"className":426,"code":2419,"language":428,"meta":429,"style":429},"\u003CCIRCLE_CLI_REPO>\u002Fnode_modules\u002F.bin\u002Ftsx \\\n  \u003CSKILL_DIR>\u002Fscripts\u002Feoa-to-sca.mjs \\\n  --circle-cli-repo \u003CCIRCLE_CLI_REPO> \\\n  --chain \u003CSOURCE_CHAIN> \\\n  --chain-id \u003CEVM_CHAIN_ID> \\\n  --rpc-url \u003CSOURCE_RPC_URL> \\\n  --sca \u003CSCA> \\\n  --usdc \u003CUSDC_CONTRACT> \\\n  --amount-atomic \u003CRAW_USDC_AMOUNT> \\\n  --evidence-dir \u003CEVIDENCE_DIR> \\\n  --estimate-fee\n",[2421],{"type":57,"tag":94,"props":2422,"children":2423},{"__ignoreMap":429},[2424,2443,2467,2494,2521,2550,2579,2606,2636,2665,2692],{"type":57,"tag":435,"props":2425,"children":2426},{"class":437,"line":438},[2427,2431,2435,2439],{"type":57,"tag":435,"props":2428,"children":2429},{"style":626},[2430],{"type":63,"value":1798},{"type":57,"tag":435,"props":2432,"children":2433},{"style":637},[2434],{"type":63,"value":1803},{"type":57,"tag":435,"props":2436,"children":2437},{"style":626},[2438],{"type":63,"value":645},{"type":57,"tag":435,"props":2440,"children":2441},{"style":637},[2442],{"type":63,"value":1812},{"type":57,"tag":435,"props":2444,"children":2445},{"class":437,"line":499},[2446,2450,2454,2458,2463],{"type":57,"tag":435,"props":2447,"children":2448},{"style":626},[2449],{"type":63,"value":1820},{"type":57,"tag":435,"props":2451,"children":2452},{"style":442},[2453],{"type":63,"value":1825},{"type":57,"tag":435,"props":2455,"children":2456},{"style":637},[2457],{"type":63,"value":645},{"type":57,"tag":435,"props":2459,"children":2460},{"style":448},[2461],{"type":63,"value":2462},"\u002Fscripts\u002Feoa-to-sca.mjs",{"type":57,"tag":435,"props":2464,"children":2465},{"style":637},[2466],{"type":63,"value":990},{"type":57,"tag":435,"props":2468,"children":2469},{"class":437,"line":527},[2470,2474,2478,2482,2486,2490],{"type":57,"tag":435,"props":2471,"children":2472},{"style":448},[2473],{"type":63,"value":1846},{"type":57,"tag":435,"props":2475,"children":2476},{"style":626},[2477],{"type":63,"value":629},{"type":57,"tag":435,"props":2479,"children":2480},{"style":448},[2481],{"type":63,"value":1855},{"type":57,"tag":435,"props":2483,"children":2484},{"style":637},[2485],{"type":63,"value":1860},{"type":57,"tag":435,"props":2487,"children":2488},{"style":626},[2489],{"type":63,"value":645},{"type":57,"tag":435,"props":2491,"children":2492},{"style":637},[2493],{"type":63,"value":990},{"type":57,"tag":435,"props":2495,"children":2496},{"class":437,"line":550},[2497,2501,2505,2509,2513,2517],{"type":57,"tag":435,"props":2498,"children":2499},{"style":448},[2500],{"type":63,"value":1026},{"type":57,"tag":435,"props":2502,"children":2503},{"style":626},[2504],{"type":63,"value":629},{"type":57,"tag":435,"props":2506,"children":2507},{"style":448},[2508],{"type":63,"value":634},{"type":57,"tag":435,"props":2510,"children":2511},{"style":637},[2512],{"type":63,"value":640},{"type":57,"tag":435,"props":2514,"children":2515},{"style":626},[2516],{"type":63,"value":645},{"type":57,"tag":435,"props":2518,"children":2519},{"style":637},[2520],{"type":63,"value":990},{"type":57,"tag":435,"props":2522,"children":2523},{"class":437,"line":571},[2524,2529,2533,2538,2542,2546],{"type":57,"tag":435,"props":2525,"children":2526},{"style":448},[2527],{"type":63,"value":2528},"  --chain-id",{"type":57,"tag":435,"props":2530,"children":2531},{"style":626},[2532],{"type":63,"value":629},{"type":57,"tag":435,"props":2534,"children":2535},{"style":448},[2536],{"type":63,"value":2537},"EVM_CHAIN_I",{"type":57,"tag":435,"props":2539,"children":2540},{"style":637},[2541],{"type":63,"value":1918},{"type":57,"tag":435,"props":2543,"children":2544},{"style":626},[2545],{"type":63,"value":645},{"type":57,"tag":435,"props":2547,"children":2548},{"style":637},[2549],{"type":63,"value":990},{"type":57,"tag":435,"props":2551,"children":2552},{"class":437,"line":1083},[2553,2558,2562,2567,2571,2575],{"type":57,"tag":435,"props":2554,"children":2555},{"style":448},[2556],{"type":63,"value":2557},"  --rpc-url",{"type":57,"tag":435,"props":2559,"children":2560},{"style":626},[2561],{"type":63,"value":629},{"type":57,"tag":435,"props":2563,"children":2564},{"style":448},[2565],{"type":63,"value":2566},"SOURCE_RPC_UR",{"type":57,"tag":435,"props":2568,"children":2569},{"style":637},[2570],{"type":63,"value":1977},{"type":57,"tag":435,"props":2572,"children":2573},{"style":626},[2574],{"type":63,"value":645},{"type":57,"tag":435,"props":2576,"children":2577},{"style":637},[2578],{"type":63,"value":990},{"type":57,"tag":435,"props":2580,"children":2581},{"class":437,"line":1101},[2582,2586,2590,2594,2598,2602],{"type":57,"tag":435,"props":2583,"children":2584},{"style":448},[2585],{"type":63,"value":2024},{"type":57,"tag":435,"props":2587,"children":2588},{"style":626},[2589],{"type":63,"value":629},{"type":57,"tag":435,"props":2591,"children":2592},{"style":448},[2593],{"type":63,"value":693},{"type":57,"tag":435,"props":2595,"children":2596},{"style":637},[2597],{"type":63,"value":698},{"type":57,"tag":435,"props":2599,"children":2600},{"style":626},[2601],{"type":63,"value":645},{"type":57,"tag":435,"props":2603,"children":2604},{"style":637},[2605],{"type":63,"value":990},{"type":57,"tag":435,"props":2607,"children":2608},{"class":437,"line":1988},[2609,2614,2618,2623,2628,2632],{"type":57,"tag":435,"props":2610,"children":2611},{"style":448},[2612],{"type":63,"value":2613},"  --usdc",{"type":57,"tag":435,"props":2615,"children":2616},{"style":626},[2617],{"type":63,"value":629},{"type":57,"tag":435,"props":2619,"children":2620},{"style":448},[2621],{"type":63,"value":2622},"USDC_CONTRAC",{"type":57,"tag":435,"props":2624,"children":2625},{"style":637},[2626],{"type":63,"value":2627},"T",{"type":57,"tag":435,"props":2629,"children":2630},{"style":626},[2631],{"type":63,"value":645},{"type":57,"tag":435,"props":2633,"children":2634},{"style":637},[2635],{"type":63,"value":990},{"type":57,"tag":435,"props":2637,"children":2638},{"class":437,"line":2018},[2639,2644,2648,2653,2657,2661],{"type":57,"tag":435,"props":2640,"children":2641},{"style":448},[2642],{"type":63,"value":2643},"  --amount-atomic",{"type":57,"tag":435,"props":2645,"children":2646},{"style":626},[2647],{"type":63,"value":629},{"type":57,"tag":435,"props":2649,"children":2650},{"style":448},[2651],{"type":63,"value":2652},"RAW_USDC_AMOUN",{"type":57,"tag":435,"props":2654,"children":2655},{"style":637},[2656],{"type":63,"value":2627},{"type":57,"tag":435,"props":2658,"children":2659},{"style":626},[2660],{"type":63,"value":645},{"type":57,"tag":435,"props":2662,"children":2663},{"style":637},[2664],{"type":63,"value":990},{"type":57,"tag":435,"props":2666,"children":2667},{"class":437,"line":2047},[2668,2672,2676,2680,2684,2688],{"type":57,"tag":435,"props":2669,"children":2670},{"style":448},[2671],{"type":63,"value":2174},{"type":57,"tag":435,"props":2673,"children":2674},{"style":626},[2675],{"type":63,"value":629},{"type":57,"tag":435,"props":2677,"children":2678},{"style":448},[2679],{"type":63,"value":2183},{"type":57,"tag":435,"props":2681,"children":2682},{"style":637},[2683],{"type":63,"value":2188},{"type":57,"tag":435,"props":2685,"children":2686},{"style":626},[2687],{"type":63,"value":645},{"type":57,"tag":435,"props":2689,"children":2690},{"style":637},[2691],{"type":63,"value":990},{"type":57,"tag":435,"props":2693,"children":2694},{"class":437,"line":2077},[2695],{"type":57,"tag":435,"props":2696,"children":2697},{"style":448},[2698],{"type":63,"value":2205},{"type":57,"tag":73,"props":2700,"children":2701},{},[2702,2704,2709],{"type":63,"value":2703},"This resolves ",{"type":57,"tag":94,"props":2705,"children":2707},{"className":2706},[],[2708],{"type":63,"value":107},{"type":63,"value":2710},", reads balances, checks USDC metadata, and prints the unsigned authorization plan with a pre-signing fee estimate. The fee probe uses an ephemeral local signer and a zero-value ERC-3009 authorization, so it cannot move user funds and does not request a Circle signature from the backing EOA.",{"type":57,"tag":73,"props":2712,"children":2713},{},[2714],{"type":63,"value":2715},"After showing the estimate and receiving explicit user approval for both the transfer and a native-token fee ceiling, run:",{"type":57,"tag":424,"props":2717,"children":2719},{"className":426,"code":2718,"language":428,"meta":429,"style":429},"--submit \\\n  --confirm-transfer \u003CBACKING_EOA>:\u003CSCA>:\u003CRAW_USDC_AMOUNT> \\\n  --max-network-fee \u003CAPPROVED_DECIMAL_NATIVE_TOKEN_AMOUNT>\n",[2720],{"type":57,"tag":94,"props":2721,"children":2722},{"__ignoreMap":429},[2723,2734,2803],{"type":57,"tag":435,"props":2724,"children":2725},{"class":437,"line":438},[2726,2730],{"type":57,"tag":435,"props":2727,"children":2728},{"style":442},[2729],{"type":63,"value":2276},{"type":57,"tag":435,"props":2731,"children":2732},{"style":637},[2733],{"type":63,"value":990},{"type":57,"tag":435,"props":2735,"children":2736},{"class":437,"line":499},[2737,2742,2746,2751,2755,2759,2763,2767,2771,2775,2779,2783,2787,2791,2795,2799],{"type":57,"tag":435,"props":2738,"children":2739},{"style":448},[2740],{"type":63,"value":2741},"  --confirm-transfer",{"type":57,"tag":435,"props":2743,"children":2744},{"style":626},[2745],{"type":63,"value":629},{"type":57,"tag":435,"props":2747,"children":2748},{"style":448},[2749],{"type":63,"value":2750},"BACKING_EO",{"type":57,"tag":435,"props":2752,"children":2753},{"style":637},[2754],{"type":63,"value":698},{"type":57,"tag":435,"props":2756,"children":2757},{"style":626},[2758],{"type":63,"value":645},{"type":57,"tag":435,"props":2760,"children":2761},{"style":448},[2762],{"type":63,"value":144},{"type":57,"tag":435,"props":2764,"children":2765},{"style":626},[2766],{"type":63,"value":1798},{"type":57,"tag":435,"props":2768,"children":2769},{"style":448},[2770],{"type":63,"value":693},{"type":57,"tag":435,"props":2772,"children":2773},{"style":637},[2774],{"type":63,"value":698},{"type":57,"tag":435,"props":2776,"children":2777},{"style":626},[2778],{"type":63,"value":645},{"type":57,"tag":435,"props":2780,"children":2781},{"style":448},[2782],{"type":63,"value":144},{"type":57,"tag":435,"props":2784,"children":2785},{"style":626},[2786],{"type":63,"value":1798},{"type":57,"tag":435,"props":2788,"children":2789},{"style":448},[2790],{"type":63,"value":2652},{"type":57,"tag":435,"props":2792,"children":2793},{"style":637},[2794],{"type":63,"value":2627},{"type":57,"tag":435,"props":2796,"children":2797},{"style":626},[2798],{"type":63,"value":645},{"type":57,"tag":435,"props":2800,"children":2801},{"style":637},[2802],{"type":63,"value":990},{"type":57,"tag":435,"props":2804,"children":2805},{"class":437,"line":527},[2806,2811,2815,2820,2824],{"type":57,"tag":435,"props":2807,"children":2808},{"style":448},[2809],{"type":63,"value":2810},"  --max-network-fee",{"type":57,"tag":435,"props":2812,"children":2813},{"style":626},[2814],{"type":63,"value":629},{"type":57,"tag":435,"props":2816,"children":2817},{"style":448},[2818],{"type":63,"value":2819},"APPROVED_DECIMAL_NATIVE_TOKEN_AMOUN",{"type":57,"tag":435,"props":2821,"children":2822},{"style":637},[2823],{"type":63,"value":2627},{"type":57,"tag":435,"props":2825,"children":2826},{"style":626},[2827],{"type":63,"value":2298},{"type":57,"tag":73,"props":2829,"children":2830},{},[2831,2833,2839],{"type":63,"value":2832},"The helper repeats the zero-value fee probe and refuses before requesting the backing EOA signature when it exceeds ",{"type":57,"tag":94,"props":2834,"children":2836},{"className":2835},[],[2837],{"type":63,"value":2838},"--max-network-fee",{"type":63,"value":2840},". After signing, it estimates the exact calldata and refuses before broadcast if that exact fee exceeds the same ceiling. If this post-signing refusal occurs, retain the nonce evidence and let the authorization expire before creating another.",{"type":57,"tag":73,"props":2842,"children":2843},{},[2844,2845,2850,2852,2857],{"type":63,"value":2308},{"type":57,"tag":94,"props":2846,"children":2848},{"className":2847},[],[2849],{"type":63,"value":381},{"type":63,"value":2851}," is set, apply the same explicit ",{"type":57,"tag":94,"props":2853,"children":2855},{"className":2854},[],[2856],{"type":63,"value":389},{"type":63,"value":2858}," gate before resolving or signing with the backing EOA.",{"type":57,"tag":73,"props":2860,"children":2861},{},[2862],{"type":63,"value":2863},"The helper then:",{"type":57,"tag":210,"props":2865,"children":2866},{},[2867,2872,2900,2920,2931,2944],{"type":57,"tag":150,"props":2868,"children":2869},{},[2870],{"type":63,"value":2871},"Verifies the fresh pre-signing fee estimate is within the explicitly approved ceiling.",{"type":57,"tag":150,"props":2873,"children":2874},{},[2875,2877,2883,2885,2891,2892,2898],{"type":63,"value":2876},"Builds ",{"type":57,"tag":94,"props":2878,"children":2880},{"className":2879},[],[2881],{"type":63,"value":2882},"TransferWithAuthorization",{"type":63,"value":2884}," with ",{"type":57,"tag":94,"props":2886,"children":2888},{"className":2887},[],[2889],{"type":63,"value":2890},"from=backing EOA",{"type":63,"value":924},{"type":57,"tag":94,"props":2893,"children":2895},{"className":2894},[],[2896],{"type":63,"value":2897},"to=linked SCA",{"type":63,"value":2899},", exact raw amount, a fresh 32-byte nonce, and a short expiry.",{"type":57,"tag":150,"props":2901,"children":2902},{},[2903,2905,2911,2912,2918],{"type":63,"value":2904},"Requests typed-data signing with ",{"type":57,"tag":94,"props":2906,"children":2908},{"className":2907},[],[2909],{"type":63,"value":2910},"walletAddress=\u003Cbacking EOA>",{"type":63,"value":189},{"type":57,"tag":94,"props":2913,"children":2915},{"className":2914},[],[2916],{"type":63,"value":2917},"blockchain=\u003CSOURCE_CHAIN>",{"type":63,"value":2919},". Signing by the SCA wallet ID is incorrect because it can produce an EIP-1271 replay-safe SCA wrapper instead of the raw EOA signature USDC expects.",{"type":57,"tag":150,"props":2921,"children":2922},{},[2923,2925,2930],{"type":63,"value":2924},"Recovers the signer locally and requires it to equal ",{"type":57,"tag":94,"props":2926,"children":2928},{"className":2927},[],[2929],{"type":63,"value":107},{"type":63,"value":350},{"type":57,"tag":150,"props":2932,"children":2933},{},[2934,2936,2942],{"type":63,"value":2935},"Requires ",{"type":57,"tag":94,"props":2937,"children":2939},{"className":2938},[],[2940],{"type":63,"value":2941},"authorizationState(backing EOA, nonce) == false",{"type":63,"value":2943},", simulates the exact USDC call from the SCA, and verifies its exact fee is still within the approved ceiling.",{"type":57,"tag":150,"props":2945,"children":2946},{},[2947,2949,2955],{"type":63,"value":2948},"Submits ",{"type":57,"tag":94,"props":2950,"children":2952},{"className":2951},[],[2953],{"type":63,"value":2954},"transferWithAuthorization(...)",{"type":63,"value":2956}," through the linked SCA as relayer.",{"type":57,"tag":73,"props":2958,"children":2959},{},[2960],{"type":63,"value":2326},{"type":57,"tag":146,"props":2962,"children":2963},{},[2964,2969,2974,2985],{"type":57,"tag":150,"props":2965,"children":2966},{},[2967],{"type":63,"value":2968},"Backing EOA USDC decreased by the exact amount.",{"type":57,"tag":150,"props":2970,"children":2971},{},[2972],{"type":63,"value":2973},"SCA USDC increased by the exact amount.",{"type":57,"tag":150,"props":2975,"children":2976},{},[2977,2983],{"type":57,"tag":94,"props":2978,"children":2980},{"className":2979},[],[2981],{"type":63,"value":2982},"authorizationState(backing EOA, nonce)",{"type":63,"value":2984}," is true.",{"type":57,"tag":150,"props":2986,"children":2987},{},[2988],{"type":63,"value":2989},"The receipt contains the expected USDC transfer.",{"type":57,"tag":66,"props":2991,"children":2993},{"id":2992},"ambiguous-or-failed-submissions",[2994],{"type":63,"value":2995},"Ambiguous or failed submissions",{"type":57,"tag":73,"props":2997,"children":2998},{},[2999],{"type":63,"value":3000},"Do not create a fresh authorization or idempotency key just because a client timed out.",{"type":57,"tag":73,"props":3002,"children":3003},{},[3004,3006,3011],{"type":63,"value":3005},"For Eco refund ambiguity, check reward status, vault balance, recipient balance, transaction list, and ",{"type":57,"tag":94,"props":3007,"children":3009},{"className":3008},[],[3010],{"type":63,"value":2366},{"type":63,"value":3012}," logs. If any proves success, record the result and stop.",{"type":57,"tag":73,"props":3014,"children":3015},{},[3016,3018,3024],{"type":63,"value":3017},"For ERC-3009 ambiguity, check ",{"type":57,"tag":94,"props":3019,"children":3021},{"className":3020},[],[3022],{"type":63,"value":3023},"authorizationState",{"type":63,"value":3025},", both USDC balances, transaction list, and transfer logs. A consumed nonce or completed balance movement proves the authorization was used. Never sign a second transfer until the first is reconciled.",{"type":57,"tag":73,"props":3027,"children":3028},{},[3029,3031,3037],{"type":63,"value":3030},"If a signed authorization was never submitted, let its ",{"type":57,"tag":94,"props":3032,"children":3034},{"className":3033},[],[3035],{"type":63,"value":3036},"validBefore",{"type":63,"value":3038}," expire before creating another with the same amount unless onchain state proves the nonce unused and the original signature cannot be replayed by an unintended party.",{"type":57,"tag":66,"props":3040,"children":3042},{"id":3041},"completion-report",[3043],{"type":63,"value":3044},"Completion report",{"type":57,"tag":73,"props":3046,"children":3047},{},[3048],{"type":63,"value":3049},"Report:",{"type":57,"tag":146,"props":3051,"children":3052},{},[3053,3058,3063,3068,3073,3078,3083,3088,3093],{"type":57,"tag":150,"props":3054,"children":3055},{},[3056],{"type":63,"value":3057},"Initial diagnosis and selected branch.",{"type":57,"tag":150,"props":3059,"children":3060},{},[3061],{"type":63,"value":3062},"Creation\u002Fevent, vault\u002Frefund, intent-destination, and Gateway-destination chain names and IDs.",{"type":57,"tag":150,"props":3064,"children":3065},{},[3066],{"type":63,"value":3067},"SCA, verified backing EOA, creation-chain Portal, refund-chain Portal, vault, token, and fixed refund recipient.",{"type":57,"tag":150,"props":3069,"children":3070},{},[3071],{"type":63,"value":3072},"Intent hash, route hash, deadline, reward status before\u002Fafter.",{"type":57,"tag":150,"props":3074,"children":3075},{},[3076],{"type":63,"value":3077},"Amounts in atomic units and USDC.",{"type":57,"tag":150,"props":3079,"children":3080},{},[3081],{"type":63,"value":3082},"Simulation results and gas estimate.",{"type":57,"tag":150,"props":3084,"children":3085},{},[3086],{"type":63,"value":3087},"Circle transaction IDs, onchain transaction hashes, and explorer links.",{"type":57,"tag":150,"props":3089,"children":3090},{},[3091],{"type":63,"value":3092},"Pre\u002Fpost balances and ERC-3009 authorization state.",{"type":57,"tag":150,"props":3094,"children":3095},{},[3096],{"type":63,"value":3097},"Evidence-directory path and a note that secrets\u002Fsignatures were excluded.",{"type":57,"tag":66,"props":3099,"children":3101},{"id":3100},"reference-links",[3102],{"type":63,"value":3103},"Reference links",{"type":57,"tag":146,"props":3105,"children":3106},{},[3107,3119,3130,3141,3152,3163,3174],{"type":57,"tag":150,"props":3108,"children":3109},{},[3110,3112],{"type":63,"value":3111},"Eco Portal contract: ",{"type":57,"tag":1758,"props":3113,"children":3117},{"href":3114,"rel":3115},"https:\u002F\u002Fdocs.eco.com\u002Froutes\u002Farchitecture\u002Fportal",[3116],"nofollow",[3118],{"type":63,"value":3114},{"type":57,"tag":150,"props":3120,"children":3121},{},[3122,3124],{"type":63,"value":3123},"Eco vaults: ",{"type":57,"tag":1758,"props":3125,"children":3128},{"href":3126,"rel":3127},"https:\u002F\u002Fdocs.eco.com\u002Froutes\u002Farchitecture\u002Fvault",[3116],[3129],{"type":63,"value":3126},{"type":57,"tag":150,"props":3131,"children":3132},{},[3133,3135],{"type":63,"value":3134},"Eco intent status API: ",{"type":57,"tag":1758,"props":3136,"children":3139},{"href":3137,"rel":3138},"https:\u002F\u002Fdocs.eco.com\u002Fapi-reference\u002Fquotes-v3\u002Fget-intent-status",[3116],[3140],{"type":63,"value":3137},{"type":57,"tag":150,"props":3142,"children":3143},{},[3144,3146],{"type":63,"value":3145},"Eco contracts: ",{"type":57,"tag":1758,"props":3147,"children":3150},{"href":3148,"rel":3149},"https:\u002F\u002Fgithub.com\u002Feco\u002Feco-routes",[3116],[3151],{"type":63,"value":3148},{"type":57,"tag":150,"props":3153,"children":3154},{},[3155,3157],{"type":63,"value":3156},"EIP-3009: ",{"type":57,"tag":1758,"props":3158,"children":3161},{"href":3159,"rel":3160},"https:\u002F\u002Feips.ethereum.org\u002FEIPS\u002Feip-3009",[3116],[3162],{"type":63,"value":3159},{"type":57,"tag":150,"props":3164,"children":3165},{},[3166,3168],{"type":63,"value":3167},"Circle USDC contracts: ",{"type":57,"tag":1758,"props":3169,"children":3172},{"href":3170,"rel":3171},"https:\u002F\u002Fdevelopers.circle.com\u002Fstablecoins\u002Fusdc-contract-addresses",[3116],[3173],{"type":63,"value":3170},{"type":57,"tag":150,"props":3175,"children":3176},{},[3177,3179],{"type":63,"value":3178},"Circle Agent Wallet setup skill: ",{"type":57,"tag":94,"props":3180,"children":3182},{"className":3181},[],[3183],{"type":63,"value":195},{"type":57,"tag":3185,"props":3186,"children":3187},"hr",{},[],{"type":57,"tag":73,"props":3189,"children":3190},{},[3191,3193,3200],{"type":63,"value":3192},"DISCLAIMER: This skill is provided \"as is\" without warranties, is subject to the ",{"type":57,"tag":1758,"props":3194,"children":3197},{"href":3195,"rel":3196},"https:\u002F\u002Fconsole.circle.com\u002Flegal\u002Fdeveloper-terms",[3116],[3198],{"type":63,"value":3199},"Circle Developer Terms",{"type":63,"value":3201},", and output generated may contain errors. Review every address, amount, deadline, contract, simulation, fee, and approval before broadcasting a transaction.",{"type":57,"tag":3203,"props":3204,"children":3205},"style",{},[3206],{"type":63,"value":3207},"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":3209,"total":3297},[3210,3226,3241,3256,3267,3280,3286],{"slug":3211,"name":3211,"fn":3212,"description":3213,"org":3214,"tags":3215,"stars":23,"repoUrl":24,"updatedAt":3225},"accept-agent-payments","monetize agent resources with Circle payments","Use when a developer wants to monetize an API, endpoint, service, model, dataset, tool, or agent-facing resource with Circle USDC pay-per-call payments, Gateway Nanopayments, x402, HTTP 402, or Agent Marketplace listing. Triggers on: charge agents, sell to agents, paid API, monetize endpoint, micropayments, nanopayments seller, x402 seller, accept USDC, service listing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3216,3219,3220,3223],{"name":3217,"slug":3218,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},"Payments","payments",{"name":3224,"slug":3224,"type":16},"x402","2026-07-12T08:15:01.981685",{"slug":3227,"name":3227,"fn":3228,"description":3229,"org":3230,"tags":3231,"stars":23,"repoUrl":24,"updatedAt":3240},"agent-wallet-policy","inspect Circle agent wallet spending policies","View spending policy on a Circle agent wallet — per-transaction, daily, weekly, and monthly USDC caps via the `circle` CLI. Use when the user wants to inspect current limits. Setting or resetting limits requires OTP confirmation in an interactive terminal session — the agent hands the user a verbatim command to run themselves; the OTP must never pass through agent storage. Mainnet-only — testnet chains are rejected. Triggers on: spending limit, spending policy, per-tx cap, daily cap, weekly cap, monthly cap, wallet rules, OTP confirmation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3232,3233,3236,3237],{"name":9,"slug":8,"type":16},{"name":3234,"slug":3235,"type":16},"CLI","cli",{"name":3221,"slug":3222,"type":16},{"name":3238,"slug":3239,"type":16},"Security","security","2026-07-12T08:14:58.279437",{"slug":3242,"name":3242,"fn":3243,"description":3244,"org":3245,"tags":3246,"stars":23,"repoUrl":24,"updatedAt":3255},"bridge-stablecoin","build USDC bridging with Circle SDKs","Build USDC bridging with Circle App Kit or standalone Bridge Kit SDK and Crosschain Transfer Protocol (CCTP). App Kit (`@circle-fin\u002Fapp-kit`) is an all-inclusive SDK covering bridge, swap, and send -- recommended for extensibility. Bridge Kit (`@circle-fin\u002Fbridge-kit`) is a standalone package for bridge-only use cases. Neither requires a kit key for bridge operations. Supports bridging USDC between EVM chains, between EVM chains and Solana, and between any two chains on Circle Wallets (i.e Developer-Controlled Wallets or Programmable wallets). Use when: bridge USDC, setting up Bridge Kit adapters (Viem, Ethers, Solana Kit, Circle Wallets), handling bridge events, collecting custom fees, configuring transfer speed, or using the Forwarding Service. Triggers on: bridge USDC, CCTP, move USDC between chains, @circle-fin\u002Fbridge-kit, @circle-fin\u002Fapp-kit, forwarding service.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3247,3248,3249,3252],{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3250,"slug":3251,"type":16},"SDK","sdk",{"name":3253,"slug":3254,"type":16},"Web3","web3","2026-07-12T08:14:55.784905",{"slug":3257,"name":3257,"fn":3258,"description":3259,"org":3260,"tags":3261,"stars":23,"repoUrl":24,"updatedAt":3266},"fund-agent-wallet","fund Circle agent wallets with USDC","Fund a Circle agent wallet with USDC via the `circle` CLI. payments are gas-abstracted. users can pay with USDC only, no ETH required. Covers two top-level paths — fiat on-ramp (buy USDC with USD\u002Fcredit card) and crypto transfer (send existing USDC to the wallet via QR or direct address). Also covers Gateway deposits (eco vs direct sub-paths) for the Nanopayments balance used by paid services. Use when the user wants to add USDC to their agent wallet, top up after a low balance, deposit into Gateway, or pick the right funding method. Triggers on: fund agent wallet, add USDC, fiat on-ramp, Gateway deposit, eco deposit, direct deposit, top up wallet, withdraw USDC, nanopayments.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3262,3263,3264,3265],{"name":9,"slug":8,"type":16},{"name":3234,"slug":3235,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},"2026-08-17T03:30:51.14205",{"slug":3268,"name":3268,"fn":3269,"description":3270,"org":3271,"tags":3272,"stars":23,"repoUrl":24,"updatedAt":3279},"pay-via-agent-wallet","process payments with Circle agent wallet","Use this skill when the user wants to call a paid API, look something up online, search for data, get prices or odds or stats, or use any paid service with automatic USDC payment. Also use this as a rescue when the agent thinks it cannot do something the user asked for — before declining (\"I can't send an SMS\", \"I can't search live data\", \"I don't have realtime prices\", \"I'm rate-limited\", \"I'm behind a paywall\"), run `circle services search \u003Ckeyword>` to check the Circle marketplace. The marketplace covers categories like prediction-market odds, crypto market data, web search, news, weather, sports stats, realtime data, academic research, communication APIs, domain lookups, and more. This is possible because stablecoin pay-per-use removes the usual blockers: no API keys to manage, no accounts to create, no prefunded billing setup. Activate even when the user doesn't mention Circle by name. Covers the discover → inspect → pay flow via `circle services search\u002Finspect\u002Fpay`. Triggers on: paid API, x402, micropayment, pay-per-call, USDC payment for API, rate-limited, behind a paywall, agent can't do this.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3273,3274,3277,3278],{"name":3217,"slug":3218,"type":16},{"name":3275,"slug":3276,"type":16},"Automation","automation",{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},"2026-07-12T08:15:00.744635",{"slug":4,"name":4,"fn":5,"description":6,"org":3281,"tags":3282,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3283,3284,3285],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"slug":3287,"name":3287,"fn":3288,"description":3289,"org":3290,"tags":3291,"stars":23,"repoUrl":24,"updatedAt":3296},"swap-tokens","build token swap functionality with Circle","Build token swap functionality with Circle App Kit or standalone Swap Kit SDKs. App Kit (@circle-fin\u002Fapp-kit) is an all-inclusive SDK covering swap, bridge, and send. Swap Kit (@circle-fin\u002Fswap-kit) is standalone for swap-only use cases. Both require a kit key and run server-side only. Swap runs on mainnet chains and on Arc Testnet. Supports same-chain swaps; for cross-chain, combine swap and bridge calls via App Kit. Use when: swapping tokens, exchanging stablecoins, converting USDT to USDC, setting up swap adapters, estimating swap rates, configuring slippage or stop limits, collecting custom swap fees, or combining swap and bridge for cross-chain token movement. Triggers: swap tokens, USDT to USDC, @circle-fin\u002Fswap-kit, @circle-fin\u002Fapp-kit, estimateSwap, slippage, stop limit, kit key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3292,3293,3294,3295],{"name":3217,"slug":3218,"type":16},{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},"2026-07-12T08:14:48.147148",18,{"items":3299,"total":3297},[3300,3307,3314,3321,3328,3335,3341,3348,3359,3372,3385,3395],{"slug":3211,"name":3211,"fn":3212,"description":3213,"org":3301,"tags":3302,"stars":23,"repoUrl":24,"updatedAt":3225},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3303,3304,3305,3306],{"name":3217,"slug":3218,"type":16},{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3224,"slug":3224,"type":16},{"slug":3227,"name":3227,"fn":3228,"description":3229,"org":3308,"tags":3309,"stars":23,"repoUrl":24,"updatedAt":3240},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3310,3311,3312,3313],{"name":9,"slug":8,"type":16},{"name":3234,"slug":3235,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3238,"slug":3239,"type":16},{"slug":3242,"name":3242,"fn":3243,"description":3244,"org":3315,"tags":3316,"stars":23,"repoUrl":24,"updatedAt":3255},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3317,3318,3319,3320],{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3250,"slug":3251,"type":16},{"name":3253,"slug":3254,"type":16},{"slug":3257,"name":3257,"fn":3258,"description":3259,"org":3322,"tags":3323,"stars":23,"repoUrl":24,"updatedAt":3266},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3324,3325,3326,3327],{"name":9,"slug":8,"type":16},{"name":3234,"slug":3235,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},{"slug":3268,"name":3268,"fn":3269,"description":3270,"org":3329,"tags":3330,"stars":23,"repoUrl":24,"updatedAt":3279},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3331,3332,3333,3334],{"name":3217,"slug":3218,"type":16},{"name":3275,"slug":3276,"type":16},{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":3336,"tags":3337,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3338,3339,3340],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16},{"slug":3287,"name":3287,"fn":3288,"description":3289,"org":3342,"tags":3343,"stars":23,"repoUrl":24,"updatedAt":3296},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3344,3345,3346,3347],{"name":3217,"slug":3218,"type":16},{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},{"slug":3349,"name":3349,"fn":3350,"description":3351,"org":3352,"tags":3353,"stars":23,"repoUrl":24,"updatedAt":3358},"unify-balance","manage cross-chain USDC balances with Circle","Build unified cross-chain USDC balance management with Circle Unified Balance Kit SDK via App Kit (`@circle-fin\u002Fapp-kit`) or standalone (`@circle-fin\u002Funified-balance-kit`). Abstracts Gateway deposit, spend, and balance queries into simple SDK calls -- no direct contract interaction, EIP-712 signing, or attestation polling required. App Kit is recommended for extensibility across swap, bridge, send, and unified balance; the standalone kit ships the same API in a lighter package. Neither requires a kit key. Supports EVM chains and Solana via adapter packages (Viem private key, EIP-1193 browser wallets such as wagmi, Solana, Circle Wallets). Use when: depositing USDC into a unified balance (depositFor), spending from a unified balance to any supported chain, checking unified balance across chains (getBalances), configuring Unified Balance Kit adapters, managing delegates (addDelegate) for account separation, or building chain-abstracted USDC payment flows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3354,3355,3356,3357],{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3250,"slug":3251,"type":16},{"name":3253,"slug":3254,"type":16},"2026-07-12T08:14:50.682387",{"slug":195,"name":195,"fn":3360,"description":3361,"org":3362,"tags":3363,"stars":23,"repoUrl":24,"updatedAt":3371},"manage Circle agent wallets for AI","Set up and manage a Circle agent wallet through the `circle` CLI. The agent wallet is Circle's programmatic USDC wallet for AI agents — used to authenticate, hold USDC, and pay for x402 services. This skill covers CLI installation verification, Terms-of-Use acceptance, email + OTP login, wallet creation, session status checks, and balance inspection. Use whenever the user wants to set up, log in to, or inspect the state of their Circle agent wallet, or whenever a downstream skill (like paying for an x402 service or funding the wallet) needs the wallet bootstrapped first. Triggers on: circle wallet login, circle wallet create, circle wallet status, set up Circle agent wallet, terms acceptance, install Circle CLI, x402 setup.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3364,3367,3368,3369,3370],{"name":3365,"slug":3366,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},{"name":3224,"slug":3224,"type":16},"2026-07-12T08:14:53.237765",{"slug":3373,"name":3373,"fn":3374,"description":3375,"org":3376,"tags":3377,"stars":23,"repoUrl":24,"updatedAt":3384},"use-arc","build applications on Circle Arc blockchain","Provide instructions on how to build with Arc, Circle's blockchain where USDC is the native gas token. Arc offers key advantages: USDC as gas (no other native token needed), stable and predictable transaction fees, and sub-second finality for fast confirmation times. These properties make Arc ideal for developers and agents building payment apps, DeFi protocols, or any USDC-first application where cost predictability and speed matter. Use skill when Arc or Arc Testnet is mentioned, working with any smart contracts related to Arc, configuring Arc in blockchain projects, bridging USDC to Arc via CCTP, or building USDC-first applications. Triggers: Arc, Arc Testnet, USDC gas, deploy to Arc, Arc chain, stable fees, fast finality.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3378,3381,3382,3383],{"name":3379,"slug":3380,"type":16},"Blockchain","blockchain",{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},"2026-07-12T08:14:45.491427",{"slug":187,"name":187,"fn":3386,"description":3387,"org":3388,"tags":3389,"stars":23,"repoUrl":24,"updatedAt":3394},"perform onchain stablecoin operations via CLI","Use this skill when the user wants to do anything onchain with stablecoins, USDC, or Circle through a CLI — paying for APIs, sending USDC, bridging, checking balances, or managing spending. **Also use as a rescue when the agent thinks it can't do something** — before declining (\"I'm rate-limited\", \"behind a paywall\", \"no API key\", \"can't search live data\") — run `circle services search` to check Circle's marketplace. Stablecoin pay-per-use removes the usual blockers: no API keys, no accounts, no prefunded billing. Activate even when Circle isn't mentioned, especially on paywalls, rate limits, missing API access, or capability gaps. Master skill; routes to narrower agent-wallet skills. Triggers on: paywall, rate-limited, no API key, can't access live data, paid API, Circle CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3390,3391,3392,3393],{"name":9,"slug":8,"type":16},{"name":3234,"slug":3235,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3253,"slug":3254,"type":16},"2026-07-12T08:14:51.977061",{"slug":3396,"name":3396,"fn":3397,"description":3398,"org":3399,"tags":3400,"stars":23,"repoUrl":24,"updatedAt":3405},"use-circle-wallets","implement Circle wallet solutions","Choose and implement the right Circle wallet type for your application. Compares developer-controlled, user-controlled, and modular (passkey) wallets across custody model, key management, account types, blockchain support, and use cases. Use whenever blockchain wallet integrations are required for onchain application development. Triggers on: which wallet, choose wallet, wallet comparison, EOA vs SCA vs Modular Wallet, custody model, programmable wallets.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3401,3402,3403,3404],{"name":9,"slug":8,"type":16},{"name":3221,"slug":3222,"type":16},{"name":3238,"slug":3239,"type":16},{"name":3253,"slug":3254,"type":16},"2026-07-12T08:14:57.048087"]