IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 实验:Ubuntu虚拟机实现geth私有链搭建和双节点连接 -> 正文阅读

[区块链]实验:Ubuntu虚拟机实现geth私有链搭建和双节点连接

环境:

??????宿主系统: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挖矿

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:14:47  更:2021-12-26 22:15:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:40:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码