feat: Add consensus support

This commit is contained in:
Yury Akudovich
2024-08-12 14:18:32 +02:00
parent 7500e2b2da
commit 9a8b0af6c3
4 changed files with 52 additions and 2 deletions

View File

@ -11,7 +11,7 @@ docker_compose_version: "v2.23.0"
# Versions of External Node and 3rd party components # Versions of External Node and 3rd party components
traefik_version: 2.11 traefik_version: 2.11
postgres_version: 14 postgres_version: 14
external_node_version: 24.6.0 external_node_version: 24.16.0
external_node_raw_docker_tag: "" external_node_raw_docker_tag: ""
vmagent_version: 1.100.1 vmagent_version: 1.100.1
cadvisor_version: 0.47.2 cadvisor_version: 0.47.2
@ -73,6 +73,12 @@ force_pg_restore: false
enable_snapshots_recovery: false enable_snapshots_recovery: false
snapshots_bucket_base_url: "" snapshots_bucket_base_url: ""
# https://github.com/matter-labs/zksync-era/blob/main/docs/guides/external-node/09_decentralization.md
enable_consensus: false
consensus_secrets_file: ""
consensus_port: 3054
consensus_outbound: []
# External Node and database options # External Node and database options
database_name: "" database_name: ""
database_username: "" database_username: ""

View File

@ -76,6 +76,20 @@
- src: "templates/vmagent-config.yml.j2" - src: "templates/vmagent-config.yml.j2"
dest: "{{ configuration_directory }}/vmagent-config.yml" dest: "{{ configuration_directory }}/vmagent-config.yml"
- name: Copy main configs
when: enable_consensus
ansible.builtin.template:
src: "templates/consensus_config.yaml.j2"
dest: "{{ configuration_directory }}/consensus_config.yaml"
mode: '0644'
- name: Decrypt consensus_secrets
when: enable_consensus
ansible.builtin.copy:
src: "{{ consensus_secrets_file }}"
dest: "{{ configuration_directory }}/consensus_secrets.yaml"
decrypt: yes
- name: Run docker-compose without monitoring - name: Run docker-compose without monitoring
when: not enable_monitoring when: not enable_monitoring
ansible.builtin.shell: ansible.builtin.shell:

View File

@ -0,0 +1,9 @@
server_addr: '0.0.0.0:3054'
public_addr: '{{ ansible_default_ipv4.address }}:{{ consensus_port }}'
max_payload_size: 5000000
gossip_dynamic_inbound_limit: 100
gossip_static_outbound:
{% for item in consensus_outbound %}
- key: {{ item.key }}
addr: {{ item.addr }}
{% endfor %}

View File

@ -82,6 +82,9 @@ services:
- {{ rpc_ws_port }} - {{ rpc_ws_port }}
- {{ healthcheck_port }} - {{ healthcheck_port }}
- {{ metrics_port }} - {{ metrics_port }}
{% if enable_consensus %}
- {{ consensus_port }}
{% endif %}
environment: environment:
ZKSYNC_HOME: "/" ZKSYNC_HOME: "/"
EN_STATE_CACHE_PATH: /db/state_keeper EN_STATE_CACHE_PATH: /db/state_keeper
@ -96,6 +99,10 @@ services:
EN_MAX_BLOCKS_PER_TREE_BATCH: 200 EN_MAX_BLOCKS_PER_TREE_BATCH: 200
MISC_LOG_FORMAT: json MISC_LOG_FORMAT: json
RUST_LOG: {{ rust_log }} RUST_LOG: {{ rust_log }}
{% if enable_consensus %}
EN_CONSENSUS_CONFIG_PATH: /etc/consensus_config.yaml
EN_CONSENSUS_SECRETS_PATH: /run/secrets/consensus_secrets.yaml
{% endif %}
healthcheck: healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:{{ healthcheck_port }}/health" ] test: [ "CMD", "curl", "-f", "http://localhost:{{ healthcheck_port }}/health" ]
interval: 1m interval: 1m
@ -104,10 +111,24 @@ services:
start_period: 1m start_period: 1m
volumes: volumes:
- "{{ storage_directory }}/db:/db" - "{{ storage_directory }}/db:/db"
{% if enable_consensus %}
- "consensus_config.yaml:/etc/consensus_config.yaml"
{% endif %}
env_file: env_file:
- "external_node.env" - "external_node.env"
- "postgres.env" - "postgres.env"
{% if enable_snapshots_recovery %}
command: command:
{% if enable_snapshots_recovery %}
- --enable-snapshots-recovery - --enable-snapshots-recovery
{% endif %} {% endif %}
{% if enable_consensus %}
- --enable-consensus
secrets:
- consensus_secrets
{% endif %}
{% if enable_consensus %}
secrets:
consensus_secrets:
file: consensus_secrets.yaml
{% endif %}