Geth使用教程(windows)

本教程旨在为新手用户服务,在windows系统下,通过简单的操作,实现Geth客户端的安装部署,环境配置,常用功能的使用。

前言

  • 本教程旨在为新手用户服务,在windows系统下,通过简单的操作,实现Geth客户端的安装部署,环境配置,常用功能的使用。

下载

  • go1.13.4.windows-amd64.msi,点击此处开始下载
  • Geth,点击此处进入下载页面,选择Windows版本下载
  • Ethereum-Wallet-installer-0-11-1.exe ,点击此处开始下载

安装配置GO

  1. 找到下载的文件go1.13.1.windows-amd64.msi,双击一直点击下一步即可。

  2. 环境配置,复制GO安装路径下bin目录的路径,然后在我的电脑>右键属性>高级系统设置>环境变量>系统变量>双击Path>添加刚刚复制的路径即可。

    3

  3. 检查环境配置是否成功,DOS命令窗口,在任意路径下输入:go version

安装配置Geth

  1. 找到下载的文件geth-windows-amd64.exe,双击一直点击下一步即可。

  2. 环境配置,复制Geth安装路径下bin目录的路径,然后在我的电脑>右键属性>高级系统设置>环境变量>系统变量>双击Path>添加刚刚复制的路径即可。

    3-1

  3. 检查环境配置是否成功,DOS命令窗口,在任意路径下输入:geth version

Geth的使用

此部分内容,主要分为geth节点的启动示例和部分常用的console命令操作。

启动 geth节点

新建geth目录

路径、名称无要求,自定义,该目录主要存储geth节点的相关数据。

1
2
F:\works> mkdir geth
F:\works> cd geth

新建创世文件

