#区块链前景
关于区块链私有链(Private Blockchain)的前景,我们可以清晰地看到它正从一种"边缘尝试"转变为企业数字化转型的核心基础设施。
结合当前的行业趋势(2025-2026年),私有链的发展不再局限于简单的数据存储,而是向着高性能、强隐私、深融合的方向演进。虽然它牺牲了公有链的"完全去中心化"特性,但换来了企业在效率、合规和成本上的巨大优势。
#环境变量的配置
首先配置Windows的环境配置,在浏览器中下载geth(Geth(go-ethereum)是以太坊官方 Go 语言实现的命令行客户端,也是目前最主流、最完整的以太坊节点软件之一)版本 下载好后配置到全局变量
一.以太坊客户端源代码零起点编译的环境准备及其编译方法
1.安装git 分布式版本控制系统用于跟踪和管理代码(或其他文件)的变更历史
安装地址:Git - Install for Windows
2.Go语言环境配置
安装地址:入门------Go 编程语言 --- Get Started - The Go Programming Language
- 补充一点(以太坊是去中心化操作系统)把"代码即法律"变成现实,让开发者可以在链上部署永远运行、任何人都能调用的应用,而用户只需一个以太坊地址就能与全球价值互联网交互。
3.在GitHub上克隆go-ethereum源代码
1.链接地址:GitHub - ethereum/go-ethereum at bb74230f2a93057b92bf58aab09c9438ce435f95
2.之后通过下列命令克隆到本地
git clone https://github.com/ethereum/go-ethereum/tree/bb74230f
二.采用geth的私有链搭建
1.安装Geth1.16.8

查看版本
三.单节点的精通和交易挖矿执行
2.配置创始区块(私有链运行需要,创世区块(Genesis Block) 是一条区块链的第一个区块,是整个链的源头与起点,没有前驱区块,是所有后续区块的 "始祖")
1.创建genesis.json文件
{
"config": {
"chainId": 202415,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0
},
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x8000000",
"difficulty": "0x1000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {}
}
2.初始化第一个创世区块
geth --datadir data init genesis.json
3.验证生成文件
dir D:\eth_private\data\geth\chaindata
3.节点启动与Console交互
#Console(控制台) 是计算机系统中用于输入命令、查看输出或调试信息的一个文本界面。它在不同场景下有不同含义,但核心作用都是人与计算机系统交互的窗口。
1.节点启动
geth --datadir data --networkid 202415 --http --http.api "eth,net,web3,personal,txpool,miner" --http.corsdomain "*" --http.addr "0.0.0.0" --http.port 8545 --nodiscover --port 30304 console 2allow-insecure-unlock
2.在另一个PowerShell窗口进入Console
geth attach http://localhost:8545

3.geth 控制台的常用命令
eth.accounts(获取账户列表)
personal.newAccount("123456")(创建新账号)
eth.getBalance(eth.accounts[0])(查询第一个账户的余额)
miner.setEtherbase(eth.accounts[0])(指定挖矿奖励接收账户)
创建账户,账户密码为123456
personal.newAccount("123456")
展示所有账户
eth.accounts
获得accounts[0]的余额
eth.getBalance(eth.accounts[0])
设置挖矿奖励账户
miner.setEtherbase(eth.accounts[0])
启动挖矿
miner.start(1)
挖矿页面显示(有小🔨出现)👇

结束挖矿
miner.stop()
监控挖矿状态
eth.miningeth.blockNumber
eth.blockNumber

