智能合约与 Solidity
smart-contracts、Solidity、ERC-20/721、Remix。
40 分钟
智能合约与 Solidity
智能合约是部署在区块链上的程序:条件满足则自动执行,无人可单方篡改已部署逻辑。Solidity 是 EVM 上最常用的语言。本课覆盖语法要点、ERC-20/721 标准与 Remix 在线 IDE。见 /roadmaps/blockchain。
学习目标
- 编写并部署一个简单的 Solidity 合约
- 理解 ERC-20(同质化代币)与 ERC-721(NFT)接口
- 掌握
msg.sender、事件、modifier 等常见模式
最小合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Counter {
uint256 public count;
event Incremented(address indexed by, uint256 newValue);
function increment() external {
count += 1;
emit Incremented(msg.sender, count);
}
}
在 Remix 中编译 → 部署到 Sepolia → 在区块浏览器查看 Incremented 事件。
ERC-20 代币骨架
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract LessonToken is ERC20 {
constructor() ERC20("LessonToken", "LST") {
_mint(msg.sender, 1_000_000 * 10 ** decimals());
}
}
核心方法:transfer、approve、transferFrom;钱包与 DApp 都依赖这套接口。
ERC-721 NFT 要点
- 每个
tokenId唯一,对应一个ownerOf - 常用于数字藏品、游戏道具、身份凭证
- 元数据通常存 IPFS,链上只存
tokenURI
常见陷阱
| 问题 | 说明 |
|---|---|
| 整数溢出 | Solidity 0.8+ 默认检查 |
| 重入攻击 | 先改状态再转账;或用 ReentrancyGuard |
| 权限缺失 | 敏感函数加 onlyOwner 或角色控制 |
| 浮点 | 链上无浮点,用整数 + 精度缩放 |
练习
- 在 Remix 部署 Counter,调用 increment 三次并查看事件
- 继承 OpenZeppelin 部署 ERC-20,向两个地址各转 100 代币
- 阅读 ERC-721 接口文档,列出与 ERC-20 的三个主要区别
小结
合约即链上 API,部署即发布、难以撤回。 下一课用 Hardhat / Foundry 搭建本地专业开发流程。
加载本节练习…