mcpField
S
smart-contracts

smart-contracts

github.com/alphaonedev开发49 次安装
代码仓库

关于 smart-contracts

smart-contracts 是用于开发、编译、部署和交互 Solidity 智能合约的技能,面向 dApp 和 EVM 链开发,并涵盖 Web3.js 交互及使用 Slither 等工具进行安全检查。

主要功能

  1. 01编写并编译 Solidity 合约
  2. 02部署到测试网或主网
  3. 03读取合约状态并调用函数
  4. 04使用 Slither 审计漏洞
  5. 05估算 Gas 并检查交易

适用场景

  1. 01构建并部署 dApp 合约
  2. 02创建 NFT 或 DeFi 合约
  3. 03读取状态或发送代币交易

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill smart-contracts

安装后在 Claude Code 中输入/smart-contracts确认已加载。

详细介绍

smart-contracts

用途

此技能专注于使用 Solidity 编写代码、使用 Web3.js 与区块链交互,以开发、编译、部署安全的智能合约,并与之交互,目标平台包括 Ethereum。

使用时机

当任务涉及去中心化应用(dApp)、代币创建,或在 EVM 兼容的区块链上实现自动化协议时,请使用此技能。在需要确保代码安全、处理交易或集成 Web3 生态系统时应用此技能,例如构建 NFT 或 DeFi 协议。

主要功能

  • 编写和编译 Solidity 合约,支持继承、修饰符和事件等功能。
  • 使用 Web3.js 提供程序将合约部署到测试网(例如 Sepolia)或主网。
  • 通过 RPC 调用与已部署的合约交互,包括读取状态和执行函数。
  • 集成 Slither 等工具进行安全审计,以检测漏洞。
  • 处理 Web3 交易,包括 Gas 估算和错误检查。

使用模式

使用此技能时,请按以下方式组织工作流:首先,在 .sol 文件中编写 Solidity 代码。然后,使用 Hardhat 或 solc 等工具编译。通过 Web3 提供程序进行部署,并使用 JavaScript 交互。上主网前,务必先在本地节点(例如 Ganache)上测试。集成时,将提供程序 URL 作为环境变量传入,例如 $ETHEREUM_PROVIDER_URL。示例模式:导入 Web3.js,连接到提供程序,并在 Node.js 脚本中调用合约方法。

常用命令/API

使用 solc 进行编译:solc --optimize --bin input.sol -o build/。使用 Hardhat 部署时,运行 npx hardhat run scripts/deploy.js --network sepolia。Web3.js API:使用 const web3 = new Web3($ETHEREUM_PROVIDER_URL); 创建提供程序,并调用 web3.eth.getBalance(address)。与合约交互时,使用 ABI:contract.methods.myFunction().send({from: account, gas: 200000})。配置格式:在 Hardhat.config.js 中定义网络,例如 networks: { sepolia: { url: process.env.SEPOLIA_URL, accounts: [process.env.PRIVATE_KEY] } },其中 $SEPOLIA_URL 和 $PRIVATE_KEY 是环境变量。要通过 Infura 进行身份验证,请在提供程序 URL 中设置 $INFURA_API_KEY。

集成说明

通过安装 npm install hardhat web3 等依赖项来集成此技能。为敏感数据创建 .env 文件(例如,ETHEREUM_PRIVATE_KEY=$YOUR_PRIVATE_KEY)。对于外部 API,请使用 Infura 或 Alchemy 等提供程序,URL 格式为 https://mainnet.infura.io/v3/$INFURA_API_KEY。为确保兼容性,请使用 Web3.js 1.x 版本进行 Etherscan 验证。要与其他技能关联,请将合约 ABI 导出为 JSON,以供后续使用,例如在 React 前端中使用。

错误处理

通过检查 solc 输出中的消息(例如 "ParserError: Expected token")来处理编译错误。部署时,使用 try-catch 块捕获 Web3.js 错误,例如 try { await contract.deploy({data: bytecode}); } catch (e) { if (e.message.includes('gas')) console.error('Insufficient gas'); }。常见问题:交易回滚(使用 web3.eth.getTransactionReceipt(txHash) 检查状态);使用事件进行异步错误日志记录。出于安全考虑,请使用 require 语句在 Solidity 中验证输入,例如 require(msg.sender == owner, "Not authorized");。务必使用已注资的账户,并监控 Gas 限制。

具体使用示例

  1. 编写并部署简单存储合约:创建文件 SimpleStorage.sol,内容为 pragma solidity ^0.8.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } }。使用 solc --bin SimpleStorage.sol 编译。使用 Hardhat 部署:在 deploy.js 中写入 const SimpleStorage = await ethers.getContractFactory("SimpleStorage"); const contract = await SimpleStorage.deploy(); await contract.deployed();。运行 npx hardhat run deploy.js --network localhost。
  2. 与 ERC20 代币合约交互:假设已部署的代币地址为 0xTokenAddress。在 Node.js 脚本中:const web3 = new Web3($ETHEREUM_PROVIDER_URL); const contract = new web3.eth.Contract(ABI, '0xTokenAddress'); await contract.methods.transfer('0xRecipient', 100).send({from: '0xYourAddress', gas: 50000});。添加错误检查,以处理余额不足的情况。

图关系

  • 关联的集群:“blockchain”(例如,与其他区块链技能共享工具)。
  • 通过标签关联:“solidity”(链接到特定语言的工具)、“smart-contracts”(交叉引用部署模式)、“blockchain”(集成通用区块链 API)。
  • 出边:指向“web3”以进行提供程序交互,指向“ethereum”以获取网络详情。

评论

支持 Markdown