Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中的区块链 —— 知识点详解 (23)

Ubuntu 22.04 中的区块链 ------ 知识点详解

1. 区块链概述

1.1 区块链的基本含义

区块链是一种去中心化、不可篡改、按时间顺序链接的数据结构,由多个区块组成,每个区块包含交易数据、时间戳和前一区块的哈希值。其核心特性包括:

  • 去中心化(Decentralization)
  • 透明性(Transparency)
  • 不可篡改(Immutability)
  • 共识机制(如 PoW、PoS)

1.2 区块链的分类

类型 特点 应用场景
公有链(Public) 完全开放,任何人可参与 比特币、以太坊主网
联盟链(Consortium) 多个组织共同维护 企业间协作(如 Hyperledger Fabric)
私有链(Private) 单一组织控制 内部测试、开发环境

本章重点:在 Ubuntu 22.04 上搭建 以太坊私有链(Private Ethereum Chain)


2. 区块链基础环境准备

2.1 系统要求

  • Ubuntu 22.04 LTS(64位)
  • 最低 2GB RAM,建议 4GB+
  • 至少 20GB 可用磁盘空间

2.2 更新系统

bash 复制代码
sudo apt update && sudo apt upgrade -y

3. 下载并安装 Go 语言环境(用于部分区块链工具)

虽然 geth(以太坊客户端)官方提供预编译二进制包,但某些开发场景仍需 Go 环境。

3.1 下载 Go 语言包(以 Go 1.22 为例)

bash 复制代码
# 进入临时目录
cd /tmp

# 下载官方 tar 包(请访问 https://go.dev/dl/ 获取最新链接)
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz

3.2 安装 Go

bash 复制代码
# 删除旧版本(如有)
sudo rm -rf /usr/local/go

# 解压到 /usr/local
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz

3.3 配置环境变量

编辑用户 shell 配置文件(以 Bash 为例):

bash 复制代码
nano ~/.bashrc

在文件末尾添加:

bash 复制代码
# Go 环境变量
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

使配置生效:

bash 复制代码
source ~/.bashrc

3.4 验证安装

bash 复制代码
go version
# 输出示例:go version go1.22.4 linux/amd64

✅ 此时 Go 环境已就绪,可用于构建基于 Go 的区块链项目(如某些智能合约工具链)。


4. 安装以太坊开发平台(Geth)

4.1 添加 Ethereum PPA 安装源

Ubuntu 官方仓库中的 ethereum 包可能较旧,推荐使用官方 PPA:

bash 复制代码
# 安装必要依赖
sudo apt install software-properties-common -y

# 添加 Ethereum PPA
sudo add-apt-repository -y ppa:ethereum/ethereum

# 更新软件包索引
sudo apt update

4.2 安装 Geth(Go-Ethereum 客户端)

bash 复制代码
sudo apt install ethereum -y

4.3 验证安装

bash 复制代码
geth version

输出应包含:

复制代码
Geth Version: 1.13.x
Architecture: amd64
Protocol Versions: [63 64 65 66]
Go Version: go1.21.x
...

geth 是以太坊官方 Go 语言实现的客户端,支持运行节点、挖矿、部署合约等。


5. 部署区块链项目(以太坊私有链)

5.1 创建工作目录

bash 复制代码
mkdir -p ~/eth-private-chain
cd ~/eth-private-chain

5.2 创建创世区块配置文件(genesis.json)

创世区块是区块链的第一个区块,定义了链的初始状态。

json 复制代码
// 文件路径: ~/eth-private-chain/genesis.json
{
  "config": {
    "chainId": 12345,               // 自定义链 ID(避免与主网冲突)
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "berlinBlock": 0,
    "londonBlock": 0,
    "clique": {                     // 使用 Clique 共识(适合私有链)
      "period": 15,                 // 出块间隔(秒)
      "epoch": 30000                // 签名者重置周期
    }
  },
  "nonce": "0x0",
  "timestamp": "0x5e8e7d3a",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", // 初始为空,后续填签名者地址
  "gasLimit": "0x8000000",        // 区块 Gas 上限(约 1.34 亿)
  "difficulty": "0x1",            // PoW 难度(Clique 模式下无效,设为 1)
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {                      // 预分配账户(可选)
    "0x742d35Cc6634C0532925a3b8D4C9db4c2A8C2f95": {
      "balance": "1000000000000000000000000"  // 1,000,000 ETH(单位:wei)
    }
  }
}

🔍 关键参数说明

  • chainId: 必须唯一,防止交易重放攻击。
  • clique: 以太坊私有链推荐使用 Clique 共识算法(权威证明 PoA),无需挖矿。
  • extraData: 在 Clique 中需包含签名者地址(见下文)。

