[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GYCQWPDMQ2XSRAECTMRKBJ":3,"skill-same:01M6GYCQWPDMQ2XSRAECTMRKBJ":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6GYCQWPDMQ2XSRAECTMRKBJ","detect-sandwich-risk-before-swapping",null,"Use when a swap might be sandwiched, to estimate the extractable value, and to choose mitigations. Checks trade size versus pool depth, slippage tolerance, and transaction visibility.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",80,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-detect-sandwich-risk-before-swapping\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-detect-sandwich-risk-before-swapping\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"detect sandwich risk before swapping","sandwich","detect","risk","size","when","depth","value","estimate","pool","tolerance","trade","transaction","swap","slippage","use","choose","2026-11-10 10:12:30",false,"---\nname: detect-sandwich-risk-before-swapping\ndescription: Use when a swap might be sandwiched, to estimate the extractable value, and to choose mitigations. Checks trade size versus pool depth, slippage tolerance, and transaction visibility.\n---\n\n# Detect sandwich risk before swapping\n\nA sandwich is a front-run that pushes price against your swap plus a back-run that unwinds the attacker into the move your fill created; the attacker's ceiling is exactly the slippage you allowed.\n\n## Procedure\n\n1. Compute your price impact (see the slippage skill). The attacker's max profit ≈ `impact% * notional - fees - gas`. A $50,000 swap at 1% impact is worth up to $500 minus costs.\n\n2. Risk score: sandwichable if `notional \u002F pool_depth > 0.001` AND `slippage_tolerance > 0.005`. Below either threshold, extraction is usually unprofitable after gas (~$5–50 on mainnet, ~$0.01 on L2).\n\n3. Check visibility. A transaction broadcast to a public mempool is observable immediately:\n\n   cast tx $TXHASH --rpc-url $RPC | grep '\"to\"'\n\n   If it went to a public RPC, assume a searcher scanned it.\n\n4. Detect a sandwich after the fact by pulling the block and finding same-pair swaps adjacent to yours:\n\n   cast logs --from-block $B --to-block $B --address $POOL \"Swap(address,uint256,uint256,uint256,uint256,address)\" --rpc-url $RPC\n\n   Three consecutive swaps of the same pair, the middle one yours with the outer two from the same address, is a sandwich.\n\n5. Mitigate in order of strength: (a) submit via a private\u002FMEV-protected RPC; (b) set tolerance \u003C= 0.5%; (c) split into pieces under the impact threshold; (d) use a batch auction or commit-reveal DEX.\n\n6. Weigh the mitigation cost: near zero on L2 and free via Flashbots Protect. Leaving `amountOutMin` loose to \"avoid a revert\" trades a guaranteed loss for a rare retry.\n\n## Pitfalls\n\n- Tight slippage without a protected RPC just makes you revert — reverts still burn gas and are a loss.\n- Assuming low impact alone is safe: repeated small swaps in one block are sandwichable if they net to a large move.\n- Assuming L2s are sandwich-proof: sequencers can reorder, and priority-order-flow auctions still exist.\n\n## Verification\n\n    cast logs --from-block $B --to-block $B --address $POOL \"Swap(address,uint256,uint256,uint256,uint256,address)\" --rpc-url $RPC\n\nCount swaps before and after yours in the same block; same-funder outer swaps confirm the sandwich.\n\nReport impact, tolerance, the RPC submitted to, and whether adjacent swaps match your pool.\n","# Detect sandwich risk before swapping\n\nA sandwich is a front-run that pushes price against your swap plus a back-run that unwinds the attacker into the move your fill created; the attacker's ceiling is exactly the slippage you allowed.\n\n## Procedure\n\n1. Compute your price impact (see the slippage skill). The attacker's max profit ≈ `impact% * notional - fees - gas`. A $50,000 swap at 1% impact is worth up to $500 minus costs.\n\n2. Risk score: sandwichable if `notional \u002F pool_depth > 0.001` AND `slippage_tolerance > 0.005`. Below either threshold, extraction is usually unprofitable after gas (~$5–50 on mainnet, ~$0.01 on L2).\n\n3. Check visibility. A transaction broadcast to a public mempool is observable immediately:\n\n   cast tx $TXHASH --rpc-url $RPC | grep '\"to\"'\n\n   If it went to a public RPC, assume a searcher scanned it.\n\n4. Detect a sandwich after the fact by pulling the block and finding same-pair swaps adjacent to yours:\n\n   cast logs --from-block $B --to-block $B --address $POOL \"Swap(address,uint256,uint256,uint256,uint256,address)\" --rpc-url $RPC\n\n   Three consecutive swaps of the same pair, the middle one yours with the outer two from the same address, is a sandwich.\n\n5. Mitigate in order of strength: (a) submit via a private\u002FMEV-protected RPC; (b) set tolerance \u003C= 0.5%; (c) split into pieces under the impact threshold; (d) use a batch auction or commit-reveal DEX.\n\n6. Weigh the mitigation cost: near zero on L2 and free via Flashbots Protect. Leaving `amountOutMin` loose to \"avoid a revert\" trades a guaranteed loss for a rare retry.\n\n## Pitfalls\n\n- Tight slippage without a protected RPC just makes you revert — reverts still burn gas and are a loss.\n- Assuming low impact alone is safe: repeated small swaps in one block are sandwichable if they net to a large move.\n- Assuming L2s are sandwich-proof: sequencers can reorder, and priority-order-flow auctions still exist.\n\n## Verification\n\n    cast logs --from-block $B --to-block $B --address $POOL \"Swap(address,uint256,uint256,uint256,uint256,address)\" --rpc-url $RPC\n\nCount swaps before and after yours in the same block; same-funder outer swaps confirm the sandwich.\n\nReport impact, tolerance, the RPC submitted to, and whether adjacent swaps match your pool.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-detect-sandwich-risk-before-swapping",17,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia","https:\u002F\u002Feth2030.com","Hardcore infra. Building @alt-research and applied cryptography.","2026-11-11 08:47:40",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill detect-sandwich-risk-before-swapping",{"tool":57,"command":58},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill detect-sandwich-risk-before-swapping",{"tool":60,"command":61},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill detect-sandwich-risk-before-swapping","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-detect-sandwich-risk-before-swapping\u002FSKILL.md",true,[65,69,75],{"path":66,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":16},"LICENSE","许可证",1063,{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"SOURCE.md","REFERENCE","参考文档",362,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-detect-sandwich-risk-before-swapping\u002FSOURCE.md",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"TRUST.auto.yaml",2197,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-detect-sandwich-risk-before-swapping\u002FTRUST.auto.yaml",[80,108,130,148,161,171],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":84,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":37},"01M712C436EQYE43342Q4E7GG1","recipe-performance","Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold\u002Fwarm\u002Fbackground-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout\u002Fpaint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FSKILL.md",[],[88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":113,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":37},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FSKILL.md",[],[117,118,119,120,121,122,123,124,26,125,126,127,128,129],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","keys","for","api keys","maintenance","protobuf",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":134,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":37},"01M70XT0MBXN3WZY1BKN0CPNKR","mexc-spot-rest","MEXC Spot REST workflows for public data, signed account requests, orders, wallet\u002Fadmin actions, and secure signing without exposing API keys.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FSKILL.md",[],[138,118,139,140,141,142,143,127,126,125,144,145,146,122,147,121,120],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":112,"licenseFileUrl":152,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":37},"01M70XSYSVZ2N0N91XCAR2CAK0","mexc-futures-websocket","MEXC Futures WebSocket workflows for public streams, private account\u002Forder\u002Fposition streams, ping\u002Fpong, subscriptions, and depth maintenance.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FSKILL.md",[],[156,157,119,158,159,128,126,160,26,124,122,121],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":162,"name":163,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":164,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":37},"01M6H0ZWHVE5W04WG2DKQE2SQC","0xklen-version-and-refresh-sanctions-lists","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FSKILL.md",[],[168,169,170],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":175,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":37},"01M6H0Z28Q3R8J0S799GJQWXM3","verify-tests-cover-changed-lines","Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FSKILL.md",[],[179,180,181,182,183,184,185,35,186,187,188],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]