Metis RPC endpoint: Difference between revisions
From Chainlink Community Wiki
No edit summary |
No edit summary |
||
(8 intermediate revisions by the same user not shown) | |||
Line 21: | Line 21: | ||
<code>sudo apt update && sudo apt upgrade && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common</code> | <code>sudo apt update && sudo apt upgrade && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common</code> | ||
Now, we'll need to get our aptitude sources updated to include the Docker-CE repository. | Now, we'll need to get our aptitude sources updated to include the Docker-CE repository. | ||
Line 31: | Line 32: | ||
<code>curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - | <code>curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - | ||
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"</code> | ||
Once we have added the repo and the necessary key, we want to exit the root user. | Once we have added the repo and the necessary key, we want to exit the root user. | ||
<code>exit</code> | <code>exit</code> | ||
Line 43: | Line 44: | ||
<code>sudo apt update && sudo apt install docker-ce</code> | <code>sudo apt update && sudo apt install docker-ce</code> | ||
Now that we have Docker-CE installed, we'll need to add our user to the docker group. | Now that we have Docker-CE installed, we'll need to add our user to the docker group. | ||
Line 50: | Line 50: | ||
<code>sudo usermod -aG docker $USER</code> | <code>sudo usermod -aG docker $USER</code> | ||
Then, we will install docker-compose | |||
<code>sudo apt install -y docker-compose</code> | |||
Line 84: | Line 88: | ||
Once that has started successfully, we'll then want to start the L2 service | Once that has started successfully, we'll then want to start the L2 service | ||
<code>docker-compose up -d l2geth</code> | <code>docker-compose up -d l2geth</code> | ||
<H3>Example docker-compose.yml:</H3> | |||
< | |||
<pre style="white-space:pre-wrap; width:100%; border:1px solid lightgrey; background:black; color:white;">version: "3" | |||
services: | |||
dtl: | |||
image: metisdao/mvm-andromeda:dtl | |||
entrypoint: ./dtl.sh | |||
restart: unless-stopped | |||
stop_grace_period: 30s | |||
environment: | |||
URL: https://metis-us-east-2-mainnet-json.s3.us-east-2.amazonaws.com/addresses.json | |||
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: "http://10.10.100.42:8545" | |||
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT: "https://andromeda.metis.io/?owner=1088" | |||
DATA_TRANSPORT_LAYER__SYNC_FROM_L1: "false" | |||
DATA_TRANSPORT_LAYER__SYNC_FROM_L2: "true" | |||
DATA_TRANSPORT_LAYER__L2_CHAIN_ID: "1088" | |||
DATA_TRANSPORT_LAYER__DB_PATH: /data/db | |||
DATA_TRANSPORT_LAYER__SERVER_PORT: "7878" | |||
DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL: "1000" | |||
DATA_TRANSPORT_LAYER__CONFIRMATIONS: "0" | |||
DATA_TRANSPORT_LAYER__POLLING_INTERVAL: "100" | |||
DATA_TRANSPORT_LAYER__LOGS_PER_POLLING_INTERVAL: "2000" | |||
DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS: "true" | |||
DATA_TRANSPORT_LAYER__SERVER_HOSTNAME: "0.0.0.0" | |||
expose: | |||
- 7878 | |||
volumes: | |||
- $PWD/chaindata/dtl:/data | |||
logging: | |||
driver: "json-file" | |||
options: | |||
max-size: "2m" | |||
max-file: "10" | |||
l2geth: | |||
image: metisdao/mvm-andromeda:l2geth-replica | |||
entrypoint: sh ./geth.sh | |||
restart: unless-stopped | |||
stop_grace_period: 2m | |||
env_file: | |||
- ./geth.env | |||
environment: | |||
ROLLUP_BACKEND: "l2" | |||
URL: https://metis-us-east-2-mainnet-json.s3.us-east-2.amazonaws.com/addresses.json | |||
L2GETH_GENESIS_URL: https://metis-us-east-2-mainnet-json.s3.us-east-2.amazonaws.com/state-dump.latest.json | |||
ROLLUP_CLIENT_HTTP: http://dtl:7878 | |||
L2_URL: https://andromeda.metis.io/?owner=1088 | |||
ETH1_CTC_DEPLOYMENT_HEIGHT: 13626959 | |||
EMERGENCY_FORK020222_NUMBER: 750000 | |||
volumes: | |||
- $PWD/chaindata/l2geth:/root/.ethereum | |||
- $PWD/geth.sh:/geth.sh | |||
expose: | |||
- 8545 | |||
- 8546 | |||
ports: | |||
- 8545:8545 | |||
- 8546:8546 | |||
logging: | |||
driver: "json-file" | |||
options: | |||
max-size: "2m" | |||
max-file: "10"</pre> | |||
<H2>You can check your local RPC node's sync status and latest block against the explorer with the following bash script:</H2> | |||
<pre style="white-space:pre-wrap; width:100%; border:1px solid lightgrey; background:black; color:white;">#!/bin/bash | |||
# blue foreground | |||
blue_fg=$(tput setaf 6) | |||
# reset to default | |||
reset=$(tput sgr0) | |||
# SET VARS | |||
BLOCK_HEIGHT=$(curl -s -H "Content-Type: application/json" http://localhost:8545 -d '{"jsonrpc": "2.0", "id": 123, "method": "eth_blockNumber"}' | jq -r .result) | |||
ANDROMEDA_METIS_BLOCK_HEIGHT=$(curl -s -d "module=block&action=eth_block_number" -X POST https://andromeda-explorer.metis.io/api | jq -r .result) | |||
IS_SYNCING=$(curl -s -H "Content-Type: application/json" http://localhost:8545 -d '{"jsonrpc": "2.0", "id": 123, "method": "eth_syncing"}' | jq .) | |||
echo "----------------------" | |||
echo "RPC Node block height: ${blue_fg}$((BLOCK_HEIGHT))${reset}" | |||
echo "Metis Explorer block height: ${blue_fg}$((ANDROMEDA_METIS_BLOCK_HEIGHT))${reset}" | |||
VAR1=$(curl -s -H "Content-Type: application/json" http://localhost:8545 -d '{"jsonrpc": "2.0", "id": 123, "method": "eth_syncing"}' | jq .result) | |||
VAR2="false" | |||
if [ "$VAR1" = "$VAR2" ]; then | |||
echo "Sync Status: ${blue_fg}Node is synced.${reset}" | |||
else | |||
echo "${blue_fg}Node is ${yellow_fg}NOT${blue_fg} synced.${reset}" | |||
fi</pre> | |||
<H3>Example Output:</H3> | |||
<pre style="white-space:pre-wrap; width:100%; border:1px solid lightgrey; background:black; color:white;">./checkState.sh | |||
---------------------- | |||
RPC Node block height: 2536042 | |||
Metis Explorer block height: 2536042 | |||
Sync Status: Node is synced.</pre> |
Latest revision as of 17:03, 6 May 2022
Metis RPC endpoint detailsThis is a general guide on deploying an Metis RPC endpoint for your Chainlink Node(s).Official Metis Docs are available here |
NOTE
Metis RPC endpoints:
You Chainlink node has two connections methods. Websocket and HTTP.
As these can vary between networks, the default values for an Metis node are:
Websocket ws://<your_ip_address>:8546
HTTPhttp://<your_ip_address>:8545
Install Docker-CE
Install dependencies first.
sudo apt update && sudo apt upgrade && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
Now, we'll need to get our aptitude sources updated to include the Docker-CE repository.
Now, we'll need to get our aptitude sources updated to include the Docker-CE repository.
These commands must be run as root.
sudo su
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Once we have added the repo and the necessary key, we want to exit the root user.
exit
NOTE
$
if you're a non-root user. If you're in an elevated (root) TTY session, your shell prompt will display a #
Since we've modified our aptitude sources, we'll need to update them before we can install docker-ce
sudo apt update && sudo apt install docker-ce
Now that we have Docker-CE installed, we'll need to add our user to the docker group.
(The prevents us from having to run docker commands with elevated (root) permissions)
sudo usermod -aG docker $USER
Then, we will install docker-compose
sudo apt install -y docker-compose
Next, we'll get our Metis node deployed and synced.
Deploy Metis RPC Node
First, we'll need to create a new directory house the container volume.
mkdir ~/.metis-data
We'll need to clone the Metis repo
git clone https://github.com/ericlee42/metis-replica-node-guide
Navigate into the newly cloned directory.
cd metis-replica-node-guide
Then we'll copy the example docker-compose configuration to a used file.
cp docker-compose-mainnet.yml docker-compose.yml
Be sure to update DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT in the newly copied coker-compose file with either your local Ethereum RPC endpoint if you have one, or a reliably hosted option if you don't.
For example, if your local ETH Mainnet RPC endpoint was at http://10.10.10.111:8545, you'd update the file to
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT=http://10.10.10.111:8545
.
With the file updated, we can start the container.
docker-compose up -d dtl
Once that has started successfully, we'll then want to start the L2 service
docker-compose up -d l2geth
Example docker-compose.yml:
version: "3" services: dtl: image: metisdao/mvm-andromeda:dtl entrypoint: ./dtl.sh restart: unless-stopped stop_grace_period: 30s environment: URL: https://metis-us-east-2-mainnet-json.s3.us-east-2.amazonaws.com/addresses.json DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: "http://10.10.100.42:8545" DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT: "https://andromeda.metis.io/?owner=1088" DATA_TRANSPORT_LAYER__SYNC_FROM_L1: "false" DATA_TRANSPORT_LAYER__SYNC_FROM_L2: "true" DATA_TRANSPORT_LAYER__L2_CHAIN_ID: "1088" DATA_TRANSPORT_LAYER__DB_PATH: /data/db DATA_TRANSPORT_LAYER__SERVER_PORT: "7878" DATA_TRANSPORT_LAYER__TRANSACTIONS_PER_POLLING_INTERVAL: "1000" DATA_TRANSPORT_LAYER__CONFIRMATIONS: "0" DATA_TRANSPORT_LAYER__POLLING_INTERVAL: "100" DATA_TRANSPORT_LAYER__LOGS_PER_POLLING_INTERVAL: "2000" DATA_TRANSPORT_LAYER__DANGEROUSLY_CATCH_ALL_ERRORS: "true" DATA_TRANSPORT_LAYER__SERVER_HOSTNAME: "0.0.0.0" expose: - 7878 volumes: - $PWD/chaindata/dtl:/data logging: driver: "json-file" options: max-size: "2m" max-file: "10" l2geth: image: metisdao/mvm-andromeda:l2geth-replica entrypoint: sh ./geth.sh restart: unless-stopped stop_grace_period: 2m env_file: - ./geth.env environment: ROLLUP_BACKEND: "l2" URL: https://metis-us-east-2-mainnet-json.s3.us-east-2.amazonaws.com/addresses.json L2GETH_GENESIS_URL: https://metis-us-east-2-mainnet-json.s3.us-east-2.amazonaws.com/state-dump.latest.json ROLLUP_CLIENT_HTTP: http://dtl:7878 L2_URL: https://andromeda.metis.io/?owner=1088 ETH1_CTC_DEPLOYMENT_HEIGHT: 13626959 EMERGENCY_FORK020222_NUMBER: 750000 volumes: - $PWD/chaindata/l2geth:/root/.ethereum - $PWD/geth.sh:/geth.sh expose: - 8545 - 8546 ports: - 8545:8545 - 8546:8546 logging: driver: "json-file" options: max-size: "2m" max-file: "10"
You can check your local RPC node's sync status and latest block against the explorer with the following bash script:
#!/bin/bash # blue foreground blue_fg=$(tput setaf 6) # reset to default reset=$(tput sgr0) # SET VARS BLOCK_HEIGHT=$(curl -s -H "Content-Type: application/json" http://localhost:8545 -d '{"jsonrpc": "2.0", "id": 123, "method": "eth_blockNumber"}' | jq -r .result) ANDROMEDA_METIS_BLOCK_HEIGHT=$(curl -s -d "module=block&action=eth_block_number" -X POST https://andromeda-explorer.metis.io/api | jq -r .result) IS_SYNCING=$(curl -s -H "Content-Type: application/json" http://localhost:8545 -d '{"jsonrpc": "2.0", "id": 123, "method": "eth_syncing"}' | jq .) echo "----------------------" echo "RPC Node block height: ${blue_fg}$((BLOCK_HEIGHT))${reset}" echo "Metis Explorer block height: ${blue_fg}$((ANDROMEDA_METIS_BLOCK_HEIGHT))${reset}" VAR1=$(curl -s -H "Content-Type: application/json" http://localhost:8545 -d '{"jsonrpc": "2.0", "id": 123, "method": "eth_syncing"}' | jq .result) VAR2="false" if [ "$VAR1" = "$VAR2" ]; then echo "Sync Status: ${blue_fg}Node is synced.${reset}" else echo "${blue_fg}Node is ${yellow_fg}NOT${blue_fg} synced.${reset}" fi
Example Output:
./checkState.sh ---------------------- RPC Node block height: 2536042 Metis Explorer block height: 2536042 Sync Status: Node is synced.