使用 Geth 构建你自己的私有以太坊网络 - 手把手教程
- 原文链接:https://ferdyhape.medium.com/blockchain-for-beginners-build-your-own-private-ethereum-network-with-geth-step-by-step-311342370fec
- 译者:AI翻译官,校对:翻译小组
- 本文永久链接:learnblockchain.cn/article…
描述
准备好超越开发工具了吗?在我分享了如何使用 Ganache 和 Remix 部署智能合约之后,这次我们将使用 Geth 构建一个私有以太坊网络!这份实用指南将帮助你入门,非常适合想要尝试区块链技术的初学者。
使用设备的信息
在本文中,我使用的是 Ubuntu 22.04.3 LTS 作为我的操作系统,如果你使用其他 Linux 发行版,或使用 Windows 或 Mac,我认为没有问题,但你需要调整安装预备条件
预备条件
- Go 语言(在本文中,我使用的是 Go 版本 1.22.0)
- Go Ethereum(在本文中,我使用的是 Geth 版本 1.13.14-stable)
- VSCode(这是可选的,你可以使用你喜欢的代码编辑器)
步骤如下:
创建项目文件夹
在第一步中,我们将创建一个项目文件夹,用于创建区块链网络
mkdir geth-tutorial
使用命令行导航到你的项目文件夹。
cd geth-tutorial
创建节点
在这一步中,我们将在区块链网络中为每个节点设置单独的文件夹。让我们创建名为“node1”和“node2”的文件夹来表示我们的网络节点。
mkdir node1 node2
管理节点信息
在创建每个 node1 和 node2 文件夹后,我们将在项目文件夹的根目录中创建一个 info.txt 文件,以存储 node1 和 node2 的账户地址和密码等信息。这将帮助我们跟踪与节点相关的重要细节。
touch info.txt
打开代码编辑器(可选,便于查看)
在这一步中,我使用 VS Code
code .
为 Node1 和 Node2 创建账户
接下来,我们将为 node1 和 node2 创建账户。我们将为每个节点文件夹打开一个单独的终端,并运行如下命令
geth --datadir "./data" account new
验证账户创建
为了确保 node1 和 node2 的账户已成功创建,我们将检查每个节点数据目录中的 keystore 文件夹。
- 打开 node1 和 node2 数据目录中的
keystore
文件夹。 - 验证每个
keystore
文件夹中是否存在新账户文件。
通过确认账户文件的存在,我们可以确保 node1 和 node2 的账户已成功创建。
保存账户信息
对于之前创建的账户,我们将 node1 和 node2 创建的账户的公钥地址和密码保存到 info.txt
文件中。
- 打开位于项目文件夹根目录的
info.txt
文件。 - 添加为 node1 和 node2 创建的每个账户的公钥地址和密码。
创建配置文件
在这一步中,账户已创建,接下来我们将在项目根目录中创建一个名为“privateblock.json”的文件进行配置。然后,我们将复制并粘贴下面提供的脚本到“privateblock.json”文件中。
- 在项目的根目录中创建一个名为“privateblock.json”的文件。
- 将以下脚本复制并粘贴到“privateblock.json”中:
{
"config": {
"chainId": 1234567,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "8000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000{ INITIAL_SIGNER_ADDRESS }0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"{ FIRST_NODE_ADDRESS }": {
"balance": "3000000000000000000000000000000000000"
},
"{ SECOND_NODE_ADDRESS }": {
"balance": "3000000000000000000000000000000000000"
}
}
}
3. 将“{ FIRST_NODE_ADDRESS }”替换为每个节点账户的公钥地址,并将“{ INITIAL_SIGNER_ADDRESS }”更改为其中一个节点的公钥地址(去掉前导的“0x”字符)。
例如,这些是我为每个节点创建的账户
这是我在 privateblock.json 中的脚本
{
"config": {
"chainId": 1234567,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "8000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000A43ffF7C765A30f797C7F0108291958faA30Fa170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"A43ffF7C765A30f797C7F0108291958faA30Fa17": {
"balance": "3000000000000000000000000000000000000"
},
"5b5cD226194D0EDe2652102D52Fc0A9ed0F38C0D": {
"balance": "3000000000000000000000000000000000000"
}
}
}
初始化节点
账户和配置已创建,现在是时候使用以下命令初始化每个节点:
geth --datadir ./data init ../privateblock.json
设置 Bootnode
在这一步中,我们将在项目目录的根目录中创建一个名为“bnode”的文件夹来设置 bootnode。bootnode 充当以太坊网络中节点发现的中心枢纽。它生成唯一的 enode URL 并促进新节点的连接,实现网络同步和去中心化通信。
在项目的根目录中创建一个名为“bnode”的文件夹。
mkdir bnode
cd bnode
生成 Bootnode 密钥并运行 Bootnode
接下来,我们将生成 bootnode 密钥并运行 bootnode。
- 在“bnode”文件夹中生成 bootnode 密钥:
bootnode -genkey boot.key
2. 生成密钥后,使用以下命令运行 bootnode:
bootnode -nodekey boot.key -verbosity 7 -addr "127.0.0.1:30301"
存储 Bootnode Enode
为了方便起见,我们将在项目根目录的“info.txt”文件中存储 bootnode 的 enode 信息。
- 打开位于项目目录根目录的“info.txt”文件。
- 添加引导节点的 enode 信息:
存储密码
在运行每个节点之前,我们将在 node1 和 node2 文件夹中创建一个名为“password.txt”的文件,并在相应的文件中输入每个节点的密码。
启动签名账户(Node1)
好了,现在我们将运行脚本以使用 node1 启动一个签名账户。我们将使用适当的参数自定义脚本,例如 enode、网络 ID(chainId)、签名节点地址、密码和签名地址。
geth --datadir "./data" --port 30304 --bootnodes enode://{ YOUR_VALUE } --authrpc.port 8547 --ipcdisable --allow-insecure-unlock --http --http.corsdomain="https://remix.ethereum.org" --http.api web3,eth,debug,personal,net --networkid { NETWORK_ID } --unlock { ADDRESS_NODE1 } --password { PASSWORD_FILE_NAME_EXTENSION } --mine --miner.etherbase= { SIGNER_ADDRESS }
例如,这是我的脚本
geth - datadir "./data" - port 30304 - bootnodes enode://7c8ae5080a4e655b82868853abf24164dc62a13f16118ae0e9a6d6446fa5013e7e7809912474057836628804837380549d680b29f26b350c1350dad385e2b538@127.0.0.1:0?discport=30301 - authrpc.port 8547 - ipcdisable - allow-insecure-unlock - http - http.corsdomain="https://remix.ethereum.org" - http.api web3,eth,debug,personal,net - networkid 1234567 - unlock 0xA43ffF7C765A30f797C7F0108291958faA30Fa17 - password password.txt - mine - miner.etherbase=0xA43ffF7C765A30f797C7F0108291958faA30Fa17
注意:
要设置 CORS 允许“http://127.0.0.1:8000”,请将“http://127.0.0.1:8000”添加到“ — http.corsdomain”
例如:
geth --datadir "./data" --port 30304 --bootnodes enode://7c8ae5080a4e655b82868853abf24164dc62a13f16118ae0e9a6d6446fa5013e7e7809912474057836628804837380549d680b29f26b350c1350dad385e2b538@127.0.0.1:0?discport=30301 --authrpc.port 8547 --ipcdisable --allow-insecure-unlock --http --http.corsdomain="https://remix.ethereum.org, http://127.0.0.1:8000" --http.api web3,eth,debug,personal,net --networkid 1234567 --unlock 0xA43ffF7C765A30f797C7F0108291958faA30Fa17 --password password.txt --mine --miner.etherbase=0xA43ffF7C765A30f797C7F0108291958faA30Fa17
运行其他节点
那么,如何运行签名节点以外的节点呢?我们可以使用下面的脚本命令运行签名节点(node1)以外的节点
geth --datadir "./data" --port 30306 --bootnodes enode://{ YOUR_VALUE } -authrpc.port 8546 --networkid { NETWORK_ID } --unlock { ADDRESS_NODE2 } --password { PASSWORD_FILE_WITH_EXTENSION }
这是我运行 node2 的脚本示例
geth --datadir "./data" --port 30306 --bootnodes enode://7c8ae5080a4e655b82868853abf24164dc62a13f16118ae0e9a6d6446fa5013e7e7809912474057836628804837380549d680b29f26b350c1350dad385e2b538@127.0.0.1:0?discport=30301 -authrpc.port 8546 --networkid 1234567 --unlock 0x5b5cD226194D0EDe2652102D52Fc0A9ed0F38C0D --password password.txt
部署智能合约
区块链网络已创建,要检查部署智能合约,请尝试在 REMIX IDE 中使用提供者“custom — external http provider”进行部署,主机和端口为http://127.0.0.1:8545
我是 AI 翻译官,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。