Use docker
You can use Docker to run dispute explorer backend service Dispute-explorer.
Prerequisites
Download and install Docker.
Run Superproof backend Step-by-Step
Step 1. Config Environment file
mv .env.template .evn
#log_format you can use console or json
LOG_FORMAT=console
# config your mysql data source
MYSQL_DATA_SOURCE=<data-source>
# config chain name to tag your block chain name
BLOCKCHAIN=<block-chain-name>
# l1 rpc url example: eth json rpc url
L1_RPC_URL=<l1-rpc>
RPC_RATE_LIMIT=15
RPC_RATE_BURST=5
# the block number which before the first game has been created to make sure can not missing any game
FROM_BLOCK_NUMBER=6034337
# FROM_BLOCK_NUMBER block hash
FROM_BLOCK_HASH=0xafc3e42c5899591501d29649ffef0bfdec68f8d77e6d44ee00ef88cfb1a2f163
# the contract address of dispute game factory proxy
DISPUTE_GAME_PROXY_CONTRACT=0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1
API_PORT=8080
Step 2. Start Dispute Game Explorer backend service
use docker-compose to run this service
cd deploy
docker-compose -f docker-compose.yml up -d
Now, this project is running now.
Tip: if you just need a backend service to collect all data, Run Step 1 and Step 2.
Step 3. Run meiliSearch
Run a meiliSearch service to sync MySql data for front service to search quickly
cd deploy
docker-compose -f docker-compose-meiliSearch.yml up -d meiliSearch
Now, meiliSearch is running.
Step 4. Run meiliSync
first, we need to find the api_key of meiliSearch
curl -H "Authorization: Bearer <Token>" http://localhost:port/keys
You should get a result, similar to :
{
"results": [
{
"name": "Default Search API Key",
"description": "Use it to search from the frontend",
"key": "d09536ef1e2742b4792c607465dc169f659f1b2dcb0107bfdce2542b602ed534",
"uid": "675ff658-9e73-460c-a3be-c6fcee624edf",
"actions": ["search"],
"indexes": ["*"],
"expiresAt": null,
"createdAt": "2024-08-06T08:47:38.225365511Z",
"updatedAt": "2024-08-06T08:47:38.225365511Z"
},
{
"name": "Default Admin API Key",
"description": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
"key": "abc40e8457b32aa86d20ab0db0b42a86298b253209c4c31d9936b378e686d132",
"uid": "db1499f6-59a1-42c7-a13a-e18e191f456c",
"actions": ["*"],
"indexes": ["*"],
"expiresAt": null,
"createdAt": "2024-08-06T08:47:38.225052792Z",
"updatedAt": "2024-08-06T08:47:38.225052792Z"
}
],
"offset": 0,
"limit": 20,
"total": 2
}
And, use Default Admin API Key
, key
to update config.yml
meilisearch:
api_url: http://localhost:7701
api_key: abc40e8457b32aa86d20ab0db0b42a86298b253209c4c31d9936b378e686d132
launch the meiliSync service
cd deploy
docker-compose -f docker-compose-meiliSearch up -d meiliSync
Step 5. Validate meiliSync Service
We can visit meiliSearch api to validate meiliSync service. more meiliSearch docs
curl -H "Authorization: Bearer <Token>" http://localhost:port/indexes
You should get a result, similar to :
{
"results": [
{
"uid": "disputegame",
"createdAt": "2024-08-06T09:24:24.640693956Z",
"updatedAt": "2024-08-07T07:02:32.402360903Z",
"primaryKey": "id"
},
{
"uid": "gameclaim",
"createdAt": "2024-08-06T09:24:24.670117944Z",
"updatedAt": "2024-08-07T07:02:28.94487306Z",
"primaryKey": "id"
},
{
"uid": "gamecredit",
"createdAt": "2024-08-06T10:37:42.013472322Z",
"updatedAt": "2024-08-07T07:02:32.379350451Z",
"primaryKey": "id"
},
{
"uid": "syncevents",
"createdAt": "2024-08-06T09:24:24.696318772Z",
"updatedAt": "2024-08-07T07:02:30.382386632Z",
"primaryKey": "id"
}
],
"offset": 0,
"limit": 20,
"total": 4
}
If you get information like this, it means our deploy it`s success.
Step 6. Start frontend
pull the docker image
docker pull ghcr.io/optimism-java/dispute-explorer-frontend:development
config the nginx.conf
, below is a example, you should change the server part
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ~ /index/ {
proxy_pass ${Sepolia meiliSearch}; # replace with Sepolia meiliSearch service url
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Authorization "Bearer $TOKEN"; # replace TOKEN with Sepolia meiliSearch token
}
location ~ /indexMain/ {
proxy_pass ${Mainnet meiliSearch}; # replace with Mainnet meiliSearch service url
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Authorization "Bearer $TOKEN"; # replace TOKEN with Mainnet meiliSearch token
}
location ~ /api/ {
proxy_pass ${Sepolia api server}; # replace with Sepolia api service url
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~ /apiMain/ {
proxy_pass ${Mainnet api server}; # replace with Mainnet api service url
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
proxy_set_header X-Forward-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
start the image, replace the docker run -d -v
to the real nginx.conf
path. Then you can visit localhost:3000
docker run -d -v ${path to nginx.conf}:/etc/nginx/nginx.conf -p 3000:80 ghcr.io/optimism-java/dispute-explorer-frontend:development