4.转账实战
1.解锁账户(30000秒)将一个账户解锁可以进行转账交易
personal.unlockAccount(eth.accounts[0], "123", 30000)
2.发送交易 (另一个账户对这个账户进行转账)
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether"), gas: 21000, gasPrice: 20000000000})
3.检查交易池
txpool.status
4.挖矿确认(交易的金额从挖矿获得)
miner.start(1)
等待一个矿后
miner.stop()
5.验证余额
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
#补充geth 一直在换版本 反复添加到环境变量中
5.多节点部署 (将八个不同的私有链节点进行互相连接)
前提:所有节点的创世区块相同,(因为创世区块是同一个链的起始点),修改创世区块,节点
1.复制数据目录(快速创建第二个节点)
xcopy /E /I D:\private-chain\data D:\private-chain\data2
2.启动节点1(保持运行)
#注意首节点启动时保持port 的端口号相同
- HTTP Port 是 "节点对外提供服务的窗口",给开发者 / 钱包用;
- P2P Port 是 "节点之间串门的门",给节点组网用
geth --datadir data --networkid 202415 --port 30302 --http --http.api "eth,net,web3,personal,txpool,miner,admin" --http.corsdomain "*" --http.addr "0.0.0.0" --http.port 8545 --nodiscover --nat extip:192.168.57.94 --allow-insecure-unlock --ipcpath "\\.\pipe\geth.ipc" --verbosity 2 --maxpeers 50 console
3.启动节点2(新PowerShell窗口)
geth --datadir data --networkid 202415 --port 30302 --http --http.api "eth,net,web3,personal,txpool,miner,admin" --http.corsdomain "*" --http.addr "0.0.0.0" --http.port 8545 --nodiscover --nat extip:192.168.57.94 --allow-insecure-unlock --ipcpath "\\.\pipe\geth.ipc" --verbosity 2 --maxpeers 50 console

6.手动单击双节点组网
两两之间互相 ping ip
1.在节点1的Console中获取Enode enode 是以太坊网络中标识一个节点的唯一地址
admin.nodeInfo.enode
2.在节点2的Console中添加Peer(关键:修改IP为节点1的IP)
admin.addPeer("enode://466f00b4166b43e870bbe2ec570159f7cb00711a10ae0b9808cbc36a8e598a9cce6310604bb0b721e2b55e606453a1ab35cf9f489bb98c776469c34ab96956ab@192.168.57.35:30303")
3.验证连接(应显示节点1的信息)
admin.peers
4.在节点1中查看

- 同一组八个人之间 进行组内互相连接
-
设置成相同的创世区块
-
同时关闭防火墙
-
由主机启动 节点 设置端口
#组内其他人 进行连接 noteid设置成和主机相同
admin.addPeer("enode://9f2224...@192.168.1.101:30301")
admin.peers#在主机中检查节点连接情况
admin.peers #在其他机器中检查连接情况
- 最后同一组的八个人都成功添加到连接上
admin.peers
四.区块链浏览器的搭建(将自己的私有链可视化通过浏览器来实现)
-
在github上寻找私有链的浏览器项目etherparty\explorer
-
通过git克隆到本地
-
然后阅读项目的readme文档 按照指示步骤进行 部署
-
前置需要 本地需要 由 nodejs版本已经 npm 程序包 Node.js 是一个开源、跨平台的 JavaScript 运行环境,它允许你在服务器端(后端)运行 JavaScript 代码,而不仅限于浏览器。
-
编译代码 进行测试运行
-
在终端运行
-
npm start 命令安装 项目所需要的程序包 (这一步卡了整整一晚上)
-
http://localhost:8000 搜索这个网址
-
然后浏览器会弹出弹窗
-
需要再打开一个终端 同时运行启动一个节点 geth --rpc --rpccorsdomain "http://localhost:8000"将自己的私有链结点 连接在浏览器上
-
此时就可以在浏览器上可视化的看见 自己的私有链节点之间进行的交易 转账以及账户信息了
1.环境准备------安装Node.js
#Node.js 是一套让 JavaScript 脱离浏览器运行在服务器 / 本地终端 的运行时环境,简单来说,它把浏览器里的 JavaScript 引擎(V8)抽出来,搭配了一套处理文件、网络、进程等服务端能力的 API,让你能用 JavaScript 写后端程序、命令行工具,甚至桌面应用。
1.地址:Node.js --- Download Node.js®
2.安装nvm-可以便捷切换node版本(之前删了又下下了又删掉)
2.搭建过程
1.在GitHub上克隆explorer区块链浏览器源代码
地址:GitHub - etherparty/explorer: A lightweight ethereum block explorer
git clone https://github.com/etherparty/explorer.git
持续出现问题 最后选择用本办法下载到本地内容(第二次尝试的时候,通过切换不同的下载源,成功克隆成功)
启动私有链节点
geth --datadir data --networkid 202405 --http --http.api "eth,net,web3,personal,txpool,miner" --http.corsdomain "*" --http.addr "0.0.0.0" --http.port 8545 --nodiscover --port 30301 console 2allow-insecure-unlock
2.启动浏览器
npm start
3.打开explorer网页

