|
环境:
??????宿主系统: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-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
????????但是通过apt-get会自动安装最新版本的(最新版本一般都不够稳定)所以为了更顺利地完成实验,我使用源代码安装的方式来安装1.9版本的geth。
? ? ? ??(2)源代码安装
安装git命令
sudo apt install git
?注:下述操作如果出现命令没安装的情况,根据命令行给出的提示信息安装即可。
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 ethereum
cd ethereum
mkdir data
vi 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挖矿
|