关于 blockchain-web3
面向构建 Solidity 合约和区块链应用的开发者,提供 Web3 开发参考。内容涵盖合约安全、开发工具、前端接入、DeFi 模式和 Gas 优化。
主要功能
- 01Solidity 合约结构与安全
- 02Hardhat 和 Foundry 工作流
- 03ethers.js v6 与 viem 集成
- 04DeFi 设计模式
- 05Gas 优化技巧
适用场景
- 01检查合约安全模式
- 02选择 Hardhat 或 Foundry 命令
- 03将前端连接到区块链
- 04规划 DeFi 合约机制
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ travisjneuman/ .claude --skill blockchain-web3安装后在 Claude Code 中输入/blockchain-web3确认已加载。
详细介绍
区块链与 Web3 开发
智能合约开发(Solidity)
合约结构
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC20, Ownable {
constructor() ERC20("MyToken", "MTK") Ownable(msg.sender) {
_mint(msg.sender, 1000000 * 10 ** decimals());
}
}
安全模式
- 检查-效果-交互: 验证 → 更新状态 → 外部调用
- 重入保护: 使用 OpenZeppelin
ReentrancyGuard或nonReentrant - 访问控制: 使用
Ownable、AccessControl或自定义修饰符 - 整数安全: Solidity 0.8+ 内置溢出检查
- 拉取优于推送: 让用户自行提取资金,而不是主动发送资金
常见漏洞
| 漏洞 | 防范方法 |
|---|---|
| 重入攻击 | nonReentrant 修饰符、CEI 模式 |
| 抢跑交易 | 提交-揭示方案、Flashbots 保护 |
| 预言机操纵 | 使用 Chainlink,采用 TWAP 而非现货价格 |
| 未检查返回值 | 始终检查 transfer() 的返回值,或使用 safeTransfer |
delegatecall 注入 | 绝不对用户提供的地址执行 delegatecall |
开发工具
Hardhat
npx hardhat init
npx hardhat compile
npx hardhat test
npx hardhat deploy --network sepolia
Foundry
forge init
forge build
forge test -vvv
forge script script/Deploy.s.sol --rpc-url $RPC --broadcast
前端集成(ethers.js v6 / viem)
// viem (recommended for new projects)
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'
const client = createPublicClient({ chain: mainnet, transport: http() })
const balance = await client.getBalance({ address: '0x...' })
// wagmi hooks (React)
import { useAccount, useBalance, useContractWrite } from 'wagmi'
const { address } = useAccount()
const { data: balance } = useBalance({ address })
DeFi 模式
- AMM: 恒定乘积公式(x * y = k)、集中流动性
- 借贷: 超额抵押贷款、清算机制、利率模型
- 质押: 使用
rewardPerToken累加器模式分配奖励 - 治理: 代币权重投票、时间锁控制器、提案生命周期
Gas 优化
- 只读参数使用
calldata,而非memory - 打包结构体(将较小类型组合在一起以提高存储槽利用率)
- 对安全的算术运算使用
unchecked块 - 尽量减少存储读取/写入(缓存到内存中)
- 对无需链上访问的数据使用事件,而非存储
评论
支持 Markdown