This tutorial will guide you through the process of setting up a CDK Validium on your local machine. Please refer to https://docs.polygon.technology/cdk/overview/ to read more about the CDK framework.
Note: Polygon CDK is in public preview stage and subject to changes
In this tutorial, you'll quickly dive into the world of Polygon CDK. You'll learn to set up and run a local CDK-based chain, enabling you to:
This tutorial requires Docker and Docker Compose. They allow you to run multiple services in separate environments. If you haven't installed these tools yet, you can do so by following the guides at the following links:
Ensure that your system meets the following recommended specifications before starting this tutorial:
Note: Does not yet support ARM-based Macs
In this tutorial, you'll go through the following steps. Make sure to follow each section in order if this is your first time setting up a zkValidium.
The first step involves downloading the necessary configuration files from our repository. Run the following commands in your terminal to clone the repository and navigate into it:
git clone https://github.com/Snapchain/zkValidium-quickstart.git
cd zkValidium-quickstart
The repository includes these key files:
Docker-compose.yml
: This Docker Compose file defines all the necessary containers to set up the CDK Validium. Makefile
: This file includes a series of commands that will help you manage your CDK Validium node.config
: This folder contains configuration files required for the CDK Validium.With the repository cloned and your working directory set, let's start up the CDK Validium. First, you'll need to pull the necessary Docker images from Docker Hub:
docker-compose pull
After pulling the images, you can start your local CDK Validium:
make run
To ensure all services are running properly, check the status of each container:
docker-compose ps
You will see results similar to the following:
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
cdk-validium-aggregator /bin/sh -c /app/cdk-validi ... Up 0.0.0.0:50081-
>50081/tcp,:::50081-
>50081/tcp, 8123/tcp, 0.0.0.0:
9093->9091/tcp,:::9093-
>9091/tcp
cdk-validium-approve /bin/sh -c /app/cdk-validi ... Exit 0
cdk-validium-data-availability /bin/sh -c /app/cdk-data-a ... Up 0.0.0.0:8444-
>8444/tcp,:::8444->8444/tcp
cdk-validium-data-node-db docker-entrypoint.sh postg ... Up (healthy) 0.0.0.0:5444-
>5432/tcp,:::5444->5432/tcp
cdk-validium-eth-tx-manager /bin/sh -c /app/cdk-validi ... Up 8123/tcp, 0.0.0.0:9094-
>9091/tcp,:::9094->9091/tcp
cdk-validium-event-db docker-entrypoint.sh postg ... Up 0.0.0.0:5435-
>5432/tcp,:::5435->5432/tcp
cdk-validium-explorer-json-rpc /bin/sh -c /app/cdk-validi ... Up 8123/tcp, 0.0.0.0:8124-
>8124/tcp,:::8124->8124/tcp, 0
.0.0.0:8134->8134/tcp,:::8134-
>8134/tcp
cdk-validium-explorer-l1 /bin/sh -c mix do ecto.cre ... Up 0.0.0.0:4000-
>4000/tcp,:::4000->4000/tcp
cdk-validium-explorer-l1-db docker-entrypoint.sh postg ... Up 0.0.0.0:5436-
>5432/tcp,:::5436->5432/tcp
cdk-validium-explorer-l2 /bin/sh -c mix do ecto.cre ... Up 0.0.0.0:4001-
>4000/tcp,:::4001->4000/tcp
cdk-validium-explorer-l2-db docker-entrypoint.sh postg ... Up 0.0.0.0:5437-
>5432/tcp,:::5437->5432/tcp
cdk-validium-json-rpc /bin/sh -c /app/cdk-validi ... Up 0.0.0.0:8123-
>8123/tcp,:::8123->8123/tcp, 0
.0.0.0:8133->8133/tcp,:::8133-
>8133/tcp, 0.0.0.0:9091-
>9091/tcp,:::9091->9091/tcp
cdk-validium-l2gaspricer /bin/sh -c /app/cdk-validi ... Up 8123/tcp
cdk-validium-mock-l1-network geth --http --http.api adm ... Up 30303/tcp, 30303/udp, 0.0.0.0:
8545->8545/tcp,:::8545-
>8545/tcp, 0.0.0.0:8546-
>8546/tcp,:::8546->8546/tcp
cdk-validium-pool-db docker-entrypoint.sh postg ... Up 0.0.0.0:5433-
>5432/tcp,:::5433->5432/tcp
cdk-validium-prover zkProver -c /usr/src/app/c ... Up 0.0.0.0:50052-
>50052/tcp,:::50052-
>50052/tcp, 0.0.0.0:50061-
>50061/tcp,:::50061-
>50061/tcp, 0.0.0.0:50071-
>50071/tcp,:::50071->50071/tcp
cdk-validium-sequence-sender /bin/sh -c /app/cdk-validi ... Up 8123/tcp
cdk-validium-sequencer /bin/sh -c /app/cdk-validi ... Up 0.0.0.0:6060-
>6060/tcp,:::6060->6060/tcp,
8123/tcp, 0.0.0.0:9092-
>9091/tcp,:::9092->9091/tcp
cdk-validium-state-db docker-entrypoint.sh postg ... Up 0.0.0.0:5432-
>5432/tcp,:::5432->5432/tcp
cdk-validium-sync /bin/sh -c /app/cdk-validi ... Up 8123/tcp
dac-setup-committee docker-entrypoint.sh npm r ... Exit 0
If any service isn't running (i.e., in Exit 1 state), you can investigate further using the logs:
docker-compose logs <container_name>
Note: <container_name>
can be found in results above.
To stop the zkValidium, use:
make stop
And to restart all the services:
make restart
Congratulations! Your local zkValidium is now up and running. Let's test its functionalities.
First, verify the block explorer by navigating to localhost:4001. You should see a page similar to this:
Now, let's add the network to your Web3 wallet by populating the necessary fields.
We'll use MetaMask for our example.
Next, switch to the new network.
By default, an account with private key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
has been preloaded with tokens.
Note: NEVER transfer real assets to the address associated with the above private key
Import this account and you will see the balance shown up as 100000 POL. You can now try a transaction by transferring some tokens to another account. After confirming the transaction, check the updated balances. You can also view the transaction details in the block explorer by clicking on the transaction details in MetaMask.