Solidity 入门:写第一个智能合约
5 步从零写出你的第一个 HelloWorld 合约:
- 打开 Remix——浏览器里就能开发,不用装环境。
- 写一段最简单的 Solidity 代码。
- 编译,看编译产物。
- 切到测试网,用领来的免费 ETH 部署。
- 用 MetaMask 或 Remix 自带的接口和它交互。
不需要懂高等数学,不需要装 Linux,不需要任何区块链先修知识——你只要愿意花一个晚上跟着敲一遍。 (/uploads/20260529/1780066678858-99585.png)

为什么从 Solidity 开始
Solidity 是以太坊及所有 EVM 链(Polygon、Arbitrum、Base、BSC、Avalanche C-Chain)使用的主流智能合约语言。学会它,你写的合约理论上可以部署到几十条链上去——这是其他语言(Move、Rust)目前还做不到的覆盖度。
它的语法和 JavaScript 很像,曲线没那么陡。但它和普通编程的根本差别有三个:
- 每一行代码都要付 Gas——存储和计算都是钱。
- 代码部署后无法直接修改——你只能"再部署一个版本"。
- 合约里的"共识"=用户看到的真相——bug 会直接变成可被利用的洞。
这三点决定了智能合约的"工程心态"和普通后端完全不同。学完入门,再去深读 区块链开发学习路线,会顺很多。
第 1 步:打开 Remix
地址是 remix.ethereum.org。它是浏览器里的完整 Solidity IDE——编辑器、编译器、部署、调试一站到位。新手不要折腾 Hardhat / Foundry,Remix 足够。
界面三块:
- 左侧 File Explorer:项目文件树。
- 左侧侧栏图标:编译器(Solidity Compiler)、部署器(Deploy & Run)、调试器、插件。
- 中间编辑区:写代码。
- 底部终端:编译错误、交易日志在这里出现。
第一次打开会有默认示例(1_Storage.sol、2_Owner.sol、3_Ballot.sol),可以删,也可以留着对照。
第 2 步:写第一段代码
新建文件 HelloWorld.sol,敲下面这段:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract HelloWorld {
string public message;
constructor(string memory _initialMessage) {
message = _initialMessage;
}
function setMessage(string memory _newMessage) public {
message = _newMessage;
}
}
逐行看:
- SPDX-License-Identifier:开源许可证标识,写不写都能编,但建议养成习惯。
- pragma solidity ^0.8.20:要求编译器版本 ≥ 0.8.20。0.8 系列内置溢出检查,是当前推荐主线。
- contract HelloWorld:合约关键字,类似 class。
- string public message:状态变量,永久存在链上。
public自动生成同名 getter。 - constructor(…):部署时执行一次,初始化 message。
- setMessage(…) public:任何人都能调,改写 message。
不到 10 行,但已经包含了状态变量、构造函数、写函数三件套——绝大多数合约都是这三类东西的排列组合。
第 3 步:编译
切到 Solidity Compiler 标签:
- Compiler version:选 0.8.20 或更新。
- 点 Compile HelloWorld.sol。
- 看到绿色对勾 = 通过。
编译产物里有两个关键值:
- ABI(Application Binary Interface):函数签名清单,前端、钱包、Etherscan 用它来调用合约。
- Bytecode:真正部署到链上的字节码。
点 “ABI” 按钮就能复制出 JSON——这玩意儿就是合约和外部世界的"插头",Etherscan 上的 Read/Write Contract 功能 解析的也是这个 ABI。
第 4 步:部署到测试网

