BlockScout 浏览器搭建教程

BlockScout 浏览器搭建教程

BlockScout 是一个开源的以太坊浏览器,如官方所说

BlockScout is an Elixir application that allows users to search transactions, view accounts and balances, and verify smart contracts on the Ethereum network including all forks and sidechains.

Currently available full-featured block explorers (Etherscan, Etherchain, Blockchair) are closed systems which are not independently verifiable. As Ethereum sidechains continue to proliferate in both private and public settings, transparent, open-source tools are needed to analyze and validate transactions.

这里用它来为我们自己的公链(基于以太坊)搭建一个浏览器。

准备

安装之前我们需要先准备运行 BlockScout 所需要的环境,根据官方提供的信息我们需要先安装以下环境

Dependency Mac Linux
Erlang/OTP 23 brew install erlang Erlang Install Example
Elixir 1.10.x brew install elixir Elixir Install Example
Postgres 10.3+,11,12 brew install postgresql Postgres Install Example
Node.js 14.x.x brew install node Node.js Install Example
Automake brew install automake Automake Install Example
Libtool brew install libtool Libtool Install Example
Inotify-tools Not Required Ubuntu - apt-get install inotify-tools
GCC Compiler brew install gcc GCC Compiler Example
GMP brew install gmp Install GMP Devel
Make - sudo apt install makeif Debian 9
G++ Compiler - sudo apt install g++if Debian 9
Rust - Install Rust

Erlang 安装

根据官方提供 Demo 我们需要分别运行以下命令

wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_23.2.1-1~centos~7_amd64.rpm
yum install -y wxGTK-devel unixODBC-devel
yum install -y esl-erlang_23.2.1-1~centos~7_amd64.rpm

安装完成之后查看是否安装成功,成功界面如下

[root@test]# erl
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Eshell V10.0.5  (abort with ^G)

Elixir 安装

分别执行以下命令

wget https://github.com/elixir-lang/elixir/releases/download/v1.10.0/Precompiled.zip
unzip Precompiled.zip -d /opt/elixir

之后配置环境变量

vi /etc/profile   

然后在行末加入

export PATH="$PATH:/opt/elixir/bin"

然后让配置生效

source /etc/profile

最后验证是否成功安装

[root@test]# elixir -v
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.9.4 (compiled with Erlang/OTP 20)

PostgresSQL安装

依次执行如下命令

# Install the repository RPM:
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
yum install postgresql12-server

# Optionally initialize the database and enable automatic start:
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

# Initialize environment variables
# export PATH="/usr/pgsql-12/bin:$PATH"
# export LD_LIBRARY_PATH="/usr/pgsql-12/lib"
export PATH="$PATH:/opt/elixir/bin:/usr/pgsql-12/bin"
export LD_LIBRARY_PATH="/usr/pgsql-12/lib"

修改数据库的访问权限

vi /var/lib/pgsql/12/data/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

设置允许远程访问数据库

vi /var/lib/pgsql/12/data/postgresql.conf

# - Connection Settings -

listen_addresses = '*'              # what IP address(es) to listen on;

                                            # comma-separated list of addresses;
                                                                    # defaults to 'localhost'; use '*' for all
                                                                    # (change requires restart)
port = 5432                                             # (change requires restart)
max_connections = 100                           # (change requires restart)

然后重启数据库

systemctl restart postgresql-12

之后修改 postgres 账户的默认密码

# 切换到postgres账户
su postgres
 
# 进入SQL Shell
psql
 
# 键入如下指令,修改密码,笔者将密码修改为postgres。
ALTER USER postgres WITH PASSWORD 'postgres';
 
# 键入 “\q”退出SQL Shell,键入exit登出postgres账户
\q
 
exit
 
# 最后,测试一下是否修改成功,键入密码
psql -h 127.0.0.1 -p 5432 -U postgres -W

修改数据库存储目录

# 停掉数据库
service postgresql-12 stop
# 将旧数据复制到新的目录
cp -rf /var/lib/pgsql/12/ /vdb1/blockscout/pgsql/12/
# 设置用户和权限
chown -R postgres:postgres /vdb1/blockscout/pgsql/12/
chmod 700 /vdb1/blockscout/pgsql/12/
# 修改配置文件数据存储目录路径
find / -name postgresql-12.service
vi /usr/lib/systemd/system/postgresql-12.service
修改新的路径
# Location of database directory
Environment=PGDATA=/vdb1/blockscout/pgsql/12/data
# 重启数据库服务
service postgresql-12 start
# 验证修改是否生效
su postgres
psql
show data_directory;

