从 DeFi 到 NFT,再到供应链溯源,「智能合约」已经成为区块链世界的桥梁。本篇作为 Solidity 系列第 1 集,将从零开始带你完成第一条可部署、可交互的以太坊合约。没有编程背景也完全跟得上,只要打开浏览器,15 分钟就能跑通全流程。
为什么选择 Solidity 与以太坊?
Solidity 是以太坊官方主推的合约语言,语法融合了 JavaScript、C++ 的精髓,运行在 EVM(以太坊虚拟机) 之上。一旦合约被部署,所有全节点会永久储存并执行,这意味着:
- 透明:代码公开开源,任何人可审计。
- 不可篡改:无中心化机构可单方面改动逻辑。
- 高效:省去对账与人工审核,金融级自动化。
核心关键词:Solidity、智能合约、以太坊、EVM、Remix、数据存储、ETH。
环境搭建:两步启动 Remix
- 打开 Remix 在线 IDE。
- 左侧点击「📁」旁的
+,新建文件夹MyContract,随后右键新增文件MyContract.sol。
从此你无需安装任何本地工具,浏览器就是你的全栈开发机。
编写第一条智能合约:存储 & 读取
1. 代码框架
写代码前,先约定 Solidity 版本,防止未来语法冲突:
pragma solidity ^0.4.24;
contract MyContract {
// 代码区
}2. 声明区块链存储变量
我们要让合约能够「持久化」数据,于是声明状态变量:
string value; // 用 string 存一段文字,直接写进链上注意:状态变量 储存在存储区 Storage,长期占据节点磁盘,任何函数都能访问。
3. 赋予初始值
合约部署瞬间,系统自动调用一次构造函数:
constructor() public {
value = "myValue"; // 预设值
}4. 读取函数 get()
谁能读取链上数据?一个 public view 函数即可:
function get() public view returns (string) {
return value;
}public:任意外部账户都可直接调用。view:保证函数 不修改状态,只读。
5. 写入函数 set(string)
再写一个公开接口,让调用者更新数据:
function set(string _value) public {
value = _value; // 下划线变量仅在本函数作用域生效
}至此完成完整源码:
pragma solidity ^0.4.24;
contract MyContract {
string value;
constructor() public {
value = "myValue";
}
function get() public view returns (string) {
return value;
}
function set(string _value) public {
value = _value;
}
}编译 & 部署:30 秒把合约「上链」
步骤速览
- 在左侧插件商店激活 Solidity Compiler 与 Deploy & Run。
- 选择 0.4.25 版本 → 打开 Auto Compile → 点击 Compile MyContract.sol。
- 切到 Deploy 面板,Environment 选 JavaScript VM。
- 点橙色 Deploy 按钮,几秒后下方出现部署交易记录。
这一过程完全免费,用的是 Remix 提供的私有沙盒链,无需花费任何 ETH。
与合约交互:3 个动作走通一次交易
- 展开 Deployed Contracts → 点击 get(),右侧立即返回
"myValue"。 - 在
set框内输入"New Value"(加英文引号),点 transact。 - 再点一次
get(),返回值已更新为"New Value"。
合约部署后的世界发生了什么?
- 区块链节点 存储最新状态:value =
"New Value" - 交易哈希 写入 VM,可点击向下箭头查看 Gas、事件日志。
- 整个「区块」被打包为一个只追加的分布式账本,任何时刻都可重新计算状态。
常见问题 FAQ
Q1:新手学习 Solidity 一定要先学 JavaScript 或 C++ 吗?
不用。两条路线都能走:
1) 速成路线——直接跟着本系列复制粘贴 + 改参数即可跑通场景。
2) 深入路线——同步学 JS,可更快理解映射、事件、继承等高级概念。
Q2:Remix 能部署到真链主网吗?
可以。在 Deploy 面板中选择 Injected Web3,并连接 MetaMask 钱包即可。但不要忘记准备少量 ETH 支付 Gas 费用。
Q3:view 与 pure 有什么区别?
view可以读取状态变量,但不能写。pure既不能读也不能写,仅做计算返回。两者都无需 Gas,被归类为 链上只读调用。
Q4:我写错合约想删怎么办?
以太坊主链数据不可删除,但可用 自毁函数 selfdestruct 清空状态并退回部分 Gas。开发阶段建议先在 Remix 本地测试。
Q5:Gas 费用会不会很贵?
在 Remix JavaScript VM 测试阶段完全免费。主网操作时,Gas 费与以太坊网络拥堵度成正比。可查看 👉 实时 Gas 价格 & 预估工具,选择低峰期部署。
Q6:本合约能直接上线商用吗?
当前为最简 DEMO,尚未加入权限控制、防重入攻击、溢出检查等安全措施。商用前请务必添加 Ownable、SafeMath,并完成第三方审计。
下一步预告
在下一集,我们将基于今天的「存/取数据」模型,扩展「代币列表与用户余额映射」,一步步逼近 ERC-20 代币发行 的完整流程。对钱包、DEFI 感兴趣的同学千万不要错过!