5.3 创建区块链账户(即"矿工"或"签名者")

bash 复制代码
# 启动 geth 控制台(不连接网络)
geth --datadir ./data account new

系统将提示输入密码(例如:mypassword123),并输出账户地址,例如:

复制代码
Address: {742d35cc6634c0532925a3b8d4c9db4c2a8c2f95}

⚠️ 请妥善保存该地址和密码!私钥存储在 ./data/keystore/ 目录下。

5.4 修改 genesis.json 的 extraData(Clique 模式必需)

Clique 要求 extraData 格式为:

复制代码
0x0000000000000000000000000000000000000000000000000000000000000000 + 签名者地址(32字节对齐) + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

假设签名者地址为 742d35cc6634c0532925a3b8d4c9db4c2a8c2f95,则:

json 复制代码
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000742d35cc6634c0532925a3b8d4c9db4c2a8c2f95000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

💡 可使用 Python 或在线工具生成合规 extraData。

5.5 初始化区块链

bash 复制代码
geth --datadir ./data init genesis.json

成功输出:

复制代码
Successfully wrote genesis state

6. 运行与维护区块链项目

6.1 启动私有链节点

bash 复制代码
geth \
  --datadir ./data \
  --networkid 12345 \
  --http \
  --http.addr "0.0.0.0" \
  --http.port 8545 \
  --http.api "eth,net,web3,personal,admin" \
  --allow-insecure-unlock \
  --nodiscover \
  --unlock "0x742d35Cc6634C0532925a3b8D4C9db4c2A8C2f95" \
  --password <(echo "mypassword123")
参数说明:
  • --http: 启用 HTTP JSON-RPC 接口
  • --http.addr "0.0.0.0": 允许外部访问(生产环境应限制 IP)
  • --http.api: 开放的 API 模块
  • --unlock: 启动时解锁账户(用于签名区块)
  • --password: 提供密码(此处用进程替换避免明文)

✅ 节点启动后,Clique 共识将自动出块(每 15 秒)。

6.2 启动交互式控制台(JavaScript Console)

另开终端,连接到正在运行的节点:

bash 复制代码
geth attach http://127.0.0.1:8545

进入交互界面后,可执行 JavaScript 命令:

javascript 复制代码
// 查看账户
eth.accounts

// 查看余额(单位:wei)
eth.getBalance(eth.accounts[0])

// 查看区块号
eth.blockNumber

// 查看节点信息
admin.nodeInfo

输入 exit 退出。


7. 区块链平台监控

7.1 进程监测

bash 复制代码
# 查看 geth 进程
ps aux | grep geth

# 使用 systemctl 管理(可选)
# 可创建 systemd 服务实现开机自启

7.2 日志监测

日志默认输出到终端。若以后台方式运行,可重定向日志:

bash 复制代码
geth ... >> geth.log 2>&1 &

实时查看日志:

bash 复制代码
tail -f geth.log

典型日志内容:

复制代码
INFO [06-01|10:00:15.123] 🔨 mined potential block ... number=123 ...
INFO [06-01|10:00:30.456] Commit new mining work ...

8. 代表性区块链应用实例

8.1 部署简单智能合约(Solidity)

  1. 安装 Solidity 编译器:

    bash 复制代码
    sudo snap install solc
  2. 编写合约 SimpleStorage.sol

    solidity 复制代码
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    
    contract SimpleStorage {
        uint256 storedData;
    
        function set(uint256 x) public {
            storedData = x;
        }
    
        function get() public view returns (uint256) {
            return storedData;
        }
    }
  3. 在 Remix 或本地编译获取 ABI 和 bytecode,通过 Web3.js 或 geth console 部署。

由于篇幅限制,智能合约部署细节略,但私有链已具备部署条件。


9. 本章小结

本章完整演示了在 Ubuntu 22.04 上从零搭建 以太坊私有区块链 的全过程,包括:

  • Go 语言环境配置(可选)
  • 通过 PPA 安装 geth
  • 编写符合 Clique 共识的 genesis.json
  • 创建账户、初始化链、启动节点
  • 使用 geth attach 进行交互管理
  • 监控进程与日志

所有步骤均提供可直接运行的命令和带注释的配置文件,适用于教学、开发测试及企业内部落地私有链场景。

📌 安全提醒 :私有链暴露 RPC 接口(如 8545)存在风险,生产环境务必配合防火墙(ufw)和身份验证机制。

相关推荐
kida_yuan3 天前
【以太来袭】4. Geth 原理与解析
区块链
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
欧云服务器4 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI4 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs