Geth--学习及记录

本文详细介绍了如何在Linux环境下安装Go环境,下载并配置geth,编译源码,以及如何使用genesis.json创建私链并进行初始化。此外,还包括了网络标识符、矿工选项和Web3.js的使用示例,以及Geth的常用命令和参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装go环境

go下载及全局设置

wget https://dl.google.com/go/go1.20.5.linux-amd64.tar.gz
tar -C /usr/local -zxvf go1.20.5.linux-amd64.tar.gz
mkdir -p ~/go/src 
 echo "export GOPATH=$HOME/go" >> ~/.bashrc  
 echo "export PATH=$PATH:$GOPATH/bin:/usr/local/go/bin" >> ~/.bashrc
 source ~/.bashrc 
 go version

Go和C的编译器

sudo apt-get install -y build-essential golang

geth源码下载及编译

geth源码下载

git clone https://gitee.com/james_xu/go-ethereum.git

geth源码编译

cd go-ethereum
make geth

验证是否成功

./build/bin/geth version #当前目录运行

在这里插入图片描述

全局设置

echo " export GETH=/home/xxx/go-ethereum" >> ~/.bashrc 
echo " export PATH=$PATH:$GETH/build/bin" >> ~/.bashrc 
source ~/.bashrc 
geth version # 验证

在这里插入图片描述

genesis.json 讲解

config:这个字段包含了以太坊区块链的配置信息。

{
    "config": {
      "chainId": 0,  //区块链的唯一标识符,用于识别不同的区块链网络,主网,测试网都有一个固定Id,network、chainID、创世区块配置都相同时,才是同一条链
      "homesteadBlock": 0,//Homestead是以太坊的第一个正式版本,接下来的字段指定了以太坊网络中不同重要协议和硬分叉的激活区块号,
      "eip150Block": 0,//包括Homestead、Byzantium、Constantinople和Petersburg等,它们分别引入了重要的特性和改进。
      "eip155Block": 0,//不同高度执行不同协议,对应数值为协议生效块高度.
      "eip158Block": 0,
      "byzantiumBlock": 0,
      "constantinopleBlock": 0,
      "petersburgBlock": 0,
      "istanbulBlock": 0,
      "berlinBlock": 0,
      "londonBlock": 0
    },
    "alloc": {},//用于指定在创世区块中预分配的以太币给哪些账户。在这里是空的,意味着没有为任何账户预分配以太币
    "coinbase": "0x0000000000000000000000000000000000000000",//这是挖矿奖励的接收地址,通常是一个以太坊地址。在这里是一个全零地址,意味着挖矿奖励会被丢弃(burned)。
    "difficulty": "0x20000",//挖矿难度系数,用于控制区块生成的速度。难度越高,挖矿需要的计算量越大
    "extraData": "",//额外的数据字段,通常用于一些标记或特定信息。
    "gasLimit": "0x2fefd8",//每个区块中所允许的Gas数量的上限,Gas用于支付交易费用
    "nonce": "0x0000000000000042",//随机数,用于挖矿时的工作量证明(Proof of Work)算法
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",//和Nonce一样,用于挖矿时的工作量证明算法
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",//上一个区块的哈希值
    "timestamp": "0x00" //区块的时间戳
  }

ChainID参数常见值说明:

