如何创建一个GETH节点(单节点,windows环境)
阅读原文时间:2023年07月08日阅读:2

所有命令都是在powershell上执行的

1、创建“创世块”

创建一个 hdgenesis.json文件,拷贝到geth根目录

{
    "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase": "0x0000000000000000000000000000000000000000",
    "difficulty": "0x40000",
    "extraData": "",
    "gasLimit": "0xffffffff",
    "nonce": "0x0000000000000000",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "alloc": {}
}

参数说明如下图:

(同一个网络中,创世块必须是一样的,否则无法联通)

走到数据目录

cd E:\blockchain\private_chain_env\1_node
cat .\hdgenesis.json

初始化创世纪节点

geth  --datadir ".\" init hdgenesis.json   --datadir 参数是指定数据存放文件夹

2、启动一个网络节点

netstat -ano | findstr "30303"
(查找所有占用30303端口的进程)

get-process -Id 11276
(如何能查到进程,说明已经开启了Mist.exe,将其关闭,否则geth命令无法执行)

geth --identity "HDetherum" --rpc --rpccorsdomain "*" --datadir ".\" --port "30303"  --rpcapi "db,eth,net,web3,personal" --networkid 95520 console

启动节点, 加上console 表示启动后,启用命令行;第二次也执行该命令

注意 networkid 95520,以太坊节点之间能够互相链接需要满足
1)相同的协议版本
2)相同的networkid
所以搭建私有网络最方便的方法就是通过geth命令中的--networkid选项,设置一个与主网不同的networkid(主网的networkid为1),这也是官方推荐的方法.

参数说明:

参数解析:
--identity 自定义节点名称
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--datadir 区块链数据存储目录
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象,一般为 db,eth,net,web3
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
console 打开一个可交互的javascript环境

更多参数说明:(https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

执行结果:

在shell内,可以执行exit退出shell

验证:

1)telnet localhost 8545

ctrl+] 退出shell
quit退出telnet

2)netstat -ano | findstr "30303"

(查找所有占用30303端口的进程)

3)另外打开一个powershell的geth客户端访问

geth attach http://127.0.0.1:8545

(这种方式访问时,必须增加 personal选项  (资料来源于:https://ethereum.stackexchange.com/questions/3996/error-personal-unlockaccount-method-not-implemented))

4)通过mist客户端访问

5)示意图

3、账号管理

personal.newAccount("123456")

(geth console启动后,运行如上命令创建一个主账户(没有账户不允许挖矿),根据提示设置交易密码,创建成功后就可以使用console进行相关的单节点命令操作)
测试环境设置两个账号:挖矿账号和普通账号
account[0] -- 挖矿账户
account[1] -- 普通账户

查询账户余额

思路:把账户赋值给某一个变量,同时查询账户中的余额

//查看挖矿账户余额
baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)

//查看普通账户的余额
account1 = eth.accounts[1]
num1=eth.getBalance(account1)

4、挖矿

miner.start()

停止挖矿

miner.stop()

查看结果

num = eth.getBalance(eth.accounts[0])
web3.fromWei(num)

5、转账

查看挖矿账户余额

baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)

查看普通账户的余额

account1 = eth.accounts[1]
num1=eth.getBalance(account1)

转账

//从baseAccount账户转给account1账户1eth
personal.unlockAccount(baseAccount,"123456")
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})

// 查看账户余额
num = eth.getBalance(baseAccount)
num1=eth.getBalance(account1)

查看挂起的交易

eth.pendingTransactions
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。

示意图

操作间隔过长

挖矿的shell需要 --rpcapi "db,eth,net,web3,personal"   personal,另一个shell才能管理个人账户信息

6、其他geth命令

待续….