主页 > 最新版imtoken官网 > 以太坊节点启动及同步方法

以太坊节点启动及同步方法

最新版imtoken官网 2024-01-23 05:12:15

Go-ethereum 同步轻节点 0. 前置知识

节点:客户端的软件。全节点、轻节点

客户端:以太坊的一种实现,提供 RPC API 端点供用户控制客户端。 每个客户端都可以使用标准的 JSON RPC。 geth,OpenEthereum(维护结束)

轻量级同步:下载所有区块头、区块数据并随机验证

通过客户端与以太坊网络交互:

- 使用适当的协议手动调用(例如 curl)

- 连接一个控制台(geth attach)

- 在应用程序中执行

1.安装需要的基础工具

yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y

2.安装golang并配置

yum install golang // 不用翻墙,yum search xxx 可以找到需要安装的文件路径

语言配置

echo 'export GOROOT=/usr/lib/go' >> /etc/profile //golang安装路径

echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile

echo 'export GOPATH=/ssd/go' >> /etc/profile // 执行go文件时存放的路径

echo 'export PATH=$PATH:$GOPATH/bin' >> /etc/profile

源/etc/配置文件

go env -w GOPROXY=https://goproxy.cn,direct // 修改代理,国内编译go文件

3.下载并编译go-ethereum

下载:下载到本地并拖到ssd文件

cd go-以太坊

使所有//编译

echo 'export PATH=$PATH:/ssd/go-ethereum/build/bin' >> /etc/profile // 在path中添加geth路径

源/etc/配置文件

geth version // 验证安装是否成功

4.同步以太坊区块

nohup /ssd/go-ethereum/build/bin/geth --syncmode "snap" --port "30303" --cache=4096 --datadir /ssd/data/geth --http --http.api db,eth ,net,web3,personal,admin,miner,debug --http.port 8545 --http.addr 0.0.0.0 --http.corsdomain "*" --maxpendpeers 999 > /ssd/data/output.log 2>&1 &

“snap”:代替传统的“fast”,当同步模式指定为“fast”时,以太坊节点将从网络同步所有区块头、区块体和状态数据,但不会重放区块中的交易,只会验证区块中的数据。

当同步模式指定为“full”时以太坊节点收益以太坊节点收益,以太坊节点将从网络同步所有区块头和区块体,并重放区块中的交易以生成状态数据。

当指定同步方式为“light”时,以太坊节点只从网络同步所有区块头,不同步区块体,不同步状态数据,只有在需要相应的区块和状态数据时才从网络获取.

未指定模式时,默认为“快速”模式。

最新命令参考:

(中文版)

5.geth控制台命令/附加命令

/ssd/go-ethereum/build/bin/geth attach /ssd/data/geth/geth.ipc // 使用ipc连接geth客户端(http/ws/ipc)

打开JS控制台,可以使用web3.js与节点进行交互(初始化账户、向网络写入和广播交易请求、查找账户余额和元数据等)

6.节点交互:JSON RPC/web3模块

(您可以查询如何使用不同的命令)

JSON格式,RPC方法调用API对象

RPC模式:

curl 
  -X POST \ (\符号表示换行,真正使用的时候要去掉\)
  -H "Content-Type: application/json" \
  --data '{"method":"debug_traceTransaction","params":["0x9e63085271890a141297039b3b711913699f1ee4db1acb667ad7ce304772036b"],"id":1,"jsonrpc":"2.0"}' 127.0.0.1:8545
  //jsonrpc-指定JSON-RPC版本号,method字段指定要调用的api方法名

eth:包含一些操作区块链相关的方法

net:包含一些查看p2p网络状态的方法

admin:包含一些管理节点相关的方法

miner:包含一些启动和停止挖矿的方法

personal:主要包括一些管理账户的方法

txpool:包含一些查看交易内存池的方法

net.peerCount :返回连接到的对等点数

admin.peers :列出节点连接到的所有对等点

eth.blockNumber查看区块号,eth.synacing查看更多信息退出

搜索关键词:json-rpc eth

debug.traceTransaction("Transaction_hash")

【外链图片传输失败,源站可能有防盗链接机制,建议保存图片直接上传(img-iGyszGFJ-1651610855066)(C:\Users\dell\AppData\Roaming\Typora \typora-用户图像\ 1648982534926.png)]

示例:通过debug_traceTransaction获取指定交易hash的trace

debug.stacks/debug.storageRangeAt/调试。

eth.syncing — false:表示同步最新区块

附加状态

eth命令

eth.getTransactionCount(“BlockNumber”) – 可以获得区块中发生的交易数量

eth.getBlock(“BlockNumber”) — 可以得到这个区块中发生的所有交易哈希

eth.getRawTransactionFromBlock("区块编号")

eth.getCode("Contract_address") – 可以获得合约的字节码

eth.getBlockByHash(“Block_Hash”) – 可以得到区块的内容,得到的部分信息是hash的形式

eth.getBlockByNumber(“0x(BlockNumber)”) – “0xddbe98”区块信息中出现的数字,是区块号的十六进制形式

eth.getRawTransaction(“Transaction_hash”) / eth.getRawTransactionFromBlock(“BlockNumber”) – 根据交易哈希得到一串十六进制数,不知道什么意思

eth.getTransaction(“Transaction_hash”) – 获取交易blockHash、blockNumber、input、from、to等信息

eth.getTransactionCount(“Contract_addr”) – 获取合约中已经发生的交易数量,但范围(在某个区块或所有区块中)未知

eth.getTransactionFromBlock(“BlockNumber”) – 或者区块号的第一笔交易和信息

eth.getStorageAt, eth.getTransaction 不会被使用

eth.blockNumber – 获取当前区块号

debug.traceTransaction(“Transaction_hash”) – 获取交易中具体的操作码信息

// 将给定事务转出给定块
debug.standardTraceBlockToFile("0x0bbe9f1484668a2bf159c63f0cf556ed8c8282f99e3ffdb03ad2175a863bca63", {txHash:"0x4049f61ffbb0747bb88dc1c85dd6686ebf225a3c10c282c45a8e0c644739f7e9", disableMemory:true})
["/tmp/block_0x0bbe9f14-14-0x4049f61f-099048234"]

// 转出某个区块中的所有TX
debug.standardTraceBlockToFile("0x0bbe9f1484668a2bf159c63f0cf556ed8c8282f99e3ffdb03ad2175a863bca63", {disableMemory:true})
["文件路径"]

使用命名标准在临时位置创建文件 block_--- 每个操作码立即流式传输到文件,除了操作系统通常所做的之外没有缓冲

debug.traceTransaction(
"0x0903c3f6b08ff8729598de40932355410c3cac5e2a48e9f383629eeb6b23c972")

节点服务