Mac、Linux以太坊节点搭建(包括测试节点)

Mac、Linux以太坊节点搭建(包括测试节点)

  • 下载Go包,因为以太坊节点基于Go
  • 将Go包解压至/usr/local
  • 将 /usr/local/go/bin 目录添加至PATH环境变量
  • 运行Go
  • 下载go-ethereum
  • 解压zip
  • 进入go-ethereum文件夹
  • 编译geth客户端
  • 编译结束后将geth的目录加入环境变量
  • 验证geth是否安装成功
  • 成功以后创建文件夹用来存放区块
  • 到这里节点安装成功,如果想直接连入共链在这执行(连接私链看下一条,这里略过)
  • 如果想要连接私链

下载Go包,因为以太坊节点基于Go

wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

将Go包解压至/usr/local

tar -C /usr/local/ -xvf go1.10.3.linux-amd64.tar.gz

将 /usr/local/go/bin 目录添加至PATH环境变量

export PATH=$PATH:/usr/local/go/bin

运行Go

go

看返回是不是

Go is a tool for managing Go source code.

Usage:

	go command [arguments]

The commands are:

	build       compile packages and dependencies
	clean       remove object files and cached files
	doc         show documentation for package or symbol
	env         print Go environment information
	bug         start a bug report
	fix         update packages to use new APIs
	fmt         gofmt (reformat) package sources
	generate    generate Go files by processing source
	get         download and install packages and dependencies
	install     compile and install packages and dependencies
	list        list packages
	run         compile and run Go program
	test        test packages
	tool        run specified go tool
	version     print Go version
	vet         report likely mistakes in packages

Use "go help [command]" for more information about a command.

Additional help topics:

	c           calling between Go and C
	buildmode   build modes
	cache       build and test caching
	filetype    file types
	gopath      GOPATH environment variable
	environment environment variables
	importpath  import path syntax
	packages    package lists
	testflag    testing flags
	testfunc    testing functions

Use "go help [topic]" for more information about that topic.

如果出现如上,表示go已经安装成功(如果不能成功请根据提示自行百度、谷歌)

下载go-ethereum

