Ethereum Block Explorer
WORK IN-PROGRESS (NOTE: NOT READY for Production)
This is a test version. so, USE THIS AT YOUR OWN RISK.
build all and tested on GNU/Linux
GNU/Linux: Ubuntu 20.04_x64 LTS
Ethereum: geth vx.x.x
Python: v3.8.10 (pip 20.0.2)
Go: go1.22.5 linux/amd64
Network: Ethereum Private Network
Node.js: node-v20.15.0
MySQL: v8.0.32
HTTP RPC Server:
Fetcher Service: Supports ETH, ERC-20, ERC-1155 (NFT)
NFT Metadata APIs
Source-based from Filscan-frontend (Vue.js): https://github.com/Filscan-Team/filscan-frontend
---------------------------------
Python
---------------------------------
$ sudo apt-get install wget python3 python3-pip
$ sudo apt-get install mysql-server
or
$ sudo apt-get install mariadb-server
---------------------------------
Ethereum Private Network
---------------------------------
SEE:
- https://github.com/godmode2k/blockchain/tree/master/build_guide
- (Docker) https://github.com/godmode2k/blockchain/tree/master/build_guide/ethereum
---------------------------------
Golang
---------------------------------
$ wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
$ tar xzvf go1.22.5.linux-amd64.tar.gz -C /usr/local/
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.profile
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.bashrc
---------------------------------
Node.js
---------------------------------
$ wget https://nodejs.org/dist/v20.15.0/node-v20.15.0-linux-x64.tar.xz
$ tar xJvf node-v20.15.0-linux-x64.tar.xz
$ echo 'export PATH=$PATH:$HOME/node-v20.15.0-linux-x64/bin' >> $HOME/.profile
$ echo 'export PATH=$PATH:$HOME/node-v20.15.0-linux-x64/bin' >> $HOME/.bashrc
---------------------------------
Backend
---------------------------------
1. Ethereum
- run 'geth' with port "8544"
2. RPC Server: backend/rpc_server_main.go
(Edit)
- // Connect to an Ethereum RPC Server
- var SERVER_ADDRESS = "127.0.0.1"
- var SERVER_PORT = "8544"
-
- // Connect to Database
- // SEE: mysql.sql
- var DB_SERVER_ADDRESS = "127.0.0.1:3306"
- var DB_NAME = "ethereum_block_explorer"
- var DB_LOGIN_USERNAME = "root"
- var DB_LOGIN_PASSWORD = "mysql"
-
- // HTTP RPC Server
- var HTTP_RPC_SERVER_HOST_PORT = ":1234" // Internal
- var HTTP_JSONRPC_SERVER_HOST_PORT = ":1235" // External
3. Fetcher Service: server/eth_txns_fetcher_main_func.go
(Edit)
- // Connect to RPC Server
- var SERVER_ADDRESS = "127.0.0.1"
- var SERVER_PORT = "8544"
- // Connect to Database
- var DB_SERVER_ADDRESS = "127.0.0.1:3306"
- var DB_NAME = "ethereum_block_explorer"
- var DB_LOGIN_USERNAME = "root"
- var DB_LOGIN_PASSWORD = "mysql"
// Dependencies
$ go get -u github.com/go-sql-driver/mysql
$ go get github.com/mattn/go-sqlite3
4. Database
$ mysql -u root -p < mysql.sql
5. NFT Metadata APIs: nft_meta_apis/nft_meta_api_golang/nft_meta_apis_main.go
(Edit)
- var CERT = "/etc/ssl/example.com+4.pem"
- var CERT_KEY = "/etc/ssl/example.com+4-key.pem"
- //var HOST = ":443" // https
- var HOST = ":8888" // http
---------------------------------
Frontend
---------------------------------
.env.development
.env.pre
.env.production
.env.test
(Edit)
- // HTTP RPC Server (backend)
- VUE_APP_BASE_URL=http://x.x.x.x:1235
vue.config.js
(Edit)
- // Service port
- port: "4396"
// dependency
$ npm install
---------------------------------
Run
---------------------------------
// Backend
$ cd backend
$ go run rpc_server_main.go
// Frontend
$ cd frontend
$ npm run serve
(Web Browser)
http://127.0.0.1:4396
// Backend: NFT Meta APIs {
$ cd nft_meta_apis/nft_meta_api_golang
$ sh run_ntf_meta_apis.sh
(resource path)
nft_meta_apis/nft_meta_api_golang/assets/resources/
Directory: <NFT-Name>/: nft1/
Metadata : <NFT-Name>_<id>_meta.json: nft1_0_meta.json
Image : <NFT-Name>_<id>.jpg: nft1_0.jpg
nft1/nft1_0_meta.json
nft1/nft1_0.jpg
(metadata)
$ curl http://172.17.0.2:8888/apis/tokens/nft1/0
$ curl http://172.17.0.2:8888/apis/tokens/nft1/1
{
"description": "Test NFT1 #1 image: warty-final-ubuntu",
"external_url": "http://172.17.0.2:8888/apis/tokens/nft1/1",
"image": "http://172.17.0.2:8888/resources/tokens/nft1/1",
"name": "Test NFT1 #1",
"attributes": []
}
(image)
$ wget http://172.17.0.2:8888/resources/tokens/nft1/0
$ wget http://172.17.0.2:8888/resources/tokens/nft1/1
// Backend: NFT Meta APIs }
---------------------------------
NodeJS: node-v20.15.0
Error:
---------------------------------
// Frontend
$ cd frontend
// ERROR #1
$ npm install
(ERROR)
npm error gyp ERR! UNCAUGHT EXCEPTION
npm error gyp ERR! stack TypeError: Cannot assign to read only property 'cflags' of object '#<Object>'
...
npm error gyp ERR! node -v v20.15.0
npm error gyp ERR! node-gyp -v v7.1.2
npm error gyp ERR! Node-gyp failed to build your package.
(FIX)
// node-sass
// https://github.com/sass/node-sass
//
// NodeJS 20: 9.0+ (supported)
// NodeJS 19: 8.0+ (supported)
// ...
(EDIT)
$ vim package.json
"devDependencies": {
...
"node-sass": "^9.0.0",
...
}
$ npm install
// ERROR #2
$ npm run serve
(ERROR)
Error: error:0308010C:digital envelope routines::unsupported
(FIX)
$ export NODE_OPTIONS=--openssl-legacy-provider
$ npm run serve
or
$ NODE_OPTIONS=--openssl-legacy-provider npm run serve
// ERROR #3
$ NODE_OPTIONS=--openssl-legacy-provider npm run serve
(ERROR)
Node Sass version 9.0.0 is incompatible with ^4.0.0 || ^5.0.0 || ^6.0.0.
(FIX)
$ rm -f package-lock.json
$ rm -fr node_modules
$ npm install
$ npm run serve
Ethereum Block Explorer