新建并通过编辑软件打开genesis.json,输入以下创世文件内容(供参考)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"config": {
"chainId": 10086,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
创世文件说明
内容说明
chainId不同版本的eth的id,比较经典有,1代表主网,2代表普通测试网络,3代表Ropsten测试网络,4代表Rinkeby测试网络,42代表Kovan测试网络(其他的值代表哪些网络,可以参考) chainId的值要与在geth命令中的–networkid参数保持一致
homesteadBlock硬分叉区块高度,填写官网的默认值即可,后续硬分叉时才需要调整
eip155BlockEIP 155 硬分叉高度,填写官网的默认值即可,后续硬分叉时才需要调整
eip158BlockEIP 158 硬分叉高度,填写官网的默认值即可,后续硬分叉时才需要调整
alloc预设账号以及账号的以太币数量,私有链挖矿比较容易可以不配置
balance账户中的金额,单位是wei,1eth=10^18wei
coinbase矿工账号
difficulty难度值,越大越难,详见下表。参考链接
extraData附加信息,以0x开头填写,可填可不填
gasLimitgas 的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填的很大
nonce64 位随机数,默认即可
mixhash与 nonce 配合用于挖矿,由上一个区块的一部分生成的 hash,默认即可。因为是第一个区块,因此,默认就是0了
parentHash上一个区块的 hash 值,默认即可。因为是第一个区块,因此,默认就是0了

difficulty:挖矿难度参考表

  • 16进制10进制值倍数说明
    99999629145一秒一个
    2ffffd3145725五倍一分钟五到十个之间个
    5ffffa6291450放大十倍一分钟五个
    bffff412582900二十倍六分钟挖了八个
    3bfffc462914500一百倍六分钟两个
    77fff88125829000两百倍十分钟两个
    12bffed4314572500五百倍15分钟没有一个

初始化链

1
F:\works\geth> geth --datadir ./data/00 init ./genesis.json

启动节点

示例:

1
F:\works\geth> geth --datadir ./data/00 --networkid 100 --port 30303 --nodiscover --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "db,eth,net,web3,personal,miner" console

命令行参数说明:更多参数的使用,请参考链接1 或者 参考链接2

参数说明
datadirgeth安装的目录,数据存放位置,这个与初始化时候的路径一样即可
networkid网络ID,该值与创世纪区块中的chainId一致即可,否则就会连到别人的服务上去了
portgeth当前节点暴露的通信端口,默认是30303。其他节点可以通过此端口进行通信
nodiscover关闭广播,防止别人接入,但其他节点还是可以用admin.addPeer(enode)加入
maxpeers最大节点连接数
identity设置节点名称
rpc开启HTTP-RPC服务器,此处也可以不开启,使用admin.startRPC(addr,port)来开启
rpcaddr当前节点的rpc地址,默认是localhost
rpcportrpc暴露的端口,默认是8545。json rpc通过此端口获取数据
rpccorsdomain“*” :允许跨域请求的域名列表,此处为允许全部
rpcapi允许rpc接入的方式
cache调整内存分配 最小16MB,默认128MB
verbosity日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
console开启控制台

启动成功效果图:

进入JavaScript console 控制台,即可用以下命令测试基本功能。

console常用命令

Geth Console一个交互式的 JavaScript 执行环境,其中 > 是命令提示符。在这个环境里也内置了一些用来操作以太坊的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括:

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

节点信息

1
2
> admin
直接输入admin对象查询,可以查询到节点相关信息和方法,如下图所示;其他对象内容查询,方法类似。

添加账户

1
2
3
> personal.newAccount("123456")
或者
> personal.newAccount()
  • 带上密码可以直接创建一个新账户,如果不带密码,就会提示2次输入密码
  • 注:如果没有创建过初始账户,此处创建的第一个账户将作为挖矿人

查看账户

1
2
3
4
返回本地节点中,有秘钥文件的所有账户的地址列表,是个字符串数组
> eth.accounts
或者指定返回账户
> eth.accounts[0]

设置为变量

1
> acc0 = web3.eth.accounts[0]
  • JavaScript console 控制台,可以直接使用js的语法,此处是获取节点第一个账户地址。频繁使用到的数据,设置变量存储,提高效率。

查看钱包

1
2
3
4
5
6
7
8
9
返回账户的余额,默认单位是Wei
> eth.getBalance(acc0)
或者
> eth.getBalance(eth.accounts[0])

Wei 转换 ether
> web3.fromWei(eth.getBalance(acc0),'ether')
或者
> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')

解锁账户

1
2
3
> personal.unlockAccount(acc0,"123456")
或者
> personal.unlockAccount(eth.accounts[0],"123456")
  • 交易或者是对数据签名的时候需要解锁账户,也就是验证密码和秘钥

  • 注1:此账户所在节点必须要有keystore密钥才能解锁成功

  • 注2:每隔5分账会重新上锁,未解锁的账户不能进行转账

  • 注3:每次解锁完成业务后应该立即锁定账户,避免危险

  • 1
    2
    3
    > personal.lockAccount(acc0)
    或者
    > personal.lockAccount(eth.accounts[0])

转账

1
2
3
4
5
6
7
8
9
10
11
12
13
14
示例:节点中的第1个账户转账1个以太币给第2个账户
> acc0 = eth.accounts[0]
> acc1 = eth.accounts[1]
> personal.unlockAccount(acc0,"123456")
方法一:
使用eth.sendTransaction方法
> eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(1,"ether")})

方法二:
使用personal.sendTransaction方法,该方法允许带上密码,方便测试时频繁解锁(生产环境禁用)
> personal.sendTransaction({from:acc0,to:acc1,value:web3.toWei(1,"ether")},"123456")

查看转账进度状态,转账交易会发送至此,等待打包
> tool
  • from:发送人,to:接收人,value:金额(单位是Wei,使用 web3.toWei(1,”ether”) 将1个 ether 转换为10的18次方 Wei )

  • 注:所有值都是字符串类型,需要带上双引号

挖矿

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
新建账户,注:如果节点没有账户,无法启动挖矿
> personal.newAccount("123456")

