Layered Architecture for Innovative Resilience (Layer 3) Blockchain Deployment Kit v5
lair: a place where a wild animal, especially a fierce or dangerous one, lives
pronounced: layer three Blockchain Deployment Kit
A Kurtosis package that deploys a private, portable, and modular Blockchain Deployment Kit layer3 BDK as devnet
LAIR3-BDK5 is derived from modest improvements to Polygon-SDK and Kurtosis-CDK dual licenced with inspiration from
The Knowledge Complexity of Interactive Proof Systems
instructions are somewhat specific to Ubuntu 22.04LTS
docker container is using Alpine Linux
kurtosis-docs
kurtosis ETH local testnet
kurtosis local custom testnet
lighthouse
polygon-cdk
agglayer-docs
manualchunks
pgvectorscale timescale
docker engine install
github quick reference
to begin install the following requirements
#get wget
sudo apt install wget
#wget go
wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
#remove existing go
sudo rm -rf /usr/local/go
# possibly necessary
sudo apt remove golang $$ autoremove
#extract verbosely with force
sudo tar -xvf go1.21.6.linux-amd64.tar.gz -C /usr/local/
#add go path to ./bashrc current user with default Ubuntu 22 bash shell
echo 'export PATH="$PATH:/usr/local/go/bin"' | sudo tee -a ./bashrc
#refresh your bash shell
source $HOME/.bashrc
# verify correct version install
go versionnodejs -v
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install nodejs -y
nodejs -v# docker install https://docs.docker.com/engine/install/ubuntu/
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker pshttps://docs.kurtosis.com/install/
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
sudo apt update
sudo apt install kurtosis-clisudo apt update && sudo apt install --only-upgrade kurtosis-cli
kurtosis engine restartblockchain swiss army knife source build
snap install yq
sudo apt install bc protoc
git clone https://github.com/maticnetwork/polygon-cli.git
cd polygon-cli
make installcurl -L https://foundry.paradigm.xyz | bash
source $HOME/.bashrc
foundryup
cd BDK5
git config --global user.email "codephreak@dmg.finance"
git config --global user.name "Professor-Codephreak"
forge init --forceTo begin make sure you have installed the above requirements including Docker and Kurtosis
run tool_check to test for version requirements
sh scripts/tool_check.shwallet creation
polycli wallet inspect --mnemonic "$seed" --addresses 9 | \
jq -r '.Addresses[] | [.ETHAddress, .HexPrivateKey] | @tsv' | \
awk 'BEGIN{split("sequencer,aggregator,claimtxmanager,timelock,admin,loadtest,agglayer,dac,proofsigner",roles,",")} {print "zkevm_l2_" roles[NR] "_address: \"" $1 "\""; print "zkevm_l2_" roles[NR] "_private_key: \"0x" $2 "\"\n"}'
Once that is good and installed on your system, you can run the following command to locally deploy the complete BDK stack
this will take between 5 and 20 minutes depending on your hardware
kurtosis clean --all
kurtosis run --enclave bdk-v5 --args-file params.yml --image-download always .To begin install Docker and Kurtosis.
run tool_check to test for version requirements
sh scripts/tool_check.shOnce that is good and installed on your system, you can run the following command to locally deploy the complete BDK stack
this will take between 5 and 20 minutes depending on your hardware
kurtosis clean --all
kurtosis run --enclave bdk-v5 --args-file params.yml --image-download always .The command above deploys a BDK stack using zkevm-node as the sequencer. Alternatively, to launch a CDK stack using cdk-erigon as a sequencer, you can run the following command.
kurtosis run --enclave bdk-v5 --args-file cdk-erigon-sequencer-params.yml --image-download always .First, you will need to figure out which port Kurtois uses for the RPC. You can get a general feel for the entire network layout by running the following command:
kurtosis enclave inspect bdk-v5within enclave bdk-v2 for zkevm-node-rpc service and trusted-rpcstoring the RPC URL as an environment variable:
export ETH_RPC_URL="$(kurtosis port print bdk-v2 zkevm-node-rpc-001 http-rpc)"That is the same environment variable that cast uses, so you should now be able to run this command. Note that the steps below will assume you have the Foundry toolchain installed.
cast block-numberBy default, the CDK is configured in test mode, which means there is some pre-funded value in the admin account with address 0xE34aaF64b29273B7D567FCFc40544c014EEe9970.
cast balance --ether 0xE34aaF64b29273B7D567FCFc40544c014EEe9970export PK="0x12d7de8621a77640c9241b2595ba78ce443d05e94090365ab3bb5e19df82c625"
cast send --legacy --private-key "$PK" --value 0.01ether 0x0000000000000000000000000000000000000000multisend transactions with polygon-cli polygon-cli installed.
polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$PK" --verbosity 700 --requests 500 --rate-limit 5 --mode t
polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$PK" --verbosity 700 --requests 500 --rate-limit 10 --mode t
polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$PK" --verbosity 700 --requests 500 --rate-limit 10 --mode 2
polycli loadtest --rpc-url "$ETH_RPC_URL" --legacy --private-key "$PK" --verbosity 700 --requests 500 --rate-limit 3 --mode uniswapv3
```bash
sudo apt install postgresql-client-common
foundry creates script and src folders
The LAIR3-BDK5 Layer 3 Blockchain Development Kit is designed to facilitate the deployment and management of advanced blockchain solutions specifically supporting zkEVM Rollup and Validium technologies. Merging the best of the Kurtosis SDK, polygon-cli, avalanche subnet-evm and ignite with Starlark the Blockchain Deployment Kit facilitates the creation and deployment of customized blockchain environments with enhanced observability and testing capabilities.
The primary goal is to to make blockchain deployment a sane operation accessiable to regular developers interested in dapplications development.
export POSTGRES_MASTER_PASSWORD="your_secure_password"Log into PostgreSQL
sudo -u postgres psql
ALTER USER validator1 WITH PASSWORD 'new_validator1_password';
\qsudo apt install postgresql-client-common
psql -U master_user -h 127.0.0.1 -p 5432 -d master
\dx
SELECT * FROM pg_extension WHERE extname = 'vectorscale';docker build -t blockchaindeploymentkit/bdk-toolbox-postgres-pgvectorscale -f docker/toolbox.Dockerfile .
docker login
docker tag blockchaindeploymentkit/bdk-toolbox-postgres-pgvectorscale blockchaindeploymentkit/bdk-toolbox-postgres-pgvectorscale
docker push blockchaindeploymentkit/bdk-toolbox-postgres-pgvectorscaledocker rmi blockchaindeploymentkit/bdk-toolbox-postgres-pgvectorscale
docker system prune -a
docker compose versionCreate Missing Directories: If directories /var/log/kurtosis/ and similar are missing you can manually create these directories to resolve the issue
sudo mkdir -p /var/log/kurtosis/2024/31
sudo chown -R $USER:docker /var/log/kurtosisVerify Docker Permissions:
sudo chmod -R 755 /var/log/kurtosisRestart Kurtosis and Docker:
kurtosis engine restart
sudo systemctl restart dockerdocker ps -a
docker imagesrequirements include but not limited to
kurtosis service logs cdk-v1 zkevm-bridge-ui-001docker run -it --rm -p 8080:80 leovct/zkevm-bridge-ui:multi-networkgeneric instruction
docker run --name zkevm-bridge-ui -p 80:8080 -v /path/to/.env:/app/.env leovct/zkevm-bridge-ui:multi-networkdocker --version
docker network create erigon-net
docker run -d --name cdk-erigon-sequencer --network erigon-net -p 8123:8123 -p 6900:6900 -p 9091:9091 -p 6060:6060 -v erigon-data:/home/erigon/data -e CDK_ERIGON_SEQUENCER=1 hermeznetwork/cdk-erigon:2.0.0-beta15 sh -c "sleep 10 && cdk-erigon --pprof=true --pprof.addr 0.0.0.0 --config /etc/cdk-erigon/config.yaml"
docker logs -f cdk-erigon-sequencersudo apt install netstat hardinfodocker run -it --rm -p 50071:50071 -p 50061:50061 hermeznetwork/zkevm-prover:v6.0.2 /bin/bashkurtosis enclave lskurtosis enclave inspect bdk-v5kurtosis service logs bdk-v5 zkevm-bridge-ui-001enter the service container to manually inspect and debug example brige-ui
kurtosis service shell bdk-v5 zkevm-bridge-ui-001Clone the Repository and Install Dependencies
git clone https://github.com/LAIR3/BDK5.git
cd BDK5
sh scripts/tool_check.shkurtosis clean --allstop all running containers
docker stop $(docker ps -aq)Remove all containers:
docker rm $(docker ps -aq)Remove all images:
docker rmi -f $(docker images -q)Remove all volumes:
docker volume rm $(docker volume ls -q)Remove all networks:
docker network rm $(docker network ls -q)Prune the system:
docker system prune -a --volumesdocker network ls
docker network inspect NAME############ START ############
kurtosis run --enclave BDK-v5 --args-file params.yml --image-download always .kurtosis enclave lskurtosis enclave inspect BDK-v5kurtosis service logs bdk-v5 zkevm-agglayer-001yq -Y --in-place 'with_entries(if .key == "deploy_zkevm_permissionless_node" then .value = true elif .value | type == "boolean" then .value = false else . end)' params.yml
kurtosis run --enclave cdk-v1 --args-file params.yml --image-download always .cp /path/to/external/genesis.json templates/permissionless-node/genesis.json
yq -Y --in-place 'with_entries(if .key == "deploy_zkevm_permissionless_node" then .value = true elif .value | type == "boolean" then .value = false else . end)' params.yml
kurtosis run --enclave bdk-v5 --args-file params.yml --image-download always .export ETH_RPC_URL="$(kurtosis port print cdk-v1 zkevm-node-rpc-001 http-rpc)"
cast block-number
cast balance --ether 0xE34aaF64b29273B7D567FCFc40544c014EEe9970cast send --legacy --private-key 0x12d7de8621a77640c9241b2595ba78ce443d05e94090365ab3bb5e19df82c625 --value 0.01ether 0x0000000000000000000000000000000000000000polycli loadtest --requests 500 --legacy --rpc-url $ETH_RPC_URL --verbosity 700 --rate-limit 5 --mode t --private-key 0x12d7de8621a77640c9241b2595ba78ce443d05e94090365ab3bb5e19df82c625Prometheus captures all the metrics for the running services. Accessible via: http://127.0.0.1:49678
open http://127.0.0.1:49651/targets
Dashboards for visualizing metrics. Accessible via: http://127.0.0.1:49701
docker run -d --name=grafana-001 -p 49701:3000 grafana/grafana:latest
docker run -d --name=grafana -p 3000:3000 grafana/grafana:latest
docker start grafana
open http://localhost:49701/login
docker logs grafana
docker logs grafana-001
docker stop graphanaopen http://127.0.0.1:49701/dashboards
open http://127.0.0.1:49701/loginMonitors on-chain metrics such as blocks, transactions, and smart contract calls. Accessible via: http://127.0.0.1:49651
