当前位置: 首页 > news >正文

Solidity 智能合约入门:从 0 到 1 编写第一个区块链合约

一、什么是 Solidity?

Solidity 是一门面向以太坊虚拟机(EVM)静态类型的高级编程语言,专门用于编写区块链上的智能合约

简单来说:

  • 智能合约 = 运行在区块链上的自动执行代码(无需第三方,代码即规则)
  • Solidity = 编写智能合约最主流的语言(支持以太坊、BSC、Polygon 等公链)

它的语法和 JavaScript/Java 非常接近,新手极易上手,是 Web3 开发的核心技能之一。

二、开发前准备

无需复杂环境,直接用在线 IDE即可开始编写:推荐工具:Remix IDE(浏览器打开即用,零配置)

基础概念提前知:

  1. 合约(Contract):Solidity 的核心单元,类似其他语言的「类」
  2. 地址(Address):区块链上的账户 ID(类似银行卡号)
  3. ETH:以太坊原生代币,合约中用wei作为最小单位(1 ETH = 10¹⁸ wei)
  4. 状态变量:存储在区块链上的永久数据(不会丢失)

三、第一个 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; } }

代码逐行解析

  1. pragma solidity ^0.8.0;声明合约兼容的 Solidity 版本,^0.8.0表示支持 0.8.0 及以上版本,0.8 + 自带整数溢出安全检查,是入门首选版本。

  2. contract SimpleStorage定义合约名称为SimpleStorage,所有代码都写在这个大括号内。

  3. uint256 private _number;

    • uint256:256 位无符号整数(只能存非负数,区块链最常用数值类型)
    • private:私有变量,只能在合约内部访问(安全规范)
    • _number:状态变量,永久存储在区块链上,断电 / 重启都不会丢失。
  4. setNumber函数

    • public:公开函数,外部账户 / 其他合约都能调用
    • 作用:修改区块链上的_number值(修改数据需要消耗 Gas 费
  5. getNumber函数

    • view:只读函数,不修改区块链数据,免费调用
    • returns (uint256):声明函数返回值类型
    • 作用:读取_number的值

四、在 Remix 中运行合约

  1. 打开Remix IDE,新建文件SimpleStorage.sol
  2. 粘贴上面的代码,点击左侧「Solidity Compiler」编译合约
  3. 点击左侧「Deploy & Run Transactions」,点击Deploy部署合约
  4. 部署后在下方找到合约:
    • 输入数字,点击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; } }

新增核心知识点

  1. address类型:区块链地址类型,存储账户 / 合约地址
  2. msg.sender:当前调用函数的账户地址(内置全局变量)
  3. constructor:构造函数,仅部署时执行一次,用于初始化
  4. modifier:函数修饰器,封装通用逻辑(这里做权限检查)
  5. require:条件判断,不满足则报错并回滚操作(安全保障)

六、Solidity 入门核心关键词总结

表格

关键词作用是否消耗 Gas
public公开可调用分情况
view/pure只读函数,不修改数据免费
private私有变量 / 函数,仅内部访问-
constructor部署时初始化,仅执行一次部署时消耗
require条件校验,失败则回滚-
msg.sender当前调用者地址(内置全局变量)-

七、入门避坑指南

  1. 修改区块链数据必收 Gas 费:所有public非只读函数,都会消耗 Gas
  2. 状态变量永久存储:一旦写入区块链,无法删除(谨慎存储数据)
  3. 权限一定要控制:核心操作必须加onlyOwner等权限校验,防止被恶意调用
  4. 版本选 0.8.0+:低版本无溢出检查,容易出现安全漏洞

八、下一步学习方向

  1. 学习 Solidity 基础类型(字符串、数组、映射mapping
  2. 编写代币合约(ERC20 标准,区块链最常用合约)
  3. 学习事件event、异常处理、合约继承
  4. 了解区块链 Gas 优化、安全审计

总结

  1. Solidity 是编写 EVM 链智能合约的主流语言,语法贴近 JS,入门简单
  2. 核心是状态变量(链上永久存储)和函数(读 / 写链上数据)
  3. 入门先练「读写数据」,再学权限控制,逐步进阶
  4. 用 Remix IDE 快速上手,无需配置本地环境

这篇入门教程覆盖了 Solidity 最核心的基础逻辑,跟着代码实操一遍,就能快速掌握智能合约的编写思路啦!

http://www.jsqmd.com/news/545993/

相关文章:

  • 毕设程序java高校宿舍报修管理系统 基于Java的高校寝室故障报修服务平台 智慧校园宿舍维修申报与调度系统
  • 如何突破百度网盘下载限制:直链解析工具完全指南
  • 保姆级教程:用Python脚本搞定Middlebury和ETH3D双目评估结果提交(附避坑指南)
  • 开发提效新组合:用Cursor生成代码片段,在快马一键集成与部署
  • 【杂文】编译参数
  • 3D打印桥接工具:从设计到输出的全流程优化
  • PD与PI的取舍之道——从平衡小车看控制器的精准选择
  • 告别手动抠图!用ArcGIS ModelBuilder 自动化批量处理地图矢量化任务,效率提升200%
  • 一文搞懂芯片设计黑话:SoC/SiP/Chiplet/IP核的区别与应用场景
  • 特殊字符markdown
  • SPSS K均值聚类实战:3种方法帮你找到最佳分类数(附详细步骤)
  • [数据集成] 云原生ETL平台webSpoon:企业级数据流程自动化解决方案
  • 保姆级教程:在Ubuntu 20.04上搞定海思SS524/SS522 SDK编译与固件烧录
  • 告别ZooKeeper!ClickHouse Keeper双机集群搭建全攻略(含常见报错解决方案)
  • Simulink实战:10分钟搞定二极管钳位型三电平逆变器SVPWM双闭环仿真(附模型下载)
  • 3个步骤掌握LaMa图像修复:从快速部署到企业级应用
  • 物联网数据中枢:OpenClaw+Qwen3-32B处理传感器信息流
  • 告别手打公式!用SimpleTex截图转LaTeX+Axmath微调+Typora排版的保姆级教程
  • 如何在5分钟内将网页SVG完美保存为可编辑矢量文件?
  • 轻量化+低成本:如何轻松实现IT巡检自动化
  • 8374565
  • Chandra AI聊天助手一键部署教程:基于Python爬虫的数据采集实战
  • 免费商用中文字体选型指南:思源宋体CN的全方位应用与优化策略
  • 智能变电站实战:如何用SCL配置文件搞定IED设备联调(附避坑案例)
  • 避坑指南:如何在torch 2.4.0 + CUDA 12.1环境下成功安装llamafactory及其依赖
  • 终极指南:Rainmeter多显示器窗口管理快捷键设置与窗口移动热键教程
  • 5步攻克模型部署性能优化:从瓶颈分析到推理加速实战
  • 自动驾驶感知新范式:从BEV到Occupancy再到TPV,三张图讲清技术演进与选型思路
  • 第3章:核心架构与数据模型
  • ElasticSearch集群搭建步骤