Ethereum主网(Mainnet):1
Ropsten测试网络:3
Rinkeby测试网络:4
Kovan测试网络:42
Binance Smart Chain主网:56
Binance Smart Chain测试网络:97
Huobi Eco Chain主网:128
Huobi Eco Chain测试网络:256 (来源:https://cloud.tencent.com/developer/article/2325458?areaId=106001

私链搭建

创世块初始化

进入某个目录后,先定义自己的创世区块genesis.json,然后新建一个目录data0用来存放区块链数据
在这里插入图片描述
然后可以执行 geth 命令 init 初始化创世区块。

geth --datadir data0 init genesis.json

其中–datadir 表示指定目录存储数据,init读取genesis.json来将创世块入链,注意初始化两个节点的链时,–datadir需指定不同目录,且下面的命令–port也需不同

启动私链节点

geth --datadir data0 --networkid 10 --nodiscover  console

在这里插入图片描述
常用参数(来源:以太坊客户端Geth命令用法-参数详解

ETHEREUM选项:
--config value          TOML 配置文件
--datadir “xxx”         数据库和keystore密钥的数据目录
--networkid value       网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
--testnet               Ropsten网络:预先配置的POW(proof-of-work)测试网络


开发者(模式)选项:iuuuui开启挖矿。
--dev.period value  开发者模式下挖矿周期 (0 = 仅在交易时) (默认: 0)

API和控制台选项:
--rpc                       启用HTTP-RPC服务器
--rpcaddr value             HTTP-RPC服务器接口地址(默认值:“localhost”)
--rpcport value             HTTP-RPC服务器监听端口(默认值:8545)
--rpcapi value              基于HTTP-RPC接口提供的API
--ws                        启用WS-RPC服务器

网络选项:
--port value         网卡监听端口(默认值:30303)指定.ipc文件将要用到的端口。这就是使用web3.js库连接数据库的方式
--nodiscover            禁用节点发现机制(不希望节点在没有指定的情况下尝试连接到其它节点,不希望这些节点在没有告诉它们的情况下被发现)

矿工选项:
--mine                  打开挖矿
--minerthreads value    挖矿使用的CPU线程数量(默认值:8)
--etherbase value       挖矿奖励地址(默认=第一个创建的帐户)(默认值:“0”)
--targetgaslimit value  目标gas限制:设置最低gas限制(低于这个不会被挖?) (默认值:“4712388”)
--gasprice value        挖矿接受交易的最低gas价格
--extradata value       矿工设置的额外块数据(默认=client version)

启动方式
1.Geth 控制台使用及 Web3.js 使用实战
2.geth启动方式及参数

本地测试

输入上面命令后,进入交互式的Javascript执行环境,在这可以使用一些命令来与区块链进行交互
在这里插入图片描述命令主要包括:(来源:https://cloud.tencent.com/developer/article/1148994?areaId=106001)

eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
web3:包含了以上对象,还包含一些单位换算的方法

常用命令

eth.accounts: 返回节点控制的所有账户列表。
eth.getBlock(blockHash Or BlockNumber): 根据区块哈希或区块号返回区块的信息。
eth.getBlockNumber(): 返回当前最高区块号。
eth.getBalance(address Or eth.accounts[x]): 返回指定账户地址的余额。
eth.getGasPrice(): 返回当前 Gas 价格。
eth.coinbase:查看矿工的账户地址。
eth.blockNumber:查看区块高度。

personal.newAccount()    	可不填参数。
personal.newAccount('xxx')  创建账户(参数为账户密码)。
personal.listAccounts 		返回节点控制的所有账户列表。

miner.start([threads]): 开始挖矿,可选参数指定挖矿线程数。 
miner.stop(): 停止挖矿。 
miner.setEtherbase(address): 设置挖矿收益地址。 
miner.getHashrate(): 返回当前挖矿速率。 
miner.setGasPrice(gasPrice): 设置挖矿时的 gas 价格。 
miner.setMiningBeneficiary(address): 设置挖矿受益地址。 

web3.fromWei(eth.getBalance(eth.accounts[x]),'ether'):返回账户余额,getBalance()返回值的单位是wei,web3.fromWei()将返回值换算成以太币。

personal.unlockAccount(eth.accounts[1]),
或者 personal.unlockAccount(eth.accounts[0],"密码","时间(0表示长时间解锁)")   转账时需解锁账户

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(10,'ether')}): 以太坊账户列表中索引为0的账户向索引为1的账户发送10个以太币的交易。

txpool.status:查看交易池中等待被打包的交易。
txpool.inspect.pending:看已提交但还未被处理的交易,pending表示已提交但还未被处理的交易。
eth.getBlock("pending",true).transactions:查看当前待确认交易。

admin.nodeInfo: 获取节点的信息,包括客户端版本、网络ID等。
admin.peers: 列出当前节点的对等节点(peers)信息,包括节点ID、网络地址等。
admin.addPeer(enode): 手动添加一个对等节点到节点的peer列表中。
admin.removePeer(enode): 从节点的peer列表中移除指定的对等节点。
admin.startRPC(host, port, cors, apis): 启动节点的RPC服务器,可以指定主机、端口、跨域资源共享规则和可用API列表。
admin.stopRPC(): 停止节点的RPC服务器。
admin.startWS(host, port, cors, apis): 启动节点的WebSocket服务器,可以指定主机、端口、跨域资源共享规则和可用API列表。
admin.stopWS(): 停止节点的WebSocket服务器。
admin.setSolc(path): 设置Solidity编译器的路径。
admin.datadir: 获取节点数据目录的路径。
注意:enode形式"enode://56ba1994b10f13e4120c6c5071xxxxx344215446ff078a839dc95fd24@127.0.0.1:30304?discport=0"

参考资料

1.Geth的安装并简单使用篇
2.linux下编译geth源码
3.如何在私有链上编写、部署与以太坊进行交互的智能合约
4.如何在10分钟内搭建一个以太坊私有链?
5.搭建以太坊私有链
6.以太坊创世区块
7.以太坊客户端Geth命令用法-参数详解
8.Go Ethereum

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值