开篇:为什么学Solidity?新手先搞懂核心价值
一、合约结构:Solidity的基本骨架(新手必看)
元素 | 作用 |
|---|---|
状态变量 | 永久存储在链上的变量,写入操作需要消耗Gas |
函数 | 合约的可执行逻辑,比如转账、修改变量 |
函数修饰器 | 给函数加执行条件,比如“只有管理员能调用” |
事件 | 向外部(前端、监听器)发送日志,方便查看交易记录 |
错误 | 失败时返回更易读的异常信息,方便排查问题 |
结构体 | 自定义复合数据类型,整合多个相关变量 |
枚举 | 定义一组有名字的常量,规范变量取值 |
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.35;
contract HelloWorld {
string public greeting = "Hello, World!";
function setGreeting(string memory _newGreeting) public {
greeting = _newGreeting;
}
}二、变量与类型:Solidity的“数据容器”
1. 值类型(直接存储数据,简单好记)
类型 | 说明 |
|---|---|
bool | 只有两个值:true(真)或 false(假) |
uint256 / int256 | 无符号/有符号整数,位数可调整(8-256,按8递增),uint默认是uint256 |
bytes1 至 bytes32 | 定长字节数组,长度固定,比如bytes1只能存1个字节的数据 |
address | 20字节的以太坊地址,用来表示钱包或合约地址 |
enum | 枚举类型,定义一组固定的常量,比如定义“性别:男、女” |
2. 引用类型(指向数据位置,分临时和持久)
类型 | 说明 |
|---|---|
动态数组 | 比如uint[],长度可以在运行时变化,想加多少元素都可以 |
bytes / string | 动态字节数组和字符串,长度可动态调整,比如存储一段文字 |
mapping | 哈希映射,类似Python的字典,比如mapping(address => uint),用来记录每个地址的余额,读数据耗Gas极少,但不能遍历所有键 |
struct | 自定义复合类型,比如定义一个“用户”结构体,包含地址、余额、昵称等信息 |
三、函数与修饰器:Solidity的“执行逻辑”
1. 函数(核心:指定可见性和状态可变性)
可见性 | 含义 |
|---|---|
public | 内部、外部都能调用,最常用 |
external | 只能外部调用,合约内部不能调用 |
internal | 只能合约内部和它的衍生合约调用 |
private | 只能本合约调用,最严格 |
状态可变性 | 含义 |
|---|---|
view | 只读状态变量,不修改任何链上数据,查询不耗Gas |
pure | 不读也不修改状态变量,纯计算,也不耗Gas |
payable | 允许接收ETH,比如收款合约必须加这个属性 |
2. 函数修饰器(Solidity函数修饰器,给函数加“门槛”)
uint public unlockTime;
function lock() public onlyOwner {
unlockTime = block.timestamp + 1 days;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_; // 占位符,代表被修饰函数的原始代码
}四、执行模型与Gas优化:让合约“省钱又高效”

ADD(加法):3 Gas(成本最低)
SLOAD(读取存储):200 Gas(读数据比写数据便宜)
SSTORE(写入存储):20,000 Gas(写数据超贵,是读数据的100倍)
合约部署基本成本:32,000 Gas
五、开发环境搭建:新手从Remix开始(Remix IDE教程)

打开网址:remix.ethereum.org,进入后会看到三个核心区域:文件资源管理器(管理.sol合约文件)、编辑器(写代码)、编译器&部署面板(编译+部署);
新建合约:点击文件资源管理器的“+”,输入文件名(比如HelloWorld.sol),粘贴前面的最简合约代码;
编译代码:按Ctrl+S,编译器会自动编译,注意右上角要选择0.8.35版本(和代码里的pragma一致);
模拟部署:切换到“Deploy & Run”面板,环境选择“Remix VM”(自带10个测试账户,每个有100测试ETH),点击“Deploy”,合约就部署成功了;
调用函数:部署成功后,在面板下方找到合约,点击greeting可以查看当前值,输入新内容点击setGreeting,就能修改变量。
六、安全注意事项:新手必避的4个坑
重入攻击:函数内先发送ETH,再修改状态,攻击者能递归回调函数,偷走资产(最经典的就是2016年The DAO攻击,导致以太坊硬分叉);
整数溢出:虽然Solidity 0.8.0后默认开启溢出检查,但调用unchecked块、用旧版本合约,还是可能出问题;
未授权访问:关键函数(比如提款)缺少onlyOwner等修饰器,任何人都能调用转走资产;
时间戳操作:矿工能轻微操控block.timestamp,依赖这个值做时间锁、随机性逻辑,可能被攻击,精确时间建议用预言机。
七、新手学习路径:4步从零到部署第一个合约
第一步(1小时):在Remix上跑通第一个合约,完成“新建→编译→部署→调用”全流程,不用深钻概念,先建立手感;
第二步(1-2周):系统学Solidity基础语法,掌握合约结构、Solidity变量类型、函数与Solidity函数修饰器,能独立写一个简单的Todo合约;
第三步(1周):读OpenZeppelin的ERC-20、ERC-721源码,了解标准合约的设计逻辑,这是接触生产级代码的关键;
第四步(1-2周):在测试网(Sepolia/Holesky)部署合约,领取测试ETH,再用Foundry搭建本地环境,学习编写测试用例,贴近真实开发场景。
免责声明:本文仅供信息分享与技术学习,不构成任何投资建议。智能合约开发存在代码漏洞、安全攻击等风险,智能合约审计不能替代正式安全审查,大额合约上线前应委托专业机构进行独立审计。加密货币属于高风险资产,不同地区监管政策存在重大差异,请严格遵守所在地法律法规。