这里需要注意一下,如果要用Java开发ERC20,直接从git下载的go-ethereum需要注意版本号,这个博客的修改时间是2019-04-24,在git上的版本是1.9。1.9版本用JAVA web3j操作geth时大多数功能都可以用,但是监听erc20的交易时候会出现各种莫名其妙的错误(我遇到了空指针、socket关闭、上下文缺失等,用了3天的时间也没能解决,最后只能把go-ethereum退回到1.8.22,如果你们不开发erc20可以直接在git上下载,下载方法是 git clone https://github.com/ethereum/go-ethereum.git ,如果没有安装git那就执行一下yum install -y git)

wget https://github.com/ethereum/go-ethereum/archive/v1.8.22.zip

解压zip

unzip v1.8.22.zip

如果没有unzip执行yum install unzip

进入go-ethereum文件夹

cd go-ethereum-1.8.22/

如果你是直接在git上clone的执行这个 cd go-ethereum

编译geth客户端

make geth

(如果出现
build/env.sh go run build/ci.go install ./cmd/geth
build/env.sh: 第 30 行:exec: go: 未找到
make: *** [geth] 错误 127
说明Go没有export,执行export PATH=$PATH:/usr/local/go/bin后再执行cd go-ethereum)

编译结束后将geth的目录加入环境变量

export PATH=$PATH:/root/go-ethereum/build/bin

(路径需要与之前git 克隆的路径对应)

验证geth是否安装成功

geth version

成功以后创建文件夹用来存放区块

以此执行

cd //
mkdir data0
cd data0
mkdir eth

以上路径可以自己随意修改,只要到时能找到就行

到这里节点安装成功,如果想直接连入共链在这执行(连接私链看下一条,这里略过)

geth --datadir=/data0/eth

(后台挂起 ctrl + z 然后 bg 最后 exit)
连接节点

export PATH=$PATH:/root/go-ethereum/build/bin
geth --datadir=/data0/eth attach

现在已经进入了控制台,可以在这里执行一些命令

创建一个密码为123123账户

 personal.newAccount("123123")

获取账户列表

eth.accounts

获取执行账户余额(当然现在返回的肯定是0)

eth.getBalance(eth.accounts[0])

如果以上执行没有问题表示节点已经搭建成功,同时也已经在同步区块了,同步区块的时间看网络情况,网络一般要1周左右,这个时候可以去忙一些其他工作,等待同步结束后再来进行后续具体的操作。

如果想要连接私链

依次执行

cd /data0/
mkdir eth-test
cd eth-test

(目录自己可以随意更换,下面的才是重点)

vim genesis.json

创建一个创世区块,键入以下内容:

{
 "nonce": "0x0000000000000042",
 "timestamp": "0x0",
 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "extraData": "0x",
 "gasLimit": "0x80000000",
 "difficulty": "0x3",
 "coinbase": "0x3333333333333333333333333333333333333333",
 "config":{
    "chainId": 1000,
    "homesteadBlock": 0,
    "eip155Block": 0
 },
 "alloc": {}
}

然后按esc
键入

:wq! 

保存退出
上面那个json的解释
nonce 用于挖矿的64位随机数
timestamp 时间戳
parentHash 上一个区块的hash 因为是第一个区块,这里是0
mixhash 与nonce 配合用,由上一个区块的一部分生成的 hash
extraData 附加信息
gasLimit 对GAS的消耗总量限制 用来限制区块能包含的交易信息总和
difficulty 难度值
coinbase 矿工账号 第一个区块挖出后将给这个矿工账号发送奖励的以太币
alloc 预设账号以及账号的以太币数量 测试链挖矿比较容易可以不配置
chainId 指定了独立的区块链网络 ID

初始化区块链,生成创世区块和初始状态

geth --datadir=/data0/eth-test init /data0/eth-test/genesis.json

(如果你的路径不是我上面请注意替换)
启动测试节点

geth --datadir=/data0/eth-test  --rpc --rpcaddr "127.0.0.1" --rpcport "8545" --rpcapi="db,eth,net,web3,personal" console

其中
–datadir 表示区块文件的位置
–rpcaddr rpc的地址
–rpcport “8545” 端口号
–rpcapi=“db,eth,net,web3,personal,admin,miner” 远程调用可以执行的方式
最后一个console表示是不是要进入控制台 如果不想进入可以去掉这个

后台挂起执行(这里不要执行,如果执行需要再开一个窗口连接节点,

geth --datadir=/data0/eth attach

geth --datadir=/data0/eth-test  --rpc --rpcaddr "127.0.0.1" --rpcport "8545" --rpcapi="db,eth,net,web3,personal" 

ctrl + z 然后 bg 最后exit

创建一个密码为123123账户

personal.newAccount("123123")

查询节点所有帐号

eth.accounts

查询指定帐号

eth.accounts[0]

开始挖矿 (挖到的以太币会默认存入第一个创建的账户,在执行交易等操作时,只有开始挖矿状态才会被写入区块)

miner.start()

停止挖矿(这里就不要执行了,后续还要执行转账操作)

miner.stop()

查询帐号余额(单位Wei)

eth.getBalance(eth.accounts[0])

查询帐号余额(单位ether)

web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")

再创建一个密码为123123账户进行转账测试

personal.newAccount("123123")

解锁第一个账户

personal.unlockAccount(eth.accounts[0])

输入密码
给账户1转账1个以太币

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether")})

查询第二个账户余额

web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")

到这一个以太坊私链节点搭建完毕
如果没有配置 geth 启动attach连接节点需要先执行

export PATH=$PATH:/root/go-ethereum/build/bin

否则不能找到geth命令

你可能感兴趣的:(区块链)