在浏览器输入主机地址http://localhost:8000,即可打开
五.基于Metamask和私有链(ganache视同)进行基本账户操作
1.安装ganache
#Ganache 是专为以太坊 / 区块链开发者打造的本地私有测试链工具,简单来说,它能在你电脑上快速搭建一个轻量级、无需联网的以太坊测试环境,让你不用连接公共测试网(如 Sepolia)就能开发、测试智能合约和 DApp,是区块链开发入门的必备工具。
下载后安装
2.点击左侧QUICKSTART,打开即可看到十个测试账户,每个账户100有ETH
2.安装Metamask钱包
1.打开Edge浏览器的扩张,安装Metamask插件
2.根据ganache上的信息在metamask注册测试网
3.在Metamask上注册ganache账户
在Metamask上添加ganache账号的私钥即可注册成功
@
连接ganache
在metamask中设置自定义网络 将ganache 中的端口链接等输入 然后选择一个ganache提供的账户 将提供的私钥用来登录metamask的账户
成功之后看到下面图片中 账号中有100ETH的余额

3.转账
1.点击发送,选择账号,输入金额,最后确认
2.查看交易信息
六.基本的合约发布和去中心化Dapp的部署
1.本地离线部署helloworld合约
1.安装truffle
以管理员的身份打开powershell,输入一下指令
npm install -g truffle
2.初始化truffle
创建项目文件夹并进入
mkdir truffle-hello-world && cd truffle-hello-world
初始化Truffle项目
truffle init
生成如下目录
3.编写HelloWorld.sol合约
在contracts/目录下新建HelloWorld.sol文件
pragma solidity ^0.5.16; // 匹配 solc 0.5.16
contract HelloWorld {
string public message;
constructor(string memory initialMessage) public {
message = initialMessage;
}
function setMessage(string memory newMessage) public {
message = newMessage;
}
function getMessage() public view returns (string memory) {
return message;
}
}
注:代码中的pragma solidity ^0.5.16;一定要与本地solidity编译器版本号一致!!!
4.配置Truffle
修改根目录的truffle-config.js文件
module.exports = {
// Solidity编译器配置(本地编译,无需联网)
compilers: {
solc: {
version: "0.5.16", // 本地编译器版本(Truffle内置,无需联网下载)
settings: {
optimizer: {
enabled: true,
runs: 200
}
}
}
},
// 仅配置本地Ganache网络(无外网)
networks: {
// Truffle内置本地节点(可选,无需额外启动Ganache)
develop: {
host: "127.0.0.1",
port: 9545,
network_id: "*"
}
}
};
注:代码中的pragma solidity ^0.5.16;一定要与本地solidity编译器版本号一致!!!
5.编写部署脚本
在migrations/目录下新建2_deploy_hello_world.js文件
// 本地部署脚本,无外网依赖
const HelloWorld = artifacts.require("HelloWorld");
module.exports = function (deployer) {
// 部署合约,传入构造函数参数"Hello, World! (Offline)"
deployer.deploy(HelloWorld, "Hello, World! (Offline)");
};
6.启动 Truffle 内置本地节点
在项目根目录执行:
truffle develop
7.在内置控制台中部署合约
在truffle(develop)>控制台中执行部署命令
migrate
8.在内置控制台中离线交互合约
部署完成后,直接在truffle(develop)>控制台执行交互命令
a.加载已部署的合约实例
const helloWorld = await HelloWorld.deployed()
b.获取初始化问候语(离线)
await helloWorld.getMessage()
c.修改问候语(仅本地链,无外网)
await helloWorld.setMessage("Hello, Truffle Develop!")
d.验证修改结果
await helloWorld.getMessage()
e.查看合约地址
helloWorld.address
9.离线测试合约
test
去中心化Dapp的部署
2.部署Dapp(部署一个宠物领养的项目 )并且将metamask连接到宠物领养的页面 使每次领养宠物时,从已经登录并且有余额的账户里减去ETH
- 在GitHub上克隆demo-dapp-pet-shop源代码
地址:https://github.com/OffchainLabs/demo-dapp-pet-shop
git clone https://github.com/OffchainLabs/demo-dapp-pet-shop.git
2.编译合约
truffle compile
之后产生build路径下的合约文件
3.打开ganache
4.启动pet-shop
npm run start
连接Metamask钱
5.收养dog
点击Adopt,确认转账交易
收养成功

