:2026-04-02 23:24 点击:1
以太坊作为全球第二大加密货币平台,以及智能合约和去中心化应用(DApps)的领先区块链,吸引了无数开发者和爱好者,本文将详细介绍如何在Windows操作系统上搭建一个完整的以太坊开发环境,无论您是初学者还是有经验的开发者,都能按照步骤顺利完成。
在开始之前,请确保您的Windows系统满足以下基本要求,并准备好必要的工具:
以太坊开发生态丰富,我们这里选择最常用和最基础的工具组合:Geth(以太坊客户端) + Truffle(智能合约开发框架) + MetaMask(浏览器钱包)。
git --version 验证安装是否成功。node和npm命令。node -v 和 npm -v 验证安装成功。Geth是以太坊最流行的客户端之一,允许您连接到以太坊网络、创建自己的私有网络、挖掘以太坊(如果网络支持)等。
官方安装包(推荐新手)
geth-windows-amd64-版本号.zip)。C:\geth。PATH 中,以便在任意位置运行geth命令,具体操作:右键“此电脑”->“属性”->“高级系统设置”->“环境变量”->在“系统变量”中找到“Path”->“编辑”->“新建”->输入 C:\geth->确定。使用包管理器(如Chocolatey)
choco install geth。验证Geth安装:打开CMD或PowerShell,输入 geth version,如果显示版本信息,则安装成功。
Truffle是一个世界级的开发环境、测试框架和资产管道,用于以太坊虚拟机(EVM)的智能合约开发。
npm install -g truffle
truffle version,如果显示版本信息,则安装成功。MetaMask是一款流行的浏览器扩展钱包,让您可以轻松管理以太坊账户、与DApps交互,并连接到本地或远程的以太坊网络。
为了在不影响主网的情况下进行开发和测试,我们可以创建一个本地私有网络。
初始化私有网络节点:
打开CMD或PowerShell,导航到您希望创建节点数据的目录(C:\ethereum\node1),然后运行:
geth --datadir "./data" init C:\path\to\your\genesis.json
您需要先创建一个 genesis.json 文件

{
"config": {
"chainId": 666, // 自定义链ID,确保唯一
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "0x4000",
"gasLimit": "0xffffffff",
"alloc": {
// 这里可以预先分配一些以太坊给指定地址,格式为 "地址": {"balance": "数量"}
// "0x742d35Cc6634C0532925a3b844Bc454e4438f44e": {"balance": "1000000000000000000000"}
}
}
保存为 genesis.json 文件,并记住其路径。
启动私有网络节点: 在同一个目录下(或指定datadir),运行以下命令启动节点:
geth --datadir "./data" --networkid 666 --http --http.addr "0.0.0.0" --http.port "8545" --http.api "personal,eth,net,web3"
--datadir "./data":指定数据存储目录。--networkid 666:指定网络ID,与genesis.json中的chainId一致。--http:启用HTTP-RPC服务。--http.addr "0.0.0.0":允许任何IP访问HTTP-RPC服务(开发环境使用,生产环境需限制)。--http.port "8545":指定HTTP-RPC端口。--http.api:暴露的API接口。节点启动后,它会开始同步创世块,您可以在另一个CMD窗口中使用 geth attach http://localhost:8545 连接到该节点的控制台。
创建项目目录:
在您的工作空间创建一个新文件夹,C:\ethereum\my-first-dapp,然后进入该目录。
mkdir C:\ethereum\my-first-dapp cd C:\ethereum\my-first-dapp
初始化Truffle项目:
truffle init
这会创建标准的Truffle项目结构,包括 contracts/(智能合约)、migrations/(部署脚本)、test/(测试文件)等目录。
编写智能合约:
打开 contracts/ 目录下的 Migration.sol(示例),您可以创建一个新的合约文件,MyToken.sol:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "My Token";
string public symbol = "MTK";
uint256 public totalSupply = 1000000 * 10**18; // 100万代币,18位小数
mapping(address => uint256) public balanceOf;
constructor() {
balanceOf[msg.sender] = totalSupply;
}
function transfer(address to, uint256 amount) public returns (bool success) {
require(balanceOf[msg.sender] >= amount, "Insufficient
本文由用户投稿上传,若侵权请提供版权资料并联系删除!