该步骤非必须,指定挖矿地址为第2个账户,默认是第一个账户
> miner.setEtherbase(eth.accounts[1])

开启1个线程挖矿
> miner.start(1)
停止挖矿
> miner.stop()
查询挖矿状态
> eth.mining

组合形式:开启1个线程挖矿,当节点挖到3个区块时,就停止挖矿
> miner.start(1);admin.sleepBlocks(3);miner.stop();
  • 注1:节点没有账户存在,直接挖矿会报错,该示例设置了节点的第2个账户为挖矿地址
  • 注2:挖矿时会显示Generating DAG in progress,此进度达到100时才会开始挖,配置差的机器会等很久

查看区块数据

1
2
3
4
5
6
7
列出区块总数
> eth.blockNumer

通过区块编号,查询区块详细信息
- 第一个参数为:获取区块的编号,以16进制表示
- 第二个参数为:是否获取每笔交易的详细数据
> eth.getBlockByNumber("0x6", false)

节点通信地址

1
> admin.nodeInfo.enode

多节点通信

此部分内容将演示节点与节点之间建立通信。

启动另一节点

与启动第一个节点的步骤一样,只需注意以下几点即可:

  1. 建立新目录存储新节点数据,路径、名称自定义;
  2. 由于是在windows单机测试,启动新节点,注意port、rpcport 端口与第一个节点端口不一样即可;
  3. networkid 保持一致创世文件内容保持一致
  4. nodiscoveripcdisable,这两个参数很关键,windows没有ipcdisable参数,第二个节点启动会报错的。nodiscover让节点2不会被节点1自动扫描到。
1
2
3
4
5
初始化新节点,目录名 01,创世文件是一样一样的
F:\works\geth> geth --datadir ./data/01 init ./genesis.json

启动新节点,--port 30304 区别第1节点的30303,--networkid 100 是一样一样的
F:\works\geth> geth --datadir ./data/01 --networkid 100 --port 30304 --nodiscover --ipcdisable console
连接节点
  • 原则:一个节点加入另一个节点,拿到另一个节点的enode链接信息即可。以下演示节点2加入节点1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
节点1:
- 获取enode
> admin.nodeInfo.enode
"enode://c796622eb536ffe8506f38d5689017cc16a57c6387609884f6fec6fb9f002aad7c5e132be294095f6ae8ef59839ab503c3a254908ed0ae43e04d01cfd84d90b2@[::]:30303?discport=0"

节点2:
- 加入节点1
> admin.addPeer("enode://c796622eb536ffe8506f38d5689017cc16a57c6387609884f6fec6fb9f002aad7c5e132be294095f6ae8ef59839ab503c3a254908ed0ae43e04d01cfd84d90b2@[::]:30303?discport=0")

- 查询是否加入成功:
> admin.peers

- 返回如下信息即表示成功加入:
[{
caps: ["eth/63"],
id: "c796622eb536ffe8506f38d5689017cc16a57c6387609884f6fec6fb9f002aad7c5e132be294095f6ae8ef59839ab503c3a254908ed0ae43e04d01cfd84d90b2",
name: "Geth/v1.8.3-stable-329ac18e/windows-amd64/go1.10",
network: {
inbound: false,
localAddress: "127.0.0.1:52306",
remoteAddress: "127.0.0.1:30303",
static: true,
trusted: false
},
protocols: {
eth: {
difficulty: 10684130,
head: "0xf265af80eb34696a82444f93143b9b1191ea85df1823f43001d7b21dd02beaa6",
version: 63
}
}
}]

- 查看节点连接数
> net.peerCount

- 链接成功后会自动同步网络区块

Ethereum-Wallet的使用

安装

找到下载的文件 Ethereum-Wallet-installer-0-11-1.exe,双击一直点击下一步即可。

启动

Ethereum-Wallet 的启动前提是Geth节点需开启HTTP-RPC服务!

方式一

如RPC服务都是默认的参数可以通过双击Ethereum Wallet图标的方法启动,比如用了如下方式启动节点:

