区块链私有链实习心得

#区块链前景

关于区块链私有链(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

地址:Downloads | go-ethereum

查看版本

三.单节点的精通和交易挖矿执行

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中查看

  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版本(之前删了又下下了又删掉)

地址:开始 下载nvm - nvm中文官网

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,是区块链开发入门的必备工具。

  1. 地址:甘纳许------松露组曲 --- Ganache - Truffle Suite

下载后安装

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

  1. 在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,确认转账交易

收养成功

相关推荐
Light603 小时前
智链护航,数档永存:基于领码SPARK平台构建下一代AI+区块链档案系统解决方案
人工智能·spark·区块链
DICOM医学影像18 小时前
3. go语言从零实现以太坊客户端 - 查询合约中账户余额
golang·区块链·智能合约·solidity·以太坊·web3.0
WZgold1411 天前
黄金再创新高!2026 年金价走势预测
大数据·人工智能·经验分享·区块链
DICOM医学影像1 天前
4. go语言从零实现以太坊客户端 - 区块链转账
golang·区块链·以太坊·web3.0·geth
Tancenter1 天前
区块链关键技术
区块链·哈希算法·数字签名
CryptoPP1 天前
对接API库 获取印度股票历史数据
金融·数据挖掘·数据分析·区块链
CryptoRzz2 天前
印度尼西亚(IDX)股票数据对接开发
java·后端·websocket·web3·区块链
DICOM医学影像2 天前
2. go语言从零实现以太坊客户端-查询区块链账户余额
开发语言·golang·区块链·以太坊·web3.0·hardhat
狙击主力投资工具2 天前
龙头战法的理解
区块链