问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

区块链实战:手把手教你搭建私有链网络

创作时间:
作者:
@小白创作中心

区块链实战:手把手教你搭建私有链网络

引用
CSDN
1.
https://blog.csdn.net/m0_38141444/article/details/143788474

区块链技术作为分布式账本技术的核心,其应用场景日益广泛。本文将手把手教你搭建一个私有区块链网络,通过实践加深对区块链技术的理解。

搭建一个区块链私有链网络是一个非常有趣且实用的练习。私有链(Private Blockchain)通常用于企业内部数据管理、测试和开发环境中,具备较高的隐私性和控制性。

在本教程中,我们将使用Go-Ethereum (Geth)来搭建一个私有以太坊链,并展示如何启动一个基础的区块链网络,连接多个节点,进行简单的交易。

环境要求:

  • 操作系统:Linux/MacOS/Windows(本文基于Linux环境)
  • 开发工具:Go-Ethereum(Geth)
  • 编程语言:Golang(用于与区块链交互)

一、准备工作

首先,需要确保以下工具已安装:

  1. Go-Ethereum (Geth):Go-Ethereum是以太坊的官方客户端,支持搭建私有链、部署智能合约等功能。

安装方式(以Linux为例):

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install geth
  1. Node.js 和 npm(用于前端开发,如果需要交互的Web界面时会用到)
  2. 一个文本编辑器(如 VSCode 或 Sublime Text)

二、创建私有链

  1. 创建创世区块配置文件

以太坊私有链的配置需要一个创世区块(Genesis Block)。创世区块定义了区块链的起始状态,包括网络ID、区块奖励、链的难度等。

在你的本地机器上创建一个目录来存放区块链配置文件:

mkdir myPrivateChain
cd myPrivateChain

然后创建一个名为 genesis.json 的文件,作为创世区块的配置。一个典型的创世区块配置如下:

{
  "config": {
    "chainId": 2021,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "difficulty": "0x20000",
  "gasLimit": "0x8000000"
}
  • chainId:这是链的唯一标识符,我们在这里设为 2021
  • alloc:可以在这里指定一些初始账户余额。
  • difficulty:设定挖矿的难度,这里设置一个低难度,便于快速挖矿。
  • gasLimit:设置每个区块的最大Gas限制。
  1. 使用 Geth 初始化创世区块

使用 geth 命令来初始化你的私有链:

geth init genesis.json

这条命令会初始化你的私有链,并根据 genesis.json 中的设置生成区块链的状态。

  1. 启动私有链节点

接下来,我们使用 geth 启动一个私有链节点。可以通过以下命令启动节点:

geth --networkid 2021 --http --http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --datadir ./data --nodiscover console

解释:

  • --networkid 2021:指定网络ID,必须与创世区块中的ID一致。
  • --http:启用HTTP-RPC接口,允许外部应用与节点进行交互。
  • --http.addr 0.0.0.0:监听所有IP地址上的请求(可以设置为127.0.0.1限制仅本机访问)。
  • --http.port 8545:指定HTTP-RPC端口,8545是默认端口。
  • --http.corsdomain "*":允许所有的跨域请求。
  • --datadir ./data:指定数据目录。
  • --nodiscover:禁用节点自动发现功能,因为我们要搭建的是私有链,网络中没有节点自动发现。

启动后,您将进入 Geth 的交互式控制台。

  1. 创建帐户

在 Geth 控制台中,创建一个帐户来管理你的以太币(ETH):

personal.newAccount("yourStrongPassword")

记住生成的密码,这个密码将用于解锁帐户。

  1. 启动挖矿

启动挖矿以生成区块。由于难度较低,挖矿速度会非常快:

miner.start(1) // 启动一个矿工

这里 1 是矿工的数量,即启动一个矿工。矿工将自动开始挖掘新区块。

  1. 连接钱包账户

为了进行交易,你可以使用 Geth 创建一个账户,并在账户之间转账。你可以在控制台解锁账户:

personal.unlockAccount(eth.accounts[0], "yourStrongPassword", 15000)

这将解锁第一个账户并使其有效。账户解锁后,你可以开始进行转账操作。

三、添加更多节点

  1. 创建第二个节点的 genesis.json 配置

如果你想添加第二个节点,可以复制并编辑原始的 genesis.json 文件,保持一致的 chainId

  1. 启动第二个节点

在第二个节点的机器上运行以下命令:

geth --networkid 2021 --datadir ./data --bootnodes "enode://<bootnode-enode-id>" --http --http.addr 0.0.0.0 --http.port 8546 --http.corsdomain "*" console

这里的 --bootnodes 参数指的是第一个节点的 enode 地址。你可以通过第一个节点的控制台获取该地址:

admin.nodeInfo.enode
  1. 连接两个节点

如果两个节点已成功启动,并且能相互发现,则它们会开始同步彼此的区块。你可以在任一节点的控制台中输入以下命令来查看节点是否已连接:

admin.peers

四、在私有链上进行交易

一旦私有链节点启动并且两个节点已连接,你可以通过以下步骤在区块链上进行交易:

  1. 解锁两个账户:
personal.unlockAccount(eth.accounts[0], "yourStrongPassword", 15000)
personal.unlockAccount(eth.accounts[1], "yourStrongPassword", 15000)
  1. 转账:假设 eth.accounts[0] 有足够的以太币,且你想将一定数量的ETH转账到 eth.accounts[1]
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1, "ether")})
  1. 查看交易:
eth.getTransactionReceipt("yourTransactionHash")
  1. 查看账户余额:
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")

五、使用 Web3.js 进行私有链交互

私有链搭建好之后,你可以通过Web3.js库与其进行交互,前端应用可以通过 HTTP RPC 接口与区块链进行交互。

  1. 安装 Web3.js
npm install web3
  1. 配置 Web3.js
const Web3 = require('web3');
const web3 = new Web3('http://localhost:8545');
// 获取账户余额
web3.eth.getBalance('0x...').then(console.log);
  1. 使用 Web3.js 创建和发送交易
web3.eth.sendTransaction({
    from: '0x...',
    to: '0x...',
    value: web3.utils.toWei('1', 'ether')
});

六、总结

通过本教程,你已经成功搭建了一个私有以太坊链。搭建私有链可以帮助你更好地理解区块链的工作原理,并能在没有矿工参与的环境下测试和部署智能合约。

关键点总结:

  1. 创世区块配置:定义私有链的起始状态,包括 chainIddifficulty 等参数。
  2. 启动节点:通过 geth 启动节点,开启区块链网络。
  3. 多节点连接:通过设置 bootnodes 启动多个节点并使它们连接。
  4. Web3.js 交互:通过 HTTP-RPC 接口使用 JavaScript 进行交易和查询。

通过这个私有链,你可以进行各种测试,如交易验证、智能合约部署等,模拟真实区块链网络的工作方式。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号