跳转到内容

以太坊快速入门

以太坊快速入门

欢迎来到以太坊开发世界!本文将帮助你快速了解以太坊的基础概念,并搭建开发环境,写出并部署你的第一个智能合约。

以太坊是什么

以太坊是一个去中心化的开源区块链平台,支持图灵完备的智能合约。它由 Vitalik Buterin 于 2013 年提出,2015 年正式上线。

区块链并没有我们想象的无所不能。虽然通过共识实现了去中心化、不可篡改等特性,但同时它也是一个重复计算、冗余存储的分布式系统。这样一个系统,显然不是无所不能的,但在特定场景下,特别是与金融相结合,区块链有着无可替代的价值。

以太坊的核心组成

  • 以太币(ETH):以太坊的原生货币,用于支付 Gas 费用
  • 智能合约:部署在以太坊上的程序,按预设规则自动执行
  • 去中心化应用(DApp):基于智能合约的应用程序
  • EVM(以太坊虚拟机):执行智能合约的运行环境
  • 节点网络:全球数千个节点共同维护区块链状态

以太坊 vs 传统应用

特性传统应用以太坊 DApp
数据存储中心化服务器去中心化区块链
代码控制公司可随时修改部署后不可更改
停机风险服务器宕机全球节点,极难宕机
资金托管平台托管用户自我托管
访问门槛可被封锁无需许可

以太坊生态概览

Layer 1(主网)

以太坊主网是基础层,所有交易的最终结算都在这里进行。

  • 目前采用**权益证明(PoS)**共识机制(2022 年合并后)
  • 平均出块时间:12 秒
  • 每秒交易数(TPS):约 15-30 笔

Layer 2(扩容方案)

在以太坊上构建的第二层网络,提供更高 TPS 和更低 Gas 费:

L2 网络类型特点
ArbitrumOptimistic Rollup最大 TVL
OptimismOptimistic RollupOP Stack 生态
BaseOptimistic RollupCoinbase 开发
zkSync EraZK Rollup零知识证明
Polygon侧链+zkEVM多链方案

DeFi 生态

  • Uniswap:最大去中心化交易所(AMM)
  • Aave:去中心化借贷协议
  • MakerDAO:DAI 稳定币发行方
  • Curve:稳定币交换专家

NFT 生态

  • OpenSea:最大 NFT 交易市场
  • Blur:专业交易者平台
  • CryptoPunks、BAYC:蓝筹 NFT 项目

准备工作

1. 安装 MetaMask 钱包

MetaMask 是最流行的以太坊钱包,以浏览器扩展形式存在。

  1. 访问 metamask.io 安装浏览器扩展
  2. 创建新钱包,妥善保存助记词(12 或 24 个单词)
  3. 助记词是找回钱包的唯一方式,切勿泄露给任何人

重要安全提示:

  • 永远不要在任何网页上输入助记词
  • 永远不要截屏保存助记词
  • 正规项目绝不会要求你提供助记词

2. 获取测试网 ETH

在测试网上练习,不需要花费真实资金:

Sepolia 测试网水龙头:
- https://sepoliafaucet.com/
- https://www.alchemy.com/faucets/ethereum-sepolia
- https://faucet.quicknode.com/ethereum/sepolia

在 MetaMask 中切换到 Sepolia 测试网,然后到水龙头申请测试 ETH。

3. 安装开发工具

Node.js

Terminal window
# 访问 https://nodejs.org 下载安装
node --version # 验证安装,推荐 v18+
npm --version

安装 Hardhat(推荐入门使用)

Terminal window
mkdir my-ethereum-project && cd my-ethereum-project
npm init -y
npm install --save-dev hardhat
npx hardhat init

或者使用 Foundry(高性能选择)

Terminal window
curl -L https://foundry.paradigm.xyz | bash
foundryup
forge --version
cast --version
anvil --version

Remix IDE(无需安装,在线使用)

访问 remix.ethereum.org,直接在浏览器中编写、编译和部署合约,非常适合初学者。

你的第一个智能合约

使用 Remix IDE(最简单方式)

  1. 打开 remix.ethereum.org
  2. contracts 文件夹创建 HelloWorld.sol
  3. 输入以下代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
string public message;
constructor(string memory _message) {
message = _message;
}
function setMessage(string memory _newMessage) public {
message = _newMessage;
}
function getMessage() public view returns (string memory) {
return message;
}
}
  1. 按 Ctrl+S 编译
  2. 在 Deploy 页面,选择 “Injected Provider - MetaMask”
  3. 输入初始消息参数,部署到 Sepolia 测试网

使用 Hardhat 开发

初始化项目:

Terminal window
mkdir hello-ethereum && cd hello-ethereum
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
npx hardhat init # 选择 "Create a JavaScript project"

创建合约文件:

contracts/HelloWorld.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract HelloWorld {
string public message;
event MessageChanged(string oldMessage, string newMessage);
constructor(string memory _initialMessage) {
message = _initialMessage;
}
function setMessage(string memory _newMessage) public {
emit MessageChanged(message, _newMessage);
message = _newMessage;
}
}

编写测试:

test/HelloWorld.js
const { expect } = require("chai");
const { ethers } = require("hardhat");
describe("HelloWorld", function () {
let helloWorld;
beforeEach(async function () {
const HelloWorld = await ethers.getContractFactory("HelloWorld");
helloWorld = await HelloWorld.deploy("Hello, World!");
await helloWorld.waitForDeployment();
});
it("应该返回初始消息", async function () {
expect(await helloWorld.message()).to.equal("Hello, World!");
});
it("应该成功更新消息", async function () {
await helloWorld.setMessage("Hello, Ethereum!");
expect(await helloWorld.message()).to.equal("Hello, Ethereum!");
});
it("应该发出 MessageChanged 事件", async function () {
await expect(helloWorld.setMessage("新消息"))
.to.emit(helloWorld, "MessageChanged")
.withArgs("Hello, World!", "新消息");
});
});

运行测试:

Terminal window
npx hardhat test

部署脚本:

scripts/deploy.js
const { ethers } = require("hardhat");
async function main() {
const [deployer] = await ethers.getSigners();
console.log("部署账户:", deployer.address);
const HelloWorld = await ethers.getContractFactory("HelloWorld");
const helloWorld = await HelloWorld.deploy("Hello, Ethereum!");
await helloWorld.waitForDeployment();
console.log("合约地址:", await helloWorld.getAddress());
}
main().then(() => process.exit(0)).catch(console.error);

配置并部署到 Sepolia:

hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();
module.exports = {
solidity: "0.8.24",
networks: {
sepolia: {
url: process.env.SEPOLIA_RPC_URL,
accounts: [process.env.PRIVATE_KEY]
}
}
};
Terminal window
# .env 文件
SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/YOUR_KEY
PRIVATE_KEY=0x你的测试账户私钥
# 部署
npx hardhat run scripts/deploy.js --network sepolia

与合约交互

使用 ethers.js

const { ethers } = require("ethers");
require("dotenv").config();
const ABI = [
"function message() view returns (string)",
"function setMessage(string memory _newMessage)",
"event MessageChanged(string oldMessage, string newMessage)"
];
async function main() {
const provider = new ethers.JsonRpcProvider(process.env.SEPOLIA_RPC_URL);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
const contract = new ethers.Contract("0x合约地址", ABI, wallet);
// 读取消息
const message = await contract.message();
console.log("当前消息:", message);
// 更新消息
const tx = await contract.setMessage("来自 Node.js 的问候!");
await tx.wait();
console.log("更新成功,交易:", tx.hash);
// 读取新消息
console.log("新消息:", await contract.message());
}
main();

使用 React + wagmi(前端 DApp)

import { useReadContract, useWriteContract } from 'wagmi';
const CONTRACT_ABI = [...] as const;
function HelloDApp() {
const { data: message } = useReadContract({
address: '0x合约地址',
abi: CONTRACT_ABI,
functionName: 'message',
});
const { writeContract, isPending } = useWriteContract();
return (
<div>
<p>当前消息: {message}</p>
<button
onClick={() => writeContract({
address: '0x合约地址',
abi: CONTRACT_ABI,
functionName: 'setMessage',
args: ['Hello from React!'],
})}
disabled={isPending}
>
{isPending ? '处理中...' : '更新消息'}
</button>
</div>
);
}

推荐学习路径

第一阶段:基础入门(1-2 周)

  1. 理解区块链基本概念(区块、交易、Gas)
  2. 在 Remix 上写简单 Solidity 合约
  3. 部署到 Sepolia 测试网并验证

推荐资源:

第二阶段:开发工具(2-4 周)

  1. 掌握 Hardhat 或 Foundry
  2. 编写完整的单元测试
  3. Gas 优化和安全实践

第三阶段:标准合约(4-6 周)

  1. ERC20 代币合约
  2. ERC721 NFT 合约
  3. OpenZeppelin 合约库使用

第四阶段:全栈 DApp(6-8 周)

  1. ethers.js / wagmi 前端集成
  2. 完整 DApp 项目
  3. 部署到主网或 Layer2

常用工具和资源

开发工具

工具用途链接
Remix IDE在线开发环境remix.ethereum.org
Hardhat开发框架hardhat.org
Foundry高性能开发框架getfoundry.sh
Tenderly合约调试监控tenderly.co

区块链浏览器

网络浏览器
以太坊主网etherscan.io
Sepolia 测试网sepolia.etherscan.io
Arbitrumarbiscan.io
Optimismoptimistic.etherscan.io

中文学习资源

RPC 节点服务

服务免费额度特点
Infura每天 10 万请求老牌服务商
Alchemy每月 3 亿算力单位功能丰富
QuickNode按需使用低延迟

以太坊生态的局限性与发展

当前的区块链结构并没有我们想象的无所不能。虽然通过共识实现了去中心化、不可篡改等特性,但同时也是一个重复计算、冗余存储的分布式系统。这样一个系统,显然有很多的局限:

  • 计算受限:由于共识机制带来的计算瓶颈,处理计算问题的能力比不上中心化系统
  • 存储昂贵:账本全体备份造成资源浪费,链上存储成本极高
  • 外部数据困难:区块链是封闭系统,直接获取链下数据(如价格)需要预言机解决
  • 交易吞吐有限:主网约 15-30 TPS,Layer2 正在解决这个问题

不过有个好消息:区块链与金融是完美匹配,而金融是现代经济的核心。 通过 DeFi、NFT、DAO 等应用,以太坊正在重塑金融基础设施。

总结

以太坊开发入门要点:

  1. 理解基础:区块链、账户、Gas、智能合约、EVM
  2. 搭建环境:MetaMask 钱包 + Node.js + Hardhat 或 Foundry
  3. 学习 Solidity:从 HelloWorld 开始,逐步深入
  4. 测试先行:在 Sepolia 测试网验证,再考虑主网
  5. 前端集成:用 wagmi/ethers.js 构建完整 DApp
  6. 安全意识:了解常见漏洞,使用 OpenZeppelin 安全库

以太坊生态发展迅速,社区活跃。加入社区、动手实践,你将进入一个充满可能性的去中心化世界!


下一步学习: