[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H03BQGP9MD71DGSWQD2CKY":3,"skill-same:01M6H03BQGP9MD71DGSWQD2CKY":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":24,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6H03BQGP9MD71DGSWQD2CKY","run-a-mainnet-deploy-checklist",null,"Use when broadcasting a contract deploy or upgrade to mainnet and you want a gated, ordered checklist that prevents wrong-chain, nonce-race and uninitialised-proxy mistakes.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-a-mainnet-deploy-checklist\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-a-mainnet-deploy-checklist\u002FSKILL.md",[19],{"categoryNo":20,"categoryName":21,"taxonomyType":22,"taxonomyTypeDesc":23},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"deploy","run","checklist","deploy checklist","run a mainnet deploy checklist","proxy","use","gated","upgrade","broadcasting","contract","chain","you","Wrong","mistakes","when","2026-11-10 10:12:30",false,"---\nname: run-a-mainnet-deploy-checklist\ndescription: Use when broadcasting a contract deploy or upgrade to mainnet and you want a gated, ordered checklist that prevents wrong-chain, nonce-race and uninitialised-proxy mistakes.\n---\n\n# Run a mainnet deploy checklist\n\nMainnet deploys are irreversible and expensive. Work through this list in order, with the\nbroadcast last and every verification step reading real state back.\n\n## Procedure\n\n1. Freeze the artifact. Record the keccak of the deployed bytecode you intend to ship and diff\n   it against what the build produces now.\n\n       forge build\n       sha256sum out\u002FVault.sol\u002FVault.json\n       cast keccak $(forge inspect src\u002FVault.sol:Vault bytecode)\n\n2. Confirm the target chain *before* signing anything.\n\n       cast chain-id --rpc-url $RPC              # must be 1 for mainnet\n       echo $RPC                                  # eyeball the URL, not an env var you assumed\n\n3. Dry-run with a simulation and no broadcast; read the printed calldata and expected address.\n\n       forge script script\u002FDeploy.s.sol:Deploy --rpc-url $RPC --sender $DEPLOYER\n       # read the \"SIMULATION COMPLETE\" output; no tx sent\n\n4. Import the signer into a keystore and read it from the environment only. Never paste a\n   private key into a shell command line, a chat, a log, or a repo.\n\n       cast wallet import deployer --interactive   # prompts for the key, encrypts it\n       export ETH_RPC=\"$RPC\"; export DEPLOYER=0xYourDeployerAddress\n\n5. Broadcast with `--slow` (one tx at a time, waits for each receipt) and `--verify`.\n\n       forge script script\u002FDeploy.s.sol:Deploy --rpc-url $ETH_RPC --sender $DEPLOYER \\\n         --account deployer --slow --broadcast --verify --verifier etherscan\n\n6. Read state back: receipt status, code size, proxy implementation slot, and ownership.\n\n       cast receipt $TX --json --rpc-url $ETH_RPC | jq -r '.status, .blockNumber'\n       cast codesize $ADDR --rpc-url $ETH_RPC\n       cast call $ADDR \"owner()(address)\" --rpc-url $ETH_RPC\n\n7. Post-deploy: transfer ownership to the multisig\u002Ftimelock, call `initialize()` exactly once\n   if a proxy, renounce deployer-only roles, and publish the address + block + code hash.\n\n## Pitfalls\n\n- Broadcasting to the wrong chain because an env var was unset and the URL defaulted to a\n  public testnet RPC. Re-check `cast chain-id` immediately before and after.\n- Deploying an uninitialised proxy — the implementation is left open and anyone can call\n  `initialize()` and take ownership. Initialise in the same broadcast or within the same block.\n- No `--slow` causes nonce races when the script sends several txs; the second is dropped or\n  replaced.\n- Verifying with the wrong compiler settings produces a \"does not match\" result and an\n  unverified contract on a live network.\n- Forgetting to transfer ownership, leaving the EOA deployer in control of a production\n  contract.\n\n## Verification\n\n    cast codesize $ADDR --rpc-url $ETH_RPC              # > 0\n    cast call $ADDR \"owner()(address)\" --rpc-url $ETH_RPC   # == multisig\n    curl -s \"...\u002Fgetsourcecode...&address=$ADDR\" | jq -r '.result[0].Match'\n\nReport tx hash, block, runtime code size, owner, and explorer verification status for each\ndeployed contract.\n","# Run a mainnet deploy checklist\n\nMainnet deploys are irreversible and expensive. Work through this list in order, with the\nbroadcast last and every verification step reading real state back.\n\n## Procedure\n\n1. Freeze the artifact. Record the keccak of the deployed bytecode you intend to ship and diff\n   it against what the build produces now.\n\n       forge build\n       sha256sum out\u002FVault.sol\u002FVault.json\n       cast keccak $(forge inspect src\u002FVault.sol:Vault bytecode)\n\n2. Confirm the target chain *before* signing anything.\n\n       cast chain-id --rpc-url $RPC              # must be 1 for mainnet\n       echo $RPC                                  # eyeball the URL, not an env var you assumed\n\n3. Dry-run with a simulation and no broadcast; read the printed calldata and expected address.\n\n       forge script script\u002FDeploy.s.sol:Deploy --rpc-url $RPC --sender $DEPLOYER\n       # read the \"SIMULATION COMPLETE\" output; no tx sent\n\n4. Import the signer into a keystore and read it from the environment only. Never paste a\n   private key into a shell command line, a chat, a log, or a repo.\n\n       cast wallet import deployer --interactive   # prompts for the key, encrypts it\n       export ETH_RPC=\"$RPC\"; export DEPLOYER=0xYourDeployerAddress\n\n5. Broadcast with `--slow` (one tx at a time, waits for each receipt) and `--verify`.\n\n       forge script script\u002FDeploy.s.sol:Deploy --rpc-url $ETH_RPC --sender $DEPLOYER \\\n         --account deployer --slow --broadcast --verify --verifier etherscan\n\n6. Read state back: receipt status, code size, proxy implementation slot, and ownership.\n\n       cast receipt $TX --json --rpc-url $ETH_RPC | jq -r '.status, .blockNumber'\n       cast codesize $ADDR --rpc-url $ETH_RPC\n       cast call $ADDR \"owner()(address)\" --rpc-url $ETH_RPC\n\n7. Post-deploy: transfer ownership to the multisig\u002Ftimelock, call `initialize()` exactly once\n   if a proxy, renounce deployer-only roles, and publish the address + block + code hash.\n\n## Pitfalls\n\n- Broadcasting to the wrong chain because an env var was unset and the URL defaulted to a\n  public testnet RPC. Re-check `cast chain-id` immediately before and after.\n- Deploying an uninitialised proxy — the implementation is left open and anyone can call\n  `initialize()` and take ownership. Initialise in the same broadcast or within the same block.\n- No `--slow` causes nonce races when the script sends several txs; the second is dropped or\n  replaced.\n- Verifying with the wrong compiler settings produces a \"does not match\" result and an\n  unverified contract on a live network.\n- Forgetting to transfer ownership, leaving the EOA deployer in control of a production\n  contract.\n\n## Verification\n\n    cast codesize $ADDR --rpc-url $ETH_RPC              # > 0\n    cast call $ADDR \"owner()(address)\" --rpc-url $ETH_RPC   # == multisig\n    curl -s \"...\u002Fgetsourcecode...&address=$ADDR\" | jq -r '.result[0].Match'\n\nReport tx hash, block, runtime code size, owner, and explorer verification status for each\ndeployed contract.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-run-a-mainnet-deploy-checklist",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-13 02:31:19",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill run-a-mainnet-deploy-checklist",{"tool":61,"command":62},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill run-a-mainnet-deploy-checklist",{"tool":64,"command":65},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill run-a-mainnet-deploy-checklist","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-a-mainnet-deploy-checklist\u002FSKILL.md",true,[69,73,79],{"path":70,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":16},"LICENSE","许可证",1063,{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"SOURCE.md","REFERENCE","参考文档",356,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-a-mainnet-deploy-checklist\u002FSOURCE.md",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"TRUST.auto.yaml",2214,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-a-mainnet-deploy-checklist\u002FTRUST.auto.yaml",[84,112,135,153,166,176],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":88,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":41},"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",[],[92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":116,"licenseFileUrl":117,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":41},"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",[],[121,122,123,124,125,126,127,128,129,130,131,132,133,134],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":116,"licenseFileUrl":139,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":41},"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",[],[143,122,144,145,146,147,148,132,131,130,149,150,151,126,152,125,124],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":116,"licenseFileUrl":157,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":41},"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",[],[161,162,123,163,164,133,131,165,129,128,126,125],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":167,"name":168,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":169,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":41},"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",[],[173,174,175],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":180,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":41},"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",[],[184,185,186,187,188,189,190,31,191,192,193],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]