1. 背景
增加同步节点(Full Nodes)对于区块链网络,尤其是基于 PoA(Proof of Authority)Clique 共识机制的私链,具有重要意义。以下是增加同步节点的主要原因及其优势:
- 提升网络的去中心化和容错性
- 分散负载:同步节点分担了数据传播和查询的负载,减轻验证者节点的压力。
- 增强容错性:如果某些验证者节点或现有同步节点意外下线,其他同步节点可以继续为用户提供访问链数据的能力,提升网络的可靠性。
- 提供链数据的冗余备份
- 同步节点存储了完整的区块链数据,这为整个网络提供了数据冗余。如果某些节点丢失数据或宕机,同步节点可作为备份来源。
- 在私链中,某些业务场景可能需要随时获取历史交易或账户状态,同步节点确保了这些需求能被满足。
- 支持高效的链上数据访问
- 同步节点通常被用作数据提供者(如用于查询账户余额、交易记录等)。通过增加同步节点,可以支持更多的客户端查询请求而不会影响验证者节点的性能。
- 对于应用程序(如 DApps),同步节点可以作为 RPC(Remote Procedure Call)服务的后端支持,处理用户的链上数据查询。
- 提高网络扩展性
- 随着私链的使用范围扩大,更多的用户和应用程序可能需要访问链上的数据。
- 增加同步节点可以缓解单个节点资源不足的问题,从而提升网络扩展能力,支持更多的并发查询和数据广播。
- 提供独立的链上数据访问
- 某些组织或用户可能希望独立访问区块链数据,而不依赖第三方的节点。这些节点可以选择运行自己的同步节点。
- 在某些监管或隐私敏感的环境下,运行独立的同步节点可以保证数据访问的透明性和完整性。
- 降低验证者节点的压力:验证者节点的主要任务是出块和验证交易。同步节点可以帮助分担其他非关键任务,如数据广播、交易传播等,确保验证者节点专注于核心共识工作。
- 增强安全性
- 在 PoA 私链中,增加同步节点可以提高攻击者完全控制网络的难度。
- 如果恶意节点试图劫持网络,更多的同步节点意味着需要更大的资源投入才能同时控制足够多的节点。
- 支持离线开发和分析
- 同步节点可以作为开发者测试智能合约或分析链上数据的工具。
- 通过本地同步节点,开发者可以快速访问链上数据,而不需要依赖远程节点。
2. 如何新增步骤
2.1 前置条件
- 已经运行的PoA Clique私链网络
- 网络环境:确保现有网络的创世文件(
genesis.json
)、网络ID和端口等配置可用 - 全新节点,用于同步数据
2.2 获取现有网络信息
以 geth,为例:
# 获取网络ID
> admin.nodeInfo.protocols.eth.network
12345
# 获取验证者的 enode地址
> admin.nodeInfo.enode
"enode://<public_key>@<ip>:<port>"
2.3 配置新节点
以 geth,为例:
# 创建新的账户
$ geth account new --datadir /path/to/new/datadir
INFO [11-19|01:41:20.353] Maximum peer count ETH=50 total=50
INFO [11-19|01:41:20.354] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
Your new account is locked with a password. Please give a password. Do not forget this password.
Password:
Repeat password:
Your new key was generated
Public address of the key: 0xe23C2c6e7f785e74EB7AAeF96455B78C53adb2E3
Path of the secret key file: /root/.ethereum/keystore/UTC--2024-11-19T01-41-27.442932800Z--e23c2c6e7f785e74eb7aaef96455b78c53adb2e3
- You can share your public address with anyone. Others need it to interact with you.
- You must NEVER share the secret key with anyone! The key controls access to your funds!
- You must BACKUP your key file! Without the key, it's impossible to access account funds!
- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!
2.4 启动新节点
# 启动新节点
$ geth --datadir /path/to/new/datadir --networkid 12345 --http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3,admin" --http.corsdomain "*" --unlock 0xe23c2c6e7f785e74eb7aaef96455b78c53adb2e3 --password /path/to/new/datadir/password.txt --allow-insecure-unlock --syncmode full --bootnodes "enode://<public_key>@<ip>:<port>"
3. 扩展
在 Geth(Go-Ethereum)中,--bootnodes
参数用于指定网络中的引导节点(Bootnodes)。引导节点的主要功能是帮助新加入的节点发现并连接到其他节点,从而快速加入网络。以下是详细说明:
3.1 什么是 Bootnode?
Bootnode 是区块链网络中一个特殊的节点,其主要功能是充当网络的入口点。新节点通过 Bootnode 获取已知的其他节点列表,从而建立与网络的对等连接。
- Bootnode 通常运行一个特殊的服务,用于记录和提供其他节点的
enode
地址。 - 它不一定存储区块链数据,也不需要参与验证或出块。
3.2 --bootnodes
参数的作用
--bootnodes
参数用于告诉 Geth 节点启动时连接的引导节点列表。这些引导节点的作用是:
- 提供其他节点的
enode
信息。 - 帮助新节点加入区块链网络。
3.3 参数格式
--bootnodes
的格式为逗号分隔的 enode
地址列表:
--bootnodes enode://<public_key1>@<ip1>:<port1>,enode://<public_key2>@<ip2>:<port2>
重要字段说明:
public_key
:Bootnode 的公钥,用于唯一标识节点。ip
:Bootnode 的 IP 地址或域名。port
:Bootnode 使用的监听端口(通常为30303
)。
3.4 使用场景
私链/测试网络:
在 PoA 或其他私链环境中,Bootnode 常用来引导新节点快速发现其他对等节点。部署私链时,需要:
- 设置一个或多个稳定运行的 Bootnode。
- 将这些 Bootnode 的地址配置到其他节点中。
公链
在公链中,官方或社区会提供一组公开的 Bootnode(例如 Ethereum 主网的 Bootnode)。新节点只需指定这些 Bootnode 地址即可加入网络。
3.5 注意事项
- Bootnode 的可靠性:Bootnode 应该是一个高可用节点,通常部署在公网 IP 或稳定的服务器上。
- 多个 Bootnode:推荐配置多个 Bootnode 地址,以防单个节点宕机影响新节点的加入。
static-nodes.json
的替代:如果网络较小且节点稳定,也可以通过static-nodes.json
文件直接配置固定的对等节点,而无需依赖 Bootnode。- 无需长期连接:节点只在启动时查询 Bootnode 地址以发现对等节点,连接建立后,Bootnode 不再是必须的。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
—