Skip to content

Commit

Permalink
feat: integrate tenderdash 0.4.x (#238)
Browse files Browse the repository at this point in the history
  • Loading branch information
strophy authored Jun 18, 2021
1 parent 0d5497c commit 77c5369
Show file tree
Hide file tree
Showing 21 changed files with 239 additions and 98 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ node_modules

# Jet Brains
.idea

# VS Code
.vscode
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ COPY ansible/requirements.yml /ansible-requirements.yml
COPY package*.json ./

RUN python3 -m pip install -U pip && \
python3 -m pip install --upgrade netaddr awscli ansible && \
python3 -m pip install --upgrade netaddr awscli jmespath ansible && \
ansible-galaxy install -r /ansible-requirements.yml && \
npm install

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,15 +133,15 @@ You can use the OpenVPN config generated during deployment (`<network_name>.ovpn
git clone https://github.com/dashpay/dash-network-deploy.git
```
2. Install Ansible and Terraform per instructions provided on the official websites:
2. Install Ansible (v2.10.7+) and Terraform (v0.12.x) per instructions provided on the official websites:
* [Ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)
* [Terraform](https://www.terraform.io/intro/getting-started/install.html)
3. Ensure Python netaddr package is installed locally
3. Ensure Python netaddr and jmespath package is installed locally
```bash
pip install -U netaddr
pip install -U netaddr jmespath
```
* Note: You may need to run the above command with "pip2" instead of "pip" if
Expand Down
42 changes: 10 additions & 32 deletions ansible/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,18 @@
tags:
- dashd


# Setup seed nodes

- hosts: seed_nodes
become: true
pre_tasks:
- set_fact:
node: "{{ seed_nodes[inventory_hostname] }}"
tags: always
when: inventory_hostname in seed_nodes
- fail:
msg: Seed node not defined in tenderdash config
when: node is not defined
roles:
- role: dashd
dashd_listen: true
Expand All @@ -110,34 +117,24 @@
tags:
- dashd
- role: mn-evo-services
vars:
skip_tenderdash_genesis: true
skip_services_start: true
tags:
- evo
when: evo_services
- role: elastic-beats
post_tasks:
- name: get tenderdash genesis time
command: 'cat {{ mn_evo_services_path }}/tendermint/config/genesis.json'
args:
chdir: '{{ mn_evo_services_path }}'
register: tendermint_genesis_config
- set_fact:
tendermint_genesis_time: '{{ tendermint_genesis_config.stdout | from_json | json_query("genesis_time") }}'

# Setup masternodes

- hosts: masternodes
become: true
pre_tasks:
- set_fact:
node: "{{ masternodes[inventory_hostname] }}"
masternode: "{{ masternodes[inventory_hostname] }}"
tags: always
when: inventory_hostname in masternodes
- fail:
msg: Masternode not defined in network config
when: masternode is not defined
when: node is not defined
roles:
- role: dashd
dashd_listen: true
Expand All @@ -152,25 +149,6 @@
when: evo_services
- role: elastic-beats


# Update Tenderdash genesis on seed nodes and start it

- hosts: seed_nodes
become: true
tasks:
- name: update Tendermint genesis.json
template:
src: 'roles/mn-evo-services/templates/tendermint/genesis.json.j2'
dest: '{{ mn_evo_services_path }}/tendermint/config/genesis.json'
owner: '{{ tendermint_uid }}'
group: '{{ tendermint_gid }}'
- name: start Tendermint seed nodes
docker_compose:
project_src: '{{ mn_evo_services_path }}'
state: present
restarted: yes
pull: yes

# Generate first block on seed node
# so that all nodes leave IBD mode (required for mining)

Expand Down
16 changes: 13 additions & 3 deletions ansible/group_vars/all
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ drive_image: dashpay/drive
drive_log_stdout_level: info
drive_log_pretty_file_level: silent
drive_log_json_file_level: silent
platform_drive_validator_set_llmq_type:

core_llmq_types:
1: llmq_50_60
2: llmq_400_60
3: llmq_400_85
4: llmq_100_67
100: llmq_test
101: llmq_devnet
102: llmq_test_v17

# Tendermint
tendermint_image: dashpay/tenderdash
Expand Down Expand Up @@ -73,9 +83,9 @@ dashd_rpc_port: 20002

dashd_zmq_port: 29998

# Example sport address/privkey. Please provide your own spork key in network config:
# dashd_sporkaddr: yMtULrhoxd8vRZrsnFobWgRTidtjg2Rnjm
# dashd_sporkkey: cRsR7ywG6bhb5JsnpeRJ4c1fACabmYtK6WUVPiGG3GG4a5iYk6iL
# Example spork address/privkey. Please provide your own spork key in network config:
# dashd_sporkaddr:
# dashd_sporkkey:

# You can provide your own seed node in network config. May be useful if you want to connect to another network
dashd_seednode: '{{ hostvars[groups.seed_nodes[0]]["public_ip"] if groups.seed_nodes else none }}'
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/dashd/templates/dash.conf.j2
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ maxconnections=256
debug={{ dashd_debug }}
printtoconsole=1

llmq-qvvec-sync=llmq_100_67:0
llmq-qvvec-sync={{ core_llmq_types[platform_drive_validator_set_llmq_type] }}:0

{% if dashd_indexes %}
# optional indices (required for Insight)
Expand Down
1 change: 1 addition & 0 deletions ansible/roles/insight/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
restarted: yes
pull: yes


- name: check Insight container
assert:
that: 'insight.insight.state.running'
Expand Down
3 changes: 0 additions & 3 deletions ansible/roles/mn-evo-services/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
---

# Variables: skip_tenderdash_genesis (false), skip_services_start (false)

- name: create platform services dir
file:
path: '{{ mn_evo_services_path }}'
Expand Down Expand Up @@ -67,4 +65,3 @@
state: present
restarted: yes
pull: yes
when: skip_services_start|default(false) == false
59 changes: 27 additions & 32 deletions ansible/roles/mn-evo-services/tasks/tendermint.yml
Original file line number Diff line number Diff line change
@@ -1,49 +1,44 @@
---

# Variables: skip_genesis (false)

- name: create tendermint home dir
file:
path: '{{ mn_evo_services_path }}/tendermint'
state: directory
owner: '{{ tendermint_uid }}'
group: '{{ tendermint_gid }}'
mode: 0750
register: tendermint_home_dir

- name: initialize Tendermint node
command: docker-compose run --no-deps --rm --entrypoint='/usr/bin/tenderdash' tendermint init
args:
chdir: '{{ mn_evo_services_path }}'
when: tendermint_home_dir.changed

- name: get Tendermint node ID
command: docker-compose run --no-deps --rm --entrypoint='/usr/bin/tenderdash' tendermint show-node-id
args:
chdir: '{{ mn_evo_services_path }}'
register: tendermint_node_id

- name: get Tendermint validator key
command: cat {{ mn_evo_services_path }}/tendermint/config/priv_validator_key.json
register: tendermint_validator_key

- set_fact:
tendermint_node_id: '{{ tendermint_node_id.stdout }}'

- set_fact:
tendermint_validator_key: '{{ tendermint_validator_key.stdout }}'
- name: create tendermint config dir
file:
path: '{{ mn_evo_services_path }}/tendermint/config'
state: directory
owner: '{{ tendermint_uid }}'
group: '{{ tendermint_gid }}'
mode: 0750

- name: create Tendermint config.toml
template:
src: 'roles/mn-evo-services/templates/tendermint/config.toml.j2'
dest: '{{ mn_evo_services_path }}/tendermint/config/config.toml'
- name: create tendermint data dir
file:
path: '{{ mn_evo_services_path }}/tendermint/data'
state: directory
owner: '{{ tendermint_uid }}'
group: '{{ tendermint_gid }}'
mode: 0750

- name: create Tendermint genesis.json
- name: create Tendermint configs
template:
src: 'roles/mn-evo-services/templates/tendermint/genesis.json.j2'
dest: '{{ mn_evo_services_path }}/tendermint/config/genesis.json'
src: 'roles/mn-evo-services/templates/tendermint/{{ item }}.j2'
dest: '{{ mn_evo_services_path }}/tendermint/config/{{ item }}'
owner: '{{ tendermint_uid }}'
group: '{{ tendermint_gid }}'
loop:
- config.toml
- genesis.json
- priv_validator_key.json
- node_key.json

- name: create Tendermint priv_validator_state.json
template:
src: 'roles/mn-evo-services/templates/tendermint/priv_validator_state.json.j2'
dest: '{{ mn_evo_services_path }}/tendermint/data/priv_validator_state.json'
owner: '{{ tendermint_uid }}'
group: '{{ tendermint_gid }}'
when: skip_genesis is not defined or skip_genesis == false
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ services:
- FEATURE_FLAGS_CONTRACT_ID={{ platform_feature_flags_contract_id }}
- FEATURE_FLAGS_CONTRACT_BLOCK_HEIGHT={{ platform_feature_flags_contract_block_height }}
- FEATURE_FLAGS_TOP_LEVEL_IDENTITY={{ platform_feature_flags_top_level_identity }}
- VALIDATOR_SET_LLMQ_TYPE={{ platform_drive_validator_set_llmq_type }}
ports:
- 26658:26658
depends_on:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,16 @@ priv_validator_state_file = "data/priv_validator_state.json"
# connections from an external PrivValidator process
priv_validator_laddr = ""

# Local Dash Core Host to connect to
# If this is set, the node follows a Dash Core PrivValidator process
priv_validator_core_rpc_host = "{{ private_ip }}:{{ dashd_rpc_port }}"

# Local Dash Core RPC Username
priv_validator_core_rpc_username = "{{ dashd_rpc_user }}"

# Local Dash Core RPC Password
priv_validator_core_rpc_password = "{{ dashd_rpc_password }}"

# Path to the JSON file containing the private key to use for node authentication in the p2p protocol
node_key_file = "config/node_key.json"

Expand Down Expand Up @@ -185,7 +195,7 @@ laddr = "tcp://0.0.0.0:26656"
external_address = "{{ public_ip }}:26656"

# Comma separated list of seed nodes to connect to
seeds = "{% if inventory_hostname not in groups.seed_nodes %}{% for seed in groups.seed_nodes %}{{ hostvars[seed].tendermint_node_id }}@{{ hostvars[seed].public_ip }}:{{ tendermint_p2p_port }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %}"
seeds = "{% if inventory_hostname not in groups.seed_nodes %}{% for seed in groups.seed_nodes %}{{ seed_nodes[seed].node_key.id }}@{{ hostvars[seed].public_ip }}:{{ tendermint_p2p_port }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %}"

# Comma separated list of nodes to keep persistent connections to
persistent_peers = ""
Expand Down Expand Up @@ -354,6 +364,12 @@ skip_timeout_commit = false
create_empty_blocks = true
create_empty_blocks_interval = "3m"

# Set the Dash Core quorum type
quorum_type = {{ platform_drive_validator_set_llmq_type }}

# Set the App hash size
app_hash_size = 20

# Reactor sleep duration parameters
peer_gossip_sleep_duration = "100ms"
peer_query_maj23_sleep_duration = "2s"
Expand Down
39 changes: 23 additions & 16 deletions ansible/roles/mn-evo-services/templates/tendermint/genesis.json.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"genesis_time": "{{ hostvars[groups.seed_nodes[0]].tendermint_genesis_time }}",
"genesis_time": "{{ genesis_time }}",
"chain_id": "dash-{{ ( 'devnet-' + dash_devnet_name if dash_network == 'devnet' else dash_network ) if tenderdash_chain_id is not defined else tenderdash_chain_id }}",
"initial_height": "0",
"initial_core_chain_locked_height": {{ platform_initial_core_chain_locked_height | int }},
"initial_proposal_core_chain_lock": null,
"consensus_params": {
"block": {
"max_bytes": "22020096",
Expand All @@ -14,24 +17,28 @@
},
"validator": {
"pub_key_types": [
"ed25519"
"bls12381"
]
}
},
"version": {}
},
"initial_core_chain_locked_height": {{ platform_initial_core_chain_locked_height | int }},
"validators": [
{% for masternode in groups.masternodes[:tenderdash_max_validators_count] %}
{
"address": "{{ hostvars[masternode].tendermint_validator_key | json_query('address') }}",
"pub_key": {
"type": "{{ hostvars[masternode].tendermint_validator_key | json_query('pub_key.type') }}",
"value": "{{ hostvars[masternode].tendermint_validator_key | json_query('pub_key.value') }}"
},
"power": "1",
"name": "{{ masternode }}"
}
{% if not loop.last %},{% endif %}
{% endfor %}
{
"address": "0751C0B717E3F9CB0ABC0AD63B740978ABD597BF",
"pub_key": {
"type": "tendermint/PubKeyBLS12381",
"value": "A+OY6bG13RElaxL7Mko+Q2S5oRvg8y32zU4YxeKtY32bJw8SQBqZFTt6RXF8VuJ9"
},
"power": "100",
"name": "",
"pro_tx_hash": "5CD8233AAFF03609721D36E682D84346F2134551E44C10AE2B1A86CB1ACCF5D3"
}
],
"threshold_public_key": {
"type": "tendermint/PubKeyBLS12381",
"value": "A+OY6bG13RElaxL7Mko+Q2S5oRvg8y32zU4YxeKtY32bJw8SQBqZFTt6RXF8VuJ9"
},
"quorum_type": "{{ platform_drive_validator_set_llmq_type }}",
"quorum_hash": "00000201a9d68294b1aa11d689eee77fa588a76247a80e09e903dd250e4ead83",
"app_hash": ""
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"priv_key": {
"type": "tendermint/PrivKeyEd25519",
"value": "{{ node.node_key.private_key }}"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"address": "17BD5A338FFD5B996C7388A36574E9FD17567F05",
"pub_key": {
"type": "tendermint/PubKeyBLS12381",
"value": "if85FXBIdFPKVZnlNlV4InTskn6LAqcR/WZ26/VJm80VsR8LrqN6c3jarp7a4Jwi"
},
"priv_key": {
"type": "tendermint/PrivKeyBLS12381",
"value": "EY/FPLkY1VffNQuaLlgeM3MCF3K2A6wmMhbQ8sXja14="
},
"pro_tx_hash": "D455386CC362ED04BCA6EFBCE811440F0D768BC004947B873950FC37A5E94CCA"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"height": "0",
"round": 0,
"step": 0
}
2 changes: 1 addition & 1 deletion ansible/roles/swap/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
become_user: root
command: swapon -a

- name: set swapiness
- name: set swappiness
become: yes
become_user: root
sysctl:
Expand Down
Loading

0 comments on commit 77c5369

Please sign in to comment.