1
F:\works\geth> geth --datadir ./data/00 --networkid 100 --port 30303 --nodiscover --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "db,eth,net,web3,personal,miner" console

方式二

rpcaddr、rpcport 参数非默认的情况,需通过DOS命令的方式启动。

1
2
3
- 进入Ethereum-Wallet安装目录
- 根据具体的节点IP:192.168.106.68 port:8550 ,通过以下形式启动即可
C:\Software\Ethereum-Wallet> "Ethereum Wallet.exe" --rpc http://192.168.106.68:8550

启动成功后的界面:

使用

可以通过Ethereum-Wallet,转账、查询、发布合约等操作的可视化,更加方便用户使用Geth客户端。

桌面版启动Geth程序

桌面版启动Geth程序提供快速启动Geth节点、快速生成账户、CPU挖矿、显卡挖矿等方便用户操作的功能。如需获取程序,请联系相关人员获取下载地址。

安装

下载的文件是以miner.zip命名的压缩文件,直接解压到想要存放的路径即可。

使用

包结构

程序包结构:

解压后的包文件主要有:bin目录、genesis.json创世文件、ieth.exe启动程序。

用户首次使用时,编辑自己需要定义的genesis.json文件,在本次示例中,使用了上文“新建创世文件”章节中一样的创世文件内容。剪辑好之后,双击 ieth.exe 即可启动程序(界面如下图)。

此时,程序包文件目录下会自动生成 log目录和挖矿配置.ini文件。

生成账号

操作步骤:密码栏输入密码 > 点击“生成账号”按钮 > 记录并备份账户、密码、私钥、密钥存放位置(重要)

同时,在程序包目录下,会自动生成data目录:

默认数据会保存在data目录中

geth:以太坊的链数据,保存区块的,如果遇到区块同步出错的情况,建议删除这个文件夹,重新同步区块

keystore:保存密钥文件,请牢记密码以及备份好这个文件

节点同步

该程序提供方便的节点同步操作,首先打开<挖矿配置.ini>文件进行配置。

配置文件说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//此处是软件启动时加载的钱包地址,当点击挖矿的时候,会自动将钱包地址栏中的地址替换到此处(所以此处无需改动)
钱包地址=0xeb22459524804361ab700f2552b066a1392b80ab

//网络的ID,必须跟其他节点一样才能进行通信。(为方便演示,此处依然使用100)
网络ID=100

//本机节点暴露的端口,如本机启动了多节点测试,保证端口不一样即可
端口=30305

//挖矿的线程,默认是根据CPU核心数的,此处设置为1即可
挖矿线程=1

//区块的同步方式,full是全同步,fast是快速同步,如果fast同步失败,则在此改成使用full进行同步
区块同步=full

//节点启动时去连接的另一个节点,当然也可以打开控制台,使用admin.addPeer()函数进行添加,添加后下次会自动尝试连接(为方便演示,此处链接了另一主机端口为61910的节点【注:不建议本机启动多节点】)
启动节点=enode://5e00f29f43637107067e5c0cf94004fd8f9475d4d4f86be7501acb20f54a3ad3d2d70ec5c660dbb86656560a5e19892bf1cf38c65ae8202e54a2eb7fe144bbb1@192.168.105.215:61910

文件配置好之后,点击“打开控制台”,稍等片刻可以查询同步情况:

细心观察可以发现,本机节点已经自动CPU挖矿,并同步其他节点的块信息。在程序界面,可以点击“停止挖矿”,停止本机挖矿的进程。

挖矿

提供CPU挖矿和显卡挖矿两种方式,选择自己的挖矿方式,在程序界面,点击对应按钮即可,挖矿日志信息,都会显示在程序界面,非常直观。

注:显卡挖矿需本机具备显卡。

总结

感谢阅读本教程,如有其他需求帮助,请联系相关人员,谢谢!

-------------------本文结束 感谢您的阅读-------------------
0%