环境:
宿主系统:Windows 10家庭版
虚拟机: VMware Workstation Pro 16.1.2
操作系统:Ubuntu 20.04.3 (LTS) 64位(两台,一台一节点)
geth版本: 1.9.25
一.安装geth
(1)通过apt-get方式在线安装
sudo apt-get install software-properties-commonsudo add-apt-repository -y ppa:ethereum/ethereumsudo apt-get updatesudo apt-get install ethereum
但是通过apt-get会自动安装最新版本的(最新版本一般都不够稳定)所以为了更顺利地完成实验,我使用源代码安装的方式来安装1.9版本的geth。
(2)源代码安装
注:下述操作如果出现命令没安装的情况,根据命令行给出的提示信息安装即可。
1.克隆github仓库:
git clone https://github.com/ethereum/go-ethereum.git
2.从源码构建Geth :
①进入ethereum目录:cd go-ethereum
cd go-ethereum
②切换geth版本 :
git checkout release/1.9
③打包安装:
make geth
④配置环境变量:
export GETHROOT=/home/khaz/下载/go-ethereum(go-ethereum路径)export PATH=$PATH:$GETHROOT/build/bin
注:发现每次进入命令行都要重新配置环境变量,否则会报错找不到geth命令。
解决方法: source /etc/profile关闭终端后失效要重新输入的原因_一名普通码农的菜地-CSDN博客_source 失效https://blog.csdn.net/cdnight/article/details/86653006?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-12.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-2~default~OPENSEARCH~default-12.nonecase
⑤查看安装是否成功:
geth version
二.配置节点
保证节点之间是互相连通的,并且不受外网影响。
(nat模式下,将网络设置改为本地链路,重启或者重新加载网络设置即可)
节点1 ping:
节点2 ping:
建立私有链:只需要完成一次后,将文件复制一份到克隆的虚拟机中即可
①创建创始域文件(用来生成属于我们自己的私有链的文件)
mkdir ethereumcd ethereummkdir datavi genesis.json
vi操作: Ubuntu中的Vi编辑器的基本操作命令_自我总结,分享所有,快乐每一天-CSDN博客_ubuntu系统vi编辑器
genesis.json文件内容
{ \"config\": { \"chainId\": 666, \"homesteadBlock\": 0, \"eip150Block\": 0, \"eip150Hash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"eip155Block\": 0, \"eip158Block\": 0, \"byzantiumBlock\": 0, \"constantinopleBlock\": 0, \"petersburgBlock\": 0, \"istanbulBlock\": 0, \"ethash\": {} }, \"nonce\": \"0x0\", \"timestamp\": \"0x5ddf8f3e\", \"extraData\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"gasLimit\": \"0x47b760\", \"difficulty\": \"0x00001\", \"mixHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\", \"coinbase\": \"0x0000000000000000000000000000000000000000\", \"alloc\": { }, \"number\": \"0x0\", \"gasUsed\": \"0x0\", \"parentHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\"}
②创建创世区块(在ethereum目录下)
geth --datadir data init genesis.json
三.连接节点
前提:两节点要加入同一条私链,即这两个节点初始化的创世区块(即genesis.json)必须要一模一样。启动节点的时候要使用同样的networkid(即genesis.json中chanlid参数)。节点间的port和rpcport要不同。
启动私有链
注:如果是最新版本的geth需要把rpc改为http,rpcxxx改为http.xxx
节点1
geth --port 3000 --networkid 666 --datadir=\"data\" --maxpeers=3 --rpc --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain \"*\" --rpcapi=\"db,eth,web3,personal,admin,txpool\" console --allow-insecure-unlock
节点2
geth --port 3001 --networkid 666 --datadir=\"data\" --maxpeers=3 --rpc --rpcport 8546 --rpcaddr 127.0.0.1 --rpccorsdomain \"*\" --rpcapi=\"db,eth,web3,personal,admin,txpool\" console --allow-insecure-unlock
出现上图说明启动成功。
创建账户,这里为了方便密码都设为“123”
personal.newAccount(\"123\")
节点1:
节点2:
返回的绿色信息是创建的账户所对应的哈希地址
开始连接
获取节点2信息
admin.nodeInfo.enode
\”enode://eb72c7e321e68f07c4113668fab81a8b098fb0518c167a50e6c6e4f1f99f411359dc111064fa58869b4646635cbf588df3a39f176e27556c9246d2e88737cc81@169.254.128.131:3001\”
注意将红色部分改为节点2的真实ip地址(查看网络设置中的IPv4地址),因为admin.nodeInfo.enode输出的不一定是正确的
在节点1中加入节点2:
admin.addPeer(\"enode://eb72c7e321e68f07c4113668fab81a8b098fb0518c167a50e6c6e4f1f99f411359dc111064fa58869b4646635cbf588df3a39f176e27556c9246d2e88737cc81@169.254.128.131:3001\")
用net.peerCount和admin.peers命令查看是否连接成功
可以看到节点数为1,并且展示了连接的节点,说明连接成功。
四.挖矿
(1)开始挖矿
miner.start(1)
会先出现上述情况,为挖矿初始化,当参数percentage的值到达100后,就会正式开始挖矿。
初始化完成后等待一会儿就会出现下图,说明挖矿成功。
节点2中会自动进行同步区块信息
在节点1和节点2 中使用eth.blockNumber查看区块高度(刚刚挖的区块数量)都显示下图,说明同步成功。
(2)停止挖矿
miner.stop()
五.交易
(1)查询账户余额
eth.getBalance(eth.accounts[0])
节点1
节点二
(2)解锁钱包
因为以太坊钱包大概每5分钟就会被锁住,所以交易和创建合约都需要先解锁账户。
personal.unlockAccount(eth.accounts[0])
返回true说明解锁成功。
(3)转账
设置转账额度:参数(金额,单位)
amount = web3.toWei(8,\'ether\')
转账:参数({from:转账人钱包地址,to:接收人钱包地址,value:amount})
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
图中最后一行为此次交易的hash值。
注意如果此时去查看账户余额会发现余额没有变化,这是因为要处于挖矿状态下,交易才会进行。
miner.start(1)启动挖矿后再查看,
可以看到节点2的账户的余额为刚刚转账的额度,说明转账成功。
(4)查询交易:参数(交易的hash值)
eth.getTransaction(\"0xf308c404dfcccaec2bef5aaf427ca453f6cca2d9565f4a3cab7e48133e3e5cc4\")
参考: Ubuntu中的Vi编辑器的基本操作命令_自我总结,分享所有,快乐每一天-CSDN博客_ubuntu系统vi编辑器
Linux系统下安装Geth客户端_shciily的博客-CSDN博客_linux安装geth
( 全网最详细的Ubuntu挖矿教程(私有链搭建、挖矿、转账和交易)_自我总结,分享所有,快乐每一天-CSDN博客_ubuntu挖矿