以太坊客户端

2022.2.27

主要内容

客户端;Geth的安装和使用;搭建私链

什么是以太坊客户端

【珍惜生命:以太坊是个规范,符合这个规范的程序,是以太坊客户端】

基于以太坊规范的网络

以太坊的多种客户端

以太坊全节点

远程客户端和轻节点

不存储区块链的本地副本或验证块和交易。这些客户端一般只提供钱包的功能,可以创建和广播交易。远程客户端可用于连接到 现有网络,MetaMask就是一个这样的客户端

不保存链上的区块历史数据,只保存区块链当前的状态。轻节点可以对块和交易进行验证。

全节点的优缺点

优点

缺点

公共测试网络节点的优缺点

优点

缺点

本地私链的优缺点

优点

缺点

JSON-RPC

• 以太坊客户端提供了API和一组远程调用(RPC)命令,这些命令被编码为 JSON。这被称为 JSON-RPC API。本质上,JSON-RPC API 就是一个接口,允许我们编写的程序使用以太坊客户端作为网 关,访问以太坊网络和链上数据。

• 通常,RPC接口作为一个HTTP服务,端口设定为8545。出于安全原因,默认情况下,它仅限于接受来自 localhost 的连接。

• 要访问JSON-RPCAPI,我们可以使用编程语言编写的专用库,例如JavaScript的 web3.js。

• 或者也可以手动构建HTTP请求并发送/接收JSON编码的请求,如:

geth的安装与同步全节点

推荐源码安装,详细文件参考这里

  1. 我们的第一步是克隆 git 仓库,以获取源代码的副本。
  1. 从源码构建Geth,要构建 Geth,切换到下载源代码的目录并使用 make 命令:

如果一切顺利,我们将看到 Go 编译器构建每个组件,直到它生成 geth 可执行文件:

  1. 查看 geth version,确保在真正运行之前安装正常:

 

  1. 安装好了 Geth,现在我们可以尝试运行一下它。执行下面的命令,geth 就会开始同步区块,并存储在当前目录下。这里的 --syncmode fast 参数表示我们会以“快速”模式同步区块。在这种模式下,我们只会下载每个区块头和区块体,但不会执行验证所有的交易,直到所有区块同步完毕再去获取一个系统当前的状态。这样就节省了很多交易验证的时间。

通常,在同步以太坊区块链时,客户端会一开始就下载并验证每个块和每个交易,也就是说从创世区块开始。 毫无疑问,如果我们不加 --syncmode fast 参数,同步将花费很长时间并且具有很高的资源要求(它将需要更多的 RAM,如果你没有快速存储,则需要很长时间)。

有些文章会把这个参数写成 --fast,这是以前快速同步模式的参数写法,现在已经被 –syncmode fast取代。

参数类型意义
--syncmode fast 
--syncmode full下载所有信息
--syncmode light连区块都不下载

如果我们想同步测试网络的区块,可以用下面的命令:

--testnet 这个参数会告诉 geth 启动并连接到最新的测试网络,也就是 Ropsten。测试网络的区块和交易数量会明显少于主网,所以会更快一点。但即使是用快速模式同步测试网络,也会需要几个小时的时间。

【我们除了要真正运行主链或测试链,否则不用同步这些东西】

geth搭建私链

(本节内容均为尚硅谷课程笔记摘录)

因为公共网络的区块数量太多,同步耗时太长,我们为了方便快速了解 Geth,可以试着用它来搭一个只属于自己的私链。

首先,我们需要创建网络的“创世”(genesis)状态,这写在一个小小的 JSON 文件里(例如,我们将其命名为genesis.json):

【创造链】要创建一条以它作为创世块的区块链,我们可以使用下面的命令:

【启动链】在当前目录下运行 geth,就会启动这条私链,注意要将 networked 设置为与创世块配置里的chainId 一致。

【启动+可以连接】不过经过测试,上边这个命令并不能让我本地的钱包通过local8584连接到私连上,需要这样做

我们可以看到节点正常启动:

恭喜!我们已经成功启动了一条自己的私链。

【下边是运行记录】:!!!

图片1

图片2

图片3

图片4

Configure the Ethereum client geth to set up and run own private chain

Creat geth --datadir ./mychain/ init ./genesis.json Start geth --datadir ./mychain/ --networkid 15 console --rpc --rpccorsdomain "*" --allow-insecure-unlock

Geth控制台命令

常用资料链接

Geth官方文档

geth常用命令

运行私链的时候同时加上console这个参数,就会开启Geth控制台。Geth Console 是一个交互式的 JavaScript 执行环境,里面内置了一些用来操作以太坊的 JavaScript对象,我们可以直接调用这些对象来获取区块链上的相关信息。这些对象主要包括:

geth命令总结

命令含义
eth主要包含对区块链进行访问和交互相关的方法
net主要包含查看 p2p 网络状态的方法
admin主要包含与管理节点相关的方法
miner主要包含挖矿相关的一些方法
personal包含账户管理的方法
txpool包含查看交易内存池的方法
web3包含以上所有对象,还包含一些通用方法
personal.newAccount()创建账户
personal.unlockAccount()解锁账户
eth.accounts列出系统中的账户
eth.getBalance()查看账户余额,返回值的单位是 Wei
eth.blockNumber列出当前区块高度
eth.getTransaction()获取交易信息
eth.getBlock()获取区块信息
miner.start()开始挖矿
miner.stop()停止挖矿
web3.fromWei()Wei 换算成以太币
web3.toWei()以太币换算成 Wei
txpool.status交易池中的状态

geth实验记录

实验日期:2022.2.18

自己的账户是0x6118307A4f669b43beD30Bc785b93657B4c54F9A,创世链的时候创建了2000以太