第三章 | 初识 Solidity:开发环境搭建 第一个智能合约{介绍篇}

server/2025/3/25 22:08:29/

📚 第三章 | 初识 Solidity:开发环境搭建 & 第一个智能合约

——从写下第一行代码,开启智能合约开发之旅!


✅ 本章导读

前两章我们讲清了区块链智能合约的基础原理,现在——
是时候动手实战!
你将完成:
✅ Solidity 开发环境的搭建
✅ 写下第一个「Hello World」合约
✅ 学会用 Remix 和 Hardhat 部署并调用智能合约
✅ 体验部署到本地测试链,模拟真实开发流程


🚀 Solidity 开发有两种环境

开发方式特点
Remix IDE免安装、开箱即用,适合新手上手和快速测试
Hardhat本地化开发,更专业灵活,适合项目实战

本章结构:

👉 Part 1:零基础用 Remix 写第一个智能合约
👉 Part 2:本地开发 Hardhat 环境搭建
👉 Part 3:合约编译、部署、交互实战
👉 Part 4:本章总结 + 作业挑战


✨ Part 1 | 用 Remix IDE 快速写第一个智能合约

✅ 什么是 Remix?

Remix 是以太坊官方在线 IDE,支持 Solidity 智能合约编写、部署和测试。
网址:https://remix.ethereum.org

✅ 为什么选 Remix?

  • 在线版,无需安装
  • 自带 Solidity 编译器
  • 直接连测试链,部署方便
  • 初学者 5 分钟搞定第一份合约!

👨‍💻 实战步骤

① 打开 Remix 官网

https://remix.ethereum.org

② 创建新文件 HelloWorld.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract HelloWorld {string public greet = "Hello, Web3 World!";
}

③ 编译合约

  • 点击左侧“Solidity Compiler” → Compile HelloWorld.sol
  • 选择 0.8.x 版本,避免兼容性问题

④ 部署合约

  • 点击左侧“Deploy & Run Transactions”
  • 环境选择 JavaScript VM(模拟本地链)
  • 点击 Deploy → 合约部署成功
  • 下面 Deployed Contracts 可以看到 greet() 按钮
  • 点击 greet() → 输出 "Hello, Web3 World!"

🎉 你写下的第一个智能合约,已经部署并运行!


✨ Part 2 | 本地 Hardhat 环境搭建

✅ 为什么要用 Hardhat?

Remix 虽好,但实际开发要更强大的工具链。
Hardhat 是当前最流行的 Solidity 开发框架,优势是:
✅ 本地调试灵活,日志详细
✅ 支持插件丰富(Ethers.js、Waffle、OpenZeppelin)
✅ 可接测试网、主网部署
✅ 脚本化部署 + 自动化测试,适合团队协作


👨‍💻 安装 Hardhat 本地开发环境

① 准备 Node.js

  • 推荐安装 Node.js 版本 16.x 或更高
  • 验证 node -vnpm -v

② 新建项目文件夹

mkdir my-first-contract
cd my-first-contract
npm init -y

③ 安装 Hardhat

npm install --save-dev hardhat

④ 初始化 Hardhat 项目

npx hardhat

👉 选择 Create a basic sample project
👉 一路回车 → 自动生成以下目录:

contracts/          // 智能合约目录
scripts/            // 部署脚本
test/               // 测试用例
hardhat.config.js   // 配置文件

✨ Part 3 | 编写 & 部署第一个合约(HelloWorld)

✅ ① 创建合约文件

进入 contracts 文件夹,新建 HelloWorld.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract HelloWorld {string public greet;constructor() {greet = "Hello, Web3 World!";}function setGreet(string memory _greet) public {greet = _greet;}
}

✅ ② 编译合约

npx hardhat compile

看到 Compilation finished successfully,就对了!


✅ ③ 部署合约脚本(scripts/deploy.js)

编辑 scripts/deploy.js 文件

async function main() {const HelloWorld = await ethers.getContractFactory("HelloWorld");const hello = await HelloWorld.deploy();console.log("合约部署地址:", hello.address);
}main().then(() => process.exit(0)).catch(error => {console.error(error);process.exit(1);});

✅ ④ 启动本地测试链并部署

npx hardhat node

打开另一个终端

npx hardhat run scripts/deploy.js --network localhost

🎉 部署成功,控制台会显示合约地址!


