Web3开发初探:智能合约与DApp搭建
⛓️ “代码即法律,在区块链上成为现实。”
🤔 为什么学习Web3开发
作为一个程序员,我对Web3的态度经历了三个阶段:
- 2021年:炒作期,觉得都是骗局
- 2022-2023年:熊市沉淀期,开始认真研究技术
- 2024年至今:理解了去中心化的价值,决定深入学习
Web3不仅仅是加密货币,它是一种新的计算范式:
- 代码开源且可验证
- 数据所有权归用户
- 去中心化治理
作为开发者,了解这个领域可以:
- 拓展技术视野
- 抓住新的职业机会
- 理解未来互联网的可能形态
🛠️ 技术栈选择
开发语言:Solidity
为什么选择Solidity?
- 以太坊生态最成熟
- 学习资源丰富
- 职业机会多
备选:Rust(Solana)、Move(Aptos/Sui)
开发框架:Hardhat
对比:
| 框架 | 特点 | 适合 |
|---|---|---|
| Hardhat | 灵活,插件丰富 | 专业开发 ✅ |
| Foundry | 快速,Solidity测试 | 高级用户 |
| Truffle | 老牌,稳定 | 入门学习 |
我选Hardhat,因为文档好,社区活跃。
🚀 环境搭建
安装依赖
1 | # 创建项目目录 |
项目结构
1 | my-web3-project/ |
Hardhat配置
1 | // hardhat.config.ts |
💡 实战1:ERC20代币合约
什么是ERC20
ERC20是以太坊代币标准,定义了代币的基本功能:
- 转账
- 查询余额
- 授权
完整代码
1 | // contracts/MyToken.sol |
编译合约
1 | npx hardhat compile |
编写测试
1 | // test/MyToken.test.ts |
运行测试:
1 | npx hardhat test |
部署脚本
1 | // scripts/deploy.ts |
部署到本地网络:
1 | npx hardhat run scripts/deploy.ts |
部署到测试网:
1 | npx hardhat run scripts/deploy.ts --network sepolia |
🎨 实战2:NFT合约
什么是ERC721
ERC721是非同质化代币标准,每个代币都是唯一的。
应用场景:数字艺术品、游戏道具、身份凭证等。
NFT合约代码
1 | // contracts/MyNFT.sol |
🌐 构建前端DApp
技术栈
- React + TypeScript
- ethers.js - 与区块链交互
- Tailwind CSS - 样式
- RainbowKit - 钱包连接
安装前端依赖
1 | # 在项目根目录创建前端文件夹 |
连接钱包组件
1 | // frontend/src/App.tsx |
代币交互组件
1 | // frontend/src/components/TokenDashboard.tsx |
⚠️ 安全注意事项
常见漏洞
重入攻击
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 错误的写法
function withdraw() public {
uint256 amount = balances[msg.sender];
(bool success, ) = msg.sender.call{value: amount}(""); // 先转账
require(success);
balances[msg.sender] = 0; // 后更新状态
}
// 正确的写法(检查-生效-交互模式)
function withdraw() public {
uint256 amount = balances[msg.sender];
require(amount > 0);
balances[msg.sender] = 0; // 先更新状态
(bool success, ) = msg.sender.call{value: amount}(""); // 后转账
require(success);
}整数溢出
- 使用Solidity 0.8.0+(内置溢出检查)
- 或使用SafeMath库
- 访问控制
- 使用OpenZeppelin的Ownable或AccessControl
- 不要自己实现权限控制
- 随机数
- 不要在链上生成随机数(可预测)
- 使用Chainlink VRF等预言机
安全工具
- Slither - 静态分析
- Mythril - 符号执行
- Echidna - 模糊测试
1 | # 安装Slither |
🚀 下一步学习计划
进阶主题
- 去中心化金融(DeFi)协议
- Layer 2解决方案(Polygon、Arbitrum)
- 跨链桥
- DAO治理
- MEV和套利
推荐资源
文档:
课程:
- CryptoZombies(游戏化学习Solidity)
- Ethernaut(安全挑战)
- Speed Run Ethereum(快速上手)
💭 写在最后
Web3开发是一个充满机遇和挑战的领域。
作为传统Web2开发者,转型Web3需要学习:
- 新的编程范式(智能合约)
- 新的安全模型(代码不可篡改)
- 新的用户体验(钱包、Gas费)
但这正是技术的魅力所在——不断学习,不断进化。
“Web3还在早期,现在进入正是好时机。”
如果你也对Web3开发感兴趣,欢迎交流!⛓️
风险提示:智能合约代码一旦部署就不可修改,请确保在测试网充分测试后再部署到主网。本文代码仅供学习参考。
写于 2025年6月12日 | Web3学习第4个月