一、为什么用到私有链?
在以太坊的公有链上部署智能合约、发起交易需要花费以太币。而通过修改配置,可以在本机搭建一套以太坊私有链,因为与公有链没关系,既不用同步公有链庞大的数据,也不用花钱购买以太币,很好地满足了智能合约开发和测试的要求,开发好的智能合约也可以很容易地切换接口部署到以太坊公有链上。
二、以太坊客户端
以太坊客户端用于接入以太坊网络,进行账户管理、交易、挖矿、智能合约相关的操作。目前有多种语言实现的客户端,常用的有 Go 语言实现的 go-ethereum 客户端 Geth,支持接入以太坊网络并成为一个完整节点,也可作为一个 HTTP-RPC 服务器对外提供 JSON-RPC 接口。
其他的客户端有:
- Parity:Rust 语言实现;
- cpp-ethereum:C++ 语言实现;
- ethereumjs-lib:JavaScript 语言实现;
- Ethereum(J):Java 语言实现;
- ethereumH:Haskell 语言实现;
- pyethapp: Python 语言实现;
- ruby-ethereum:Ruby 语言实现;
三、Geth 简介
官方文档:https://geth.ethereum.org/
geth
是以太坊的客户端,其全称是go-ethereum,它支持以太坊区块链的所有功能,包括智能合约执行、钱包功能和节点同步。它是由以太坊的官方开发团队开发和维护的,但也有许多社区贡献者参与其开发。
以下是 geth
的几个关键特点:
- 完整的节点:
geth
可以运行一个完整的以太坊节点,这意味着它可以验证区块链上的交易和区块,并与其他节点通信以保持网络的一致性。 - 钱包:它还提供了一个内置的钱包,允许用户存储、发送、接收和交易以太币和智能合约代币。
- 智能合约执行:
geth
支持智能合约的创建和部署,允许开发者在其上运行自定义的智能合约。 - RPC接口:提供了一个JSON-RPC接口,允许开发人员使用各种编程语言与以太坊区块链进行交互。
- 命令行界面:
geth
通过命令行界面(CLI)进行操作,这使得无需图形用户界面即可进行交互。 - 可扩展性:它支持插件和模块,允许开发者增加新的功能或修改现有功能。
- 跨平台:
geth
可以在多种操作系统上运行,包括Windows、macOS和Linux。 - EVM兼容性:作为以太坊的客户端,
geth
运行在以太坊虚拟机(EVM)上,这使得它能够支持任何符合EVM标准的智能合约。
geth
常用于以太坊的开发、测试和部署,也被许多企业用于构建基于以太坊的应用程序和平台。由于其开源特性和强大的社区支持,geth
成为了最受欢迎的以太坊客户端之一。
注意:
Geth 是一个执行客户端。从历史上看,仅一个执行客户端就足以运行一个完整的以太坊节点。然而,由于以太坊从工作量证明 (PoW) 切换到基于权益证明 (PoS) 的共识,Geth 需要与另一个称为“共识客户端”的软件相结合。
通过执行客户端和共识客户端相结合足以形成一个完整的以太坊节点。
目前有五个共识客户端可以与 Geth 一起运行。这些是:
- Lighthouse:用 Rust 编写
- Nimbus:用 Nim 编写
- Prysm:用 Go 语言编写
- Teku:用 Java 编写
- Lodestar:用TypeScript编写
四、为什么要用开发模式下的私有链
对于开发人员来说,在这样一个环境中工作通常很方便,在这个环境中,可以快速部署和测试对客户端或应用程序软件的更改,而不会将实际用户或资产置于风险之中。为此,Geth 有一个 --dev 标志,可以在“开发者模式”下启动 Geth。这将创建一个单节点以太坊测试网络,不与任何外部对等节点连接。它仅存在于本地计算机上。在开发人员模式下启动 Geth 将执行以下操作:
- Initializes the data directory with a testing genesis block
使用测试创世块初始化数据目录 - Sets max peers to 0 (meaning Geth does not search for peers)
将 max peers 设置为 0(表示 Geth 不搜索对等节点) - Turns off discovery by other nodes (meaning the node is invisible to other nodes)
关闭其他节点的发现(意味着该节点对其他节点不可见) - Sets the gas price to 0 (no cost to send transactions)
将 gas 价格设置为 0(发送交易无需支付任何费用) - Simulates a consensus client which allows blocks to be mined as-needed without excessive CPU and memory consumption
模拟共识客户端,允许根据需要挖掘区块,而不会消耗过多的 CPU 和内存 - Uses on-demand block generation, producing blocks when transactions are waiting to be mined
使用按需区块生成,在交易等待挖掘时生成区块
五、开发模式搭建教程
①去官网下载最新稳定版的geth-64位
温馨提示:建议下载带有tools的,这样可以更好的帮助我们开发
②下载完毕后进行解压。解压后会得到很多.exe的可执行文件
⑤进入到这些.exe的可执行文件的目录下,创建password.txt文档,在文档里面输入一个密码
这个密码很重要,将私钥导入钱包的时候需要用到这个密码
⑥在含有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文件的密码
–http.api eth,web3,net`:指定启用的 HTTP-RPC 接口,这里列出了一些常用的接口,包括api、以太坊操作、网络信息、Web3 功能。
--password
:指定自动创建的私钥JSON文件的密码