主网部署要花真钱(按 Gas 算可能几美元到几十美元),新手必须先在测试网练手。目前活跃的测试网是 Sepolia。
准备工作:
- MetaMask 切到 Sepolia:钱包顶部网络列表里直接选。
- 领测试 ETH:访问任意 Sepolia Faucet(如 sepoliafaucet.com、Alchemy Faucet),输入地址。一次能领 0.05–0.5 ETH,够你部署几十次合约。
- Remix 切环境:Deploy & Run 标签里 ENVIRONMENT 选 “Injected Provider - MetaMask”。会弹出 MetaMask 让你授权连接。
然后:
- 在 CONTRACT 下拉里选
HelloWorld。 - 在
_initialMessage输入框填Hello, Web3(含引号或不含都行,看 Remix 版本提示)。 - 点 Deploy。
- MetaMask 弹窗 → 确认 → 等待 10–30 秒。
- 部署成功后,左下角 “Deployed Contracts” 出现你的合约和地址。
把这个地址粘到 Sepolia Etherscan 搜一下,你能看到自己刚刚的部署交易——这条记录会永久存在,多年后还能查得到。
第 5 步:和合约交互
回到 Remix 左下角 “Deployed Contracts”,展开你的合约,看到两个按钮:
- message(蓝色):调用 view,免费,立刻返回
"Hello, Web3"。 - setMessage(橙色):调用 state-changing,会发起一笔交易、付 Gas。
试一次:
- 在 setMessage 输入框填
"Hello from <你的名字>"。 - 点按钮 → MetaMask 弹窗 → 确认。
- 等几秒后,再点 message → 返回值已经变了。
你的状态变量被写进了以太坊主网外的一个测试副本,全世界任何节点都能验证它的当前值。这就是智能合约最魔法的地方——没有服务器,但状态全网一致。
(/uploads/20260529/1780066723209-22519.png)
几个新手必踩的坑
Gas 估算不够——Remix 会自动估,但偶尔失败。手动改大 Gas Limit 即可。
MetaMask 没切对网络——部署半天发现连主网了,Gas 烧出火星。每次部署前看一眼右上角网络名。
没领够测试 ETH——Sepolia faucet 有频次限制,多个钱包轮流领。
改了代码忘了重新编译——Remix 不会自动重编,部署的是旧版本。习惯每次改完按 Ctrl+S 触发编译。
部署后想改代码? 不行。智能合约部署后字节码不可变。“升级合约” 的做法叫 Proxy Pattern,超出入门范围。
它和普通编程的根本差异
| 维度 | 普通后端 | Solidity 合约 |
|---|---|---|
| 部署成本 | 几乎为零 | 按字节码大小付 Gas |
| 修改 | 改了重启 | 不可改,只能新部署 |
| 状态存储 | 自有数据库 | 链上 storage,每字节都付钱 |
| 并发 | 多线程、锁 | 串行执行,无并发问题 |
| 调试 | 加日志重启 | 事件日志(event)+ 链上追踪 |
把这五行刻在脑子里,写代码时就不会犯"假设它和后端一样灵活"的错。
进阶往哪儿走
写完 HelloWorld 后,下一步通常是:
- 写一个 ERC-20——大概 50 行,能让你理解事件、Mapping、modifier。
- 写一个简易 NFT(ERC-721)——理解 metadata、tokenURI。
- 读懂 Uniswap V2 的 Pair.sol——理解 Uniswap 怎么工作。
- 跑一遍 账户抽象 (ERC-4337) 示例,理解 EOA 和 SCA 的差别。
- 不写新合约,先看合约,看主流项目都怎么写的。
常见提问
- 必须懂 JavaScript 吗? 不必须,但语法接近,会更轻松。
- 能直接部署到主网吗? 技术上可以,没人拦你。但任何主网合约都要先过测试、过审计——参考 智能合约审计。
- Solidity 是不是过时了? 没有。EVM 链占整个智能合约市场 70%+,可见的未来都不会过时。
- 应该学 Solidity 还是 Rust? 想做主流 DApp,先学 Solidity;想做 Solana / 高性能基础设施,再补 Rust。
从读到写,只差一次部署的勇气
智能合约的入门门槛远比你想的低——一个 IDE、一个钱包、一杯咖啡的时间,你就能把字节码送上以太坊。真正的门槛在后面:怎么写出不被攻击的代码、怎么省 Gas、怎么设计可升级架构、怎么过审计——这些都是你部署完 HelloWorld 之后要走的路。
但今晚,先把这五步走完。
从读懂合约,到写出合约,只差一次部署的勇气。