区块链学习之1在Ubuntu中搭建以太坊私有链

其实之前从没有了解过“区块链”、“比特币”,只觉得它是一个很高深、很神秘、一听就很复杂的东西。
然鹅,我没想到这学期有一门课程竟然是学习区块链。
不在我的规划之中,还得占用我的时间和精力去完成作业,有点小烦躁。
但是,既然学了,那就好好学吧,总会有收获。

第一节课的任务是在Ubuntu中搭建以太坊私有链。
接下来进入正题:


一、准备环境

1.安装Ubuntu16.04的虚拟机:
在这里插入图片描述
2.安装Ubuntu系统:
在这里插入图片描述
3.安装VM Tools:
在这里插入图片描述
4.更新源:

sudo gedit /etc/apt/sources.list

在这里插入图片描述
然后替换成清华的、阿里云的都可以,具体教程网上找。

更新源:

sudo apt-get update

在这里插入图片描述
5.后面需要用vim文本编辑器修改配置文件,所以还要安装vim:

sudo apt-get install vim-gtk
  • 需要提醒一下,vim有好几个版本,我之前都安装失败,然后看到有一个教程是安装的这个版本,然后就成功了。

在这里插入图片描述

二、安装go语言环境

1.在虚拟机中下载go语言的安装包:

wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz

在这里插入图片描述
2.在下载好的压缩包的目录下,将其解压到 /usr/local 文件夹下:

sudo tar -xzvf go1.10.3.linux-amd64.tar.gz -C /usr/local

在这里插入图片描述
在这里插入图片描述
3.在Home目录下新建一个文件夹go:

mkdir go

在这里插入图片描述
4.配置环境变量
打开环境变量配置文件:

sudo vim ~/.bashrc

将下列代码复制粘贴到文件最后,保存退出:

export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOBIN

在这里插入图片描述
使环境变量生效:

source ~/.bashrc

在这里插入图片描述
5.查看是否安装成功:

go version

在这里插入图片描述
至此,go语言环境已经安装完成!

三、安装以太坊Ethereum客户端Geth

Geth是GoEthereum开源项目的简称,它是使用Go语言编写且实现了Ethereum协议的客户端软件,也是目前用户最多,使用最广泛的客户端。

1.依次输入以下命令:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
  • 我在执行第二条命令sudo add-apt-repository -y ppa:ethereum/ethereum的时候遇到了报错!然后在经过了长达七个多小时的迂回绕转、艰苦奋战,最后想到了解决办法!
    在这里插入图片描述
    如果你的报错信息和我下图所示一样的话,可以尝试一下我的方法:

    在这里插入图片描述

  • 1.首先要确保自己的虚拟机能连上网,具体的配网教程网上找

  • 2.如果连了网依然报错的话,可以尝试更新Ubuntu软件包仓库管理:
    在这里插入图片描述

  • 3.添加geth的PPA源,在https://launchpad.net/ubuntu/+ppas搜索geth的PPA源,将其添加到“其他软件”里,也要用sudo gedit /etc/apt/sources.list写进源文件里:
    在这里插入图片描述
    在这里插入图片描述
    更新完成以后再来执行上面的命令,就可以正常执行第二条命令了。

  • 然鹅,第四条命令sudo apt-get install ethereum在执行的时候也会出现下图的报错。我找到的解决办法就是:不停的重复执行这条命令
    因为虽然它每次都失败,但它的下载进度是累加的,我们可以一直重复下载,直到进度条拉满。我用了一个晚上都没下好,第二天早上起来才下好的:
    在这里插入图片描述

2.查看是否安装成功:

geth version

在这里插入图片描述
至此,Geth安装完成!

四、搭建以太坊私有链

1.新建文件夹例如Mychain,用来保存私有链的数据:

mkdir Mychain

在这里插入图片描述
2.创建创世块文件genesis.json:

vim genesis.json

写入以下内容:

  • 我本来按照老师的要求写入指定的创世块文件,但是出现报错信息:
    Failed to write genesis block: unsupported fork
    ordering: eip150Block not enabled, but eip155Block enabled at 0
    上网查了一下,于是改成了以下内容:
{
  "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": "0x00002",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": { },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

3.初始化创世区块,并指定数据存放路径:

geth --datadir Mychain init genesis.json

在这里插入图片描述
4.初始化成功后,会在数据目录 Mychain中生成 geth和 keystore 两个文件夹。其中 geth/chaindata 中存放的是区块数据,keystore 中存放的是账户数据:
在这里插入图片描述
5.启动私有链节点:

geth --identity "TestNode" --rpc --rpcport "8545" --datadir mydata --port "30303" --networkid 6666 --nodiscover console
  • identity:指定节点 ID
  • rpc:表示开启 HTTP-RPC 服务;
  • rpcport:指定 HTTP-RPC 服务监听端口号(默认为 8545);
  • datadir:指定区块链数据的存储位置;
  • port:指定和其他节点连接所用的端口号(默认为 30303);
  • networkid: 指定私有链网络号;
  • nodiscover:关闭节点发现机制,防止加入有同样初始配置的陌生节点

出现了如下页面就表示启动了区块链节点并进入了该节点的控制台:
在这里插入图片描述
至此,Ubuntu16.04下的以太坊私有链环境已经搭建好了!


总结一下:
环境不停报错,我已经记不清我尝试过过少次方法、恢复了多少次快照了。
搭环境这种事,真的是别人能搭好、你用同样的方法就不一定能搭好,总会遇到一些奇奇怪怪的报错……所以虽然我的安装步骤是已经进行了种种排错的,但可能你们按照我的步骤来搭建依然会遇到问题。
收获就是,这应该是我真正意义上的第一次独立完成的环境搭建。在这个过程中,更大的收获不是搭建成功,而是遇到报错时的排错思维。因为并不是所有报错问题别人都遇到了、网上都有解决方法,而是需要自己分析,自己判断大致方向,然后去找相应的解决方法后灵活套用到自己的问题上。
在这里插入图片描述

发布了66 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u011785309/article/details/104778457
今日推荐