关于 smart-contracts
smart-contracts 是用于开发、编译、部署和交互 Solidity 智能合约的技能,面向 dApp 和 EVM 链开发,并涵盖 Web3.js 交互及使用 Slither 等工具进行安全检查。
主要功能
- 01编写并编译 Solidity 合约
- 02部署到测试网或主网
- 03读取合约状态并调用函数
- 04使用 Slither 审计漏洞
- 05估算 Gas 并检查交易
适用场景
- 01构建并部署 dApp 合约
- 02创建 NFT 或 DeFi 合约
- 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 限制。
具体使用示例
- 编写并部署简单存储合约:创建文件
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。 - 与 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”以获取网络详情。