搭建以太坊私有链:以太坊客户端Geth详细介绍与搭建教程

  • Revel.eth
  • 发布于 2024-09-22 21:43
  • 阅读 2789

本文详细介绍了以太坊客户端的概念和类型,重点讲解了Geth这一官方执行客户端的使用及其HTTP-RPC服务器的。同时,文章阐述了私有链Geth的搭建方法,通过具体步骤指导如何在本地创建一个以太坊私有链Geth开发环境,以便于智能合约的开发和测试。

一、以太坊客户端

1.介绍

以太坊客户端是运行在以太坊网络上的软件程序,用于实现以下核心功能:

  1. 区块链同步

    • 下载并维护完整的以太坊区块链数据,实时更新最新的区块和交易信息
  2. 交易验证

    • 检查交易的有效性(签名、余额等),确保交易符合智能合约逻辑
  3. 共识参与

    • 作为节点参与共识机制(PoS),验证新区块的生成和网络状态
  4. 通信功能

    • 与其他节点建立P2P连接,传播交易和区块信息
  5. API服务

    • 提供JSON-RPC接口与外部交互,支持DApp开发和钱包集成

      2.客户端角色类型

2022 年以太坊合并(The Merge)后,网络从 PoW 转向 PoS,客户端分为两类:

  1. 共识客户端: 功能:处理权益证明(PoS)共识机制,验证区块合法性,维护信标链。 职责:管理验证者、生成区块提议、参与投票确认链的安全性。
    • Lodestar(TypeScript实现)
    • Prysm(Go实现)
    • Teku(Java实现)
  2. 执行客户端: 功能:处理交易执行、状态转换、智能合约运行。 职责:验证交易有效性,维护当前链状态,与共识客户端交互。
    • Geth(Go实现,最常用)
    • Nethermind(C#实现,高性能)
    • Besu(Java实现,支持隐私交易)

二、Geth介绍

官方文档:https://geth.ethereum.org/

geth 是以太坊的执行客户端,其全称是go-ethereum,它是使用 Go 语言编写的一个软件,允许用户与以太坊区块链进行交互、运行以太坊节点、发送交易、部署智能合约以及执行智能合约代码。也可作为一个 HTTP-RPC 服务器对外提供 JSON-RPC 接口。

它是由以太坊的官方开发团队开发和维护的,但也有许多社区贡献者参与其开发。

以下是 geth 的几个关键特点:

  1. 智能合约执行geth 支持智能合约的创建和部署,允许开发者在其上运行自定义的智能合约。
  2. RPC接口:提供了一个JSON-RPC接口,允许开发人员使用各种编程语言与以太坊区块链进行交互。
  3. 命令行界面geth 通过命令行界面(CLI)进行操作,这使得无需图形用户界面即可进行交互。
  4. 可扩展性:它支持插件和模块,允许开发者增加新的功能或修改现有功能。
  5. 跨平台geth 可以在多种操作系统上运行,包括Windows、macOS和Linux。
  6. EVM兼容性:作为以太坊的客户端,geth 运行在以太坊虚拟机(EVM)上,这使得它能够支持任何符合EVM标准的智能合约。

geth 常用于以太坊的开发、测试和部署,也被许多企业用于构建基于以太坊的应用程序和平台。由于其开源特性和强大的社区支持,geth 成为了最受欢迎的以太坊客户端之一。

三、HTTP-RPC服务器

1.介绍

HTTP-RPC是一种基于HTTP协议的远程过程调用(RPC)机制。在HTTP-RPC服务器中,服务器提供了一系列可以通过HTTP请求调用的远程过程(或称为服务)。以下是HTTP-RPC服务器的一些基本特点:

  1. 简单性:HTTP-RPC旨在提供一个简单、直观的模型来执行远程方法调用。它通常使用标准的HTTP方法(如GET和POST)来发送请求。
  2. 无状态:HTTP协议本身就是无状态的,因此HTTP-RPC服务器也是无状态的。每个请求都是独立的,服务器不会保存任何客户端状态信息。
  3. 平台无关性:由于基于HTTP,HTTP-RPC服务器可以跨不同的平台和编程语言使用。
  4. 使用JSON或XML:HTTP-RPC服务器通常使用JSON或XML格式来交换数据。这些格式易于阅读和编写,同时也易于机器解析和生成。
  5. URL映射:服务方法通常通过URL路径进行映射。例如,一个获取用户信息的服务可能映射到/userService/getUser
  6. 参数传递:服务调用的参数可以通过HTTP请求的查询字符串、请求体(对于POST请求)或URL路径参数来传递。
  7. 返回结果:服务调用的结果通常在HTTP响应体中返回,使用JSON或XML格式。

2.JSON-RPC

JSON-RPC是一种轻量级的远程过程调用(RPC)协议,它定义了几个数据结构及其处理规则。它使用JSON格式进行数据编码,这使得它在Web应用中非常方便,因为JSON是一种广泛使用的轻量级数据交换格式。

3.远程过程调用的步骤

  1. 客户端构造一个HTTP请求,指定要调用的服务和方法,以及必要的参数。
  2. 客户端发送请求到服务器。
  3. 服务器解析请求,执行相应的服务方法。
  4. 服务器将执行结果封装成HTTP响应,发送回客户端。
  5. 客户端解析响应,获取结果。

4.区块链作为HTTP-RPC服务器

为什么区块链可以作为HTTP-RPC服务器提供JSON-RPC接口?

  1. 互操作性:通过提供JSON-RPC接口,区块链系统能够与各种不同的客户端和应用程序轻松集成,无论它们是用什么编程语言编写的。
  2. 易于使用:JSON-RPC接口允许开发者通过简单的HTTP请求与区块链交互,这比直接与区块链的底层协议交互要简单得多。
  3. 标准化:JSON-RPC是一个标准的协议,开发者可以依据这个标准来编写客户端代码,而不必担心区块链底层的复杂性。
  4. 灵活性:开发者可以通过JSON-RPC接口执行各种操作,如查询区块链状态、发送交易、读取数据等。
  5. 安全性:通过HTTP协议,可以结合SSL/TLS等技术来确保数据传输的安全性。

四、搭建Geth私有链教程

在以太坊的公有链上部署智能合约、发起交易需要花费以太币。因此可以在本机搭建一套以太坊私有链,因为与公有链没关系,既不用同步公有链庞大的数据,也不用花钱购买以太币,很好地满足了智能合约开发和测试的要求,开发好的智能合约也可以很容易地切换接口部署到以太坊公有链上。并且还能对以太坊协议进行研究。

为此,Geth 专门提供了 --dev 参数,可以在“开发者模式”下启动 Geth。这将创建一个单节点以太坊测试网络,不与任何外部对等节点连接。

搭建步骤:

①去官网下载最新稳定版的geth-64位

image.png

温馨提示:建议下载带有tools的,这样可以更好的帮助我们开发

在以太坊客户端Geth的版本1.13.14中,常见的一些工具(tools)包括:

  1. geth:作为以太坊客户端的主要命令,用于启动以太坊节点,连接到以太坊网络,并与网络中的其他节点进行通信。通过geth可以执行各种操作,如创建账户、发送交易、部署合约等。

  2. geth attach:用于连接到正在运行的Geth节点的控制台,允许用户在控制台中执行以太坊相关的命令和操作。通过geth attach可以与节点进行交互,查询状态、调试合约等。

  3. puppeth:一个辅助工具,用于配置和管理私有以太坊网络。通过puppeth可以创建新的以太坊网络、添加节点、配置权限等。

  4. bootnode:用于启动和管理引导节点(bootnode),帮助其他节点在网络中发现和连接到彼此。

  5. abigen:用于生成以太坊智能合约的Go语言绑定。通过abigen可以将Solidity智能合约编译为Go语言代码,方便在Go语言中调用和部署合约。

  6. ethkey:用于生成和管理以太坊账户的工具,包括创建新账户、导入私钥、导出账户等功能。

  7. evm:一个用于模拟以太坊虚拟机(Ethereum Virtual Machine,EVM)的工具,用于调试和测试智能合约的执行。

这些工具在以太坊开发和操作中扮演着重要的角色,帮助用户管理节点、创建账户、部署合约、进行交易等操作。通过这些工具,用户可以更方便地与以太坊网络进行交互,进行智能合约开发、测试和部署。

②下载完毕后进行解压。解压后会得到很多.exe的可执行文件

⑤进入到这些.exe的可执行文件的目录下,创建password.txt文档,在文档里面输入一个密码

这个密码很重要,将私钥导入钱包的时候需要用到这个密码

image.png

⑥在含有geth.exe的目录下使用cmd进入命令行

⑦输入以下指令来启动开发模式下的以太坊私链

geth --datadir "./data" --dev --dev.period 12 --networkid 10 --http --http.port 8545 --http.addr 127.0.0.1 --http.corsdomain "*" --http.api eth,web3,net  --password password.txt 
  • geth:这是执行 Geth 客户端的命令。

  • --datadir :这个选项指定了数据目录的路径,Geth 将在这个目录中存储区块链数据和相关文件。

  • --dev:--dev.period 12 来创建实际的区块创建频率,而不是仅在交易处于待处理状态时创建区块。遵循本教程所需的其他配置选项。这里选的是12秒

  • --networkid 10:指定私有链的网络标识符,这个值用于在不同私有链之间进行区分。

  • --http:启用 HTTP-RPC 通信接口,允许通过 HTTP 请求与 Geth 进行交互。

  • --http.port 8545:指定 HTTP-RPC 服务的端口号,一般是 8545。

  • --http.addr 127.0.0.1:设置 HTTP-RPC 服务监听的地址,127.0.0.1表示允许来自本地的连接。

    • 如果是在服务器上,可以设置为0.0.0.0这样允许任何地址连接
  • --http.corsdomain "*":配置允许跨域请求的域名,设置为 "*" 表示允许任何域名进行跨域请求。

  • --http.api eth,web3,net:指定启用的 HTTP-RPC 接口,这里列出了一些常用的接口,包括api、以太坊操作、网络信息、Web3 功能。

  • --password:指定自动创建的私钥JSON文件的密码

image.png

点赞 1
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

2 条评论

请先 登录 后评论
Revel.eth
Revel.eth
0x4E7a...F3f3
生活如区块链,层层叠加,转瞬即逝