为什么是以太坊?
以太坊作为全球第二大区块链平台,不仅是比特币“数字货币”的延伸,更通过“智能合约”实现了可编程的价值传输,无论是DeFi(去中心化金融)、NFT(非同质化代币),还是DAO(去中心化自治组织),以太坊都提供了底层基础设施,如果你对区块链开发感兴趣,以太坊无疑是最好的起点,本文将手把手教你从环境搭建到智能合约编写,再到部署与交互,完整体验以太坊DApp(去中心化应用)的构建流程。
第一步:理解以太坊核心概念
在动手前,先搞懂三个基础概念:
账户(Account)
以太坊有两类账户:
- 外部账户(EOA):由用户控制,通过私钥签名交易,比如你的MetaMask钱包。
- 合约账户:由智能代码控制,没有私钥,只能通过交易触发。
智能合约(Smart Contract)
运行在以太坊虚拟机(EVM)上的自动执行代码,用Solidity语言编写(类似JavaScript),一旦部署就无法修改,确保了“代码即法律”。
Gas(燃料费)
每笔交易都需要支付Gas,用于补偿网络节点的计算成本,Gas价格由市场供需决定,复杂操作(如写入合约)消耗Gas更高。
第二步:搭建开发环境
“工欲善其事,必先利其器”,我们需要以下工具:
安装Node.js和npm
Node.js是JavaScript运行时环境,npm是包管理器,前往Node.js官网下载LTS版本,安装后打开终端输入:
node -v # 检查版本(如v18.17.0) npm -v # 检查npm版本(如9.6.7)
安装Hardhat(以太坊开发框架)
Hardhat是当前最流行的以太坊开发工具,支持编译、测试、部署智能合约,终端执行:
mkdir eth-dapp && cd eth-dapp # 创建项目目录 npm init -y # 初始化npm项目 npm install --save-dev hardhat # 安装Hardhat npx hardhat # 初始化Hardhat项目,选择"Create a basic sample project"
按提示选择“Solidity”和“JavaScript”,Hardhat会自动生成contracts/(合约代码)、scripts/(部署脚本)、test/(测试文件)等目录。
安装MetaMask(区块链钱包)
- 浏览器插件搜索“MetaMask”并安装,创建钱包时务必备份私钥(助记词),丢失后无法找回资产。
- 切换到“Sepolia测试网”(以太坊官方测试网,免费测试用),从Sepolia Faucet获取测试ETH(Gas费)。
第三步:编写你的第一个智能合约
目标:创建一个简单的“存储合约”,可以存取一个字符串(比如你的名字)。
编写合约代码
打开contracts/目录,删除默认的Lock.sol,新建Storage.sol,输入以下代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Storage {
string private myString; // 存储字符串的变量
// 存储字符串的函数
function set(string memory _newString) public {
myString = _newString;
}
// 读取字符串的函数
function get() public view returns (string memory) {
return myString;
}
}
代码解析:
SPDX-License-Identifier:开源协议,必填。pragma solidity ^0.8.20:指定Solidity版本(0.8.20及以上,不包含0.9.0)。contract Storage:定义合约名。string private myString:私有字符串变量,仅合约内部可访问。set():写入函数,参数_newString为要存储的字符串。get():读取函数,view表示不修改状态,免费调用。
编译合约
终端执行:
npx hardhat compile
成功后,artifacts/contracts/Storage.sol/Storage.json会生成合约的ABI(应用二进制接口,定义合约函数和数据结构)和字节码(部署到区块链的机器码)。
第四步:部署合约到测试网
配置网络信息
在hardhat.config.js中添加Sepolia测试网配置:
require("@nomicfoundation/hardhat-toolbox");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.20",
networks: {
sepolia: {
url: "https://sepolia.infura.io/v3/YOUR_INFURA_API_KEY", // 替换为你的Infura API
accounts: ["YOUR_PRIVATE_KEY"], // 替换为MetaMask的私钥(测试网私钥)
},
},
};









