wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
tar -C /usr/local/ -xvf go1.10.3.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
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已经安装成功(如果不能成功请根据提示自行百度、谷歌)
这里需要注意一下,如果要用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
unzip v1.8.22.zip
如果没有unzip执行yum install unzip
cd go-ethereum-1.8.22/
如果你是直接在git上clone的执行这个 cd go-ethereum
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)
export PATH=$PATH:/root/go-ethereum/build/bin
(路径需要与之前git 克隆的路径对应)
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命令