[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GS2CBKM4S6XNTAGCWFB3EX":3,"skill-same:01M6GS2CBKM4S6XNTAGCWFB3EX":101},{"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":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6GS2CBKM4S6XNTAGCWFB3EX","evm-hardhat",null,"Hardhat development for EVM chains including Celo. Use when setting up Hardhat projects, writing Solidity contracts, compiling, testing, deploying, or verifying contracts with Hardhat.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"evm","hardhat","evm hardhat","testing","writing","development","compiling","solidity","projects","use","up","contracts","org","with","for","when","2026-11-10 10:12:30",false,"---\nname: evm-hardhat\ndescription: Hardhat development for EVM chains including Celo. Use when setting up Hardhat projects, writing Solidity contracts, compiling, testing, deploying, or verifying contracts with Hardhat.\nlicense: Apache-2.0\nmetadata:\n  author: celo-org\n  version: \"1.0.0\"\n---\n\n# Hardhat Development for EVM Chains\n\nThis skill covers Hardhat setup and development for EVM-compatible chains with emphasis on Celo.\n\n## When to Use\n\n- Setting up a new Hardhat project\n- Writing and compiling Solidity smart contracts\n- Testing contracts with Hardhat\n- Deploying contracts to Celo or other EVM chains\n- Verifying contracts on block explorers\n\n## Quick Start\n\n### Initialize Project\n\n```bash\nmkdir my-project && cd my-project\nnpm init -y\nnpm install --save-dev hardhat\nnpx hardhat init\n```\n\nSelect \"Create a TypeScript project\" when prompted.\n\n### Install Additional Dependencies\n\n```bash\nnpm install --save-dev @nomicfoundation\u002Fhardhat-toolbox dotenv\n```\n\n## Celo Network Information\n\n| Network | Chain ID | RPC Endpoint |\n|---------|----------|--------------|\n| Celo Mainnet | 42220 | https:\u002F\u002Fforno.celo.org |\n| Celo Sepolia | 11142220 | https:\u002F\u002Fforno.celo-sepolia.celo-testnet.org |\n\n\n## Configuration\n\n### hardhat.config.ts for Celo\n\n```typescript\nimport { HardhatUserConfig } from \"hardhat\u002Fconfig\";\nimport \"@nomicfoundation\u002Fhardhat-toolbox\";\nimport * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nconst PRIVATE_KEY = process.env.PRIVATE_KEY || \"\";\nconst CELOSCAN_API_KEY = process.env.CELOSCAN_API_KEY || \"\";\n\nconst config: HardhatUserConfig = {\n  solidity: {\n    version: \"0.8.28\",\n    settings: {\n      optimizer: {\n        enabled: true,\n        runs: 200,\n      },\n    },\n  },\n  networks: {\n    \u002F\u002F Celo Mainnet\n    celo: {\n      url: \"https:\u002F\u002Fforno.celo.org\",\n      chainId: 42220,\n      accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],\n    },\n    \u002F\u002F Celo Sepolia Testnet\n    celoSepolia: {\n      url: \"https:\u002F\u002Fforno.celo-sepolia.celo-testnet.org\",\n      chainId: 11142220,\n      accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],\n    },\n    \u002F\u002F Local development\n    hardhat: {\n      chainId: 31337,\n    },\n  },\n  etherscan: {\n    apiKey: {\n      celo: CELOSCAN_API_KEY,\n      celoSepolia: CELOSCAN_API_KEY,\n    },\n    customChains: [\n      {\n        network: \"celo\",\n        chainId: 42220,\n        urls: {\n          apiURL: \"https:\u002F\u002Fapi.celoscan.io\u002Fapi\",\n          browserURL: \"https:\u002F\u002Fceloscan.io\",\n        },\n      },\n      {\n        network: \"celoSepolia\",\n        chainId: 11142220,\n        urls: {\n          apiURL: \"https:\u002F\u002Fapi.etherscan.io\u002Fv2\u002Fapi\",\n          browserURL: \"https:\u002F\u002Fsepolia.celoscan.io\",\n        },\n      },\n    ],\n  },\n};\n\nexport default config;\n```\n\n### Environment Variables (.env)\n\n```bash\nPRIVATE_KEY=your_private_key_here\nCELOSCAN_API_KEY=your_celoscan_api_key_here\n```\n\n## Writing Contracts\n\n### Basic Contract Structure\n\n```solidity\n\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\ncontract MyContract {\n    string public name;\n    address public owner;\n\n    event NameChanged(string oldName, string newName);\n\n    modifier onlyOwner() {\n        require(msg.sender == owner, \"Not owner\");\n        _;\n    }\n\n    constructor(string memory _name) {\n        name = _name;\n        owner = msg.sender;\n    }\n\n    function setName(string memory _newName) external onlyOwner {\n        string memory oldName = name;\n        name = _newName;\n        emit NameChanged(oldName, _newName);\n    }\n}\n```\n\n### Using OpenZeppelin\n\n```bash\nnpm install @openzeppelin\u002Fcontracts\n```\n\n```solidity\n\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\nimport \"@openzeppelin\u002Fcontracts\u002Ftoken\u002FERC20\u002FERC20.sol\";\nimport \"@openzeppelin\u002Fcontracts\u002Faccess\u002FOwnable.sol\";\n\ncontract MyToken is ERC20, Ownable {\n    constructor() ERC20(\"MyToken\", \"MTK\") Ownable(msg.sender) {\n        _mint(msg.sender, 1000000 * 10 ** decimals());\n    }\n\n    function mint(address to, uint256 amount) external onlyOwner {\n        _mint(to, amount);\n    }\n}\n```\n\n## Compilation\n\n```bash\n# Compile all contracts\nnpx hardhat compile\n\n# Clean and recompile\nnpx hardhat clean && npx hardhat compile\n```\n\n## Testing\n\n### Test File Structure\n\n```typescript\n\u002F\u002F test\u002FMyContract.test.ts\nimport { expect } from \"chai\";\nimport { ethers } from \"hardhat\";\nimport { MyContract } from \"..\u002Ftypechain-types\";\n\ndescribe(\"MyContract\", function () {\n  let contract: MyContract;\n  let owner: any;\n  let addr1: any;\n\n  beforeEach(async function () {\n    [owner, addr1] = await ethers.getSigners();\n    const MyContract = await ethers.getContractFactory(\"MyContract\");\n    contract = await MyContract.deploy(\"Initial Name\");\n    await contract.waitForDeployment();\n  });\n\n  describe(\"Deployment\", function () {\n    it(\"Should set the right name\", async function () {\n      expect(await contract.name()).to.equal(\"Initial Name\");\n    });\n\n    it(\"Should set the right owner\", async function () {\n      expect(await contract.owner()).to.equal(owner.address);\n    });\n  });\n\n  describe(\"setName\", function () {\n    it(\"Should allow owner to change name\", async function () {\n      await contract.setName(\"New Name\");\n      expect(await contract.name()).to.equal(\"New Name\");\n    });\n\n    it(\"Should emit NameChanged event\", async function () {\n      await expect(contract.setName(\"New Name\"))\n        .to.emit(contract, \"NameChanged\")\n        .withArgs(\"Initial Name\", \"New Name\");\n    });\n\n    it(\"Should revert if non-owner tries to change name\", async function () {\n      await expect(\n        contract.connect(addr1).setName(\"Hacked\")\n      ).to.be.revertedWith(\"Not owner\");\n    });\n  });\n});\n```\n\n### Running Tests\n\n```bash\n# Run all tests\nnpx hardhat test\n\n# Run specific test file\nnpx hardhat test test\u002FMyContract.test.ts\n\n# Run with gas reporting\nREPORT_GAS=true npx hardhat test\n\n# Run with coverage\nnpx hardhat coverage\n```\n\n## Deployment\n\n### Deployment Script\n\n```typescript\n\u002F\u002F scripts\u002Fdeploy.ts\nimport { ethers } from \"hardhat\";\n\nasync function main() {\n  const [deployer] = await ethers.getSigners();\n  console.log(\"Deploying with account:\", deployer.address);\n\n  const balance = await ethers.provider.getBalance(deployer.address);\n  console.log(\"Account balance:\", ethers.formatEther(balance), \"CELO\");\n\n  const MyContract = await ethers.getContractFactory(\"MyContract\");\n  const contract = await MyContract.deploy(\"My Contract Name\");\n  await contract.waitForDeployment();\n\n  const address = await contract.getAddress();\n  console.log(\"Contract deployed to:\", address);\n\n  \u002F\u002F Wait for confirmations before verification\n  console.log(\"Waiting for confirmations...\");\n  await contract.deploymentTransaction()?.wait(5);\n\n  console.log(\"Deployment complete!\");\n}\n\nmain()\n  .then(() => process.exit(0))\n  .catch((error) => {\n    console.error(error);\n    process.exit(1);\n  });\n```\n\n### Deploy Commands\n\n```bash\n# Deploy to local Hardhat network\nnpx hardhat run scripts\u002Fdeploy.ts\n\n# Deploy to Celo Sepolia testnet\nnpx hardhat run scripts\u002Fdeploy.ts --network celoSepolia\n\n# Deploy to Celo Mainnet\nnpx hardhat run scripts\u002Fdeploy.ts --network celo\n```\n\n## Verification\n\n### Verify After Deployment\n\n```bash\n# Verify on Celo Sepolia\nnpx hardhat verify --network celoSepolia \u003CCONTRACT_ADDRESS> \"Constructor Arg 1\"\n\n# Verify on Celo Mainnet\nnpx hardhat verify --network celo \u003CCONTRACT_ADDRESS> \"Constructor Arg 1\"\n```\n\n### Programmatic Verification\n\n```typescript\n\u002F\u002F Add to deployment script after deployment\nimport { run } from \"hardhat\";\n\nasync function verify(address: string, constructorArguments: any[]) {\n  console.log(\"Verifying contract...\");\n  try {\n    await run(\"verify:verify\", {\n      address,\n      constructorArguments,\n    });\n    console.log(\"Verified!\");\n  } catch (e: any) {\n    if (e.message.includes(\"Already Verified\")) {\n      console.log(\"Already verified\");\n    } else {\n      console.error(e);\n    }\n  }\n}\n```\n\n## Common Tasks\n\n### Flatten Contract for Manual Verification\n\n```bash\nnpx hardhat flatten contracts\u002FMyContract.sol > Flattened.sol\n```\n\n### Check Contract Size\n\n```bash\nnpx hardhat compile --force\nnpx hardhat size-contracts\n```\n\n## Block Explorers\n\n- **Celo Mainnet:** https:\u002F\u002Fceloscan.io\n- **Celo Sepolia:** https:\u002F\u002Fsepolia.celoscan.io\n\n## Additional Resources\n\n- [hardhat-config.md](references\u002Fhardhat-config.md) - Detailed configuration options\n- [testing-patterns.md](references\u002Ftesting-patterns.md) - Advanced testing patterns\n- [security-checklist.md](rules\u002Fsecurity-checklist.md) - Security best practices\n","# Hardhat Development for EVM Chains\n\nThis skill covers Hardhat setup and development for EVM-compatible chains with emphasis on Celo.\n\n## When to Use\n\n- Setting up a new Hardhat project\n- Writing and compiling Solidity smart contracts\n- Testing contracts with Hardhat\n- Deploying contracts to Celo or other EVM chains\n- Verifying contracts on block explorers\n\n## Quick Start\n\n### Initialize Project\n\n```bash\nmkdir my-project && cd my-project\nnpm init -y\nnpm install --save-dev hardhat\nnpx hardhat init\n```\n\nSelect \"Create a TypeScript project\" when prompted.\n\n### Install Additional Dependencies\n\n```bash\nnpm install --save-dev @nomicfoundation\u002Fhardhat-toolbox dotenv\n```\n\n## Celo Network Information\n\n| Network | Chain ID | RPC Endpoint |\n|---------|----------|--------------|\n| Celo Mainnet | 42220 | https:\u002F\u002Fforno.celo.org |\n| Celo Sepolia | 11142220 | https:\u002F\u002Fforno.celo-sepolia.celo-testnet.org |\n\n\n## Configuration\n\n### hardhat.config.ts for Celo\n\n```typescript\nimport { HardhatUserConfig } from \"hardhat\u002Fconfig\";\nimport \"@nomicfoundation\u002Fhardhat-toolbox\";\nimport * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nconst PRIVATE_KEY = process.env.PRIVATE_KEY || \"\";\nconst CELOSCAN_API_KEY = process.env.CELOSCAN_API_KEY || \"\";\n\nconst config: HardhatUserConfig = {\n  solidity: {\n    version: \"0.8.28\",\n    settings: {\n      optimizer: {\n        enabled: true,\n        runs: 200,\n      },\n    },\n  },\n  networks: {\n    \u002F\u002F Celo Mainnet\n    celo: {\n      url: \"https:\u002F\u002Fforno.celo.org\",\n      chainId: 42220,\n      accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],\n    },\n    \u002F\u002F Celo Sepolia Testnet\n    celoSepolia: {\n      url: \"https:\u002F\u002Fforno.celo-sepolia.celo-testnet.org\",\n      chainId: 11142220,\n      accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],\n    },\n    \u002F\u002F Local development\n    hardhat: {\n      chainId: 31337,\n    },\n  },\n  etherscan: {\n    apiKey: {\n      celo: CELOSCAN_API_KEY,\n      celoSepolia: CELOSCAN_API_KEY,\n    },\n    customChains: [\n      {\n        network: \"celo\",\n        chainId: 42220,\n        urls: {\n          apiURL: \"https:\u002F\u002Fapi.celoscan.io\u002Fapi\",\n          browserURL: \"https:\u002F\u002Fceloscan.io\",\n        },\n      },\n      {\n        network: \"celoSepolia\",\n        chainId: 11142220,\n        urls: {\n          apiURL: \"https:\u002F\u002Fapi.etherscan.io\u002Fv2\u002Fapi\",\n          browserURL: \"https:\u002F\u002Fsepolia.celoscan.io\",\n        },\n      },\n    ],\n  },\n};\n\nexport default config;\n```\n\n### Environment Variables (.env)\n\n```bash\nPRIVATE_KEY=your_private_key_here\nCELOSCAN_API_KEY=your_celoscan_api_key_here\n```\n\n## Writing Contracts\n\n### Basic Contract Structure\n\n```solidity\n\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\ncontract MyContract {\n    string public name;\n    address public owner;\n\n    event NameChanged(string oldName, string newName);\n\n    modifier onlyOwner() {\n        require(msg.sender == owner, \"Not owner\");\n        _;\n    }\n\n    constructor(string memory _name) {\n        name = _name;\n        owner = msg.sender;\n    }\n\n    function setName(string memory _newName) external onlyOwner {\n        string memory oldName = name;\n        name = _newName;\n        emit NameChanged(oldName, _newName);\n    }\n}\n```\n\n### Using OpenZeppelin\n\n```bash\nnpm install @openzeppelin\u002Fcontracts\n```\n\n```solidity\n\u002F\u002F SPDX-License-Identifier: MIT\npragma solidity ^0.8.28;\n\nimport \"@openzeppelin\u002Fcontracts\u002Ftoken\u002FERC20\u002FERC20.sol\";\nimport \"@openzeppelin\u002Fcontracts\u002Faccess\u002FOwnable.sol\";\n\ncontract MyToken is ERC20, Ownable {\n    constructor() ERC20(\"MyToken\", \"MTK\") Ownable(msg.sender) {\n        _mint(msg.sender, 1000000 * 10 ** decimals());\n    }\n\n    function mint(address to, uint256 amount) external onlyOwner {\n        _mint(to, amount);\n    }\n}\n```\n\n## Compilation\n\n```bash\n# Compile all contracts\nnpx hardhat compile\n\n# Clean and recompile\nnpx hardhat clean && npx hardhat compile\n```\n\n## Testing\n\n### Test File Structure\n\n```typescript\n\u002F\u002F test\u002FMyContract.test.ts\nimport { expect } from \"chai\";\nimport { ethers } from \"hardhat\";\nimport { MyContract } from \"..\u002Ftypechain-types\";\n\ndescribe(\"MyContract\", function () {\n  let contract: MyContract;\n  let owner: any;\n  let addr1: any;\n\n  beforeEach(async function () {\n    [owner, addr1] = await ethers.getSigners();\n    const MyContract = await ethers.getContractFactory(\"MyContract\");\n    contract = await MyContract.deploy(\"Initial Name\");\n    await contract.waitForDeployment();\n  });\n\n  describe(\"Deployment\", function () {\n    it(\"Should set the right name\", async function () {\n      expect(await contract.name()).to.equal(\"Initial Name\");\n    });\n\n    it(\"Should set the right owner\", async function () {\n      expect(await contract.owner()).to.equal(owner.address);\n    });\n  });\n\n  describe(\"setName\", function () {\n    it(\"Should allow owner to change name\", async function () {\n      await contract.setName(\"New Name\");\n      expect(await contract.name()).to.equal(\"New Name\");\n    });\n\n    it(\"Should emit NameChanged event\", async function () {\n      await expect(contract.setName(\"New Name\"))\n        .to.emit(contract, \"NameChanged\")\n        .withArgs(\"Initial Name\", \"New Name\");\n    });\n\n    it(\"Should revert if non-owner tries to change name\", async function () {\n      await expect(\n        contract.connect(addr1).setName(\"Hacked\")\n      ).to.be.revertedWith(\"Not owner\");\n    });\n  });\n});\n```\n\n### Running Tests\n\n```bash\n# Run all tests\nnpx hardhat test\n\n# Run specific test file\nnpx hardhat test test\u002FMyContract.test.ts\n\n# Run with gas reporting\nREPORT_GAS=true npx hardhat test\n\n# Run with coverage\nnpx hardhat coverage\n```\n\n## Deployment\n\n### Deployment Script\n\n```typescript\n\u002F\u002F scripts\u002Fdeploy.ts\nimport { ethers } from \"hardhat\";\n\nasync function main() {\n  const [deployer] = await ethers.getSigners();\n  console.log(\"Deploying with account:\", deployer.address);\n\n  const balance = await ethers.provider.getBalance(deployer.address);\n  console.log(\"Account balance:\", ethers.formatEther(balance), \"CELO\");\n\n  const MyContract = await ethers.getContractFactory(\"MyContract\");\n  const contract = await MyContract.deploy(\"My Contract Name\");\n  await contract.waitForDeployment();\n\n  const address = await contract.getAddress();\n  console.log(\"Contract deployed to:\", address);\n\n  \u002F\u002F Wait for confirmations before verification\n  console.log(\"Waiting for confirmations...\");\n  await contract.deploymentTransaction()?.wait(5);\n\n  console.log(\"Deployment complete!\");\n}\n\nmain()\n  .then(() => process.exit(0))\n  .catch((error) => {\n    console.error(error);\n    process.exit(1);\n  });\n```\n\n### Deploy Commands\n\n```bash\n# Deploy to local Hardhat network\nnpx hardhat run scripts\u002Fdeploy.ts\n\n# Deploy to Celo Sepolia testnet\nnpx hardhat run scripts\u002Fdeploy.ts --network celoSepolia\n\n# Deploy to Celo Mainnet\nnpx hardhat run scripts\u002Fdeploy.ts --network celo\n```\n\n## Verification\n\n### Verify After Deployment\n\n```bash\n# Verify on Celo Sepolia\nnpx hardhat verify --network celoSepolia \u003CCONTRACT_ADDRESS> \"Constructor Arg 1\"\n\n# Verify on Celo Mainnet\nnpx hardhat verify --network celo \u003CCONTRACT_ADDRESS> \"Constructor Arg 1\"\n```\n\n### Programmatic Verification\n\n```typescript\n\u002F\u002F Add to deployment script after deployment\nimport { run } from \"hardhat\";\n\nasync function verify(address: string, constructorArguments: any[]) {\n  console.log(\"Verifying contract...\");\n  try {\n    await run(\"verify:verify\", {\n      address,\n      constructorArguments,\n    });\n    console.log(\"Verified!\");\n  } catch (e: any) {\n    if (e.message.includes(\"Already Verified\")) {\n      console.log(\"Already verified\");\n    } else {\n      console.error(e);\n    }\n  }\n}\n```\n\n## Common Tasks\n\n### Flatten Contract for Manual Verification\n\n```bash\nnpx hardhat flatten contracts\u002FMyContract.sol > Flattened.sol\n```\n\n### Check Contract Size\n\n```bash\nnpx hardhat compile --force\nnpx hardhat size-contracts\n```\n\n## Block Explorers\n\n- **Celo Mainnet:** https:\u002F\u002Fceloscan.io\n- **Celo Sepolia:** https:\u002F\u002Fsepolia.celoscan.io\n\n## Additional Resources\n\n- [hardhat-config.md](references\u002Fhardhat-config.md) - Detailed configuration options\n- [testing-patterns.md](references\u002Ftesting-patterns.md) - Advanced testing patterns\n- [security-checklist.md](rules\u002Fsecurity-checklist.md) - Security best practices\n",{"name":5,"license":15,"metadata":53,"description":7},{"author":54,"version":55},"celo-org","1.0.0","main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fdev-tools\u002Fhardhat",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":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill evm-hardhat",{"tool":71,"command":72},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill evm-hardhat",{"tool":74,"command":75},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill evm-hardhat","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002FSKILL.md",true,[79,85,89,93,97],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Fhardhat-config.md","REFERENCE","参考文档",4242,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002Freferences\u002Fhardhat-config.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Ftesting-patterns.md",2506,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002Freferences\u002Ftesting-patterns.md",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"rules\u002Fsecurity-checklist.md",1694,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002Frules\u002Fsecurity-checklist.md",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"SOURCE.md",213,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002FSOURCE.md",{"path":98,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":99,"sourceHtmlUrl":100},"TRUST.auto.yaml",2277,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002Fhardhat\u002FTRUST.auto.yaml",[102,131,152,170,183,193],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":106,"licenseFileUrl":107,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":48},"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.","MIT","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",[],[111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":135,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":48},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","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",[],[139,140,141,142,143,144,145,146,147,148,46,149,150,151],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","api keys","maintenance","protobuf",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":156,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":48},"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",[],[160,140,161,162,163,164,165,149,46,148,166,167,168,144,169,143,142],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":174,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":48},"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",[],[178,179,141,180,181,150,46,182,147,146,144,143],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":184,"name":185,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":106,"licenseFileUrl":186,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":48},"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",[],[190,191,192],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":106,"licenseFileUrl":197,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":48},"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",[],[201,202,203,204,205,206,207,41,208,209,210],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]