/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
一、什么是 Solidity?
Solidity 是一门面向以太坊虚拟机(EVM)、静态类型的高级编程语言,专门用于编写区块链上的智能合约。
简单来说:
- 智能合约 = 运行在区块链上的自动执行代码(无需第三方,代码即规则)
- Solidity = 编写智能合约最主流的语言(支持以太坊、BSC、Polygon 等公链)
它的语法和 JavaScript/Java 非常接近,新手极易上手,是 Web3 开发的核心技能之一。
二、开发前准备
无需复杂环境,直接用在线 IDE即可开始编写:推荐工具:Remix IDE(浏览器打开即用,零配置)
基础概念提前知:
三、第一个 Solidity 合约:极简存储合约
我们从最基础的数据存储合约开始,实现「存数据 + 读数据」两个核心功能,完全贴合入门逻辑。
完整代码(可直接复制到 Remix 运行)
solidity
// 1. 指定Solidity编译器版本(兼容0.8.0以上,含安全检查)
pragma solidity ^0.8.0;
// 2. 定义合约(类似JavaScript的class)
contract SimpleStorage {
// 状态变量:存储在区块链上的数字,初始值为0
uint256 private _number;
// 函数1:设置数字(外部调用,修改区块链数据)
function setNumber(uint256 num) public {
_number = num;
}
// 函数2:获取数字(外部调用,读取区块链数据)
function getNumber() public view returns (uint256) {
return _number;
}
}
代码逐行解析
pragma solidity ^0.8.0;声明合约兼容的 Solidity 版本,^0.8.0表示支持 0.8.0 及以上版本,0.8 + 自带整数溢出安全检查,是入门首选版本。
contract SimpleStorage定义合约名称为SimpleStorage,所有代码都写在这个大括号内。
uint256 private _number;
- uint256:256 位无符号整数(只能存非负数,区块链最常用数值类型)
- private:私有变量,只能在合约内部访问(安全规范)
- _number:状态变量,永久存储在区块链上,断电 / 重启都不会丢失。
setNumber函数
- public:公开函数,外部账户 / 其他合约都能调用
- 作用:修改区块链上的_number值(修改数据需要消耗 Gas 费)
getNumber函数
- view:只读函数,不修改区块链数据,免费调用
- returns (uint256):声明函数返回值类型
- 作用:读取_number的值
四、在 Remix 中运行合约
- 输入数字,点击setNumber(写入数据)
- 点击getNumber(读取数据)
✅ 恭喜你!已经完成了第一个智能合约的部署与调用!
五、进阶:带所有者的存储合约
入门后我们加一个权限控制:只有合约部署者(所有者)才能修改数据,更贴近实际业务场景。
solidity
// 指定编译器版本
pragma solidity ^0.8.0;
contract OwnedStorage {
// 状态变量
uint256 private _number;
// 存储合约所有者地址
address private immutable _owner;
// 构造函数:部署合约时自动执行1次
constructor() {
// 将部署者地址设为所有者
_owner = msg.sender;
}
// 修饰器:权限检查(只有所有者能调用)
modifier onlyOwner() {
require(msg.sender == _owner, "Not owner!");
// 执行被修饰的函数代码
_;
}
// 只有所有者能设置数字
function setNumber(uint256 num) public onlyOwner {
_number = num;
}
// 任何人都能读取数字
function getNumber() public view returns (uint256) {
return _number;
}
// 获取所有者地址
function getOwner() public view returns (address) {
return _owner;
}
}
新增核心知识点
六、Solidity 入门核心关键词总结
表格
| public | 公开可调用 | 分情况 |
| view/pure | 只读函数,不修改数据 | 免费 |
| private | 私有变量 / 函数,仅内部访问 | – |
| constructor | 部署时初始化,仅执行一次 | 部署时消耗 |
| require | 条件校验,失败则回滚 | – |
| msg.sender | 当前调用者地址(内置全局变量) | – |
七、入门避坑指南
八、下一步学习方向
总结
这篇入门教程覆盖了 Solidity 最核心的基础逻辑,跟着代码实操一遍,就能快速掌握智能合约的编写思路啦!
![[Web3] Bitget 被攻击事件复盘:私钥没泄露,钱是怎么走出去的-171主机测评](https://www.171host.com/wp-content/uploads/2026/11/20261103011032-6ae93488ab432-220x150.gif)