go-ethereum 部署私有链
来源:互联网 发布:安卓好友定位软件 编辑:程序博客网 时间:2024/06/16 09:34
- go-ethereum 部署私有链
- 说明
- 服务器
- 上传 geth 可执行程序
- 第一台服务器节点
- 创建创世区块配置文件
- 初始化
- 启动节点
- 查看信息
- 第二台服务器节点
- 创建创世区块配置文件
- 初始化
- 启动节点
- 查看信息
- 添加静态节点文件
- 第三台服务器节点
- 挖矿测试
- 说明
go-ethereum 部署私有链
说明
服务器
这里使用 30303 端口,所以需要确定该端口在三台服务器上都打开了,否则不能添加其他服务器节点。
三台服务器中,相关文件的最终目录结构参考:
上传 geth 可执行程序
在 $GOPATH/src/github.com/ethereum/go-ethereum
目录下执行 go build -o geth ./cmd/geth/
生成 geth 可执行程序,然后将生成的 geth 可执行程序上传到这三台服务器的操作目录下,上传后的全路径为:/home/xiexiaodong/geth/geth
。
上传命令如下:
scp geth xiexiaodong@172.16.100.1:/home/xiexiaodong/geth/
然后添加环境变量,执行 vi ~/.bash_profile
,添加下面代码:
export GETH=/home/xiexiaodong/gethexport PATH=$PATH:$GETH
保存退出后执行 source ~/.bash_profile
使之生效。执行 geth version
查看是否生效:
第一台服务器节点
创建创世区块配置文件
创建 genesis.json 文件
{ "config": { "chainId": 0, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": { "0xbdda794a097b41309700fdc5bdba880a7763c738": { "balance": "1000" } }, "nonce": "0x0000000000000042", "difficulty": "0x020000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "", "gasLimit": "0xffffffff"}
参数说明:
初始化
创建数据存放地址并初始化创世块,执行:
geth --datadir "/home/xiexiaodong/geth/node" init genesis.json
启动节点
执行下面命令后台启动:
nohup geth --nodiscover --maxpeers 3 --identity "private etherum" --rpc --rpccorsdomain "*" --datadir "/home/xiexiaodong/geth/node" --port "30303" --rpcapi "db,eth,net,web3" --networkid "95518" &
这里指定了 30303 作为监听端口号。
查看信息
执行下面命令连接 geth console:
geth attach ipc:/home/xiexiaodong/geth/node/geth.ipc
执行 admin.nodeInfo.enode
查看当前节点 enode 值:
记下 enode 值,将 @ 后面换成本机 IP:30303,将会在后面操作中使用该值:
["enode://094eb67a90f76030f584359eaf569c37ed6bcb53d83ed247d45c2d10b8500795d87175283ae1249ab13c58b5982202f5db373a08a49a5ed7d06a6b50ab7e304d@172.16.100.2:30303"]
第二台服务器节点
创建创世区块配置文件
同第一台服务器的创建创世区块配置文件操作一样,genesis.json 内容也完全相同。
初始化
同第一台服务器节点初始化操作一样。
启动节点
同第一台服务器节点初始化操作一样。
查看信息
执行下面命令连接 geth:
geth attach ipc:/home/xiexiaodong/geth/node/geth.ipc
执行 admin.peers
查看集群信息,此时为空。
添加静态节点文件
在第二台服务器的 geth datadir 目录下添加 static-nodes.json(绝对路径参考:/home/xiexiaodong/geth/node/static-nodes.json
) 文件,内容为上面记录的 enode 值:
["enode://094eb67a90f76030f584359eaf569c37ed6bcb53d83ed247d45c2d10b8500795d87175283ae1249ab13c58b5982202f5db373a08a49a5ed7d06a6b50ab7e304d@172.16.100.2:30303"]
重启 geth,执行 ps -ef | grep geth
查看 geth pid 为 1597:
然后执行 kill -9 1597
结束进程,然后执行 rm -rf nohup.out
删除当前目录的 nohup.out 文件,再执行启动节点命令:
nohup geth --nodiscover --maxpeers 3 --identity "tron" --rpc --rpccorsdomain "*" --datadir "/home/xiexiaodong/geth/node" --port "30303" --rpcapi "db,eth,net,web3" --networkid 98888 &
然后在任意台服务器 geth console 中执行 admin.peers
查看集群信息。
第三台服务器节点
和第二台服务器节点操作一致,static-nodes.json 中需要添加第一台和第二台服务器的 encode 值,同时将第三台服务器的 enode 值追加到第二台服务器上的 static-nodes.json 中后重启第二台服务器的 geth。全部完成后,在任意台服务器 geth console 中执行 admin.peers
都可以看到可以和其他两台服务器互连。
挖矿测试
在这三台服务器上分别执行下面操作:
1. 查看当前节点账号:eth.accounts
,为空;
2. 添加一个账号:personal.newAccount('123456')
。123456 为密码;
3. 查看第一个账号(下标为 0)的余额:eth.getBalance(eth.accounts[0])
。此时余额为 0;
4. 查看此时区块链上的块数:eth.blockNumber
。此时为块数 0;
5. 开始挖矿:miner.start()
。每一个节点第一次启动挖矿,需要生成相关数据,所以慢一些,挖矿动作会增加挖矿所在节点的第一个账号的余额(可以通过命令设置奖励到其他账号:miner.setEtherbase(eth.accounts[1])
),同时也会增加整个区块链的区块数。
6. 执行一段时间(至少等到出现第一个小锤子图标)后,结束挖矿:miner.stop()
。执行步骤 3 和 4 查看有何变化。
执行 eth.getBlock(160)
查看区块号是 160 的区块信息:
参数说明:
- go-ethereum 部署私有链
- go-ethereum 搭建本地测试私有链
- 使用 Go-Ethereum 1.7.2搭建以太坊私有链
- 使用 Go-Ethereum 1.7.2搭建以太坊私有链
- Ethereum部署私有合约常见问题汇总
- 区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
- 区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
- 区块链零基础开发----1.搭建基于以太坊go-ethereum的私有链环境
- 区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
- mac 下vscode 部署go ethereum 过程 注意节点
- 【区块链】go ethereum 安装与使用
- 【以太坊】Ethereum Popular Client: go-ethereum
- go-ethereum源码剖析:交易
- 以太坊Ethereum私链建立 、合约编译、部署
- 【区块链】搭建基于ethereum以太坊环境的私有链
- 【以太坊】本地搭建Ethereum私有网络
- 区块链学习笔记(一)Ethereum-Go开发环境搭建
- 区块链开发(十四)以太坊go-ethereum客户端查询交易列表探讨
- 关于 Swift Error 的分类|王巍
- Linux的远程登录方式:
- MySQL 分区表
- 消息推送之goeasy
- opencv的二值化0
- go-ethereum 部署私有链
- node http get setTimeout abort
- java 顺时针螺旋数组(只用一次for循环完成装填数据)
- Java基础学习笔记09——(final关键字,多态,抽象类,接口)
- Java
- scala-collection
- 百度搜索
- 让Unity3d PlaySetting Keystore 记住密码
- warning: the frame size of 1040 bytes is larger than 1024 bytes