Run a Follower Node
This guide will help you set up and run a Movement follower node. The Bardock Testnet and Mainnet currently support this feature. Learn more about Node architecture here. For simplicity we have provided instruction for deploying using an Ansible script below.
Hardware Recommendations
- 32 cores
- 64 GB RAM
- 2 TB SSD w/ 60K IOPS and 200 MiB/s throughput
Deployment
Clone Movement Repository
git clone https://github.com/movementlabsxyz/movement
cd movement
git checkout l-monninger/mcr-admin-attestations
Note: There may be some updates in the branch listed above; make sure to pull the latest version of this branch if returning to this at a later time
Configuration
Update the Variables below in the movement-full-follower.yml
file for Mainnet. This is located in docs/movement-node/run/ansible/follower-node/mainnet
or docs/movement-node/run/ansible/follower-node/
depending on if you are deploying to Mainnet or Testnet.
Mainnet Configuration
vars:
repo_url: "https://github.com/movementlabsxyz/movement"
destination_path: "/home/{{ user }}/movement"
movement_sync: 'follower::mainnet-l-sync-bucket-sync<=>{default_signer_address_whitelist,maptos,maptos-storage,suzuka-da-db}/**'
chain_id: "126"
movement_da_light_node_connection_protocol: "https"
movement_da_light_node_connection_hostname: "m1-da-light-node.mainnet"
movement_da_light_node_connection_port: "443"
aws_region: "us-west-1"
rev: "{{ movement_container_version }}"
Bardock Testnet Configuration
vars:
repo_url: "https://github.com/movementlabsxyz/movement"
destination_path: "/home/{{ user }}/movement"
movement_sync: "follower::mtnet-l-sync-bucket-sync<=>{maptos,maptos-storage,movement-da-db}/**"
chain_id: "250"
movement_da_light_node_connection_protocol: "https"
movement_da_light_node_connection_hostname: "movement-celestia-da-light-node.testnet.bardock.movementlabs.xyz"
movement_da_light_node_connection_port: "443"
aws_region: "us-west-1"
rev: "{{ movement_container_version }}"
You may need to add additional variables for the AWS SDK to properly authenticate. If you are running into server errors please add additional variables to the movement-full-follower.service.j2 file:
Environment="AWS_ACCESS_KEY_ID={{ aws_access_key_id }}"
Environment="AWS_SECRET_ACCESS_KEY={{ aws_secret_access_key }}"
As well as to the movement-full-follower.yml file:
aws_access_key_id: "{{ aws_access_key_id }}"
aws_secret_access_key: "{{ aws_secret_access_key }}"
Fetching the Latest Container Revision
CONTAINER_REV=$(git rev-parse HEAD)
echo "CONTAINER_REV=${CONTAINER_REV}"
For Mainnet, please use the revision below:
82e923e77ae9255b233d50b96377ae2b8dfa1828
Sample Deployment Scripts
Mainnet
ansible-playbook --inventory <inventory_url>, \
--user <user> \
--extra-vars "movement_container_version=82e923e77ae9255b233d50b96377ae2b8dfa1828" \
--extra-vars "user=<user>" \
docs/movement-node/run/ansible/follower-node/mainnet/movement-full-follower.yml \
--private-key <pem_file>
Please generate a private key through your cloud provider. The example scripts use a PEM file generated by AWS.
Replace the following:
<inventory_url>
: The URL or IP of your inventory.<user>
: Your username.<pem_file>
: Your private key file.
Example:
ansible-playbook --inventory ec2-18-144-5-233.us-west-1.compute.amazonaws.com, \
--user rahat \
--extra-vars "movement_container_version=82e923e77ae9255b233d50b96377ae2b8dfa1828" \
--extra-vars "user=rahat" \
docs/movement-node/run/ansible/follower-node/mainnet/movement-full-follower.yml \
--private-key rahat_deployment_test.pem
Bardock Testnet
For Bardock Testnet, please use the following example:
ansible-playbook --inventory ec2-18-144-5-233.us-west-1.compute.amazonaws.com, \
--user rahat \
--extra-vars "movement_container_version=82e923e77ae9255b233d50b96377ae2b8dfa1828" \
--extra-vars "user=rahat" \
docs/movement-node/run/ansible/follower-node/movement-full-follower.yml \
--private-key rahat_deployment_test.pem
Verify Deployment
- Connect to your instance (in the above example I ssh into my instance)
- run the command
curl localhost:30731/v1
- Output should be similar to this:
{"chain_id":126,"epoch":"1","ledger_version":"9","oldest_ledger_version":"0","ledger_timestamp":"1732636319660843","node_role":"validator","oldest_block_height":"0","block_height":"3","git_hash":"9dfc8e7a3d622597dfd81cc4ba480a5377f87a41"}
Compare to:
- Mainnet endpoint: https://mainnet.movementnetwork.xyz/v1
- Testnet endpoint: https://aptos.testnet.bardock.movementlabs.xyz/v1
Run Locally
It is easiest to gain quick familiarity with the Movement Follower Node by running it locally.
To do this, ensure you have nix installed. We recommend the Determinate Systems nix installation script. You can find it here.
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
After installing nix
, clone the Movement repository and open the nix-shell
environment.
# if you have not cloned the repository yet
git clone https://github.com/movementlabsxyz/movement
cd movement
nix develop
This should install all dependencies needed to work on the Movement Follower Node.
You can now either run the follower node natively or with our containers via the provided just commands.
First create, an environment file for the follower node. The example below is for the Movement Testnet. Comments are made on how to change the environment file for other networks.
CONTAINER_REV=<latest-commit-hash>
DOT_MOVEMENT_PATH=./.movement
MAPTOS_CHAIN_ID=250 # change this to the chain id of the network you are running
MOVEMENT_SYNC="follower::mtnet-l-sync-bucket-sync<=>{maptos,maptos-storage,movement-da-db}/**" # change to the sync bucket for the network you are running
MOVEMENT_DA_LIGHT_NODE_CONNECTION_PROTOCOL=https
MOVEMENT_DA_LIGHT_NODE_CONNECTION_HOSTNAME="movement-celestia-da-light-node.testnet.bardock.movementlabs.xyz" # change this to the hostname of the Movement DA Light Node service on network you are running
MOVEMENT_DA_LIGHT_NODE_CONNECTION_PORT=443
# you may need to provide AWS credentials for the Amazon SDK to properly interact with the sync bucket
# often this will be picked up appropriately if your environment is configured to use AWS
# the bucket has public read access so you may not need to provide credentials
AWS_ACCESS_KEY_ID=<your-access-key>
AWS_SECRET_ACCESS_KEY=<your-secret-access-key>
AWS_DEFAULT_REGION=us-west-1 # change this to match the region of the sync bucket
AWS_REGION=us-west-1 # change this to match the region of the sync bucket
To run natively you can use the following command:
source .env
just movement-full-node native build.setup.follower -t=false
To run with containers you can use the following command:
just movement-full-node docker-compose follower
To check on the status of the service under either runner, run:
curl localhost:30731/v1
You should see a ledger_version field CLOSE to the other values on the network, e.g., https://aptos.testnet.bardock.movementlabs.xyz/v1.