安装PostGIS

yum -y install epel-release 

yum install postgis30_12.x86_64 postgis30_12-client.x86_64 postgis30_12-debuginfo.x86_64 postgis30_12-devel.x86_64 postgis30_12-docs.x86_64 postgis30_12-gui.x86_64 postgis30_12-utils.x86_64

安装NodeJs

依次运行一下命令

# 下载源代码包
wget https://nodejs.org/dist/v15.8.0/node-v15.8.0-linux-x64.tar.xz
 
# 解压源代码包
tar -xf node-v15.8.0-linux-x64.tar.xz
 
# 重命名
mv node-v15.8.0-linux-x64 nodejs
 
# 设置软连接,必须指定到可执行的node、npm文件哦~
ln -s /vdb1/blockscout/nodejs/bin/node /usr/bin/node
ln -s /vdb1/blockscout/nodejs/bin/npm /usr/bin/npm
 
 
# 设置环境变量,请根据你的安装目录进行设置
export PATH="$PATH:/vdb1/blockscout/nodejs/bin"

测试安装是否成功

node -v
npm -v

安装Automake

yum --enablerepo=epel group install -y "Development Tools"

安装Libtool

yum install -y libtool

安装Inotify-tools

yum install inotify-tools

安装GCC Compiler

yum install -y gcc-c++

安装GMP

yum --enablerepo=epel install -y gmp-devel

安装Make

yum install make

安装Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

部署BlockScout

拉取源码

git clone https://github.com/poanetwork/blockscout
cd blockscout

生成 secret_key_base ,时间比较久需要耐心等待

mix deps.get
mix phx.gen.secret

然后添加环境变量

export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/blockscout"
 
export DB_HOST=localhost
export DB_PASSWORD=postgres
export DB_PORT=5432
export DB_USERNAME=postgres

export SECRET_KEY_BASE="your key"

export ETHEREUM_JSONRPC_VARIANT=geth
export ETHEREUM_JSONRPC_HTTP_URL="http://localhost:8545"
export ETHEREUM_JSONRPC_WS_URL="ws://localhost:8545"

export SUBNETWORK= MAINNET

export PORT=4000
export COIN="Test Coin"

安装Mix依赖和编译应用程序

mix do deps.get
mix do local.rebar --force
mix do deps.compile
mix do compile

删除、创建和迁移数据库

mix do ecto.drop, ecto.create, ecto.migrate

安装Node.js依赖

cd apps/block_scout_web/assets
npm install && node_modules/webpack/bin/webpack.js --mode production

如果出现如下错误

gyp WARN EACCES current user does not have permission to access the dev dir "/root/.cache/node-gyp/12.16.1"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/vdb1/blockscout/blockscout/apps/block_scout_web/assets/node_modules/keccak/.node-gyp"
gyp WARN install got an error, rolling back install
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/vdb1/blockscout/blockscout/apps/block_scout_web/assets/node_modules/keccak/.node-gyp'
gyp ERR! System Linux 3.10.0-1127.13.1.el7.x86_64
gyp ERR! command "/vdb1/blockscout/nodejs/bin/node" "/vdb1/blockscout/nodejs/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /vdb1/blockscout/blockscout/apps/block_scout_web/assets/node_modules/keccak
gyp ERR! node -v v12.16.1
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! keccak@2.1.0 rebuild: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the keccak@2.1.0 rebuild script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Keccak bindings compilation fail. Pure JS implementation will be used.

尝试执行命令

sudo npm install && node_modules/webpack/bin/webpack.js --mode production -g --unsafe-perm

建立用于部署的静态资产,执行命令

cd apps/block_scout_web/
mix phx.digest

启用HTTPS

cd apps/block_scout_web/
mix phx.gen.cert blockscout blockscout.local

然后配置 /etc/hosts

vi /etc/hosts

::1 localhost   localhost.localdomain   localhost6  localhost6.localdomain6     blockscout blockscout.local
127.0.0.1   localhost   localhost.localdomain   localhost4  localhost4.localdomain4     blockscout blockscout.local

启动应用

回到项目根目录执行命令

mix phx.server

最后打开浏览器做测试
http://localhost:4000

修改默认配置,修改UI后面有时间再写吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348