✅ ⑤ 交互测试(使用 Hardhat 控制台)

npx hardhat console --network localhost
const hello = await ethers.getContractAt("HelloWorld", "你的合约地址")
await hello.greet()                   // 查询 greet
await hello.setGreet("Hello, Solidity!")  // 修改 greet
await hello.greet()                   // 再次查看

✨ Part 4 | 本章小结 & 作业挑战

✅ 本章你学到了

✔️ 什么是 Remix,写下你的第一个合约
✔️ 本地 Hardhat 环境搭建与目录结构
✔️ 编译、部署、交互完整流程
✔️ 正式迈入 Solidity 合约开发之路!


✅ 课后作业(建议动手实践)

  1. 在 Remix 上自行写一个 Counter 合约
    • 功能:可以增加、减少计数器值
  2. 用 Hardhat 本地环境部署 Counter 合约
  3. 尝试编写 测试用例(可以参考 test/sample-test.js)
  4. 思考:
    • constructor 和普通函数的区别?
    • 部署合约后还能改 constructor 吗?为什么?

✅ 下一章预告|第 04 章

👉 Solidity 基础语法全面解析
🚀 数据类型、变量作用域、函数调用
🚀 结构体、映射、数组、事件机制
🚀 函数修饰符、访问控制、继承和接口
🛡️ 带你逐步掌握 Solidity 语法核心,为项目实战打下基础!


🚀 Ready?

留言告诉我,你写下的第一个合约是什么!
✅ 还是想挑战下 ERC20/NFT 项目?

 


http://www.ppmy.cn/server/179073.html

相关文章

开发中常用的设计模式 用法及注意事项【面试题】

常见的设计模式:单例模式、工厂模式、观察者模式、发布-订阅模式、装饰器模式、策略模式、代理模式、模块模式等 React中的高阶组件(装饰器模式)、Vue的事件总线(发布-订阅模式) 一、 单例模式 (Singleton) 用途&…

[React 进阶系列] 组合组件 复合组件

[React 进阶系列] 组合组件 & 复合组件 今天写个人项目练手的时候搜到了一个比价有趣的实现,于是用了一下,发现这个 concept 不是特别的熟,于是上网找了下,返现了一个叫 复合组件(compound components) 的概念。搜索了一下后…

RISC-V: 固件与操作系统引导 | eg OpenSBI | 借助AI注释项目代码

引入:计算机没有黑魔法 例如我们都可以,通过指令来查看我们计算机的信息 “Everything is a State Machine” 在许多状态之间不断切换程序就运行了起来Makefile 也是程序;它也是状态机程序不好读的话,我们还可以调试它&#xff0…

Language Models are Few-Shot Learners,GPT-3详细讲解

GPT的训练范式:预训练Fine-Tuning GPT2的训练范式:预训练Prompt predict (zero-shot learning) GPT3的训练范式:预训练Prompt predict (few-shot learning) GPT2的性能太差,新意高&…

国产开发板—米尔全志T113-i如何实现ARM+RISC-V+DSP协同计算?

近年来,随着半导体产业的快速发展和技术的不断迭代,物联网设备种类繁多(如智能家居、工业传感器),对算力、功耗、实时性要求差异大,单一架构无法满足所有需求。因此米尔推出MYD-YT113i开发板(基…

Unity音频混合器如何暴露参数

音频混合器是Unity推荐管理音效混音的工具,那么如何使用代码对它进行管理呢? 首先我在AudioMixer的Master组中创建了BGM和SFX的分组,你也可以直接用Master没有问题。 这里我以BGM为例,如果要在代码中进行使用就需要将参数暴露出去…

linux去掉绝对路径前面部分和最后的/符号

使用basename命令 basename命令用于获取路径中的文件名部分。它会自动去除路径前面的目录部分和最后的/符号。示例如下: path"/a/b/c" filename$(basename "$path") echo "$filename"path"/a/b/c/" filename$(basename &…

【测试工具】如何使用 burp pro 自定义一个拦截器插件

在 Burp Suite 中,你可以使用 Burp Extender 编写自定义拦截器插件,以拦截并修改 HTTP 请求或响应。Burp Suite 支持 Java 和 Python (Jython) 作为扩展开发语言。以下是一个完整的流程,介绍如何创建一个 Burp 插件来拦截请求并进行自定义处理…