2021年618京享红包 - 618大促主会场
九阳 Joyoung电磁炉 电陶炉 2200W大功率 家用火锅套装 旋转控温 红外光波加热 H22-x3 赠烤盘
凯迪仕电子锁618狂欢购
有健康 更热爱
美丽雅品牌会员周

区块链以太坊go-ethereum源码解析(一)

冷星魂 1年前   阅读数 140 0

咱们先来搭建环境

安装完CentOS7以后,我们下载git、wget、vim、gcc-c++、ntp组件、nodejs以及添加epel第三方安装源。

本步骤非常重要,可以节约大家在后续安装Ethereum以及开放框架时经常出错而到处摸索的时间。

简要介绍下各个工具的说明:

# ntp:网络时钟同步组件;Ethereum的rpc网络需要时间同步;

# nodejs:ethereum前端开发JavaScript包管理软件

yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y

下载最新golang(当前最新版本为1.11)

我的go语言版本为1.11 

在下载该包时,是https下载,但是会出错原因是需要检查证书

解决方法:

如果使用 wget下载https开头的网址域名 时报错,你需要加上 --no-check-certificate (不检查证书)选项

wget --no-check-certificate  https://storage.googleapis.com/golang/go1.11.linux-amd64.tar.gz

解压golang并将解压后的目录作为go语言安装目录

vi /etc/profile

在最后面加入,因为我的目录是/opt/golang/go

然后保存,进行刷新

source /etc/profile

我们在/opt下,进行下载代码,使目录为/opt/go-ethereum

git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make all

make以后在/etc/profile下,再在path中加入geth路径

export PATH=$PATH:/opt/go-ethereum/build/bin

然后保存,进行刷新

source /etc/profile

安装cmake:智能合约编译solc需cmake编译

本来要用yum一起安装cmake的,但yum与epel源中只有2.8.x版本的cmake,而智能合约编译器solc的安装需要3.0.x以上的cmake版本。故只能去官网独立安装。

下载cmake最新版本,登录https://cmake.org/download/,找到最新版本下载地址

在/opt下创建cmake目录,然后进去

cd /opt/cmake
wget https://cmake.org/files/v3.12/cmake-3.12.4-Linux-x86_64.tar.gz

解压后由于我们下载的这个包是编译好的包,我们直接进行将该目录指定到path变量上就可以

tar -xzvf cmake-3.12.4-Linux-x86_64.tar.gz 

我们看到

说明确实是已经编译好的包,我们需要将该bin目录指定到环境变量上

export PATH=$PATH:/opt/cmake/cmake-3.12.4-Linux-x86_64/bin
source /etc/profile

另外geth会用到8078和30303端口,放开防火墙端口 8078与30303

其实我们就直接关闭了防火墙,并且开机禁用防火墙

systemctl stop firewalld
systemctl disable firewalld

我们在opt下创建我们的文件夹

mkdir /opt/mychain

然后在其中

配置geth私有的创世纪的配置文件:genesis.json,该文件描述了如何初始化一个私有的gethereum

vim genesis.json
# 输入以下内容,然后存盘退出
{
  "nonce": "0x0000000000000042",
  "timestamp": "0x00",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x00",
  "gasLimit": "0x80000000",
  "difficulty": "0x400",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x2D356ee3F5b8718d8690AFCD31Fe2CB5E602677e",
  "alloc": {},
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  }
}

创建私有网络的gethereum,我们在/opt/mychain下创建data目录,用于存放数据,这就是初始化

mkdir /opt/mychain/data
geth --datadir "/opt/mychain/data" init genesis.json

初始化完成以后我们就可以启动了

我们常用的启动的方法是可直接启动默认的geth开发环境,注意:双减号、2与>>之间没有空格

geth --dev console 2>> geth_dev_log

进入到console下其实就进入了Ethereum的JavaScript环境,这里就是伟大的EVM(以太坊虚机)了。

如果想关注在操作过程中的日志,可以另起一个SSH通过tail观察

cd /opt/mychain
tail -f geth_dev_log

OK,如果出现上图的运行结果,说明gethereum的框架已经顺利搭建完成。

阅读更多
(function(){ function setArticleH(btnReadmore,posi){ var winH = $(window).height(); var articleBox = $("div.article_content"); var artH = articleBox.height(); if(artH > winH*posi){ articleBox.css({ 'height':winH*posi+'px', 'overflow':'hidden' }) btnReadmore.click(function(){ if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){ if(!window.csdn.anonymousUserLimit.judgment()){ window.csdn.anonymousUserLimit.Jumplogin(); return false; }else if(!currentUserName){ window.csdn.anonymousUserLimit.updata(); } } articleBox.removeAttr("style"); $(this).parent().remove(); }) }else{ btnReadmore.parent().remove(); } } var btnReadmore = $("#btn-readmore"); if(btnReadmore.length>0){ if(currentUserName){ setArticleH(btnReadmore,3); }else{ setArticleH(btnReadmore,1.2); } } })()
注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: