From dc4d4b0e682986e4411d8fe3ec0510fe4a78e9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Tue, 25 Mar 2025 13:15:20 +0000 Subject: [PATCH 001/279] Adapted ABI handling to use skale-contracts alias or addresses. Added ruff and flake8 config files --- .flake8 | 3 ++ ruff.toml | 4 ++ .../ansible/files/cleanup_contracts.py | 13 ++---- .../ansible/files/fetch_node_schains.py | 28 ++++------- skale-nodes/ansible/files/link_address.py | 12 ++--- .../ansible/files/prepare_base_wallet.py | 15 +++--- skale-nodes/ansible/files/setup_validator.py | 28 +++++------ skale-nodes/ansible/files/transfer_funds.py | 8 ++-- skale-nodes/ansible/requirements.txt | 3 +- .../roles/cleanup_artifacts/tasks/main.yaml | 7 +-- .../ansible/roles/config/tasks/main.yaml | 18 ++++---- .../roles/deploy_contracts/tasks/ima.yaml | 37 ++------------- .../roles/deploy_contracts/tasks/manager.yaml | 46 +++---------------- .../roles/validators/tasks/generate.yaml | 15 ++---- 14 files changed, 76 insertions(+), 161 deletions(-) create mode 100644 .flake8 create mode 100644 ruff.toml diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..a43fb2b --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +max-line-length = 100 +exclude = .git,__pycache__,docs/source/conf.py,old,build,dist,venv,.venv,node_modules,helper-scripts diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..d823f4d --- /dev/null +++ b/ruff.toml @@ -0,0 +1,4 @@ +line-length = 100 + +[format] +quote-style = "single" diff --git a/skale-nodes/ansible/files/cleanup_contracts.py b/skale-nodes/ansible/files/cleanup_contracts.py index e5c1541..1b3ed2d 100644 --- a/skale-nodes/ansible/files/cleanup_contracts.py +++ b/skale-nodes/ansible/files/cleanup_contracts.py @@ -1,7 +1,7 @@ import logging import os -from skale import Skale +from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger @@ -11,12 +11,12 @@ BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') -ABI_FILEPATH = os.path.join(BASE_DIR, 'manager.json') +MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) -skale = Skale(ENDPOINT, ABI_FILEPATH, wallet) +skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) def remove_active_nodes(): @@ -27,10 +27,7 @@ def remove_active_nodes(): def get_all_schains_names(skale): schains_ids = skale.schains_internal.get_all_schains_ids() print(schains_ids) - names = [ - skale.schains.get(sid).get('name') - for sid in schains_ids - ] + names = [skale.schains.get(sid).get('name') for sid in schains_ids] return names @@ -45,5 +42,5 @@ def cleanup(): remove_active_nodes() -if __name__ == "__main__": +if __name__ == '__main__': cleanup() diff --git a/skale-nodes/ansible/files/fetch_node_schains.py b/skale-nodes/ansible/files/fetch_node_schains.py index 080c42e..f43e684 100644 --- a/skale-nodes/ansible/files/fetch_node_schains.py +++ b/skale-nodes/ansible/files/fetch_node_schains.py @@ -22,7 +22,7 @@ import logging import os -from skale import Skale +from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.helper import ip_from_bytes from skale.utils.web3_utils import init_web3 @@ -31,23 +31,20 @@ BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') -ABI_FILEPATH = os.path.join(BASE_DIR, 'manager.json') +MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') def dropped_irrelevant(node_data): - return { - 'name': node_data['name'], - 'ip': ip_from_bytes(node_data['ip']) - } + return {'name': node_data['name'], 'ip': ip_from_bytes(node_data['ip'])} def get_nodes_by_schain(skale, schain): node_ids = skale.schains_internal.get_node_ids_for_schain(schain) - return sorted([ - dropped_irrelevant(skale.nodes.get(nid)) - for nid in node_ids - ], key=lambda node: node['name']) + return sorted( + [dropped_irrelevant(skale.nodes.get(nid)) for nid in node_ids], + key=lambda node: node['name'], + ) def get_all_schains(skale): @@ -75,11 +72,10 @@ def get_schains_by_nodes(skale, schains, unique_nodes=False): def main(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) - skale = Skale(ENDPOINT, ABI_FILEPATH, wallet) + skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) parser = argparse.ArgumentParser( - prog='FetchSchainsNodes', - description='Fetch schains by node info from mainnet' + prog='FetchSchainsNodes', description='Fetch schains by node info from mainnet' ) parser.add_argument('-u', '--unique', action='store_true') @@ -87,11 +83,7 @@ def main(): schains = get_all_schains(skale) - schains_by_nodes = get_schains_by_nodes( - skale, - schains, - unique_nodes=args.unique - ) + schains_by_nodes = get_schains_by_nodes(skale, schains, unique_nodes=args.unique) print(json.dumps(schains_by_nodes, indent=4)) diff --git a/skale-nodes/ansible/files/link_address.py b/skale-nodes/ansible/files/link_address.py index 248ba6b..5cf5400 100644 --- a/skale-nodes/ansible/files/link_address.py +++ b/skale-nodes/ansible/files/link_address.py @@ -1,6 +1,6 @@ import os -from skale import Skale +from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3, to_checksum_address @@ -9,27 +9,25 @@ ENDPOINT = os.getenv('ENDPOINT') ADDRESS = os.getenv('ADDRESS').strip() SIGNATURE = os.getenv('SIGNATURE').strip() -ABI_FILEPATH = os.path.join(BASE_DIR, 'manager.json') +MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') def main(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) - skale = Skale(ENDPOINT, ABI_FILEPATH, wallet) + skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) print(ETH_PRIVATE_KEY) print(ADDRESS) print(SIGNATURE) checksum_address = to_checksum_address(ADDRESS) validator_address = skale.wallet.address - linked = skale.validator_service.get_linked_addresses_by_validator_address( - validator_address - ) + linked = skale.validator_service.get_linked_addresses_by_validator_address(validator_address) if checksum_address not in linked: skale.validator_service.link_node_address( node_address=checksum_address, signature=SIGNATURE, - gas_price=skale.web3.eth.gas_price * 2 + gas_price=skale.web3.eth.gas_price * 2, ) diff --git a/skale-nodes/ansible/files/prepare_base_wallet.py b/skale-nodes/ansible/files/prepare_base_wallet.py index ccc8dc1..711a9a5 100644 --- a/skale-nodes/ansible/files/prepare_base_wallet.py +++ b/skale-nodes/ansible/files/prepare_base_wallet.py @@ -20,7 +20,7 @@ import logging import os -from skale import Skale +from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger @@ -31,29 +31,28 @@ BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') -ABI_FILEPATH = os.path.join(BASE_DIR, 'manager.json') +MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') SKALE_AMOUNT = float(os.getenv('SKALE_AMOUNT')) ETH_AMOUNT = float(os.getenv('ETH_AMOUNT')) web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) -skale = Skale(ENDPOINT, ABI_FILEPATH, wallet) +skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) def save_wallet_info(i, account): - filepath = os.path.join(BASE_DIR, f'wallet.txt') + filepath = os.path.join(BASE_DIR, 'wallet.txt') with open(filepath, 'w') as outfile: logger.info(f'Saving info to {filepath}') - outfile.write(account["private_key"]) + outfile.write(account['private_key']) def prepare_wallet(): - accounts = generate_accounts(skale, skale.wallet, 1, - SKALE_AMOUNT, ETH_AMOUNT, True) + accounts = generate_accounts(skale, skale.wallet, 1, SKALE_AMOUNT, ETH_AMOUNT, True) for i, account in enumerate(accounts): save_wallet_info(i, account) -if __name__ == "__main__": +if __name__ == '__main__': prepare_wallet() diff --git a/skale-nodes/ansible/files/setup_validator.py b/skale-nodes/ansible/files/setup_validator.py index ac356b6..6ff730b 100644 --- a/skale-nodes/ansible/files/setup_validator.py +++ b/skale-nodes/ansible/files/setup_validator.py @@ -22,7 +22,7 @@ import random import string -from skale import Skale +from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger @@ -34,7 +34,7 @@ BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') -ABI_FILEPATH = os.path.join(BASE_DIR, 'manager.json') +MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') ETH_AMOUNT = float(os.getenv('ETH_AMOUNT')) MIN_DELEGATION_AMOUNT = int(os.getenv('MIN_DELEGATION_AMOUNT')) @@ -46,7 +46,7 @@ web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) -skale = Skale(ENDPOINT, ABI_FILEPATH, wallet) +skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) def create_base_account_for_validator(validator_web3) -> dict: @@ -55,10 +55,9 @@ def create_base_account_for_validator(validator_web3) -> dict: return account_data -def create_skale_for_validator(account_dict, validator_web3) -> Skale: - validator_skale = Skale( - ENDPOINT, ABI_FILEPATH, - Web3Wallet(account_dict['private_key'], validator_web3) +def create_skale_for_validator(account_dict, validator_web3) -> SkaleManager: + validator_skale = SkaleManager( + ENDPOINT, MANAGER_CONTRACTS, Web3Wallet(account_dict['private_key'], validator_web3) ) return validator_skale @@ -66,15 +65,14 @@ def create_skale_for_validator(account_dict, validator_web3) -> Skale: def create_validator(name): validator_web3 = init_web3(ENDPOINT) validator_base_account = create_base_account_for_validator(validator_web3) - validator_skale = create_skale_for_validator(validator_base_account, - validator_web3) + validator_skale = create_skale_for_validator(validator_base_account, validator_web3) tx_res = validator_skale.validator_service.register_validator( name=name, description=f'Validator for node {name}', fee_rate=COMMISSION_RATE, min_delegation_amount=MIN_DELEGATION_AMOUNT, - wait_for=True + wait_for=True, ) tx_res.raise_for_status() @@ -85,8 +83,7 @@ def create_validator(name): def whitelist_validator(validator_id): if not skale.validator_service._is_authorized_validator(validator_id): - tx_res = skale.validator_service._enable_validator(validator_id, - wait_for=True) + tx_res = skale.validator_service._enable_validator(validator_id, wait_for=True) tx_res.raise_for_status() @@ -99,10 +96,7 @@ def setup_validator(): vid, pkey = create_validator(name) whitelist_validator(vid) - skale.constants_holder._set_msr( - new_msr=0, - wait_for=True - ) + skale.constants_holder._set_msr(new_msr=0, wait_for=True) with open(BASE_KEY_FILEPATH, 'w') as pkey_file: pkey_file.write(pkey) with open(VALIDATOR_ID_FILEPATH, 'w') as vid_file: @@ -114,5 +108,5 @@ def main(): setup_validator() -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/skale-nodes/ansible/files/transfer_funds.py b/skale-nodes/ansible/files/transfer_funds.py index 80ffef4..a0826d2 100644 --- a/skale-nodes/ansible/files/transfer_funds.py +++ b/skale-nodes/ansible/files/transfer_funds.py @@ -20,7 +20,7 @@ import os import logging -from skale import Skale +from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger @@ -30,7 +30,7 @@ BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') -ABI_FILEPATH = os.path.join(BASE_DIR, 'manager.json') +MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') ADDRESS = os.getenv('ADDRESS') AMOUNT = float(os.getenv('AMOUNT')) @@ -42,7 +42,7 @@ def init_web3_skale(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) - return Skale(ENDPOINT, ABI_FILEPATH, wallet) + return SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) def main(): @@ -51,5 +51,5 @@ def main(): send_eth(skale.web3, skale.wallet, address, AMOUNT) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index 24bb1c2..6c23392 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,4 +1,3 @@ ansible==4.2.0 -skale.py==5.1dev7 +skale.py==7.0dev2 boto3==1.17.34 -eth-account==0.5.3 diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index 6a448e1..d940bf4 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -4,36 +4,31 @@ path: "{{ playbook_dir}}/files/node-info/" tags: node_info_cleanup - - name: Cleanup group_vars/all from contracts links lineinfile: state: absent regexp: "{{ item }}" path: "{{ playbook_dir }}/group_vars/all" - loop: ["^sm_url", "^ima_url"] + loop: ["^sm_address", "^ima_address"] tags: group_vars_cleanup - - name: Find all abis find: paths: ["{{ playbook_dir }}/../../helper-scripts/contracts_data"] patterns: ["*.json"] register: abi_files - - name: Cleanup contract abis file: state: absent path: "{{ item.path }}" loop: "{{ abi_files.files }}" - - name: Cleanup manager manifests file: state: absent path: "{{ playbook_dir }}/../../helper-scripts/contracts_data/openzeppelin" - - name: Cleanup ima manifests file: state: absent diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 931cfda..da600f2 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -1,10 +1,10 @@ - # - name: Get block device from lvm-block-device file created by terraform - # shell: cat "{{ base_path }}/lvm-block-device" - # register: block_device +# - name: Get block device from lvm-block-device file created by terraform +# shell: cat "{{ base_path }}/lvm-block-device" +# register: block_device - name: Set SM download URL set_fact: - manager_contracts: "{{ sm_url }}" + manager_contracts: "{{ sm_address }}" when: manager_contracts is undefined tags: contracts @@ -16,7 +16,7 @@ - name: Set IMA download URL set_fact: - ima_contracts: "{{ ima_url }}" + ima_contracts: "{{ ima_address }}" when: ima_contracts is undefined tags: contracts @@ -46,8 +46,8 @@ IMA_ENDPOINT="{{ ima_endpoint }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" FILEBEAT_HOST="{{ filebeat_host }}" - MANAGER_CONTRACTS_ABI_URL="{{ manager_contracts }}" - IMA_CONTRACTS_ABI_URL="{{ ima_contracts }}" + MANAGER_CONTRACTS="{{ manager_contracts }}" + IMA_CONTRACTS="{{ ima_contracts }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" DOCKER_LVMPY_STREAM="{{ docker_lvmpy_stream }}" DISK_MOUNTPOINT="{{ block_device }}" @@ -74,8 +74,8 @@ DOCKER_LVMPY_STREAM="{{ docker_lvmpy_stream }}" ENV_TYPE="{{ env_type }}" SCHAIN_NAME="{{ schain_name }}" - MANAGER_CONTRACTS_ABI_URL={{ manager_contracts }} - IMA_CONTRACTS_ABI_URL={{ ima_contracts }} + MANAGER_CONTRACTS={{ manager_contracts }} + IMA_CONTRACTS={{ ima_contracts }} DISK_MOUNTPOINT={{ block_device }} INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml index e5949f0..a419943 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml @@ -9,36 +9,9 @@ tags: - deploy_ima -- name: Generate random string - set_fact: - random_str: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits length=15') }}" - tags: - - upload_ima - -- name: Upload IMA ABI to S3 - aws_s3: - aws_access_key: "{{ aws_key }}" - aws_secret_key: "{{ aws_secret }}" - bucket: "skale-abis" - src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/ima.json" - object: 'ima-abi-{{ ima_tag }}-{{ random_str }}.json' - region: 'eu-central-1' - mode: put - permission: "public-read" - tags: - - upload_ima - register: url_output - -- name: Format download URL - shell: echo "{{ url_output.url }}" | cut -f1 -d"?" - register: ima_url - tags: - - upload_ima - -- name: Show ABIs download URL - debug: - msg: >- - ABIs download URL: {{ ima_url.stdout }} +- name: Get SM Contract Address + shell: "jq -r '.message_proxy_mainnet_address' {{ playbook_dir }}/../../helper-scripts/contracts_data/ima.json" + register: ima_address tags: - upload_ima @@ -46,8 +19,8 @@ lineinfile: path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF - regexp: '^ima_url:' - line: "ima_url: {{ ima_url.stdout }}" + regexp: "^ima_address:" + line: "ima_address: {{ ima_address.stdout }}" state: present tags: - upload_ima diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 68bff0b..2c17ff5 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -9,60 +9,28 @@ NETWORK: "custom" tags: deploy_sm - -- name: Save SM URL to group vars +- name: Copy SM ABI copy: src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/manager.json" dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/skaleManagerComponents.json" tags: upload_sm - -- name: Generate random string - set_fact: - random_str: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits length=15') }}" - tags: upload_sm - - -- name: Upload SM ABI to S3 - aws_s3: - aws_access_key: "{{ aws_key }}" - aws_secret_key: "{{ aws_secret }}" - bucket: "skale-abis" - src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/manager.json" - object: "skale-manager-abi-{{ manager_tag }}-{{ random_str }}.json" - region: "eu-central-1" - mode: put - permission: "public-read" - tags: upload_sm - register: url_output - - -- name: Format download URL - shell: echo "{{ url_output.url }}" | cut -f1 -d"?" - register: sm_url - tags: upload_sm - - -- name: Show ABIs download URL - debug: - msg: >- - ABIs download URL: {{ sm_url.stdout }} - tags: - - upload_sm - - - name: Ensure group vars all file: state: touch path: "{{ playbook_dir }}/group_vars/all" tags: upload_sm +- name: Get SM Contract Address + shell: "jq -r '.skale_manager_address' {{ playbook_dir }}/../../helper-scripts/contracts_data/manager.json" + register: sm_address + tags: upload_sm - name: Save SM URL to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF - regexp: '^sm_url:' - line: "sm_url: {{ sm_url.stdout }}" + regexp: "^sm_address:" + line: "sm_address: {{ sm_address.stdout }}" state: present tags: upload_sm diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index 1771cff..200c6b2 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,20 +1,13 @@ -- name: Set SM download URL +- name: Set Skale Manager contract address set_fact: - manager_contracts: "{{ sm_url }}" + manager_contracts: "{{ sm_address }}" when: manager_contracts is undefined -- name: Crash if no SM ABIs URL provided - fail: +- name: Crash if no Skale Manager contract address provided + fail: msg: manager_contracts is undefined when: manager_contracts is undefined -- name: Download contracts to the local machine - get_url: - url: "{{ manager_contracts }}" - dest: "files/manager.json" - mode: 0644 - validate_certs: false - - name: Set hosts set_fact: hosts="{{ hosts|default([]) + [ item.value['ansible_host'] ] }}" with_dict: "{{ hostvars }}" From 47f1c2eda9a6fcd8c84be2b077961246a106bea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Tue, 25 Mar 2025 19:11:22 +0000 Subject: [PATCH 002/279] Updated Ansible version; Fixed config role ansible file; Updated sync role docker-compose templates with new manager and ima contract env variables. --- skale-nodes/ansible/requirements.txt | 2 +- skale-nodes/ansible/roles/config/tasks/main.yaml | 16 ++++------------ .../sync/templates/docker-compose-sync.yml.j2 | 2 ++ .../roles/sync/templates/docker-compose.yml.j2 | 6 ++++++ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index 6c23392..68111af 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ -ansible==4.2.0 +ansible==11.3.0 skale.py==7.0dev2 boto3==1.17.34 diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index da600f2..38a1c7a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -2,38 +2,30 @@ # shell: cat "{{ base_path }}/lvm-block-device" # register: block_device -- name: Set SM download URL +- name: Set Skale Manager contract address set_fact: manager_contracts: "{{ sm_address }}" when: manager_contracts is undefined tags: contracts -- name: Crash if no SM ABIs URL provided +- name: Crash if no Skale Manager contract address provided fail: msg: manager_contracts is undefined when: manager_contracts is undefined tags: contracts -- name: Set IMA download URL +- name: Set IMA contract address set_fact: ima_contracts: "{{ ima_address }}" when: ima_contracts is undefined tags: contracts -- name: Crash if no IMA ABIs URL provided +- name: Crash if no IMA contract address provided fail: msg: ima_contracts is undefined when: ima_contracts is undefined tags: contracts -- name: Download contracts - get_url: - url: "{{ manager_contracts }}" - dest: "{{ base_path }}/manager.json" - mode: 0644 - force: true - tags: contracts - - name: Set sgx url set_fact: sgx_url: "https://{{ hostvars['sgx0'].ansible_host }}:1026" diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 index 7677413..471d564 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 @@ -31,6 +31,8 @@ services: ENV_TYPE: ${ENV_TYPE} SCHAIN_NAME: ${SCHAIN_NAME} SYNC_NODE: "True" + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + IMA_CONTRACTS: ${IMA_CONTRACTS} command: "python3 sync_node.py" volumes: - /var/run/skale:/var/run/skale diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index c5bcc8c..d23c189 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -63,6 +63,8 @@ services: ALLOWED_TS_DIFF: 10000 TELEGRAF: "${TELEGRAF}" INFLUX_URL: "${INFLUX_URL}" + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + IMA_CONTRACTS: ${IMA_CONTRACTS} command: "python3 admin.py" volumes: - /var/run/skale:/var/run/skale @@ -112,6 +114,8 @@ services: ENV_TYPE: ${ENV_TYPE} DEFAULT_TIMEOUT: ${DEFAULT_TIMEOUT} ALLOWED_TS_DIFF: 10000 + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + IMA_CONTRACTS: ${IMA_CONTRACTS} command: "gunicorn app:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale @@ -169,6 +173,8 @@ services: DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} ALLOWED_TS_DIFF: 10000 + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + IMA_CONTRACTS: ${IMA_CONTRACTS} volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data From 6fada5e38cc50644e03c7f54616f5103246e6849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Thu, 27 Mar 2025 17:21:09 +0000 Subject: [PATCH 003/279] Small update fixes --- skale-nodes/ansible/roles/update/tasks/skale_update.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 474a785..82b02bf 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -1,6 +1,6 @@ - name: Run skale node update shell: - cmd: "skale node update {{ base_path }}/init-env --yes --pull-config all" + cmd: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 @@ -10,7 +10,7 @@ - name: Run skale sync node update shell: - cmd: "skale sync-node update {{ base_path }}/init-env --yes" + cmd: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 From 1b4836fbd6fe54f2206972e6d626c36eeaf7c7ad Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 2 Apr 2025 13:58:23 +0100 Subject: [PATCH 004/279] Export MANAGER_CONTRACTS variable --- skale-nodes/ansible/backup_schains.yaml | 1 + skale-nodes/ansible/restore_schain.yaml | 1 + skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml | 1 + .../ansible/roles/link_addresses/tasks/link_addresses.yaml | 1 + .../ansible/roles/link_addresses/tasks/transfer_funds.yaml | 1 + skale-nodes/ansible/roles/validators/tasks/generate.yaml | 1 + 6 files changed, 6 insertions(+) diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index cc02538..ce31c67 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -8,6 +8,7 @@ environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/restore_schain.yaml b/skale-nodes/ansible/restore_schain.yaml index 5ff01e1..5f99e23 100644 --- a/skale-nodes/ansible/restore_schain.yaml +++ b/skale-nodes/ansible/restore_schain.yaml @@ -8,6 +8,7 @@ environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml index f6a1044..34bc437 100644 --- a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml @@ -5,6 +5,7 @@ BASE_DIR: "files" ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" args: executable: python3 tags: diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml index 688547c..2ce9d78 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml @@ -11,6 +11,7 @@ ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" SIGNATURE: "{{ lookup('file', '{{ item }}').split()[1].strip() }}" ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 8aa11a0..e023f26 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -5,6 +5,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" AMOUNT: 0.2 args: diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index 200c6b2..bfdbffe 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -21,6 +21,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" MIN_DELEGATION_AMOUNT: "0" + MANAGER_CONTRACTS: "{{ manager_contracts }}" COMMISSION_RATE: "1" NODES_NUMBER: "{{ hosts|length }}" args: From 7a5cc4e16234bc0ac6935f61470261ab9f3c316c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 2 Apr 2025 13:58:57 +0100 Subject: [PATCH 005/279] Fix prefix for monitoring containers --- skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index dee99ef..51f798f 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -1,5 +1,5 @@ - name: Get monitoring container ids - command: 'docker ps -a -q --filter="name=monitoring_"' + command: 'docker ps -a -q --filter="name=monitor_"' become: true register: containers_output From 764cf44fa43e025e2ece4a3f860e3779a6192e70 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 8 Apr 2025 20:20:34 +0100 Subject: [PATCH 006/279] Use ETHERSCAN variable --- skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 2c17ff5..bff6aa4 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -7,6 +7,7 @@ ENDPOINT: "{{ endpoint }}" GAS_PRICE: "{{ deploy_gas_price }}" NETWORK: "custom" + ETHERSCAN: "{{ etherscan }}" tags: deploy_sm - name: Copy SM ABI From 8504fabe2112b4e9665d95f29a36d2e93ce1caf3 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 8 Apr 2025 20:24:45 +0100 Subject: [PATCH 007/279] Use SGX simulator and add geth node setup --- skale-nodes/ansible/cleanup_sgx.yaml | 2 +- skale-nodes/ansible/main.yaml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/cleanup_sgx.yaml b/skale-nodes/ansible/cleanup_sgx.yaml index 8a9d295..b5481fb 100644 --- a/skale-nodes/ansible/cleanup_sgx.yaml +++ b/skale-nodes/ansible/cleanup_sgx.yaml @@ -1,5 +1,5 @@ - name: Cleanup sgx - hosts: sgx + hosts: nodes become: true roles: - name: Remove all sgx skale software from the machines diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index 0a2b2c8..9f1bba4 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,6 +1,7 @@ -# - import_playbook: deploy_contracts.yaml - import_playbook: base.yaml -- import_playbook: sgx.yaml +- import_playbook: geth.yaml +- import_playbook: deploy_contracts.yaml +- import_playbook: sgx_sim.yaml - import_playbook: setup.yaml - import_playbook: validator.yaml - import_playbook: signature.yaml From ca2836669bc9fcfa95973f8fb272aa5cfc38f0f3 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 19 May 2025 19:52:22 +0100 Subject: [PATCH 008/279] Minor updates to main.yaml and sgx cleanup --- .gitignore | 1 + skale-nodes/ansible/cleanup_sgx.yaml | 2 +- skale-nodes/ansible/main.yaml | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 3e068e8..49cd0eb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ wallets/* # ansible skale-nodes/ansible/my-inventory skale-nodes/ansible/inventory/ +skale-nodes/ansible/inventory* skale-nodes/ansible/files/base-key*.txt skale-nodes/ansible/files/dev* skale-nodes/ansible/files/authorized_keys diff --git a/skale-nodes/ansible/cleanup_sgx.yaml b/skale-nodes/ansible/cleanup_sgx.yaml index b5481fb..8a9d295 100644 --- a/skale-nodes/ansible/cleanup_sgx.yaml +++ b/skale-nodes/ansible/cleanup_sgx.yaml @@ -1,5 +1,5 @@ - name: Cleanup sgx - hosts: nodes + hosts: sgx become: true roles: - name: Remove all sgx skale software from the machines diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index 9f1bba4..8121ebb 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,6 +1,6 @@ -- import_playbook: base.yaml -- import_playbook: geth.yaml - import_playbook: deploy_contracts.yaml +- import_playbook: base.yaml +# - import_playbook: geth.yaml - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml - import_playbook: validator.yaml From 3ce5d0e7a9ebedab69491dd149ab0a83ab655a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Wed, 21 May 2025 10:07:00 +0100 Subject: [PATCH 009/279] Started implementing mirage changes. Updated helper-scripts. --- helper-scripts | 2 +- skale-nodes/ansible/main.yaml | 2 +- .../ansible/roles/config/tasks/main.yaml | 33 +++-- .../ansible/roles/init/tasks/main.yaml | 57 +++++--- .../ansible/roles/register/tasks/main.yaml | 14 +- .../ansible/roles/signature/tasks/main.yaml | 23 +++- .../ansible/roles/skale_cli/tasks/main.yaml | 124 +++++++++++------- 7 files changed, 171 insertions(+), 84 deletions(-) diff --git a/helper-scripts b/helper-scripts index c253fa6..364e1da 160000 --- a/helper-scripts +++ b/helper-scripts @@ -1 +1 @@ -Subproject commit c253fa60f1862753e0546dd9ade72b41e425cf99 +Subproject commit 364e1dad7e28ecfcd6b63d925df0fefa515d06ff diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index 8121ebb..c980ae9 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,7 +1,7 @@ - import_playbook: deploy_contracts.yaml - import_playbook: base.yaml # - import_playbook: geth.yaml -- import_playbook: sgx_sim.yaml +# - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml - import_playbook: validator.yaml - import_playbook: signature.yaml diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 38a1c7a..53eac1a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -1,7 +1,3 @@ -# - name: Get block device from lvm-block-device file created by terraform -# shell: cat "{{ base_path }}/lvm-block-device" -# register: block_device - - name: Set Skale Manager contract address set_fact: manager_contracts: "{{ sm_address }}" @@ -31,7 +27,22 @@ sgx_url: "https://{{ hostvars['sgx0'].ansible_host }}:1026" when: sgx_url is not defined or sgx_url == '' -- name: Set env options +- name: Set env options for Mirage node + set_fact: + env_options: | + MANAGER_CONTRACTS="{{ manager_contracts }}" + IMA_CONTRACTS="{{ ima_contracts }}" + CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + ENDPOINT="{{ endpoint }}" + DISK_MOUNTPOINT="{{ block_device }}" + SGX_SERVER_URL="{{ sgx_url }}" + ENV_TYPE="{{ env_type }}" + FILEBEAT_HOST="{{ filebeat_host }}" + ENFORCE_BTRFS='False' + when: node_type is defined and node_type == "mirage" + tags: env + +- name: Set env options for regular SKALE node set_fact: env_options: | ENDPOINT="{{ endpoint }}" @@ -52,11 +63,12 @@ DISABLE_IMA="{{ disable_ima }}" INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" - - when: sync_node is not defined or not sync_node + when: + - (node_type is not defined or node_type != "mirage") + - (sync_node is not defined or not sync_node) tags: env -- name: Set env options sync node +- name: Set env options for SKALE sync node set_fact: env_options: | CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" @@ -71,7 +83,10 @@ DISK_MOUNTPOINT={{ block_device }} INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" - when: sync_node is defined and sync_node + when: + - (node_type is not defined or node_type != "mirage") + - (sync_node is defined and sync_node) + tags: env - name: Show env debug: diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 26a115d..fe8d518 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,34 +1,53 @@ -- name: Define cmd for regular node +- name: Define cmd for mirage boot node set_fact: - skale_cmd: "skale node init {{ base_path }}/init-env" - when: sync_node is not defined or not sync_node + cli_full_command: "{{ cli_command_name }} boot init {{ base_path }}/init-env" + when: node_type is defined and node_type == "mirage" -- name: Define cmd for sync node +- name: Define cmd for regular SKALE node set_fact: - skale_cmd: "skale sync-node init {{ base_path }}/init-env" - when: sync_node is defined and sync_node + cli_full_command: "{{ cli_command_name }} node init {{ base_path }}/init-env" + when: + - node_type is not defined or node_type != "mirage" + - sync_node is not defined or not sync_node -- name: Add --catchup if needed +- name: Define cmd for SKALE sync node set_fact: - skale_cmd: "{{ skale_cmd }} --catchup" - when: sync_node is defined and sync_node and catchup is defined and catchup + cli_full_command: "{{ cli_command_name }} sync-node init {{ base_path }}/init-env" + when: + - node_type is not defined or node_type != "mirage" + - sync_node is defined and sync_node -- name: Add --archive if needed +- name: Add --catchup if needed (SKALE sync node) set_fact: - skale_cmd: "{{ skale_cmd }} --archive" - when: sync_node is defined and sync_node and archive is defined and archive + cli_full_command: "{{ cli_full_command }} --catchup" + when: + - node_type is not defined or node_type != "mirage" + - sync_node is defined and sync_node + - catchup is defined and catchup -- name: Add --historic-state if needed +- name: Add --archive if needed (SKALE sync node) set_fact: - skale_cmd: "{{ skale_cmd }} --historic-state" - when: sync_node is defined and sync_node and historic_state is defined and historic_state -- name: Show skale_cmd + cli_full_command: "{{ cli_full_command }} --archive" + when: + - node_type is not defined or node_type != "mirage" + - sync_node is defined and sync_node + - archive is defined and archive + +- name: Add --historic-state if needed (SKALE sync node) + set_fact: + cli_full_command: "{{ cli_full_command }} --historic-state" + when: + - node_type is not defined or node_type != "mirage" + - sync_node is defined and sync_node + - historic_state is defined and historic_state + +- name: Show cli_full_command debug: - msg: "{{ skale_cmd }}" + msg: "{{ cli_full_command }}" -- name: Execute skale_cmd +- name: Execute cli_full_command command: - cmd: "{{ skale_cmd }}" + cmd: "{{ cli_full_command }}" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 2d222c7..61a826c 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -1,11 +1,19 @@ - name: Register ip address set_fact: - # ip_address: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}" # private ip - ip_address: "{{ hostvars[inventory_hostname].ansible_host }}" # public ip + ip_address: "{{ hostvars[inventory_hostname].ansible_host }}" + +- name: Run mirage boot register + command: + cmd: "{{ cli_command_name }} boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" + environment: + LANG: en_US.utf-8 + LC_ALL: en_US.utf-8 + when: node_type is defined and node_type == "mirage" - name: Run skale node register command: - cmd: "skale node register --name {{ inventory_hostname }} --ip {{ ip_address }} --port 10000 --domain {{ ip_address }}.{{ base_domain_name }}" + cmd: "{{ cli_command_name }} node register --name {{ inventory_hostname }} --ip {{ ip_address }} --port 10000 --domain {{ ip_address }}.{{ base_domain_name }}" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 + when: node_type is not defined or node_type != "mirage" diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index f8d6dd7..e1221d2 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -2,7 +2,7 @@ set_fact: node_info_dir: "files/node-info" -- name: Create foder for nodes addresses info +- name: Create folder for nodes addresses info file: path: "{{ node_info_dir }}" state: directory @@ -13,10 +13,12 @@ set_fact: validator_id: "{{ lookup('file', 'files/validator-id.txt') }}" -- debug: msg="{{ validator_id }}" +- name: Show Validator Id + debug: + msg: "{{ validator_id }}" -- name: Get skale wallet info output - command: "sudo skale wallet info -f json" +- name: Get wallet info output + command: "sudo {{ cli_command_name }} wallet info -f json" register: wallet_cmd_result environment: LC_ALL: "C.UTF-8" @@ -26,12 +28,21 @@ set_fact: wallet_data: "{{ wallet_cmd_result.stdout | to_json | from_json }}" -- name: Get node signature - command: "sudo skale node signature {{ validator_id }}" +- name: Get node signature (Mirage) + command: "sudo {{ cli_command_name }} boot signature {{ validator_id }}" register: signature_cmd_result environment: LC_ALL: "C.UTF-8" LANG: "C.UTF-8" + when: node_type is defined and node_type == "mirage" + +- name: Get node signature (SKALE) + command: "sudo {{ cli_command_name }} node signature {{ validator_id }}" + register: signature_cmd_result + environment: + LC_ALL: "C.UTF-8" + LANG: "C.UTF-8" + when: node_type is not defined or node_type != "mirage" - name: Get wallet data from json set_fact: diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index e0cae15..da4b3ac 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -1,38 +1,62 @@ -- name: Makedir dist +# --- Logic for Mirage Nodes --- +- name: Download mirage_cli from spaces + get_url: + url: "{{ mirage_cli_url }}" + dest: "/usr/local/bin/mirage" + mode: "0755" + when: node_type is defined and node_type == "mirage" + tags: binary + +- name: Register mirage command path and name + set_fact: + cli_executable_path: "/usr/local/bin/mirage" + cli_command_name: "mirage" + when: node_type is defined and node_type == "mirage" + tags: binary + +# --- Logic for SKALE Nodes --- +- name: Makedir dist (for SKALE CLI build) file: state: directory path: "{{ base_path }}/node-cli/dist" - when: env is defined and env == "dev" + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" - -- name: Remove old binary builder image +- name: Remove old binary builder image (for SKALE CLI build) community.docker.docker_image: name: "node-cli-builder" state: absent - when: env is defined and env == "dev" - + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" -- name: Build binary builder image +- name: Build binary builder image (for SKALE CLI build) community.docker.docker_image_build: name: "node-cli-builder" network: host path: "{{ base_path }}/node-cli" - when: env is defined and env == "dev" - + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" -- name: Set build command +- name: Set build command (for SKALE CLI - regular) set_fact: build_cmd: "scripts/build.sh test test normal" - when: env is defined and env == "dev" and sync_node is not defined or not sync_node + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" + - sync_node is not defined or not sync_node - -- name: Add sync option to command +- name: Add sync option to command (for SKALE CLI - sync) set_fact: build_cmd: "scripts/build.sh test test sync" - when: env is defined and env == "dev" and sync_node is defined and sync_node - + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" + - sync_node is defined and sync_node -- name: Build binary +- name: Build binary (for SKALE CLI) docker_container: image: node-cli-builder name: node-cli-builder @@ -40,44 +64,54 @@ volumes: - "{{ base_path }}/node-cli/dist:/app/dist" command: "{{ build_cmd }}" - when: env is defined and env == "dev" - - -- name: Copy executable to /usr/bin/local for normal - copy: remote_src=True src="{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" dest=/usr/local/bin/skale - when: env is defined and env == "dev" and (sync_node is not defined or not sync_node) - - -- name: Copy executable to /usr/bin/local for sync - copy: remote_src=True src="{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" dest=/usr/local/bin/skale - when: env is defined and env == "dev" and sync_node is defined and sync_node - - -- name: Remove builder container + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" + +- name: Copy executable to /usr/bin/local for normal (SKALE CLI) + copy: + remote_src: True + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" + dest: /usr/local/bin/skale + mode: "0755" + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" + - (sync_node is not defined or not sync_node) + +- name: Copy executable to /usr/bin/local for sync (SKALE CLI) + copy: + remote_src: True + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" + dest: /usr/local/bin/skale + mode: "0755" + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" + - sync_node is defined and sync_node + +- name: Remove builder container (for SKALE CLI) docker_container: state: absent name: node-cli-builder - when: env is defined and env == "dev" - + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "dev" -- name: Download skale_cli from spaces +- name: Download skale_cli from spaces (SKALE CLI) get_url: url: "{{ skale_cli_url }}" dest: "/usr/local/bin/skale" force: yes - mode: 644 - when: env is defined and env == "test" + mode: "0755" + when: + - node_type is not defined or node_type != "mirage" + - env is defined and env == "test" tags: binary - -- name: Add execute permission to skale executable - file: - path: /usr/local/bin/skale - mode: '0555' - tags: binary - - -- name: Register skale command +- name: Register skale command path and name set_fact: - skale: "/usr/local/bin/skale" + cli_executable_path: "/usr/local/bin/skale" + cli_command_name: "skale" + when: node_type is not defined or node_type != "mirage" tags: binary From 75cb35a6d3962d07443f367ce159c34f78e635f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Wed, 21 May 2025 17:00:37 +0100 Subject: [PATCH 010/279] Started fixing bugs with skale manager contract address passing to nodes. --- .gitignore | 1 + skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml | 2 +- skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml | 2 +- skale-nodes/ansible/roles/validators/tasks/generate.yaml | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 49cd0eb..a579e72 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ bare-metal/ansible/files/restart_vm* bare-metal/ansible/conf* skale-nodes/ansible/group_vars/all +skale-nodes/ansible/roles/base_provision/files/files/authorized_keys diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml index a419943..50c12bd 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml @@ -20,7 +20,7 @@ path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF regexp: "^ima_address:" - line: "ima_address: {{ ima_address.stdout }}" + line: 'ima_address: "{{ ima_address.stdout }}"' state: present tags: - upload_ima diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index bff6aa4..74b676a 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -32,6 +32,6 @@ path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF regexp: "^sm_address:" - line: "sm_address: {{ sm_address.stdout }}" + line: 'sm_address: "{{ sm_address.stdout }}"' state: present tags: upload_sm diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index bfdbffe..b0767fb 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,6 +1,6 @@ - name: Set Skale Manager contract address set_fact: - manager_contracts: "{{ sm_address }}" + manager_contracts: "{{ sm_address.stdout }}" when: manager_contracts is undefined - name: Crash if no Skale Manager contract address provided From 6262981875e77d658423cd64de87e3d1c3fd14ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Thu, 22 May 2025 21:46:38 +0100 Subject: [PATCH 011/279] Add condition to skip docker-lvmpy cleanup for mirage nodes. --- skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml index 548c09c..87f542b 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml @@ -2,6 +2,7 @@ systemd: state: stopped name: docker-lvmpy + when: node_type is not defined or node_type != "mirage" - name: Remove docker-lvmpy artifacts file: @@ -12,3 +13,4 @@ - "/opt/docker-lvmpy" - "/etc/docker-lvmpy" - "/etc/systemd/system/docker-lvmpy.service" + when: node_type is not defined or node_type != "mirage" From fa9679f056655a54a0a36ecddf45fa5bd7de4d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Fri, 23 May 2025 19:08:40 +0100 Subject: [PATCH 012/279] Continued fixing node-provisioning. - Added steps to unmount and remove the schains directory during node cleanup. - Adjusted SGX simulation command to include new flag `-b`. - Fixed Validator playbook Skale Manager contract address assignment logic. --- skale-nodes/ansible/main.yaml | 6 +++--- .../roles/cleanup_nodes/tasks/node_artifacts.yaml | 12 +++++++++++- skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml | 6 +++--- .../ansible/roles/validators/tasks/generate.yaml | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index c980ae9..a1c13db 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,7 +1,7 @@ -- import_playbook: deploy_contracts.yaml -- import_playbook: base.yaml +#- import_playbook: deploy_contracts.yaml +#- import_playbook: base.yaml # - import_playbook: geth.yaml -# - import_playbook: sgx_sim.yaml +- import_playbook: sgx_sim.yaml - import_playbook: setup.yaml - import_playbook: validator.yaml - import_playbook: signature.yaml diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml index fa136f8..e07d9b4 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml @@ -7,6 +7,16 @@ - "{{ base_path }}/.skale" - "{{ base_path }}/init-env" +- name: Unmount schains directory + ansible.builtin.mount: + path: /var/lib/skale/schains + state: unmounted + +- name: Remove schains directory + file: + path: /var/lib/skale/schains + state: absent + - name: Remove node artifacts from /var and /etc file: path: "{{ item }}" @@ -24,4 +34,4 @@ ansible.builtin.iptables: chain: "{{ item }}" flush: yes - with_items: [ 'INPUT', 'FORWARD', 'OUTPUT' ] + with_items: ["INPUT", "FORWARD", "OUTPUT"] diff --git a/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml b/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml index ecf538e..45ad5f9 100644 --- a/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml +++ b/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml @@ -10,8 +10,8 @@ volumes: - "{{ base_path }}/sgx-data:/usr/src/sdk/sgx_data" - "/dev/urandom:/dev/random" - command: -s -y -d -V + command: -s -y -d -V -b log_driver: json-file log_opt: - max-size: "10m" - max-file: "4" + max-size: "10m" + max-file: "4" diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index b0767fb..bfdbffe 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,6 +1,6 @@ - name: Set Skale Manager contract address set_fact: - manager_contracts: "{{ sm_address.stdout }}" + manager_contracts: "{{ sm_address }}" when: manager_contracts is undefined - name: Crash if no Skale Manager contract address provided From d557082f6ed027b1047af6d306d569be54b43e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gon=C3=A7alves?= Date: Mon, 26 May 2025 13:31:20 +0100 Subject: [PATCH 013/279] Updated container cleanup logic to include Mirage-specific containers and conditions. --- .../roles/cleanup_nodes/tasks/containers.yaml | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 51f798f..2807524 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -3,13 +3,11 @@ become: true register: containers_output - - name: Split monitoring container ids output register: containers_output set_fact: monitoring_container_ids: "{{ containers_output.stdout.split('\n') }}" - - name: Destroy monitoring container ids become: true docker_container: @@ -19,21 +17,18 @@ keep_volumes: no with_items: "{{ monitoring_container_ids | default([]) }}" - - name: Get all container ids - command: 'docker ps -a -q --filter="name=skale_"' + command: 'docker ps -a -q --filter="name=skale_" --filter="name=mirage_"' become: true register: containers_output tags: containers_ids - - name: Split containers ids output register: containers_output set_fact: skale_container_ids: "{{ containers_output.stdout.split('\n') }}" - -- name: Destroy admin container +- name: Destroy skale admin container become: true docker_container: name: "skale_admin" @@ -41,7 +36,27 @@ force_kill: yes keep_volumes: no tags: admin + when: node_type is not defined or node_type != "mirage" +- name: Destroy mirage boot admin container + become: true + docker_container: + name: "mirage_boot_admin" + state: absent + force_kill: yes + keep_volumes: no + tags: admin + when: node_type is defined and node_type == "mirage" + +- name: Destroy mirage admin container + become: true + docker_container: + name: "mirage_admin" + state: absent + force_kill: yes + keep_volumes: no + tags: admin + when: node_type is defined and node_type == "mirage" - name: Destroy all containers become: true @@ -52,19 +67,16 @@ keep_volumes: no with_items: "{{ skale_container_ids | default([]) }}" - - name: Prune docker command: cmd: "docker system prune -af" - - name: Umount shared-space command: cmd: "umount /mnt/schains-shared-space" failed_when: False tags: umount - - name: Register /mnt folders find: paths: "/mnt/" @@ -73,7 +85,6 @@ tags: - mounts - - name: Cleanup /mnt dir file: path: "{{ item.path }}" @@ -82,7 +93,6 @@ tags: - mounts - - name: Remove all data-dir volumes lvg: vg: "schains" From c73568279e8bf7708f8cc51360ca6148d056c836 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 28 May 2025 18:14:38 +0100 Subject: [PATCH 014/279] Convert signature type to bytes --- skale-nodes/ansible/files/link_address.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/files/link_address.py b/skale-nodes/ansible/files/link_address.py index 5cf5400..b96c67e 100644 --- a/skale-nodes/ansible/files/link_address.py +++ b/skale-nodes/ansible/files/link_address.py @@ -17,16 +17,17 @@ def main(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) - print(ETH_PRIVATE_KEY) - print(ADDRESS) - print(SIGNATURE) + print(f'PK: {ETH_PRIVATE_KEY}') + print(f'Node address: {ADDRESS}') + print(f'Signature: {SIGNATURE}') checksum_address = to_checksum_address(ADDRESS) + signature_bytes = web3.to_bytes(hexstr=SIGNATURE) validator_address = skale.wallet.address linked = skale.validator_service.get_linked_addresses_by_validator_address(validator_address) if checksum_address not in linked: skale.validator_service.link_node_address( node_address=checksum_address, - signature=SIGNATURE, + signature=signature_bytes, gas_price=skale.web3.eth.gas_price * 2, ) From b27f46e7ac9eb1b5aee1cbe8089f7dfdd5bdcfcf Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 16:59:11 +0100 Subject: [PATCH 015/279] Replace 'cli_command_name' by 'node_type' variable --- skale-nodes/ansible/roles/init/tasks/main.yaml | 6 +++--- skale-nodes/ansible/roles/register/tasks/main.yaml | 4 ++-- skale-nodes/ansible/roles/signature/tasks/main.yaml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index fe8d518..005c6f3 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,18 +1,18 @@ - name: Define cmd for mirage boot node set_fact: - cli_full_command: "{{ cli_command_name }} boot init {{ base_path }}/init-env" + cli_full_command: "{{ node_type }} boot init {{ base_path }}/init-env" when: node_type is defined and node_type == "mirage" - name: Define cmd for regular SKALE node set_fact: - cli_full_command: "{{ cli_command_name }} node init {{ base_path }}/init-env" + cli_full_command: "{{ node_type }} node init {{ base_path }}/init-env" when: - node_type is not defined or node_type != "mirage" - sync_node is not defined or not sync_node - name: Define cmd for SKALE sync node set_fact: - cli_full_command: "{{ cli_command_name }} sync-node init {{ base_path }}/init-env" + cli_full_command: "{{ node_type }} sync-node init {{ base_path }}/init-env" when: - node_type is not defined or node_type != "mirage" - sync_node is defined and sync_node diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 61a826c..4522b00 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -4,7 +4,7 @@ - name: Run mirage boot register command: - cmd: "{{ cli_command_name }} boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" + cmd: "{{ node_type }} boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 @@ -12,7 +12,7 @@ - name: Run skale node register command: - cmd: "{{ cli_command_name }} node register --name {{ inventory_hostname }} --ip {{ ip_address }} --port 10000 --domain {{ ip_address }}.{{ base_domain_name }}" + cmd: "{{ node_type }} node register --name {{ inventory_hostname }} --ip {{ ip_address }} --port 10000 --domain {{ ip_address }}.{{ base_domain_name }}" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index e1221d2..31a2238 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -18,7 +18,7 @@ msg: "{{ validator_id }}" - name: Get wallet info output - command: "sudo {{ cli_command_name }} wallet info -f json" + command: "sudo {{ node_type }} wallet info -f json" register: wallet_cmd_result environment: LC_ALL: "C.UTF-8" From 91df93c66d6b7b34df0bca3e29495ccf2b4de1b4 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 17:10:26 +0100 Subject: [PATCH 016/279] Fix 'Get node signature' command --- .../ansible/roles/signature/tasks/main.yaml | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index 31a2238..7b27040 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -28,21 +28,23 @@ set_fact: wallet_data: "{{ wallet_cmd_result.stdout | to_json | from_json }}" -- name: Get node signature (Mirage) - command: "sudo {{ cli_command_name }} boot signature {{ validator_id }}" +- name: Determine signature command based on node_type + set_fact: + get_signature_command: >- # Using >- for multi-line in YAML, processed by Jinja + {% if node_type is defined and node_type == "mirage" %} + sudo {{ node_type }} boot signature {{ validator_id }} + {% else %} + sudo {{ node_type }} node signature {{ validator_id }} + {% endif %} + +- name: Get node signature + command: "{{ get_signature_command }}" register: signature_cmd_result - environment: - LC_ALL: "C.UTF-8" - LANG: "C.UTF-8" - when: node_type is defined and node_type == "mirage" + changed_when: false -- name: Get node signature (SKALE) - command: "sudo {{ cli_command_name }} node signature {{ validator_id }}" - register: signature_cmd_result - environment: - LC_ALL: "C.UTF-8" - LANG: "C.UTF-8" - when: node_type is not defined or node_type != "mirage" +- name: Display node signature + debug: + msg: "{{ signature_cmd_result.stdout }}" - name: Get wallet data from json set_fact: From cbbc5dfa550541dbffab8b731d0a7f7413e4a205 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 18:41:52 +0100 Subject: [PATCH 017/279] Remove validator-id and validator-key files during cleanup --- .../ansible/roles/cleanup_artifacts/tasks/main.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index d940bf4..93e6610 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -33,3 +33,10 @@ file: state: absent path: "{{ playbook_dir }}/../../helper-scripts/contracts_data/ima-openzeppelin" + +- name: Remove validator-id and validator-key files + file: + path: "{{ item }}" + state: absent + with_fileglob: + - "{{ playbook_dir}}/files/validator-*.txt" \ No newline at end of file From 7b00cb69956898dd4dbb1a0f998ac58c99c269b0 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 19:41:14 +0100 Subject: [PATCH 018/279] Fix SGX container name --- skale-nodes/ansible/roles/cleanup_sgx/tasks/main.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_sgx/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_sgx/tasks/main.yaml index 39d9818..453aac8 100644 --- a/skale-nodes/ansible/roles/cleanup_sgx/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_sgx/tasks/main.yaml @@ -8,10 +8,10 @@ tags: sgx when: sgx_simulator is not defined or not sgx_simulator -- name: Destroy sgx container +- name: Destroy sgx-sim container become: true docker_container: - name: "sgx_sim" + name: "sgx-sim" state: absent force_kill: yes keep_volumes: no From a6765761daa1e6fdd1985367605cbac1431613c0 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 19:46:24 +0100 Subject: [PATCH 019/279] Set localhost variable `sm_address` --- .../ansible/roles/deploy_contracts/tasks/manager.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 74b676a..be5c911 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -24,7 +24,13 @@ - name: Get SM Contract Address shell: "jq -r '.skale_manager_address' {{ playbook_dir }}/../../helper-scripts/contracts_data/manager.json" - register: sm_address + register: sm_address_output + changed_when: false + tags: upload_sm + +- name: Save SM Contract Address to variable + set_fact: + sm_address: "{{ sm_address_output.stdout }}" tags: upload_sm - name: Save SM URL to group vars @@ -32,6 +38,6 @@ path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF regexp: "^sm_address:" - line: 'sm_address: "{{ sm_address.stdout }}"' + line: 'sm_address: "{{ sm_address }}"' state: present tags: upload_sm From 036b3c7bc0cce6cb3bd7ae326f3f23b0cf245d07 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 19:47:46 +0100 Subject: [PATCH 020/279] Comment unused playbooks --- skale-nodes/ansible/main.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index a1c13db..c90613c 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,10 +1,10 @@ -#- import_playbook: deploy_contracts.yaml #- import_playbook: base.yaml -# - import_playbook: geth.yaml +#- import_playbook: geth.yaml +- import_playbook: deploy_contracts.yaml - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml - import_playbook: validator.yaml - import_playbook: signature.yaml - import_playbook: link_addresses.yaml - import_playbook: register.yaml -- import_playbook: ssl.yaml +#- import_playbook: ssl.yaml From 677c6adc188aadc04ccbda50b3827eaa0da48283 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 29 May 2025 19:49:22 +0100 Subject: [PATCH 021/279] Get variable 'sm_address' from localhost scope --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- .../ansible/roles/link_addresses/tasks/transfer_funds.yaml | 2 ++ skale-nodes/ansible/roles/validators/tasks/generate.yaml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 53eac1a..e27af98 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -1,6 +1,6 @@ - name: Set Skale Manager contract address set_fact: - manager_contracts: "{{ sm_address }}" + manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" when: manager_contracts is undefined tags: contracts diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index e023f26..d875f40 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -1,3 +1,5 @@ +# TODO: get 'manager_contracts' variable from group_vars/all + - name: Transfer funds to node wallets run_once: yes script: transfer_funds.py diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index bfdbffe..8c2c1a7 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,6 +1,6 @@ - name: Set Skale Manager contract address set_fact: - manager_contracts: "{{ sm_address }}" + manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" when: manager_contracts is undefined - name: Crash if no Skale Manager contract address provided From b2c4effeb04d0d28acdaa849c0a69965a21a374c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 30 May 2025 12:35:31 +0100 Subject: [PATCH 022/279] Remove `-b` parameter from SGX running command --- skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml b/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml index 45ad5f9..de5f0c5 100644 --- a/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml +++ b/skale-nodes/ansible/roles/sgx/tasks/sgx_sim.yaml @@ -10,7 +10,7 @@ volumes: - "{{ base_path }}/sgx-data:/usr/src/sdk/sgx_data" - "/dev/urandom:/dev/random" - command: -s -y -d -V -b + command: -s -y -d -V log_driver: json-file log_opt: max-size: "10m" From 9d01bb7a8dcacd5fd46b80ee7d6fc51c7b6fede9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 30 May 2025 13:10:59 +0100 Subject: [PATCH 023/279] Set localhost variable `ima_address` --- .../ansible/roles/deploy_contracts/tasks/ima.yaml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml index 50c12bd..27b6ac1 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml @@ -9,18 +9,24 @@ tags: - deploy_ima -- name: Get SM Contract Address +- name: Get IMA Contract Address shell: "jq -r '.message_proxy_mainnet_address' {{ playbook_dir }}/../../helper-scripts/contracts_data/ima.json" - register: ima_address + register: ima_address_output + changed_when: false tags: - upload_ima +- name: Save IMA Contract Address to variable + set_fact: + ima_address: "{{ ima_address_output.stdout }}" + tags: upload_ima + - name: Save IMA URL to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF regexp: "^ima_address:" - line: 'ima_address: "{{ ima_address.stdout }}"' + line: 'ima_address: "{{ ima_address }}"' state: present tags: - upload_ima From 64942a433daf5f8045c387c8ee412e04a6ce68bf Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 30 May 2025 13:11:43 +0100 Subject: [PATCH 024/279] Get variable 'ima_address' from localhost scope --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index e27af98..3a3944d 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -12,7 +12,7 @@ - name: Set IMA contract address set_fact: - ima_contracts: "{{ ima_address }}" + ima_contracts: "{{ hostvars['localhost']['ima_address'] }}" when: ima_contracts is undefined tags: contracts From 095bf989d04c80b85560eb441188137c485d3c6e Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 30 May 2025 19:08:00 +0100 Subject: [PATCH 025/279] Add Mirage boot update task --- .../roles/update/tasks/skale_update.yaml | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 82b02bf..ea2edd8 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -1,19 +1,33 @@ -- name: Run skale node update +- name: Run Mirage node update + shell: + cmd: "mirage boot update {{ base_path }}/init-env --yes" + environment: + LANG: en_US.utf-8 + LC_ALL: en_US.utf-8 + HOME_DIR: "{{ base_path }}" + when: node_type is defined and node_type == "mirage" + tags: skale_update + +- name: Run Skale node update shell: cmd: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" - when: sync_node is not defined or not sync_node + when: + - (node_type is not defined or node_type != "mirage") + - (sync_node is not defined or not sync_node) tags: skale_update -- name: Run skale sync node update +- name: Run Skale sync node update shell: cmd: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" - when: sync_node is defined and sync_node + when: + - (node_type is not defined or node_type != "mirage") + - (sync_node is defined and sync_node) tags: skale_update From b2e37545a09ab0305f5004727495d78bbe55baa2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 2 Jun 2025 16:23:42 +0100 Subject: [PATCH 026/279] Uncomment `base` playbook --- skale-nodes/ansible/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index c90613c..5139ca1 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,4 +1,4 @@ -#- import_playbook: base.yaml +- import_playbook: base.yaml #- import_playbook: geth.yaml - import_playbook: deploy_contracts.yaml - import_playbook: sgx_sim.yaml From f8f442ee67de3e5e5d0070a1348c376dd7e92c91 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 4 Jun 2025 18:03:07 +0100 Subject: [PATCH 027/279] Rename `env` variable to 'build_type' and make it and `node_type` required --- skale-nodes/ansible/archive.yaml | 2 +- skale-nodes/ansible/main.yaml | 2 +- .../roles/cleanup_nodes/tasks/containers.yaml | 6 +-- .../cleanup_nodes/tasks/docker_lvmpy.yaml | 4 +- .../ansible/roles/config/tasks/main.yaml | 6 +-- .../ansible/roles/init/tasks/main.yaml | 12 ++--- .../ansible/roles/register/tasks/main.yaml | 4 +- .../ansible/roles/signature/tasks/main.yaml | 2 +- .../ansible/roles/skale_cli/tasks/main.yaml | 46 +++++++++---------- .../ansible/roles/sync/tasks/main.yaml | 16 +++---- .../ansible/roles/update/tasks/main.yaml | 2 +- .../roles/update/tasks/skale_update.yaml | 6 +-- skale-nodes/ansible/setup.yaml | 2 +- skale-nodes/ansible/update.yaml | 2 +- 14 files changed, 56 insertions(+), 56 deletions(-) diff --git a/skale-nodes/ansible/archive.yaml b/skale-nodes/ansible/archive.yaml index 224ec68..402ff76 100644 --- a/skale-nodes/ansible/archive.yaml +++ b/skale-nodes/ansible/archive.yaml @@ -4,7 +4,7 @@ roles: - role: sync tags: sync - when: env is defined and env == "dev" + when: build_type == "source" - role: skale_cli tags: cli diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index 5139ca1..c90613c 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,4 +1,4 @@ -- import_playbook: base.yaml +#- import_playbook: base.yaml #- import_playbook: geth.yaml - import_playbook: deploy_contracts.yaml - import_playbook: sgx_sim.yaml diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 2807524..ad28cd7 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -36,7 +36,7 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type is not defined or node_type != "mirage" + when: node_type == "skale" - name: Destroy mirage boot admin container become: true @@ -46,7 +46,7 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" - name: Destroy mirage admin container become: true @@ -56,7 +56,7 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" - name: Destroy all containers become: true diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml index 87f542b..9a6c859 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml @@ -2,7 +2,7 @@ systemd: state: stopped name: docker-lvmpy - when: node_type is not defined or node_type != "mirage" + when: node_type == "skale" - name: Remove docker-lvmpy artifacts file: @@ -13,4 +13,4 @@ - "/opt/docker-lvmpy" - "/etc/docker-lvmpy" - "/etc/systemd/system/docker-lvmpy.service" - when: node_type is not defined or node_type != "mirage" + when: node_type == "skale" diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 3a3944d..5124795 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -39,7 +39,7 @@ ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" ENFORCE_BTRFS='False' - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" tags: env - name: Set env options for regular SKALE node @@ -64,7 +64,7 @@ INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" when: - - (node_type is not defined or node_type != "mirage") + - node_type == "skale" - (sync_node is not defined or not sync_node) tags: env @@ -84,7 +84,7 @@ INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" when: - - (node_type is not defined or node_type != "mirage") + - node_type == "skale" - (sync_node is defined and sync_node) tags: env diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 005c6f3..3615f61 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,27 +1,27 @@ - name: Define cmd for mirage boot node set_fact: cli_full_command: "{{ node_type }} boot init {{ base_path }}/init-env" - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" - name: Define cmd for regular SKALE node set_fact: cli_full_command: "{{ node_type }} node init {{ base_path }}/init-env" when: - - node_type is not defined or node_type != "mirage" + - node_type == "skale" - sync_node is not defined or not sync_node - name: Define cmd for SKALE sync node set_fact: cli_full_command: "{{ node_type }} sync-node init {{ base_path }}/init-env" when: - - node_type is not defined or node_type != "mirage" + - node_type == "skale" - sync_node is defined and sync_node - name: Add --catchup if needed (SKALE sync node) set_fact: cli_full_command: "{{ cli_full_command }} --catchup" when: - - node_type is not defined or node_type != "mirage" + - node_type == "skale" - sync_node is defined and sync_node - catchup is defined and catchup @@ -29,7 +29,7 @@ set_fact: cli_full_command: "{{ cli_full_command }} --archive" when: - - node_type is not defined or node_type != "mirage" + - node_type == "skale" - sync_node is defined and sync_node - archive is defined and archive @@ -37,7 +37,7 @@ set_fact: cli_full_command: "{{ cli_full_command }} --historic-state" when: - - node_type is not defined or node_type != "mirage" + - node_type == "skale" - sync_node is defined and sync_node - historic_state is defined and historic_state diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 4522b00..83329ac 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -8,7 +8,7 @@ environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" - name: Run skale node register command: @@ -16,4 +16,4 @@ environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 - when: node_type is not defined or node_type != "mirage" + when: node_type == "skale" diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index 7b27040..ee82420 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -31,7 +31,7 @@ - name: Determine signature command based on node_type set_fact: get_signature_command: >- # Using >- for multi-line in YAML, processed by Jinja - {% if node_type is defined and node_type == "mirage" %} + {% if node_type == "mirage" %} sudo {{ node_type }} boot signature {{ validator_id }} {% else %} sudo {{ node_type }} node signature {{ validator_id }} diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index da4b3ac..9db7713 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -4,14 +4,14 @@ url: "{{ mirage_cli_url }}" dest: "/usr/local/bin/mirage" mode: "0755" - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" tags: binary - name: Register mirage command path and name set_fact: cli_executable_path: "/usr/local/bin/mirage" cli_command_name: "mirage" - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" tags: binary # --- Logic for SKALE Nodes --- @@ -20,16 +20,16 @@ state: directory path: "{{ base_path }}/node-cli/dist" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - name: Remove old binary builder image (for SKALE CLI build) community.docker.docker_image: name: "node-cli-builder" state: absent when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - name: Build binary builder image (for SKALE CLI build) community.docker.docker_image_build: @@ -37,23 +37,23 @@ network: host path: "{{ base_path }}/node-cli" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - name: Set build command (for SKALE CLI - regular) set_fact: build_cmd: "scripts/build.sh test test normal" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - sync_node is not defined or not sync_node - name: Add sync option to command (for SKALE CLI - sync) set_fact: build_cmd: "scripts/build.sh test test sync" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - sync_node is defined and sync_node - name: Build binary (for SKALE CLI) @@ -65,8 +65,8 @@ - "{{ base_path }}/node-cli/dist:/app/dist" command: "{{ build_cmd }}" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - name: Copy executable to /usr/bin/local for normal (SKALE CLI) copy: @@ -75,8 +75,8 @@ dest: /usr/local/bin/skale mode: "0755" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - (sync_node is not defined or not sync_node) - name: Copy executable to /usr/bin/local for sync (SKALE CLI) @@ -86,8 +86,8 @@ dest: /usr/local/bin/skale mode: "0755" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - sync_node is defined and sync_node - name: Remove builder container (for SKALE CLI) @@ -95,8 +95,8 @@ state: absent name: node-cli-builder when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "dev" + - node_type == "skale" + - build_type == "source" - name: Download skale_cli from spaces (SKALE CLI) get_url: @@ -105,13 +105,13 @@ force: yes mode: "0755" when: - - node_type is not defined or node_type != "mirage" - - env is defined and env == "test" + - node_type == "skale" + - build_type == "git" tags: binary - name: Register skale command path and name set_fact: cli_executable_path: "/usr/local/bin/skale" cli_command_name: "skale" - when: node_type is not defined or node_type != "mirage" + when: node_type == "skale" tags: binary diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index 2162a5d..ace75b4 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -4,7 +4,7 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: env is defined and env == "dev" + when: build_type == "source" tags: admin - name: Synchronization of transaction-manager repo @@ -13,7 +13,7 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: env is defined and env == "dev" + when: build_type == "source" tags: tm - name: Synchronization of skale-watchdog repo @@ -22,7 +22,7 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: env is defined and env == "dev" + when: build_type == "source" tags: watchdog - name: Synchronization of skale-node repo @@ -31,7 +31,7 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: env is defined and env == "dev" + when: build_type == "source" tags: skale-node - name: Synchronization of node-cli repo @@ -40,7 +40,7 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: env is defined and env == "dev" + when: build_type == "source" tags: cli - name: Synchronization of bounty-agent repo @@ -49,17 +49,17 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: env is defined and env == "dev" + when: build_type == "source" tags: bounty - name: Replace skale-node docker-compose file template: src: docker-compose.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose.yml" - when: env is defined and env == "dev" + when: build_type == "source" - name: Replace skale-node docker-compose-sync file template: src: docker-compose-sync.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose-sync.yml" - when: env is defined and env == "dev" and sync_node is defined and sync_node + when: build_type == "source" and sync_node is defined and sync_node diff --git a/skale-nodes/ansible/roles/update/tasks/main.yaml b/skale-nodes/ansible/roles/update/tasks/main.yaml index bb7c5fd..bfa62e7 100644 --- a/skale-nodes/ansible/roles/update/tasks/main.yaml +++ b/skale-nodes/ansible/roles/update/tasks/main.yaml @@ -1,6 +1,6 @@ - name: Update configs import_tasks: config.yaml - when: env is defined and env == "dev" + when: build_type == "source" - name: Skale node update import_tasks: skale_update.yaml diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index ea2edd8..b413ffd 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -5,7 +5,7 @@ LANG: en_US.utf-8 LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" - when: node_type is defined and node_type == "mirage" + when: node_type == "mirage" tags: skale_update - name: Run Skale node update @@ -16,7 +16,7 @@ LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" when: - - (node_type is not defined or node_type != "mirage") + - node_type == "skale" - (sync_node is not defined or not sync_node) tags: skale_update @@ -28,6 +28,6 @@ LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" when: - - (node_type is not defined or node_type != "mirage") + - node_type == "skale" - (sync_node is defined and sync_node) tags: skale_update diff --git a/skale-nodes/ansible/setup.yaml b/skale-nodes/ansible/setup.yaml index fc3cae0..74510f0 100644 --- a/skale-nodes/ansible/setup.yaml +++ b/skale-nodes/ansible/setup.yaml @@ -4,7 +4,7 @@ roles: - role: sync tags: sync - when: env is defined and env == "dev" + when: build_type == "source" - role: skale_cli tags: cli diff --git a/skale-nodes/ansible/update.yaml b/skale-nodes/ansible/update.yaml index 1d68bb2..3859206 100644 --- a/skale-nodes/ansible/update.yaml +++ b/skale-nodes/ansible/update.yaml @@ -3,7 +3,7 @@ become: true roles: - role: sync - when: env is defined and env == "dev" + when: build_type == "source" tags: sync - role: config From a78af333ec3dd0a66710fadca635c781c75468fb Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 4 Jun 2025 18:21:30 +0100 Subject: [PATCH 028/279] Remove unused registering tasks --- .../ansible/roles/skale_cli/tasks/main.yaml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 9db7713..19ff3e7 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -7,13 +7,6 @@ when: node_type == "mirage" tags: binary -- name: Register mirage command path and name - set_fact: - cli_executable_path: "/usr/local/bin/mirage" - cli_command_name: "mirage" - when: node_type == "mirage" - tags: binary - # --- Logic for SKALE Nodes --- - name: Makedir dist (for SKALE CLI build) file: @@ -108,10 +101,3 @@ - node_type == "skale" - build_type == "git" tags: binary - -- name: Register skale command path and name - set_fact: - cli_executable_path: "/usr/local/bin/skale" - cli_command_name: "skale" - when: node_type == "skale" - tags: binary From ac37561c3d6d9437efde0095b6b989b78fb71b80 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 4 Jun 2025 18:24:27 +0100 Subject: [PATCH 029/279] Download `mirage_cli` if build_type == "git" only --- skale-nodes/ansible/roles/skale_cli/tasks/main.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 19ff3e7..e4e06d8 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -4,7 +4,9 @@ url: "{{ mirage_cli_url }}" dest: "/usr/local/bin/mirage" mode: "0755" - when: node_type == "mirage" + when: + - node_type == "mirage" + - build_type == "git" tags: binary # --- Logic for SKALE Nodes --- From 57d820acf76eb83edf1dc2f4fff9b33f801a5c22 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 4 Jun 2025 18:34:19 +0100 Subject: [PATCH 030/279] Refactor registering node task --- .../ansible/roles/register/tasks/main.yaml | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 83329ac..08d9e3a 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -2,18 +2,18 @@ set_fact: ip_address: "{{ hostvars[inventory_hostname].ansible_host }}" -- name: Run mirage boot register - command: - cmd: "{{ node_type }} boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 - when: node_type == "mirage" +- name: Compose register command + set_fact: + node_register_command: >- + {% if node_type == "mirage" %} + {{ node_type }} boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 --domain {{ inventory_hostname }}.{{ base_domain_name }} + {% else %} + {{ node_type }} node register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 --domain {{ inventory_hostname }}.{{ base_domain_name }} + {% endif %} -- name: Run skale node register +- name: Run node register command command: - cmd: "{{ node_type }} node register --name {{ inventory_hostname }} --ip {{ ip_address }} --port 10000 --domain {{ ip_address }}.{{ base_domain_name }}" + cmd: "{{ node_register_command }} environment: LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 - when: node_type == "skale" + LC_ALL: en_US.utf-8 \ No newline at end of file From 5787a5e4c2e63f2d7fa0b73315f5462cfb75da06 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 4 Jun 2025 18:43:04 +0100 Subject: [PATCH 031/279] Rename `mirage` to 'mirage_boot' --- .../ansible/roles/cleanup_nodes/tasks/containers.yaml | 4 ++-- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/init/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/register/tasks/main.yaml | 8 ++++---- skale-nodes/ansible/roles/signature/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/skale_cli/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/update/tasks/skale_update.yaml | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index ad28cd7..9d86ccb 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -46,7 +46,7 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type == "mirage" + when: node_type == "mirage_boot" - name: Destroy mirage admin container become: true @@ -56,7 +56,7 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type == "mirage" + when: node_type == "mirage_boot" - name: Destroy all containers become: true diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 5124795..dd49bf2 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -39,7 +39,7 @@ ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" ENFORCE_BTRFS='False' - when: node_type == "mirage" + when: node_type == "mirage_boot" tags: env - name: Set env options for regular SKALE node diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 3615f61..3a888ed 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,7 +1,7 @@ - name: Define cmd for mirage boot node set_fact: cli_full_command: "{{ node_type }} boot init {{ base_path }}/init-env" - when: node_type == "mirage" + when: node_type == "mirage_boot" - name: Define cmd for regular SKALE node set_fact: diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 08d9e3a..f90333e 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -5,10 +5,10 @@ - name: Compose register command set_fact: node_register_command: >- - {% if node_type == "mirage" %} - {{ node_type }} boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 --domain {{ inventory_hostname }}.{{ base_domain_name }} - {% else %} - {{ node_type }} node register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 --domain {{ inventory_hostname }}.{{ base_domain_name }} + {% if node_type == "mirage_boot" %} + mirage boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} + {% elif node_type == "skale" %} + skale node register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} {% endif %} - name: Run node register command diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index ee82420..79e638b 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -31,7 +31,7 @@ - name: Determine signature command based on node_type set_fact: get_signature_command: >- # Using >- for multi-line in YAML, processed by Jinja - {% if node_type == "mirage" %} + {% if node_type == "mirage_boot" %} sudo {{ node_type }} boot signature {{ validator_id }} {% else %} sudo {{ node_type }} node signature {{ validator_id }} diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index e4e06d8..b98098d 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -5,7 +5,7 @@ dest: "/usr/local/bin/mirage" mode: "0755" when: - - node_type == "mirage" + - node_type == "mirage_boot" - build_type == "git" tags: binary diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index b413ffd..4498710 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -5,7 +5,7 @@ LANG: en_US.utf-8 LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" - when: node_type == "mirage" + when: node_type == "mirage_boot" tags: skale_update - name: Run Skale node update From 1bfe9be7af4dbc466e4a32547fe935a4df75c1ca Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 4 Jun 2025 18:45:47 +0100 Subject: [PATCH 032/279] Fix register command --- skale-nodes/ansible/roles/register/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index f90333e..a4c525d 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -13,7 +13,7 @@ - name: Run node register command command: - cmd: "{{ node_register_command }} + cmd: "{{ node_register_command }}" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 \ No newline at end of file From 74f6e9f2d4b2ed00d29e71bf214020a222069ecf Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 5 Jun 2025 15:42:00 +0100 Subject: [PATCH 033/279] Determine `wallet info` command depending on `node_type` --- .../ansible/roles/signature/tasks/main.yaml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index 79e638b..65a331b 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -17,8 +17,17 @@ debug: msg: "{{ validator_id }}" +- name: Determine wallet info command + set_fact: + wallet_info_command: >- # Using >- for multi-line in YAML, processed by Jinja + {% if node_type == "mirage_boot" or node_type == "mirage" %} + sudo mirage wallet info -f json + {% else %} + sudo skale wallet info -f json + {% endif %} + - name: Get wallet info output - command: "sudo {{ node_type }} wallet info -f json" + command: "{{ wallet_info_command }}" register: wallet_cmd_result environment: LC_ALL: "C.UTF-8" @@ -32,9 +41,9 @@ set_fact: get_signature_command: >- # Using >- for multi-line in YAML, processed by Jinja {% if node_type == "mirage_boot" %} - sudo {{ node_type }} boot signature {{ validator_id }} - {% else %} - sudo {{ node_type }} node signature {{ validator_id }} + sudo mirage boot signature {{ validator_id }} + {% elif node_type == "skale" %} + sudo skale node signature {{ validator_id }} {% endif %} - name: Get node signature From 5d4a457ab8ba2fd3cbf463acbfd23fa798db6bae Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 5 Jun 2025 15:45:26 +0100 Subject: [PATCH 034/279] Get SM address from localhost scope --- .../ansible/roles/link_addresses/tasks/link_addresses.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml index 2ce9d78..0889ceb 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml @@ -11,7 +11,7 @@ ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" SIGNATURE: "{{ lookup('file', '{{ item }}').split()[1].strip() }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" BASE_DIR: "files" args: executable: python3 From 806bd1eb7e8d2cb0eff272ddfedde815a1ac2f91 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 5 Jun 2025 17:10:53 +0100 Subject: [PATCH 035/279] Refactor node init command --- .../ansible/roles/init/tasks/main.yaml | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 3a888ed..fe2ac4c 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,21 +1,29 @@ -- name: Define cmd for mirage boot node +- name: Determine init command action prefix based on node_type and sync_node set_fact: - cli_full_command: "{{ node_type }} boot init {{ base_path }}/init-env" - when: node_type == "mirage_boot" + _command_action_prefix: >- + {% if node_type == "mirage_boot" %} + mirage boot + {% elif node_type == "mirage" %} + mirage node + {% elif node_type == "skale" %} + {% if sync_node | default(false) | bool %} + skale sync-node + {% else %} {# if sync_node is not defined or false} + skale node + {% endif %} + {% else %} + "" {# if node_type is unknown #} + {% endif %} -- name: Define cmd for regular SKALE node - set_fact: - cli_full_command: "{{ node_type }} node init {{ base_path }}/init-env" - when: - - node_type == "skale" - - sync_node is not defined or not sync_node +- name: Fail if command action prefix could not be determined + fail: + msg: "Cannot determine init command prefix for node_type='{{ node_type }}' and sync_node='{{ sync_node | default(false) }}'" + when: _command_action_prefix | length == 0 # Finish playbook if prefix is empty -- name: Define cmd for SKALE sync node +- name: Set the full CLI init command set_fact: - cli_full_command: "{{ node_type }} sync-node init {{ base_path }}/init-env" - when: - - node_type == "skale" - - sync_node is defined and sync_node + cli_full_command: "{{ _command_action_prefix }} init {{ base_path }}/init-env" + - name: Add --catchup if needed (SKALE sync node) set_fact: @@ -55,4 +63,3 @@ - name: Pause to make sure skale-admin exchange certs with sgx server pause: seconds: 120 - tags: init From d40d9ec735718f245093333b5a06ef99b6a31c64 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 5 Jun 2025 17:19:09 +0100 Subject: [PATCH 036/279] Add Mirage node register command and check node_type --- skale-nodes/ansible/roles/register/tasks/main.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index a4c525d..605e18b 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -7,10 +7,19 @@ node_register_command: >- {% if node_type == "mirage_boot" %} mirage boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} + {% elif node_type == "mirage" %} + mirage node register --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} {% elif node_type == "skale" %} skale node register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} + {% else %} + "" {# if node_type is unknown #} {% endif %} +- name: Fail if node register command is empty + fail: + msg: "Cannot determine node register command because node_type is unknown" + when: node_register_command | length == 0 + - name: Run node register command command: cmd: "{{ node_register_command }}" From 24559f99e42779a0f1f555848d3a378175e9fe47 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 5 Jun 2025 17:19:31 +0100 Subject: [PATCH 037/279] Improve log message --- skale-nodes/ansible/roles/init/tasks/main.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index fe2ac4c..3489426 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -17,8 +17,8 @@ - name: Fail if command action prefix could not be determined fail: - msg: "Cannot determine init command prefix for node_type='{{ node_type }}' and sync_node='{{ sync_node | default(false) }}'" - when: _command_action_prefix | length == 0 # Finish playbook if prefix is empty + msg: "Cannot determine init command prefix because node_type is unknown" + when: _command_action_prefix | length == 0 - name: Set the full CLI init command set_fact: From 0be4ef597a5e93bfa28409428298ff915ec9a29b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 5 Jun 2025 19:43:17 +0100 Subject: [PATCH 038/279] Fix comment syntax --- skale-nodes/ansible/roles/init/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 3489426..67dfb95 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -8,7 +8,7 @@ {% elif node_type == "skale" %} {% if sync_node | default(false) | bool %} skale sync-node - {% else %} {# if sync_node is not defined or false} + {% else %} {# if sync_node is not defined or false #} skale node {% endif %} {% else %} From a947cf272bbe26cc21b4f203f6face1a8441daaa Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 16:55:36 +0100 Subject: [PATCH 039/279] Update docker-compose.yml.j2 --- .../sync/templates/docker-compose.yml.j2 | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 07a620a..2e0cb25 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -2,10 +2,11 @@ version: '3.4' services: base: &skale_base - image: kubernetes/pause + image: rancher/pause:3.6 restart: unless-stopped labels: com.skale.prefix: "node" + cpu_shares: 128 logging: driver: "json-file" options: @@ -25,7 +26,6 @@ services: environment: SGX_URL: ${SGX_SERVER_URL} ENDPOINT: ${ENDPOINT} - ALLOWED_TS_DIFF: 10000 volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data @@ -45,11 +45,9 @@ services: - NET_ADMIN - NET_RAW environment: - TM_URL: http://127.0.0.1:3008 SGX_SERVER_URL: ${SGX_SERVER_URL} SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} ENDPOINT: ${ENDPOINT} - IMA_ENDPOINT: ${IMA_ENDPOINT} SKALE_DIR_HOST: ${SKALE_DIR} TG_API_KEY: ${TG_API_KEY} TG_CHAT_ID: ${TG_CHAT_ID} @@ -59,14 +57,14 @@ services: DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} MAX_ALLOWED_LOG_TIME_DIFF: 600 - DISABLE_IMA: ${DISABLE_IMA} ENV_TYPE: ${ENV_TYPE} - DEFAULT_TIMEOUT: ${DEFAULT_TIMEOUT} - ALLOWED_TS_DIFF: 10000 - TELEGRAF: "${TELEGRAF}" - INFLUX_URL: "${INFLUX_URL}" + ALLOWED_TS_DIFF: 300 + PULL_CONFIG_FOR_SCHAIN: ${PULL_CONFIG_FOR_SCHAIN} + TELEGRAF: ${TELEGRAF} + INFLUX_URL: ${INFLUX_URL} MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} + command: "python3 admin.py" volumes: - /var/run/skale:/var/run/skale @@ -94,15 +92,9 @@ services: - NET_ADMIN - NET_RAW environment: - TM_URL: http://127.0.0.1:3008 SGX_SERVER_URL: ${SGX_SERVER_URL} SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} ENDPOINT: ${ENDPOINT} - IMA_ENDPOINT: ${IMA_ENDPOINT} - DB_USER: ${DB_USER} - DB_PASSWORD: ${DB_PASSWORD} - DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - DB_PORT: ${DB_PORT} FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} FLASK_APP_PORT: 3007 FLASK_APP_HOST: "127.0.0.1" @@ -116,8 +108,7 @@ services: DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} ENV_TYPE: ${ENV_TYPE} - DEFAULT_TIMEOUT: ${DEFAULT_TIMEOUT} - ALLOWED_TS_DIFF: 10000 + ALLOWED_TS_DIFF: 300 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} command: "gunicorn app:app -c gunicorn.conf.py" @@ -172,14 +163,10 @@ services: SGX_SERVER_URL: ${SGX_SERVER_URL} SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} ENDPOINT: ${ENDPOINT} - DB_USER: ${DB_USER} - DB_PASSWORD: ${DB_PASSWORD} - DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - DB_PORT: ${DB_PORT} DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - ALLOWED_TS_DIFF: 10000 + ALLOWED_TS_DIFF: 300 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} volumes: @@ -196,13 +183,14 @@ services: network: host network_mode: host environment: + ALLOWED_TS_DIFF: 300 FLASK_APP_PORT: 3010 FLASK_APP_HOST: "127.0.0.1" FLASK_DEBUG_MODE: "False" nginx: <<: *skale_base - image: nginx:1.19.6 + image: nginx:1.20.2 container_name: skale_nginx network_mode: host depends_on: @@ -220,14 +208,15 @@ services: advisor: <<: *skale_base + image: gcr.io/cadvisor/cadvisor-amd64:v0.50.0 container_name: monitor_cadvisor - image: google/cadvisor:latest cpu_shares: 128 network_mode: host volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro + - /var/lib/docker/:/var/lib/docker:ro - /dev/disk/:/dev/disk:ro node-exporter: @@ -256,4 +245,5 @@ services: volumes: - ${SKALE_DIR}/node_data/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro - /var/lib/docker:/var/lib/docker:ro + - /var/log/docker-lvmpy:/var/log/docker-lvmpy:ro - /var/run/skale:/var/run/skale From c4ae8d59d171cbfed0456cd64cef4eb98fa53d7c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 16:58:03 +0100 Subject: [PATCH 040/279] Update docker-compose-sync.yml.j2 --- .../ansible/roles/sync/templates/docker-compose-sync.yml.j2 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 index fe71a66..96b8986 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 @@ -31,7 +31,10 @@ services: SKALE_DIR_HOST: ${SKALE_DIR} ENV_TYPE: ${ENV_TYPE} SCHAIN_NAME: ${SCHAIN_NAME} + TELEGRAF: ${TELEGRAF} + INFLUX_URL: ${INFLUX_URL} SYNC_NODE: "True" + MAX_SCHAIN_FAILED_RPC_COUNT: 60 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} command: "python3 sync_node.py" @@ -56,7 +59,7 @@ services: volumes: - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro - ${SKALE_DIR}/node_data/ssl:/ssl:ro - - /var/lib/skale/filestorage:/filestorage:ro + - ${FILESTORAGE_MAPPING}:/filestorage:ro - type: bind bind: propagation: slave From 9591183b35ac119bf0aa245e6931d89add647610 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 17:42:31 +0100 Subject: [PATCH 041/279] Add docker-compose-mirage.yml.j2 --- .../templates/docker-compose-mirage.yml.j2 | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 new file mode 100644 index 0000000..afcb0aa --- /dev/null +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 @@ -0,0 +1,246 @@ +version: '3.4' + +services: + base: &skale_base + image: rancher/pause:3.6 + restart: unless-stopped + labels: + com.skale.prefix: "node" + cpu_shares: 128 + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + + transaction-manager: + <<: *skale_base + container_name: skale_transaction-manager + image: "skalenetwork/transaction-manager:${TAG:-latest}" + build: + context: "{{ base_path }}/transaction-manager" + dockerfile: Dockerfile + network: host + network_mode: host + tty: true + environment: + SGX_URL: ${SGX_SERVER_URL} + ENDPOINT: ${ENDPOINT} + volumes: + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + + mirage-boot: + <<: *skale_base + container_name: mirage_boot_admin + image: "skale-admin:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-admin" + dockerfile: Dockerfile + network: host + cpu_shares: 192 + network_mode: host + tty: true + cap_add: + - NET_ADMIN + - NET_RAW + environment: + SGX_SERVER_URL: ${SGX_SERVER_URL} + SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} + ENDPOINT: ${ENDPOINT} + SKALE_DIR_HOST: ${SKALE_DIR} + MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} + BACKUP_RUN: ${BACKUP_RUN} + DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} + DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} + DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} + MAX_ALLOWED_LOG_TIME_DIFF: 600 + ENV_TYPE: ${ENV_TYPE} + ALLOWED_TS_DIFF: 300 + TELEGRAF: ${TELEGRAF} + INFLUX_URL: ${INFLUX_URL} + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + IMA_CONTRACTS: ${IMA_CONTRACTS} + SKALE_NETWORK_TYPE: "mirage" + + command: "python3 admin.py" + volumes: + - /var/run/skale:/var/run/skale + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + healthcheck: + test: ["CMD", "python3", "healthchecks/admin.py"] + interval: 1m + timeout: 10s + retries: 2 + start_period: 30s + + mirage-admin: + <<: *skale_base + container_name: mirage_admin + image: "skale-admin:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-admin" + dockerfile: Dockerfile + network: host + cpu_shares: 192 + network_mode: host + tty: true + cap_add: + - NET_ADMIN + - NET_RAW + environment: + SGX_SERVER_URL: ${SGX_SERVER_URL} + SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} + ENDPOINT: ${ENDPOINT} + SKALE_DIR_HOST: ${SKALE_DIR} + MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} + BACKUP_RUN: ${BACKUP_RUN} + DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} + DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} + DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} + MAX_ALLOWED_LOG_TIME_DIFF: 600 + ENV_TYPE: ${ENV_TYPE} + ALLOWED_TS_DIFF: 300 + TELEGRAF: ${TELEGRAF} + INFLUX_URL: ${INFLUX_URL} + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + + command: "python3 mirage.py" + volumes: + - /var/run/skale:/var/run/skale + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + healthcheck: + test: ["CMD", "python3", "healthchecks/admin.py"] + interval: 1m + timeout: 10s + retries: 2 + start_period: 30s + + mirage-api: + <<: *skale_base + container_name: mirage_api + image: "skale-admin:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-admin" + dockerfile: Dockerfile + network: host + network_mode: host + tty: true + cap_add: + - NET_ADMIN + - NET_RAW + environment: + SGX_SERVER_URL: ${SGX_SERVER_URL} + SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} + ENDPOINT: ${ENDPOINT} + FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} + FLASK_APP_PORT: 3007 + FLASK_APP_HOST: "127.0.0.1" + FLASK_DEBUG_MODE: "False" + SKALE_DIR_HOST: ${SKALE_DIR} + MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} + BACKUP_RUN: ${BACKUP_RUN} + DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} + DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} + DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} + ENV_TYPE: ${ENV_TYPE} + ALLOWED_TS_DIFF: 300 + MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + IMA_CONTRACTS: ${IMA_CONTRACTS} + command: "gunicorn app:app -c gunicorn.conf.py" + volumes: + - /var/run/skale:/var/run/skale + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + + redis: + <<: *skale_base + container_name: skale_redis + image: "redis:6.0.10-alpine" + network_mode: host + tty: true + environment: + - REDIS_REPLICATION_MODE=master + command: "redis-server /data/redis.conf" + volumes: + - ${SKALE_DIR}/node_data/redis-data:/data/db:rw + - ${SKALE_DIR}/config/redis.conf:/data/redis.conf + + watchdog: + <<: *skale_base + container_name: skale_watchdog + image: "skale-watchdog:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-watchdog" + dockerfile: Dockerfile + network: host + network_mode: host + environment: + ALLOWED_TS_DIFF: 300 + FLASK_APP_PORT: 3010 + FLASK_APP_HOST: "127.0.0.1" + FLASK_DEBUG_MODE: "False" + + nginx: + <<: *skale_base + image: nginx:1.20.2 + container_name: skale_nginx + network_mode: host + depends_on: + - watchdog + volumes: + - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro + - ${SKALE_DIR}/node_data/ssl:/ssl:ro + - type: bind + bind: + propagation: slave + source: ${SCHAINS_MNT_DIR} + target: ${SCHAINS_MNT_DIR} + read_only: true + + advisor: + <<: *skale_base + image: gcr.io/cadvisor/cadvisor-amd64:v0.50.0 + container_name: monitor_cadvisor + cpu_shares: 128 + network_mode: host + volumes: + - /:/rootfs:ro + - /var/run:/var/run:ro + - /sys:/sys:ro + - /var/lib/docker/:/var/lib/docker:ro + - /dev/disk/:/dev/disk:ro + + node-exporter: + <<: *skale_base + container_name: monitor_node_exporter + image: quay.io/prometheus/node-exporter + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.rootfs=/rootfs' + - '--path.sysfs=/host/sys' + - '--collector.filesystem.mount-points-exclude=^/(mnt|dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($$|/)' + network_mode: host + + filebeat: + <<: *skale_base + container_name: skale_filebeat + user: root + image: docker.elastic.co/beats/filebeat:7.3.1 + network_mode: host + environment: + FILEBEAT_HOST: ${FILEBEAT_HOST} + volumes: + - ${SKALE_DIR}/node_data/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro + - /var/lib/docker:/var/lib/docker:ro + - /var/log/docker-lvmpy:/var/log/docker-lvmpy:ro + - /var/run/skale:/var/run/skale \ No newline at end of file From ae53af2309e9f56796ef5204207b7ac9747e371c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 17:54:21 +0100 Subject: [PATCH 042/279] Add Mirage boot support for sync role --- .../ansible/roles/sync/tasks/main.yaml | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index ace75b4..f27e9e3 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -49,17 +49,32 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: build_type == "source" + when: + - build_type == "source" + - node_type == "skale" tags: bounty - name: Replace skale-node docker-compose file template: src: docker-compose.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose.yml" - when: build_type == "source" + when: + - build_type == "source" + - node_type == "skale" + +- name: Replace mirage-node docker-compose-mirage file + template: + src: docker-compose-mirage.yml.j2 + dest: "{{ base_path }}/skale-node/docker-compose-mirage.yml" + when: + - build_type == "source" + - node_type == "mirage_boot" - name: Replace skale-node docker-compose-sync file template: src: docker-compose-sync.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose-sync.yml" - when: build_type == "source" and sync_node is defined and sync_node + when: + - build_type == "source" + - node_type == "skale" + - sync_node is defined and sync_node From e3299b5aaa68b6813fb68aa8e516da9c3a3a2a00 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 19:05:44 +0100 Subject: [PATCH 043/279] Remove duplicated condition --- skale-nodes/ansible/roles/sync/tasks/main.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index f27e9e3..50058b0 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -4,7 +4,6 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: build_type == "source" tags: admin - name: Synchronization of transaction-manager repo @@ -22,7 +21,6 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: build_type == "source" tags: watchdog - name: Synchronization of skale-node repo @@ -31,7 +29,6 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: build_type == "source" tags: skale-node - name: Synchronization of node-cli repo @@ -40,7 +37,6 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: build_type == "source" tags: cli - name: Synchronization of bounty-agent repo @@ -50,7 +46,6 @@ delete: yes recursive: yes when: - - build_type == "source" - node_type == "skale" tags: bounty @@ -59,7 +54,6 @@ src: docker-compose.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose.yml" when: - - build_type == "source" - node_type == "skale" - name: Replace mirage-node docker-compose-mirage file @@ -67,7 +61,6 @@ src: docker-compose-mirage.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose-mirage.yml" when: - - build_type == "source" - node_type == "mirage_boot" - name: Replace skale-node docker-compose-sync file @@ -75,6 +68,5 @@ src: docker-compose-sync.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose-sync.yml" when: - - build_type == "source" - node_type == "skale" - sync_node is defined and sync_node From 8fa447c4862405da8fb58a3e3f4e713bea85e0a0 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 19:07:29 +0100 Subject: [PATCH 044/279] Remove not necessary config task --- .../ansible/roles/update/tasks/config.yaml | 17 ----------------- .../ansible/roles/update/tasks/main.yaml | 4 ---- 2 files changed, 21 deletions(-) delete mode 100644 skale-nodes/ansible/roles/update/tasks/config.yaml diff --git a/skale-nodes/ansible/roles/update/tasks/config.yaml b/skale-nodes/ansible/roles/update/tasks/config.yaml deleted file mode 100644 index bea159b..0000000 --- a/skale-nodes/ansible/roles/update/tasks/config.yaml +++ /dev/null @@ -1,17 +0,0 @@ -- name: Sync docker-compose.yml - synchronize: - src: "{{ base_path }}/skale-node/docker-compose-sync.yml" - dest: "{{ base_path }}/.skale/config/docker-compose-sync.yml" - delegate_to: "{{ inventory_hostname }}" - -- name: Sync containers.json - synchronize: - src: "{{ base_path }}/skale-node/containers.json" - dest: "{{ base_path }}/.skale/config/containers.json" - delegate_to: "{{ inventory_hostname }}" - -- name: Sync schain_allocation.yml - synchronize: - src: "{{ base_path }}/skale-node/schain_allocation.yml" - dest: "{{ base_path }}/.skale/config/schain_allocation.yml" - delegate_to: "{{ inventory_hostname }}" diff --git a/skale-nodes/ansible/roles/update/tasks/main.yaml b/skale-nodes/ansible/roles/update/tasks/main.yaml index bfa62e7..b93b74e 100644 --- a/skale-nodes/ansible/roles/update/tasks/main.yaml +++ b/skale-nodes/ansible/roles/update/tasks/main.yaml @@ -1,6 +1,2 @@ -- name: Update configs - import_tasks: config.yaml - when: build_type == "source" - - name: Skale node update import_tasks: skale_update.yaml From c65dbb0e0802ada9451d11891687b411656e14e1 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 6 Jun 2025 20:10:47 +0100 Subject: [PATCH 045/279] Support build of Mirage CLI from source --- .../ansible/roles/skale_cli/tasks/main.yaml | 61 ++++++++++++------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index b98098d..2d769e7 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -1,4 +1,16 @@ -# --- Logic for Mirage Nodes --- +# --- Download binary --- + +- name: Download skale_cli from spaces (SKALE CLI) + get_url: + url: "{{ skale_cli_url }}" + dest: "/usr/local/bin/skale" + force: yes + mode: "0755" + when: + - node_type == "skale" + - build_type == "git" + tags: binary + - name: Download mirage_cli from spaces get_url: url: "{{ mirage_cli_url }}" @@ -9,13 +21,14 @@ - build_type == "git" tags: binary -# --- Logic for SKALE Nodes --- + +# --- Build binary from source --- + - name: Makedir dist (for SKALE CLI build) file: state: directory path: "{{ base_path }}/node-cli/dist" when: - - node_type == "skale" - build_type == "source" - name: Remove old binary builder image (for SKALE CLI build) @@ -23,7 +36,6 @@ name: "node-cli-builder" state: absent when: - - node_type == "skale" - build_type == "source" - name: Build binary builder image (for SKALE CLI build) @@ -32,7 +44,6 @@ network: host path: "{{ base_path }}/node-cli" when: - - node_type == "skale" - build_type == "source" - name: Set build command (for SKALE CLI - regular) @@ -43,6 +54,15 @@ - build_type == "source" - sync_node is not defined or not sync_node +- name: Set build command (for Mirage CLI) + set_fact: + build_cmd: "scripts/build.sh test test mirage" + when: + - node_type == "mirage_boot" or node_type == "mirage" + - build_type == "source" + - sync_node is not defined or not sync_node + + - name: Add sync option to command (for SKALE CLI - sync) set_fact: build_cmd: "scripts/build.sh test test sync" @@ -51,7 +71,7 @@ - build_type == "source" - sync_node is defined and sync_node -- name: Build binary (for SKALE CLI) +- name: Build binary docker_container: image: node-cli-builder name: node-cli-builder @@ -60,10 +80,9 @@ - "{{ base_path }}/node-cli/dist:/app/dist" command: "{{ build_cmd }}" when: - - node_type == "skale" - build_type == "source" -- name: Copy executable to /usr/bin/local for normal (SKALE CLI) +- name: Copy executable to /usr/bin/local for normal SKALE CLI copy: remote_src: True src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" @@ -74,7 +93,19 @@ - build_type == "source" - (sync_node is not defined or not sync_node) -- name: Copy executable to /usr/bin/local for sync (SKALE CLI) +- name: Copy executable to /usr/bin/local for normal Mirage CLI + copy: + remote_src: True + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" + dest: /usr/local/bin/mirage + mode: "0755" + when: + - (node_type == "mirage" or node_type == "mirage_boot") + - build_type == "source" + - (sync_node is not defined or not sync_node) + + +- name: Copy executable to /usr/bin/local for sync SKALE CLI copy: remote_src: True src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" @@ -90,16 +121,4 @@ state: absent name: node-cli-builder when: - - node_type == "skale" - build_type == "source" - -- name: Download skale_cli from spaces (SKALE CLI) - get_url: - url: "{{ skale_cli_url }}" - dest: "/usr/local/bin/skale" - force: yes - mode: "0755" - when: - - node_type == "skale" - - build_type == "git" - tags: binary From f3cb1fda2bca9a0fa22cf1087066737f72839aa8 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 10 Jun 2025 15:31:39 +0100 Subject: [PATCH 046/279] Add `CONTAINER_CONFIGS_DIR` to env options for Mirage node --- skale-nodes/ansible/roles/config/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index dd49bf2..c1062da 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -34,6 +34,7 @@ IMA_CONTRACTS="{{ ima_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" ENDPOINT="{{ endpoint }}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" DISK_MOUNTPOINT="{{ block_device }}" SGX_SERVER_URL="{{ sgx_url }}" ENV_TYPE="{{ env_type }}" From 097ef00647765deea9b34d8969e99680d76ffcc7 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 10 Jun 2025 15:33:04 +0100 Subject: [PATCH 047/279] Remove duplicated condition for building from sources --- skale-nodes/ansible/roles/sync/tasks/main.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index 50058b0..a9b563e 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -12,7 +12,6 @@ dest: "{{ base_path }}" delete: yes recursive: yes - when: build_type == "source" tags: tm - name: Synchronization of skale-watchdog repo From 6457cc79460dae855ed87d21d2450db9fb9b1427 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 10 Jun 2025 18:26:03 +0100 Subject: [PATCH 048/279] Set `CONTAINER_CONFIGS_DIR` depending on 'build_type' --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index c1062da..958f1ef 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -52,7 +52,7 @@ FILEBEAT_HOST="{{ filebeat_host }}" MANAGER_CONTRACTS="{{ manager_contracts }}" IMA_CONTRACTS="{{ ima_contracts }}" - CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DOCKER_LVMPY_STREAM="{{ docker_lvmpy_stream }}" DISK_MOUNTPOINT="{{ block_device }}" SGX_SERVER_URL="{{ sgx_url }}" From 426b5317c1df95238b03ea25afdbe7931463b3bf Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 10 Jun 2025 19:13:15 +0100 Subject: [PATCH 049/279] Delete previous version of Mirage CLI --- skale-nodes/ansible/roles/skale_cli/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 2d769e7..8fa34f1 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -15,6 +15,7 @@ get_url: url: "{{ mirage_cli_url }}" dest: "/usr/local/bin/mirage" + force: yes mode: "0755" when: - node_type == "mirage_boot" From 37d2aa63efd9adb615853e460412df320d8a7d86 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 10 Jun 2025 19:48:38 +0100 Subject: [PATCH 050/279] Refactor build commands --- .../ansible/roles/skale_cli/tasks/main.yaml | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 8fa34f1..8c61feb 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -11,7 +11,7 @@ - build_type == "git" tags: binary -- name: Download mirage_cli from spaces +- name: Download mirage_cli from spaces (Mirage CLI) get_url: url: "{{ mirage_cli_url }}" dest: "/usr/local/bin/mirage" @@ -25,21 +25,21 @@ # --- Build binary from source --- -- name: Makedir dist (for SKALE CLI build) +- name: Makedir dist for CLI build file: state: directory path: "{{ base_path }}/node-cli/dist" when: - build_type == "source" -- name: Remove old binary builder image (for SKALE CLI build) +- name: Remove old binary builder image community.docker.docker_image: name: "node-cli-builder" state: absent when: - build_type == "source" -- name: Build binary builder image (for SKALE CLI build) +- name: Build binary builder image community.docker.docker_image_build: name: "node-cli-builder" network: host @@ -47,30 +47,31 @@ when: - build_type == "source" -- name: Set build command (for SKALE CLI - regular) - set_fact: - build_cmd: "scripts/build.sh test test normal" - when: - - node_type == "skale" - - build_type == "source" - - sync_node is not defined or not sync_node - -- name: Set build command (for Mirage CLI) - set_fact: - build_cmd: "scripts/build.sh test test mirage" - when: - - node_type == "mirage_boot" or node_type == "mirage" - - build_type == "source" - - sync_node is not defined or not sync_node - - -- name: Add sync option to command (for SKALE CLI - sync) - set_fact: - build_cmd: "scripts/build.sh test test sync" - when: - - node_type == "skale" - - build_type == "source" - - sync_node is defined and sync_node +- name: Determine build command based on node type + block: + - name: Set build target based on node_type and sync_node + set_fact: + _build_target: >- + {% set sync = sync_node | default(false) | bool %} + {% if node_type in ['mirage', 'mirage_boot'] and not sync %} + mirage + {% elif node_type == 'skale' and sync %} + sync + {% elif node_type == 'skale' and not sync %} + normal + {% else %} + "" + {% endif %} + + - name: Fail if build target could not be determined + fail: + msg: "Could not determine build target for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." + when: _build_target | length == 0 + + - name: Set the full build command + set_fact: + build_cmd: "scripts/build.sh test test {{ _build_target }}" + when: build_type == "source" - name: Build binary docker_container: @@ -117,7 +118,7 @@ - build_type == "source" - sync_node is defined and sync_node -- name: Remove builder container (for SKALE CLI) +- name: Remove builder container docker_container: state: absent name: node-cli-builder From e1d5ed0615a31b29971feedd9770e334dfa79eea Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 11 Jun 2025 17:29:47 +0100 Subject: [PATCH 051/279] Set `CONTAINER_CONFIGS_DIR` depending on build type --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 958f1ef..330df3a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -34,7 +34,7 @@ IMA_CONTRACTS="{{ ima_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" ENDPOINT="{{ endpoint }}" - CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DISK_MOUNTPOINT="{{ block_device }}" SGX_SERVER_URL="{{ sgx_url }}" ENV_TYPE="{{ env_type }}" From 0dcb06b060c1a81b3d5814249dc56dd25e4d0084 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 11 Jun 2025 17:31:08 +0100 Subject: [PATCH 052/279] Refactor node CLI tasks --- .../ansible/roles/skale_cli/tasks/main.yaml | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 8c61feb..ed95506 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -84,39 +84,39 @@ when: - build_type == "source" -- name: Copy executable to /usr/bin/local for normal SKALE CLI - copy: - remote_src: True - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" - dest: /usr/local/bin/skale - mode: "0755" - when: - - node_type == "skale" - - build_type == "source" - - (sync_node is not defined or not sync_node) - -- name: Copy executable to /usr/bin/local for normal Mirage CLI - copy: - remote_src: True - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" - dest: /usr/local/bin/mirage - mode: "0755" - when: - - (node_type == "mirage" or node_type == "mirage_boot") - - build_type == "source" - - (sync_node is not defined or not sync_node) - +- name: Copy source-built executable based on node type + block: + - name: Determine source and destination paths for the executable + set_fact: + executable_paths: "{{ executable_paths_logic | from_yaml }}" + vars: + executable_paths_logic: | + {% set sync = sync_node | default(false) | bool %} + {% if node_type in ['mirage', 'mirage_boot'] and not sync %} + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" + dest: "/usr/local/bin/mirage" + {% elif node_type == 'skale' and sync %} + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" + dest: "/usr/local/bin/skale" + {% elif node_type == 'skale' and not sync %} + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" + dest: "/usr/local/bin/skale" + {% else %} + {} + {% endif %} -- name: Copy executable to /usr/bin/local for sync SKALE CLI - copy: - remote_src: True - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" - dest: /usr/local/bin/skale - mode: "0755" - when: - - node_type == "skale" - - build_type == "source" - - sync_node is defined and sync_node + - name: Fail if executable paths could not be determined + fail: + msg: "Could not determine which executable to copy for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." + when: executable_paths | length == 0 + + - name: Copy the correct executable to /usr/local/bin + copy: + remote_src: true + src: "{{ executable_paths.src }}" + dest: "{{ executable_paths.dest }}" + mode: "0755" + when: build_type == "source" - name: Remove builder container docker_container: From 5a6ac440d1d9fbf3cd7dd9414b779df7aa8c1edb Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 11 Jun 2025 18:16:02 +0100 Subject: [PATCH 053/279] Refactor update tasks --- .../roles/update/tasks/skale_update.yaml | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 4498710..967a01e 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -1,33 +1,32 @@ -- name: Run Mirage node update - shell: - cmd: "mirage boot update {{ base_path }}/init-env --yes" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 - HOME_DIR: "{{ base_path }}" - when: node_type == "mirage_boot" - tags: skale_update +- name: Update node based on its type + block: + - name: Determine the correct update command + set_fact: + update_cmd: >- + {% set sync = sync_node | default(false) | bool %} + {% if node_type == 'mirage_boot' %} + mirage boot update {{ base_path }}/init-env --yes + {% elif node_type == 'skale' and sync %} + skale sync-node update {{ base_path }}/init-env --yes --unsafe + {% elif node_type == 'skale' and not sync %} + skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe + {% else %} + "" + {% endif %} -- name: Run Skale node update - shell: - cmd: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 - HOME_DIR: "{{ base_path }}" - when: - - node_type == "skale" - - (sync_node is not defined or not sync_node) - tags: skale_update + - name: Fail if update command could not be determined + fail: + msg: "Could not determine update command for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." + when: update_cmd | length == 0 -- name: Run Skale sync node update - shell: - cmd: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 - HOME_DIR: "{{ base_path }}" - when: - - node_type == "skale" - - (sync_node is defined and sync_node) - tags: skale_update + - debug: + msg: "{{ update_cmd }}" + + - name: Run the determined node update command + shell: + cmd: "{{ update_cmd }}" + environment: + LANG: en_US.utf-8 + LC_ALL: en_US.utf-8 + HOME_DIR: "{{ base_path }}" + tags: skale_update \ No newline at end of file From 602b4c03efea7b70572ab18da4c12e1ba3049b15 Mon Sep 17 00:00:00 2001 From: badrogger Date: Thu, 12 Jun 2025 13:22:14 +0100 Subject: [PATCH 054/279] Fix mirage setup from source --- skale-nodes/ansible/roles/config/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 330df3a..5fc0db5 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -33,6 +33,7 @@ MANAGER_CONTRACTS="{{ manager_contracts }}" IMA_CONTRACTS="{{ ima_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" ENDPOINT="{{ endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DISK_MOUNTPOINT="{{ block_device }}" From f37c89464eabb7e50b6060b7867a272dcced0574 Mon Sep 17 00:00:00 2001 From: badrogger Date: Thu, 12 Jun 2025 13:52:12 +0100 Subject: [PATCH 055/279] Revert "Fix mirage setup from source" This reverts commit 602b4c03efea7b70572ab18da4c12e1ba3049b15. --- skale-nodes/ansible/roles/config/tasks/main.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 5fc0db5..330df3a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -33,7 +33,6 @@ MANAGER_CONTRACTS="{{ manager_contracts }}" IMA_CONTRACTS="{{ ima_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" - CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" ENDPOINT="{{ endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DISK_MOUNTPOINT="{{ block_device }}" From a87adab27aa4406d80ab0631d7c9919a87f0f622 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 12 Jun 2025 15:11:46 +0100 Subject: [PATCH 056/279] Get SM address from localhost scope --- skale-nodes/ansible/backup_schains.yaml | 2 +- skale-nodes/ansible/restore_schain.yaml | 2 +- .../roles/cleanup_contracts/tasks/main.yaml | 2 +- .../link_addresses/tasks/transfer_funds.yaml | 4 +--- .../roles/validators/tasks/generate.yaml | 19 +++++++++---------- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index ce31c67..5036574 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -8,7 +8,7 @@ environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/restore_schain.yaml b/skale-nodes/ansible/restore_schain.yaml index 5f99e23..a86dc32 100644 --- a/skale-nodes/ansible/restore_schain.yaml +++ b/skale-nodes/ansible/restore_schain.yaml @@ -8,7 +8,7 @@ environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml index 34bc437..d53b72d 100644 --- a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml @@ -5,7 +5,7 @@ BASE_DIR: "files" ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" args: executable: python3 tags: diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index d875f40..577d8bf 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -1,5 +1,3 @@ -# TODO: get 'manager_contracts' variable from group_vars/all - - name: Transfer funds to node wallets run_once: yes script: transfer_funds.py @@ -7,7 +5,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" BASE_DIR: "files" AMOUNT: 0.2 args: diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index 8c2c1a7..539f843 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,12 +1,11 @@ -- name: Set Skale Manager contract address - set_fact: - manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" - when: manager_contracts is undefined - -- name: Crash if no Skale Manager contract address provided - fail: - msg: manager_contracts is undefined - when: manager_contracts is undefined +- name: Assert that Skale Manager contract address is defined on localhost + assert: + that: + - hostvars['localhost']['sm_address'] is defined + - hostvars['localhost']['sm_address'] | length > 0 + fail_msg: "Required variable 'sm_address' is not defined on localhost or is empty." + quiet: yes + tags: contracts - name: Set hosts set_fact: hosts="{{ hosts|default([]) + [ item.value['ansible_host'] ] }}" @@ -21,7 +20,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" MIN_DELEGATION_AMOUNT: "0" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" COMMISSION_RATE: "1" NODES_NUMBER: "{{ hosts|length }}" args: From c364cb1679b917524ebe6300b3475ab9e4d7d75a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 12 Jun 2025 18:41:34 +0100 Subject: [PATCH 057/279] Add a role for setting `manager_contracts` variable --- .../ansible/roles/set_manager_contracts/tasks/main.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml diff --git a/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml new file mode 100644 index 0000000..064ef21 --- /dev/null +++ b/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml @@ -0,0 +1,9 @@ +- name: Set Skale Manager contract address + set_fact: + manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" + when: manager_contracts is undefined + +- name: Crash if no Skale Manager contract address provided + fail: + msg: manager_contracts is undefined + when: manager_contracts is undefined \ No newline at end of file From 17e6b6fa7330fc5a33f51ec1c2280f6d728d4177 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 12 Jun 2025 19:34:19 +0100 Subject: [PATCH 058/279] Retrieve the SM address from the localhost scope only if the inventory variable is not set or empty --- skale-nodes/ansible/backup_schains.yaml | 6 +++++- skale-nodes/ansible/restore_schain.yaml | 6 +++++- .../ansible/roles/cleanup_contracts/tasks/main.yaml | 6 +++++- skale-nodes/ansible/roles/config/tasks/main.yaml | 12 ++---------- .../roles/link_addresses/tasks/link_addresses.yaml | 6 +++++- .../roles/link_addresses/tasks/transfer_funds.yaml | 6 +++++- .../roles/set_manager_contracts/tasks/main.yaml | 6 +++--- .../ansible/roles/validators/tasks/generate.yaml | 13 ++++--------- 8 files changed, 34 insertions(+), 27 deletions(-) diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index 5036574..0373234 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -3,12 +3,16 @@ serial: True tasks: + - name: Set Skale Manager contract address + import_role: + name: set_manager_contracts + - name: Run fetch schain nodes script script: fetch_node_schains.py -u environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/restore_schain.yaml b/skale-nodes/ansible/restore_schain.yaml index a86dc32..c97584d 100644 --- a/skale-nodes/ansible/restore_schain.yaml +++ b/skale-nodes/ansible/restore_schain.yaml @@ -3,12 +3,16 @@ serial: True tasks: + - name: Set Skale Manager contract address + import_role: + name: set_manager_contracts + - name: Fetch nodes schains script script: fetch_node_schains.py environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml index d53b72d..190fba4 100644 --- a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml @@ -1,3 +1,7 @@ +- name: Set Skale Manager contract address + import_role: + name: set_manager_contracts + - name: Cleanup contracts script: cleanup_contracts.py run_once: yes @@ -5,7 +9,7 @@ BASE_DIR: "files" ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" args: executable: python3 tags: diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 330df3a..761dc62 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -1,14 +1,6 @@ - name: Set Skale Manager contract address - set_fact: - manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" - when: manager_contracts is undefined - tags: contracts - -- name: Crash if no Skale Manager contract address provided - fail: - msg: manager_contracts is undefined - when: manager_contracts is undefined - tags: contracts + import_role: + name: set_manager_contracts - name: Set IMA contract address set_fact: diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml index 0889ceb..73ff69a 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml @@ -3,6 +3,10 @@ set_fact: validator_private_key: "{{ lookup('file', 'files/validator-key.txt') }}" +- name: Set Skale Manager contract address + import_role: + name: set_manager_contracts + - name: Link address to validator run_once: yes script: link_address.py @@ -11,7 +15,7 @@ ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" SIGNATURE: "{{ lookup('file', '{{ item }}').split()[1].strip() }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" args: executable: python3 diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 577d8bf..9acc835 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -1,3 +1,7 @@ +- name: Set Skale Manager contract address + import_role: + name: set_manager_contracts + - name: Transfer funds to node wallets run_once: yes script: transfer_funds.py @@ -5,7 +9,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" AMOUNT: 0.2 args: diff --git a/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml index 064ef21..0acf632 100644 --- a/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml @@ -1,9 +1,9 @@ - name: Set Skale Manager contract address set_fact: manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" - when: manager_contracts is undefined + when: (manager_contracts | default('')) | length == 0 - name: Crash if no Skale Manager contract address provided fail: - msg: manager_contracts is undefined - when: manager_contracts is undefined \ No newline at end of file + msg: manager_contracts is undefined or empty + when: (manager_contracts | default('')) | length == 0 \ No newline at end of file diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index 539f843..1d3ad81 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,11 +1,6 @@ -- name: Assert that Skale Manager contract address is defined on localhost - assert: - that: - - hostvars['localhost']['sm_address'] is defined - - hostvars['localhost']['sm_address'] | length > 0 - fail_msg: "Required variable 'sm_address' is not defined on localhost or is empty." - quiet: yes - tags: contracts +- name: Set Skale Manager contract address + import_role: + name: set_manager_contracts - name: Set hosts set_fact: hosts="{{ hosts|default([]) + [ item.value['ansible_host'] ] }}" @@ -20,7 +15,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" MIN_DELEGATION_AMOUNT: "0" - MANAGER_CONTRACTS: "{{ hostvars['localhost']['sm_address'] }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" COMMISSION_RATE: "1" NODES_NUMBER: "{{ hosts|length }}" args: From 93835066bd6aa905e1af77cd347b27b1930a4604 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 13 Jun 2025 16:41:34 +0100 Subject: [PATCH 059/279] Set manager_contracts fact for each node --- skale-nodes/ansible/setup.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/skale-nodes/ansible/setup.yaml b/skale-nodes/ansible/setup.yaml index 74510f0..2a1f465 100644 --- a/skale-nodes/ansible/setup.yaml +++ b/skale-nodes/ansible/setup.yaml @@ -1,3 +1,11 @@ +- name: Propagate manager_contracts to nodes + hosts: nodes + gather_facts: no + tasks: + - name: Set manager_contracts fact for each node + set_fact: + manager_contracts: "{{ hostvars['localhost']['manager_contracts'] | default(manager_contracts, true) }}" + - name: Setup skale node hosts: nodes become: true From 939866494c05fff0cff8d35bd077c0bd5917fe62 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 13 Jun 2025 16:47:41 +0100 Subject: [PATCH 060/279] Delete `set_manager_contracts` role --- skale-nodes/ansible/backup_schains.yaml | 4 ---- skale-nodes/ansible/restore_schain.yaml | 4 ---- .../ansible/roles/cleanup_contracts/tasks/main.yaml | 4 ---- skale-nodes/ansible/roles/config/tasks/main.yaml | 4 ---- .../roles/link_addresses/tasks/link_addresses.yaml | 4 ---- .../roles/link_addresses/tasks/transfer_funds.yaml | 4 ---- .../ansible/roles/set_manager_contracts/tasks/main.yaml | 9 --------- skale-nodes/ansible/roles/validators/tasks/generate.yaml | 4 ---- 8 files changed, 37 deletions(-) delete mode 100644 skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index 0373234..ce31c67 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -3,10 +3,6 @@ serial: True tasks: - - name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Run fetch schain nodes script script: fetch_node_schains.py -u environment: diff --git a/skale-nodes/ansible/restore_schain.yaml b/skale-nodes/ansible/restore_schain.yaml index c97584d..5f99e23 100644 --- a/skale-nodes/ansible/restore_schain.yaml +++ b/skale-nodes/ansible/restore_schain.yaml @@ -3,10 +3,6 @@ serial: True tasks: - - name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Fetch nodes schains script script: fetch_node_schains.py environment: diff --git a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml index 190fba4..34bc437 100644 --- a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml @@ -1,7 +1,3 @@ -- name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Cleanup contracts script: cleanup_contracts.py run_once: yes diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 761dc62..cc6688d 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -1,7 +1,3 @@ -- name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Set IMA contract address set_fact: ima_contracts: "{{ hostvars['localhost']['ima_address'] }}" diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml index 73ff69a..2ce9d78 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml @@ -3,10 +3,6 @@ set_fact: validator_private_key: "{{ lookup('file', 'files/validator-key.txt') }}" -- name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Link address to validator run_once: yes script: link_address.py diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 9acc835..e023f26 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -1,7 +1,3 @@ -- name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Transfer funds to node wallets run_once: yes script: transfer_funds.py diff --git a/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml deleted file mode 100644 index 0acf632..0000000 --- a/skale-nodes/ansible/roles/set_manager_contracts/tasks/main.yaml +++ /dev/null @@ -1,9 +0,0 @@ -- name: Set Skale Manager contract address - set_fact: - manager_contracts: "{{ hostvars['localhost']['sm_address'] }}" - when: (manager_contracts | default('')) | length == 0 - -- name: Crash if no Skale Manager contract address provided - fail: - msg: manager_contracts is undefined or empty - when: (manager_contracts | default('')) | length == 0 \ No newline at end of file diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/validators/tasks/generate.yaml index 1d3ad81..5d92c91 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/validators/tasks/generate.yaml @@ -1,7 +1,3 @@ -- name: Set Skale Manager contract address - import_role: - name: set_manager_contracts - - name: Set hosts set_fact: hosts="{{ hosts|default([]) + [ item.value['ansible_host'] ] }}" with_dict: "{{ hostvars }}" From 647de920249668d2d1e218ad24071937f8356ba9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 13 Jun 2025 17:58:40 +0100 Subject: [PATCH 061/279] Rename `sm_address` to `manager_contracts` and `ima_address` to `ima_contracts` --- skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml | 6 +++--- .../ansible/roles/deploy_contracts/tasks/manager.yaml | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index 93e6610..b1544b3 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -9,7 +9,7 @@ state: absent regexp: "{{ item }}" path: "{{ playbook_dir }}/group_vars/all" - loop: ["^sm_address", "^ima_address"] + loop: ["^manager_contracts", "^ima_contracts"] tags: group_vars_cleanup - name: Find all abis diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index cc6688d..ec9a95e 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -1,6 +1,6 @@ - name: Set IMA contract address set_fact: - ima_contracts: "{{ hostvars['localhost']['ima_address'] }}" + ima_contracts: "{{ hostvars['localhost']['ima_contracts'] }}" when: ima_contracts is undefined tags: contracts diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml index 27b6ac1..9157f30 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml @@ -18,15 +18,15 @@ - name: Save IMA Contract Address to variable set_fact: - ima_address: "{{ ima_address_output.stdout }}" + ima_contracts: "{{ ima_address_output.stdout }}" tags: upload_ima - name: Save IMA URL to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF - regexp: "^ima_address:" - line: 'ima_address: "{{ ima_address }}"' + regexp: "^ima_contracts:" + line: 'ima_contracts: "{{ ima_contracts }}"' state: present tags: - upload_ima diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index be5c911..c58c9de 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -30,14 +30,14 @@ - name: Save SM Contract Address to variable set_fact: - sm_address: "{{ sm_address_output.stdout }}" + manager_contracts: "{{ sm_address_output.stdout }}" tags: upload_sm - name: Save SM URL to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" insertafter: EOF - regexp: "^sm_address:" - line: 'sm_address: "{{ sm_address }}"' + regexp: "^manager_contracts:" + line: 'manager_contracts: "{{ manager_contracts }}"' state: present tags: upload_sm From 1a2497769e30029924c5d5c7290f2eaf7d80dcc4 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 16 Jun 2025 19:13:22 +0100 Subject: [PATCH 062/279] Redactor init tasks --- .../ansible/roles/init/tasks/main.yaml | 58 ++++++------------- 1 file changed, 17 insertions(+), 41 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 67dfb95..4a31872 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,41 +1,10 @@ -- name: Determine init command action prefix based on node_type and sync_node +- name: Set sync_flags based on sync_node and catchup status set_fact: - _command_action_prefix: >- - {% if node_type == "mirage_boot" %} - mirage boot - {% elif node_type == "mirage" %} - mirage node - {% elif node_type == "skale" %} - {% if sync_node | default(false) | bool %} - skale sync-node - {% else %} {# if sync_node is not defined or false #} - skale node - {% endif %} - {% else %} - "" {# if node_type is unknown #} - {% endif %} - -- name: Fail if command action prefix could not be determined - fail: - msg: "Cannot determine init command prefix because node_type is unknown" - when: _command_action_prefix | length == 0 - -- name: Set the full CLI init command - set_fact: - cli_full_command: "{{ _command_action_prefix }} init {{ base_path }}/init-env" - - -- name: Add --catchup if needed (SKALE sync node) - set_fact: - cli_full_command: "{{ cli_full_command }} --catchup" - when: - - node_type == "skale" - - sync_node is defined and sync_node - - catchup is defined and catchup + sync_flags: "{{ '--catchup' if (sync_node | default(false) | bool) and (catchup | default(false) | bool) else '' }}" - name: Add --archive if needed (SKALE sync node) set_fact: - cli_full_command: "{{ cli_full_command }} --archive" + sync_flags: "{{ sync_flags }} --archive" when: - node_type == "skale" - sync_node is defined and sync_node @@ -43,22 +12,29 @@ - name: Add --historic-state if needed (SKALE sync node) set_fact: - cli_full_command: "{{ cli_full_command }} --historic-state" + sync_flags: "{{ sync_flags }} --historic-state" when: - node_type == "skale" - sync_node is defined and sync_node - historic_state is defined and historic_state -- name: Show cli_full_command - debug: - msg: "{{ cli_full_command }}" - -- name: Execute cli_full_command +- name: Build and execute init command command: - cmd: "{{ cli_full_command }}" + cmd: "{{ command_prefixes[node_type] }} init {{ base_path }}/init-env {{ sync_flags }}" + vars: + command_prefixes: + mirage_boot: "mirage boot" + mirage: "mirage node" + skale: "{{ 'skale sync-node' if (sync_node | default(false) | bool) else 'skale node' }}" environment: LANG: en_US.utf-8 LC_ALL: en_US.utf-8 + when: node_type in command_prefixes + register: init_cmd + +- name: Show init command output + debug: + msg: "{{ init_cmd.stdout }}" - name: Pause to make sure skale-admin exchange certs with sgx server pause: From f3fb124709ad0a7109a21020a65a52650d943418 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 16 Jun 2025 19:14:14 +0100 Subject: [PATCH 063/279] Refactor node register tasks --- .../ansible/roles/register/tasks/main.yaml | 39 +++++++------------ 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 605e18b..f670b90 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -1,28 +1,17 @@ -- name: Register ip address - set_fact: - ip_address: "{{ hostvars[inventory_hostname].ansible_host }}" - -- name: Compose register command - set_fact: - node_register_command: >- - {% if node_type == "mirage_boot" %} - mirage boot register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} - {% elif node_type == "mirage" %} - mirage node register --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} - {% elif node_type == "skale" %} - skale node register -n {{ inventory_hostname }} --ip {{ ip_address }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }} - {% else %} - "" {# if node_type is unknown #} - {% endif %} - -- name: Fail if node register command is empty - fail: - msg: "Cannot determine node register command because node_type is unknown" - when: node_register_command | length == 0 - -- name: Run node register command +- name: Register node command: - cmd: "{{ node_register_command }}" + cmd: "{{ node_commands[node_type] }}" + vars: + node_commands: + mirage_boot: "mirage boot register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" + mirage: "mirage node register --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" + skale: "skale node register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" environment: LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 \ No newline at end of file + LC_ALL: en_US.utf-8 + when: node_type in node_commands + register: register_cmd + +- name: Show register command output + debug: + msg: "{{ register_cmd.stdout }}" \ No newline at end of file From 86a1fa4c4cc29539e9ec67d73a3a3e4820ece522 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 16 Jun 2025 19:14:48 +0100 Subject: [PATCH 064/279] Refactor signature tasks --- .../ansible/roles/signature/tasks/main.yaml | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index 65a331b..74ce8f8 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -17,47 +17,49 @@ debug: msg: "{{ validator_id }}" -- name: Determine wallet info command - set_fact: - wallet_info_command: >- # Using >- for multi-line in YAML, processed by Jinja - {% if node_type == "mirage_boot" or node_type == "mirage" %} - sudo mirage wallet info -f json - {% else %} - sudo skale wallet info -f json - {% endif %} - -- name: Get wallet info output - command: "{{ wallet_info_command }}" - register: wallet_cmd_result +- name: Get wallet info + command: + cmd: "{{ node_commands[node_type] }}" + vars: + node_commands: + mirage_boot: "sudo mirage wallet info -f json" + skale: "sudo skale wallet info -f json" environment: - LC_ALL: "C.UTF-8" - LANG: "C.UTF-8" + LANG: en_US.utf-8 + LC_ALL: en_US.utf-8 + when: node_type in node_commands + register: wallet_info_cmd + changed_when: false -- name: Get wallet data from json - set_fact: - wallet_data: "{{ wallet_cmd_result.stdout | to_json | from_json }}" +- name: Show wallet info command output + debug: + msg: "{{ wallet_info_cmd.stdout }}" -- name: Determine signature command based on node_type +- name: Get wallet data from json set_fact: - get_signature_command: >- # Using >- for multi-line in YAML, processed by Jinja - {% if node_type == "mirage_boot" %} - sudo mirage boot signature {{ validator_id }} - {% elif node_type == "skale" %} - sudo skale node signature {{ validator_id }} - {% endif %} + wallet_data: "{{ wallet_info_cmd.stdout | to_json | from_json }}" - name: Get node signature - command: "{{ get_signature_command }}" - register: signature_cmd_result + command: + cmd: "{{ node_commands[node_type] }}" + vars: + node_commands: + mirage_boot: "sudo mirage boot signature {{ validator_id }}" + skale: "sudo skale node signature {{ validator_id }}" + environment: + LANG: en_US.utf-8 + LC_ALL: en_US.utf-8 + when: node_type in node_commands + register: get_signature_cmd changed_when: false - name: Display node signature debug: - msg: "{{ signature_cmd_result.stdout }}" + msg: "{{ get_signature_cmd.stdout }}" - name: Get wallet data from json set_fact: - signature: "{{ signature_cmd_result.stdout.split()[1] }}" + signature: "{{ get_signature_cmd.stdout.split()[1] }}" - name: Save address and signature to a file copy: From 8c2a550a97ff765cf695fc2863f3e775d53193a2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 16 Jun 2025 19:15:50 +0100 Subject: [PATCH 065/279] Fix node type --- skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 9d86ccb..5e5c5e6 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -56,7 +56,7 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type == "mirage_boot" + when: node_type == "mirage" - name: Destroy all containers become: true From 45f6394dde359d68d678bec69a3b7eb6763a7cce Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 16 Jun 2025 19:39:54 +0100 Subject: [PATCH 066/279] Stop playbook if manager_contracts is undefined --- skale-nodes/ansible/setup.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/skale-nodes/ansible/setup.yaml b/skale-nodes/ansible/setup.yaml index 2a1f465..ca0d598 100644 --- a/skale-nodes/ansible/setup.yaml +++ b/skale-nodes/ansible/setup.yaml @@ -5,6 +5,10 @@ - name: Set manager_contracts fact for each node set_fact: manager_contracts: "{{ hostvars['localhost']['manager_contracts'] | default(manager_contracts, true) }}" + - name: Crash if no SM contract address/alias provided + fail: + msg: manager_contracts is undefined + when: manager_contracts is undefined - name: Setup skale node hosts: nodes From 648472db13881608c12f0863a4f47cb094d6bd00 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 16 Jun 2025 20:18:51 +0100 Subject: [PATCH 067/279] Delete language environments --- skale-nodes/ansible/roles/init/tasks/main.yaml | 3 --- skale-nodes/ansible/roles/node_restore/tasks/node.yaml | 3 --- skale-nodes/ansible/roles/register/tasks/main.yaml | 3 --- skale-nodes/ansible/roles/signature/tasks/main.yaml | 6 ------ skale-nodes/ansible/roles/ssl/tasks/configure.yaml | 6 ------ .../ansible/roles/update/tasks/resource_allocation.yaml | 3 --- skale-nodes/ansible/roles/update/tasks/skale_update.yaml | 3 --- 7 files changed, 27 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 4a31872..f020562 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -26,9 +26,6 @@ mirage_boot: "mirage boot" mirage: "mirage node" skale: "{{ 'skale sync-node' if (sync_node | default(false) | bool) else 'skale node' }}" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 when: node_type in command_prefixes register: init_cmd diff --git a/skale-nodes/ansible/roles/node_restore/tasks/node.yaml b/skale-nodes/ansible/roles/node_restore/tasks/node.yaml index 5981726..921663b 100644 --- a/skale-nodes/ansible/roles/node_restore/tasks/node.yaml +++ b/skale-nodes/ansible/roles/node_restore/tasks/node.yaml @@ -36,8 +36,5 @@ - name: Run skale node restore shell: cmd: "{{ cmd }}" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" tags: skale_restore diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index f670b90..461fa56 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -6,9 +6,6 @@ mirage_boot: "mirage boot register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" mirage: "mirage node register --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" skale: "skale node register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 when: node_type in node_commands register: register_cmd diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index 74ce8f8..0586689 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -24,9 +24,6 @@ node_commands: mirage_boot: "sudo mirage wallet info -f json" skale: "sudo skale wallet info -f json" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 when: node_type in node_commands register: wallet_info_cmd changed_when: false @@ -46,9 +43,6 @@ node_commands: mirage_boot: "sudo mirage boot signature {{ validator_id }}" skale: "sudo skale node signature {{ validator_id }}" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 when: node_type in node_commands register: get_signature_cmd changed_when: false diff --git a/skale-nodes/ansible/roles/ssl/tasks/configure.yaml b/skale-nodes/ansible/roles/ssl/tasks/configure.yaml index e309152..37c8f14 100644 --- a/skale-nodes/ansible/roles/ssl/tasks/configure.yaml +++ b/skale-nodes/ansible/roles/ssl/tasks/configure.yaml @@ -4,14 +4,8 @@ - name: Upload SSL certificates to the node command: "skale ssl upload -c {{ host_ssl }}/fullchain.pem -k {{ host_ssl }}/privkey.pem -f" - environment: - LC_ALL: "C.UTF-8" - LANG: "C.UTF-8" - name: Set domain name command: "sudo skale node set-domain -d {{ domain }} --yes" - environment: - LC_ALL: "C.UTF-8" - LANG: "C.UTF-8" tags: domain diff --git a/skale-nodes/ansible/roles/update/tasks/resource_allocation.yaml b/skale-nodes/ansible/roles/update/tasks/resource_allocation.yaml index b5260fb..5536a5a 100644 --- a/skale-nodes/ansible/roles/update/tasks/resource_allocation.yaml +++ b/skale-nodes/ansible/roles/update/tasks/resource_allocation.yaml @@ -1,9 +1,6 @@ - name: Run resource allocation generate shell: cmd: "skale resources-allocation generate {{ base_path }}/init-env --yes" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 tags: - resource_allocation diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 967a01e..2a366c2 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -25,8 +25,5 @@ - name: Run the determined node update command shell: cmd: "{{ update_cmd }}" - environment: - LANG: en_US.utf-8 - LC_ALL: en_US.utf-8 HOME_DIR: "{{ base_path }}" tags: skale_update \ No newline at end of file From e3fc143c3c9485b92aa51018473da2fa3c21959d Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 17 Jun 2025 13:17:41 +0100 Subject: [PATCH 068/279] Set env options for regular Mirage node --- skale-nodes/ansible/roles/config/tasks/main.yaml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index ec9a95e..4f3f2bb 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -15,7 +15,7 @@ sgx_url: "https://{{ hostvars['sgx0'].ansible_host }}:1026" when: sgx_url is not defined or sgx_url == '' -- name: Set env options for Mirage node +- name: Set env options for Mirage boot node set_fact: env_options: | MANAGER_CONTRACTS="{{ manager_contracts }}" @@ -31,6 +31,20 @@ when: node_type == "mirage_boot" tags: env +- name: Set env options for regular Mirage node + set_fact: + env_options: | + MIRAGE_CONTRACTS="{{ manager_contracts }}" + CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + BOOT_ENDPOINT="{{ boot_endpoint }}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" + SGX_SERVER_URL="{{ sgx_url }}" + DISK_MOUNTPOINT="{{ block_device }}" + ENV_TYPE="{{ env_type }}" + FILEBEAT_HOST="{{ filebeat_host }}" + when: node_type == "mirage" + tags: env + - name: Set env options for regular SKALE node set_fact: env_options: | From 89411a0c4cbf0e4df0086dc622e02a8527e7bbff Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 17 Jun 2025 13:18:35 +0100 Subject: [PATCH 069/279] Add migrate commands for Mirage boot nodes --- skale-nodes/ansible/mirage_migrate.yaml | 13 +++++++++++++ .../ansible/roles/mirage_migrate/tasks/main.yaml | 9 +++++++++ 2 files changed, 22 insertions(+) create mode 100644 skale-nodes/ansible/mirage_migrate.yaml create mode 100644 skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml diff --git a/skale-nodes/ansible/mirage_migrate.yaml b/skale-nodes/ansible/mirage_migrate.yaml new file mode 100644 index 0000000..7782acc --- /dev/null +++ b/skale-nodes/ansible/mirage_migrate.yaml @@ -0,0 +1,13 @@ +- name: Migrate Mirage boot node to regular Mirage node + hosts: nodes + become: true + roles: + - role: sync + when: build_type == "source" + tags: sync + + - role: config + tags: config + + - role: mirage_migrate + tags: mirage_migrate diff --git a/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml new file mode 100644 index 0000000..2acb27a --- /dev/null +++ b/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml @@ -0,0 +1,9 @@ +- name: Mirage migrate + command: + cmd: "mirage node migrate {{ base_path }}/init-env --yes" +# when: node_type is mirage + register: migrate_cmd + +- name: Show migrate command output + debug: + msg: "{{ migrate_cmd.stdout }}" \ No newline at end of file From 9b30d9fb7f308bc797c8ed4b17413a5848a242d9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 17 Jun 2025 17:51:04 +0100 Subject: [PATCH 070/279] Refactor to avoid using Jinja syntax --- .../ansible/roles/skale_cli/tasks/main.yaml | 60 +++++++++---------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index ed95506..9d617b3 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -47,31 +47,27 @@ when: - build_type == "source" -- name: Determine build command based on node type +- name: Determine and set build command based on node type + when: build_type == "source" block: - - name: Set build target based on node_type and sync_node + - name: Determine build target from map set_fact: - _build_target: >- - {% set sync = sync_node | default(false) | bool %} - {% if node_type in ['mirage', 'mirage_boot'] and not sync %} - mirage - {% elif node_type == 'skale' and sync %} - sync - {% elif node_type == 'skale' and not sync %} - normal - {% else %} - "" - {% endif %} + _build_target: "{{ build_targets[node_type ~ '_' ~ (sync_node | default(false) | bool | lower)] | default('') }}" + vars: + build_targets: + skale_false: "normal" + skale_true: "sync" + mirage_false: "mirage" + mirage_boot_false: "mirage" - - name: Fail if build target could not be determined + - name: Fail if build target is unknown fail: - msg: "Could not determine build target for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." + msg: "Unsupported combination: node_type={{ node_type }}, sync_node={{ sync_node | default('not defined') }}" when: _build_target | length == 0 - - name: Set the full build command + - name: Set full build command set_fact: build_cmd: "scripts/build.sh test test {{ _build_target }}" - when: build_type == "source" - name: Build binary docker_container: @@ -88,22 +84,22 @@ block: - name: Determine source and destination paths for the executable set_fact: - executable_paths: "{{ executable_paths_logic | from_yaml }}" + executable_paths: "{{ path_map[lookup_key] | default({}) }}" vars: - executable_paths_logic: | - {% set sync = sync_node | default(false) | bool %} - {% if node_type in ['mirage', 'mirage_boot'] and not sync %} - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" - dest: "/usr/local/bin/mirage" - {% elif node_type == 'skale' and sync %} - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" - dest: "/usr/local/bin/skale" - {% elif node_type == 'skale' and not sync %} - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" - dest: "/usr/local/bin/skale" - {% else %} - {} - {% endif %} + lookup_key: "{{ node_type }}_{{ (sync_node | default(false)) | bool | lower }}" + path_map: + mirage_false: + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" + dest: "/usr/local/bin/mirage" + mirage_boot_false: + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" + dest: "/usr/local/bin/mirage" + skale_true: + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" + dest: "/usr/local/bin/skale" + skale_false: + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" + dest: "/usr/local/bin/skale" - name: Fail if executable paths could not be determined fail: From cc19a2e0c2e72fd47b7a5469de488c51e22b5f5b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 17 Jun 2025 18:14:52 +0100 Subject: [PATCH 071/279] Restore environment for HOME_DIR --- skale-nodes/ansible/roles/node_restore/tasks/node.yaml | 3 ++- skale-nodes/ansible/roles/update/tasks/skale_update.yaml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/node_restore/tasks/node.yaml b/skale-nodes/ansible/roles/node_restore/tasks/node.yaml index 921663b..5c90e0e 100644 --- a/skale-nodes/ansible/roles/node_restore/tasks/node.yaml +++ b/skale-nodes/ansible/roles/node_restore/tasks/node.yaml @@ -36,5 +36,6 @@ - name: Run skale node restore shell: cmd: "{{ cmd }}" + environment: HOME_DIR: "{{ base_path }}" - tags: skale_restore + tags: skale_restore diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 2a366c2..ce51aba 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -25,5 +25,6 @@ - name: Run the determined node update command shell: cmd: "{{ update_cmd }}" + environment: HOME_DIR: "{{ base_path }}" tags: skale_update \ No newline at end of file From ee22cb73f4c9a9b2da7d1cdbb6d87350399fe86f Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 18 Jun 2025 12:35:35 +0100 Subject: [PATCH 072/279] Refactor node update tasks --- .../roles/update/tasks/skale_update.yaml | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index ce51aba..ef7c300 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -1,30 +1,30 @@ - name: Update node based on its type + tags: skale_update block: - - name: Determine the correct update command + - name: Determine update command from map set_fact: - update_cmd: >- - {% set sync = sync_node | default(false) | bool %} - {% if node_type == 'mirage_boot' %} - mirage boot update {{ base_path }}/init-env --yes - {% elif node_type == 'skale' and sync %} - skale sync-node update {{ base_path }}/init-env --yes --unsafe - {% elif node_type == 'skale' and not sync %} - skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe - {% else %} - "" - {% endif %} + update_cmd: "{{ command_map[lookup_key] | default('') }}" + vars: + sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" + lookup_key: "{{ node_type }}_{{ sync_suffix }}" + command_map: + mirage_boot_normal: "mirage boot update {{ base_path }}/init-env --yes" + mirage_normal: "mirage node update {{ base_path }}/init-env --yes" +# mirage_sync: "mirage sync-node update {{ base_path }}/init-env --yes" + skale_normal: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" + skale_sync: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" - name: Fail if update command could not be determined fail: msg: "Could not determine update command for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." when: update_cmd | length == 0 - - debug: + - name: Show node update command + debug: msg: "{{ update_cmd }}" - - name: Run the determined node update command + - name: Run node update command shell: cmd: "{{ update_cmd }}" environment: HOME_DIR: "{{ base_path }}" - tags: skale_update \ No newline at end of file From 65f7509697f81ba94e7a7b198ba5e0c85fa83a71 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 18 Jun 2025 13:27:39 +0100 Subject: [PATCH 073/279] Refactor node-cli building tasks --- .../ansible/roles/skale_cli/tasks/main.yaml | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 9d617b3..b85d0c6 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -50,15 +50,18 @@ - name: Determine and set build command based on node type when: build_type == "source" block: - - name: Determine build target from map + - name: Determine build target from map with readable keys set_fact: - _build_target: "{{ build_targets[node_type ~ '_' ~ (sync_node | default(false) | bool | lower)] | default('') }}" + _build_target: "{{ build_target_map[lookup_key] | default('') }}" vars: - build_targets: - skale_false: "normal" - skale_true: "sync" - mirage_false: "mirage" - mirage_boot_false: "mirage" + base_node_type: "{{ 'mirage' if node_type == 'mirage_boot' else node_type }}" + sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" + lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" + build_target_map: + mirage_normal: "mirage" + # mirage_sync: "mirage_sync" + skale_normal: "normal" + skale_sync: "sync" - name: Fail if build target is unknown fail: @@ -81,30 +84,33 @@ - build_type == "source" - name: Copy source-built executable based on node type + when: build_type == "source" block: - name: Determine source and destination paths for the executable set_fact: executable_paths: "{{ path_map[lookup_key] | default({}) }}" vars: - lookup_key: "{{ node_type }}_{{ (sync_node | default(false)) | bool | lower }}" + base_node_type: "{{ 'mirage' if node_type == 'mirage_boot' else node_type }}" + sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" + lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" path_map: - mirage_false: - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" - dest: "/usr/local/bin/mirage" - mirage_boot_false: + mirage_normal: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" dest: "/usr/local/bin/mirage" - skale_true: - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" - dest: "/usr/local/bin/skale" - skale_false: + mirage_sync: + src: "" # TODO: replace it with correct path "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage-sync" + dest: "" # TODO: replace it with correct path "/usr/local/bin/mirage" + skale_normal: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" dest: "/usr/local/bin/skale" + skale_sync: + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" + dest: "/usr/local/bin/skale" - name: Fail if executable paths could not be determined fail: msg: "Could not determine which executable to copy for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." - when: executable_paths | length == 0 + when: executable_paths | length == 0 or executable_paths.src == "" - name: Copy the correct executable to /usr/local/bin copy: @@ -112,7 +118,6 @@ src: "{{ executable_paths.src }}" dest: "{{ executable_paths.dest }}" mode: "0755" - when: build_type == "source" - name: Remove builder container docker_container: From 6f8ec213764ee9c70f5407a4094ae525963cad6d Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 18 Jun 2025 13:49:23 +0100 Subject: [PATCH 074/279] Refactor the logic for downloading the node-cli binary --- .../ansible/roles/skale_cli/tasks/main.yaml | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index b85d0c6..858d6e0 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -1,26 +1,22 @@ # --- Download binary --- -- name: Download skale_cli from spaces (SKALE CLI) - get_url: - url: "{{ skale_cli_url }}" - dest: "/usr/local/bin/skale" - force: yes - mode: "0755" - when: - - node_type == "skale" - - build_type == "git" +- name: Download the correct binary based on node type + when: build_type == "git" tags: binary - -- name: Download mirage_cli from spaces (Mirage CLI) get_url: - url: "{{ mirage_cli_url }}" - dest: "/usr/local/bin/mirage" + url: "{{ download_map[base_node_type].url }}" + dest: "{{ download_map[base_node_type].dest }}" force: yes mode: "0755" - when: - - node_type == "mirage_boot" - - build_type == "git" - tags: binary + vars: + base_node_type: "{{ 'mirage' if node_type == 'mirage_boot' else node_type }}" + download_map: + skale: + url: "{{ skale_cli_url }}" + dest: "/usr/local/bin/skale" + mirage: + url: "{{ mirage_cli_url }}" + dest: "/usr/local/bin/mirage" # --- Build binary from source --- From 853f259e877d9f1be508a2ade46a9551abeea1b1 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 18 Jun 2025 20:14:05 +0100 Subject: [PATCH 075/279] Add creating Mirage chain logic --- skale-nodes/ansible/create_chain.yaml | 8 +++ skale-nodes/ansible/files/create_chain.py | 64 +++++++++++++++++++ .../roles/create_chain/tasks/create.yaml | 11 ++++ 3 files changed, 83 insertions(+) create mode 100644 skale-nodes/ansible/create_chain.yaml create mode 100644 skale-nodes/ansible/files/create_chain.py create mode 100644 skale-nodes/ansible/roles/create_chain/tasks/create.yaml diff --git a/skale-nodes/ansible/create_chain.yaml b/skale-nodes/ansible/create_chain.yaml new file mode 100644 index 0000000..03b7bd1 --- /dev/null +++ b/skale-nodes/ansible/create_chain.yaml @@ -0,0 +1,8 @@ +- name: Create chain on SKALE or Mirage nodes + hosts: 127.0.0.1 + connection: local + tasks: + - name: Create chain + import_role: + name: create_chain + tasks_from: create diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py new file mode 100644 index 0000000..5b5facd --- /dev/null +++ b/skale-nodes/ansible/files/create_chain.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# +# This file is part of SKALE.py +# +# Copyright (C) 2025-Present SKALE Labs +# +# SKALE.py is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# SKALE.py is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with SKALE.py. If not, see . + +import os +import logging +from eth_typing import HexStr + +from skale import SkaleManager +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet +from skale.utils.contracts_provision.main import ( + add_test_permissions, + add_test2_schain_type, + add_test4_schain_type, + create_schain +) + +logger = logging.getLogger(__name__) + +CHAIN_NAME = os.environ['CHAIN_NAME'] +ENDPOINT = os.environ['ENDPOINT'] +ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] +MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] + + +def init_skale_manager( + endpoint: str, alias_or_address: str, eth_private_key: HexStr +) -> SkaleManager: + web3 = init_web3(endpoint) + wallet = Web3Wallet(eth_private_key, web3) + return SkaleManager(endpoint, alias_or_address, wallet) + + +def bootstrap_mirage(endpoint: str, alias_or_address: str, eth_private_key: HexStr) -> None: + skale = init_skale_manager(endpoint, alias_or_address, eth_private_key) + add_test_permissions(skale) + add_test2_schain_type(skale) + add_test4_schain_type(skale) + + create_schain( + skale, + schain_name=CHAIN_NAME, + schain_type=1, + ) + + +if __name__ == '__main__': + bootstrap_mirage(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) diff --git a/skale-nodes/ansible/roles/create_chain/tasks/create.yaml b/skale-nodes/ansible/roles/create_chain/tasks/create.yaml new file mode 100644 index 0000000..ad5370b --- /dev/null +++ b/skale-nodes/ansible/roles/create_chain/tasks/create.yaml @@ -0,0 +1,11 @@ +- name: Execute create_chain script + script: create_chain.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" + CHAIN_NAME: "{{ chain_name }}" + args: + executable: python3 + tags: create_chain From 8e45cdd12843b05c384700e2385653c7645ac339 Mon Sep 17 00:00:00 2001 From: Oleksandr Sydorenko <84327300+oleksandrSydorenkoJ@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:50:03 +0200 Subject: [PATCH 076/279] Update node-side-monitor.sh Some definitions of skaled and consensus logs are deprecated in the script and should be updated. --- .../ansible/files/node-side-monitor.sh | 55 +++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/files/node-side-monitor.sh b/skale-nodes/ansible/files/node-side-monitor.sh index 0b8cbc8..1d7acac 100644 --- a/skale-nodes/ansible/files/node-side-monitor.sh +++ b/skale-nodes/ansible/files/node-side-monitor.sh @@ -48,7 +48,7 @@ make_grok_input () { cd .. local INPUT=" type: file - readall: false + readall: true fail_on_missing_logfile: false paths:" for I in ${NAMES[@]} @@ -58,6 +58,7 @@ make_grok_input () { echo "$INPUT" } + create_grok_yml () { INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" envsubst >grok-exporter.yml <<******************************************** global: @@ -73,7 +74,7 @@ input: ${INPUT} metrics: - type: gauge - name: logs_BLOCK_COMMIT + name: logs_BLOCK_COMMITED help: Block committed in bin-consensus match: '%{C_PREFIX_BLOCK}:BLOCK_COMMITED: PRPSR:%{NUMBER:proposer}:BID: %{NUMBER:block_id}' value: '{{.block_id}}' @@ -81,6 +82,15 @@ metrics: node_id: '{{.node_id}}' proposer: '{{.proposer}}' logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: counter + name: logs_PRPSR + help: Total number of proposals sent by each proposer + match: '%{C_PREFIX_BLOCK}:BLOCK_COMMITED: PRPSR:%{NUMBER:proposer}:BID: %{NUMBER:block_id}' + value: 1 + labels: + node_id: '{{.node_id}}' + proposer: '{{.proposer}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' - type: gauge name: logs_addBlockProposal help: Block proposal received @@ -107,9 +117,9 @@ metrics: node_id: '{{.node_id}}' logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' - type: gauge - name: logs_decided + name: logs_BLOCK_DECIDED help: 1 bin-cons ended OK - match: '%{C_PREFIX_BLOCK}:Decided value: %{NUMBER:value} for blockid:%{NUMBER:block_id} proposer:%{NUMBER:proposer}' + match: '%{C_PREFIX_BLOCK}:BLOCK_DECIDED: PRPSR:%{NUMBER:proposer}:BID: %{NUMBER:block_id}' value: '{{.block_id}}' labels: proposer: '{{.proposer}}' @@ -196,3 +206,40 @@ do ./grok_exporter-*/grok_exporter -config grok-exporter.yml& fi done + + +# INPUT=$(make_grok_input) +# PATTERNS=$(echo grok_exporter*/patterns) + +# echo "Running initial full log scan to initialize metrics..." +# export INPUT PATTERNS +# INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" create_grok_yml +# sed -i 's/readall: false/readall: true/' grok-exporter.yml + +# ./grok_exporter-*/grok_exporter -config grok-exporter.yml & +# GROK_PID=$! +# sleep 300 +# kill $GROK_PID +# echo "Initial scan done." + +# INPUT=$(make_grok_input) +# INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" create_grok_yml + +# sudo iptables -I INPUT -p tcp --dport 9144 -j ACCEPT + +# ./grok_exporter-*/grok_exporter -config grok-exporter.yml & +# trap "killall grok_exporter; killall -r process-expor" EXIT + +# while true +# do +# sleep 5 +# NEW_INPUT=$(make_grok_input) +# if [ "$NEW_INPUT" != "$INPUT" ] +# then +# echo "Restarting grok-exporter due to container change.." +# INPUT="$NEW_INPUT" +# INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" create_grok_yml +# killall grok_exporter +# ./grok_exporter-*/grok_exporter -config grok-exporter.yml & +# fi +# done From 210e842be646a83c841bbf8891a91f04f0283dac Mon Sep 17 00:00:00 2001 From: andriy66 Date: Fri, 20 Jun 2025 18:18:11 +0300 Subject: [PATCH 077/279] 278-node-side-monitor-update: Add logs matcher for: CWT, TLWT, SBPT, BITE, BCT, BFST, PST --- .../ansible/files/node-side-monitor.sh | 95 +++++++++++-------- 1 file changed, 57 insertions(+), 38 deletions(-) diff --git a/skale-nodes/ansible/files/node-side-monitor.sh b/skale-nodes/ansible/files/node-side-monitor.sh index 1d7acac..4eef7d2 100644 --- a/skale-nodes/ansible/files/node-side-monitor.sh +++ b/skale-nodes/ansible/files/node-side-monitor.sh @@ -181,6 +181,62 @@ metrics: value: '1' labels: logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_CWT + help: Consensus Wait Time + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}' + value: '{{.cwt_value}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_TLWT + help: Transaction Latency Wait Time + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}:TLWT:%{NUMBER:tlwt}' + value: '{{.tlwt}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_SBPT + help: SBPT metric + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}:TLWT:%{NUMBER:tlwt}:SBPT:%{NUMBER:sbpt}' + value: '{{.sbpt}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BITE + help: BITE metric + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}:TLWT:%{NUMBER:tlwt}:SBPT:%{NUMBER:sbpt}:BITE_DECRYPTED_TXS:%{NUMBER:bite_decrypted_txs}' + value: '{{.bite_decrypted_txs}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BCT + help: Block Commit Time (ms) + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER}:TLWT:%{NUMBER}:SBPT:%{NUMBER}:BCT:%{NUMBER:bct}:BFST:%{NUMBER}:PST:%{NUMBER}' + value: '{{.bct}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BFST + help: Block Finalization Stage Time (ms) + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER}:TLWT:%{NUMBER}:SBPT:%{NUMBER}:BCT:%{NUMBER}:BFST:%{NUMBER:bfst}:PST:%{NUMBER}' + value: '{{.bfst}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_PST + help: Proposal Stage Time (ms) + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER}:TLWT:%{NUMBER}:SBPT:%{NUMBER}:BCT:%{NUMBER}:BFST:%{NUMBER}:PST:%{NUMBER:pst}' + value: '{{.pst}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' server: port: ${PORT} ******************************************** @@ -205,41 +261,4 @@ do killall grok_exporter ./grok_exporter-*/grok_exporter -config grok-exporter.yml& fi -done - - -# INPUT=$(make_grok_input) -# PATTERNS=$(echo grok_exporter*/patterns) - -# echo "Running initial full log scan to initialize metrics..." -# export INPUT PATTERNS -# INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" create_grok_yml -# sed -i 's/readall: false/readall: true/' grok-exporter.yml - -# ./grok_exporter-*/grok_exporter -config grok-exporter.yml & -# GROK_PID=$! -# sleep 300 -# kill $GROK_PID -# echo "Initial scan done." - -# INPUT=$(make_grok_input) -# INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" create_grok_yml - -# sudo iptables -I INPUT -p tcp --dport 9144 -j ACCEPT - -# ./grok_exporter-*/grok_exporter -config grok-exporter.yml & -# trap "killall grok_exporter; killall -r process-expor" EXIT - -# while true -# do -# sleep 5 -# NEW_INPUT=$(make_grok_input) -# if [ "$NEW_INPUT" != "$INPUT" ] -# then -# echo "Restarting grok-exporter due to container change.." -# INPUT="$NEW_INPUT" -# INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" create_grok_yml -# killall grok_exporter -# ./grok_exporter-*/grok_exporter -config grok-exporter.yml & -# fi -# done +done \ No newline at end of file From e2566ff7f412562bb3d59b6a16b9b2eb41a773e6 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 23 Jun 2025 11:17:52 +0100 Subject: [PATCH 078/279] Update docker compose mirage template --- .../templates/docker-compose-mirage.yml.j2 | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 index afcb0aa..8956329 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 @@ -93,7 +93,7 @@ services: environment: SGX_SERVER_URL: ${SGX_SERVER_URL} SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - ENDPOINT: ${ENDPOINT} + BOOT_ENDPOINT: ${BOOT_ENDPOINT} SKALE_DIR_HOST: ${SKALE_DIR} MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} BACKUP_RUN: ${BACKUP_RUN} @@ -105,7 +105,7 @@ services: ALLOWED_TS_DIFF: 300 TELEGRAF: ${TELEGRAF} INFLUX_URL: ${INFLUX_URL} - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} + MIRAGE_CONTRACTS: ${MIRAGE_CONTRACTS} command: "python3 mirage.py" volumes: @@ -120,9 +120,9 @@ services: retries: 2 start_period: 30s - mirage-api: + mirage-boot-api: <<: *skale_base - container_name: mirage_api + container_name: mirage_boot_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -158,18 +158,56 @@ services: - ${SKALE_DIR}/node_data:/skale_node_data - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + mirage-api: + <<: *skale_base + container_name: mirage_api + image: "skale-admin:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-admin" + dockerfile: Dockerfile + network: host + network_mode: host + tty: true + cap_add: + - NET_ADMIN + - NET_RAW + environment: + SGX_SERVER_URL: ${SGX_SERVER_URL} + SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} + BOOT_ENDPOINT: ${BOOT_ENDPOINT} + FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} + FLASK_APP_PORT: 3007 + FLASK_APP_HOST: "127.0.0.1" + FLASK_DEBUG_MODE: "False" + SKALE_DIR_HOST: ${SKALE_DIR} + MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} + BACKUP_RUN: ${BACKUP_RUN} + DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} + DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} + DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} + ENV_TYPE: ${ENV_TYPE} + ALLOWED_TS_DIFF: 300 + MIRAGE_CONTRACTS: ${MIRAGE_CONTRACTS} + command: "gunicorn mirage_api:app -c gunicorn.conf.py" + volumes: + - /var/run/skale:/var/run/skale + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + redis: <<: *skale_base container_name: skale_redis - image: "redis:6.0.10-alpine" + image: "redis:8.0.1-alpine" network_mode: host tty: true environment: - REDIS_REPLICATION_MODE=master command: "redis-server /data/redis.conf" volumes: - - ${SKALE_DIR}/node_data/redis-data:/data/db:rw + - ${SKALE_DIR}/node_data/redis-data:/data:rw - ${SKALE_DIR}/config/redis.conf:/data/redis.conf + restart: unless-stopped watchdog: <<: *skale_base From e61e2b513bfafded80b0e2ebea8eced34636993a Mon Sep 17 00:00:00 2001 From: badrogger Date: Mon, 23 Jun 2025 12:11:26 +0100 Subject: [PATCH 079/279] Sync mirage compose for mirage_boot and mirage node_type --- skale-nodes/ansible/roles/sync/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index a9b563e..2903b14 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -60,7 +60,7 @@ src: docker-compose-mirage.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose-mirage.yml" when: - - node_type == "mirage_boot" + - node_type in ['mirage_boot', 'mirage'] - name: Replace skale-node docker-compose-sync file template: From 53971979083fcf10c6ec3aa54071bc285d9ed07b Mon Sep 17 00:00:00 2001 From: Oleksandr Sydorenko <84327300+oleksandrSydorenkoJ@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:50:03 +0200 Subject: [PATCH 080/279] Update node-side-monitor.sh Some definitions of skaled and consensus logs are deprecated in the script and should be updated. --- .../ansible/files/node-side-monitor.sh | 118 +++++++++++++++++- 1 file changed, 113 insertions(+), 5 deletions(-) diff --git a/skale-nodes/ansible/files/node-side-monitor.sh b/skale-nodes/ansible/files/node-side-monitor.sh index 0b8cbc8..05d1f1d 100644 --- a/skale-nodes/ansible/files/node-side-monitor.sh +++ b/skale-nodes/ansible/files/node-side-monitor.sh @@ -48,7 +48,7 @@ make_grok_input () { cd .. local INPUT=" type: file - readall: false + readall: true fail_on_missing_logfile: false paths:" for I in ${NAMES[@]} @@ -58,6 +58,7 @@ make_grok_input () { echo "$INPUT" } + create_grok_yml () { INPUT="$INPUT" PORT=9144 PATTERNS="$PATTERNS" envsubst >grok-exporter.yml <<******************************************** global: @@ -73,7 +74,7 @@ input: ${INPUT} metrics: - type: gauge - name: logs_BLOCK_COMMIT + name: logs_BLOCK_COMMITED help: Block committed in bin-consensus match: '%{C_PREFIX_BLOCK}:BLOCK_COMMITED: PRPSR:%{NUMBER:proposer}:BID: %{NUMBER:block_id}' value: '{{.block_id}}' @@ -81,6 +82,15 @@ metrics: node_id: '{{.node_id}}' proposer: '{{.proposer}}' logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: counter + name: logs_PRPSR + help: Total number of proposals sent by each proposer + match: '%{C_PREFIX_BLOCK}:BLOCK_COMMITED: PRPSR:%{NUMBER:proposer}:BID: %{NUMBER:block_id}' + value: 1 + labels: + node_id: '{{.node_id}}' + proposer: '{{.proposer}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' - type: gauge name: logs_addBlockProposal help: Block proposal received @@ -107,9 +117,9 @@ metrics: node_id: '{{.node_id}}' logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' - type: gauge - name: logs_decided + name: logs_BLOCK_DECIDED help: 1 bin-cons ended OK - match: '%{C_PREFIX_BLOCK}:Decided value: %{NUMBER:value} for blockid:%{NUMBER:block_id} proposer:%{NUMBER:proposer}' + match: '%{C_PREFIX_BLOCK}:BLOCK_DECIDED: PRPSR:%{NUMBER:proposer}:BID: %{NUMBER:block_id}' value: '{{.block_id}}' labels: proposer: '{{.proposer}}' @@ -171,6 +181,104 @@ metrics: value: '1' labels: logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_CWT + help: Consensus Wait Time + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}' + value: '{{.cwt_value}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_TLWT + help: Transaction Latency Wait Time + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}:TLWT:%{NUMBER:tlwt}' + value: '{{.tlwt}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_SBPT + help: SBPT metric + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}:TLWT:%{NUMBER:tlwt}:SBPT:%{NUMBER:sbpt}' + value: '{{.sbpt}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BITE + help: BITE metric + match: '%{C_PREFIX_BLOCK}:CWT:%{NUMBER:cwt_value}:TLWT:%{NUMBER:tlwt}:SBPT:%{NUMBER:sbpt}:BITE_DECRYPTED_TXS:%{NUMBER:bite_decrypted_txs}' + value: '{{.bite_decrypted_txs}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BCT + help: Block Commit Time (ms) + match: '%{C_PREFIX_BLOCK}:BCT:%{NUMBER:bct}:BFST:%{NUMBER}:PST:%{NUMBER}' + value: '{{.bct}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BFST + help: Block Finalization Stage Time (ms) + match: '%{C_PREFIX_BLOCK}:BCT:%{NUMBER}:BFST:%{NUMBER:bfst}:PST:%{NUMBER}' + value: '{{.bfst}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_PST + help: Proposal Stage Time (ms) + match: '%{C_PREFIX_BLOCK}:BCT:%{NUMBER}:BFST:%{NUMBER}:PST:%{NUMBER:pst}' + value: '{{.pst}}' + labels: + node_id: '{{.node_id}}' + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_SWT + help: Sync Wait Time + match: 'SWT:%{NUMBER:swt}:BFT:%{NUMBER}:TQBYTES:CTQ:%{NUMBER}:FTQ:%{NUMBER}:TQSIZE:CTQ:%{NUMBER}:FTQ:%{NUMBER}' + value: '{{.swt}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_BFT + help: Block Finalization Time + match: 'SWT:%{NUMBER}:BFT:%{NUMBER:bft}:TQBYTES:CTQ:%{NUMBER}:FTQ:%{NUMBER}:TQSIZE:CTQ:%{NUMBER}:FTQ:%{NUMBER}' + value: '{{.bft}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_TQBYTES_CTQ + help: Transaction Queue Bytes - CTQ Value + match: 'SWT:%{NUMBER}:BFT:%{NUMBER}:TQBYTES:CTQ:%{NUMBER:tqbytes_ctq}:FTQ:%{NUMBER}:TQSIZE:CTQ:%{NUMBER}:FTQ:%{NUMBER}' + value: '{{.tqbytes_ctq}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_TQBYTES_FTQ + help: Transaction Queue Bytes - FTQ Value + match: 'SWT:%{NUMBER}:BFT:%{NUMBER}:TQBYTES:CTQ:%{NUMBER}:FTQ:%{NUMBER:tqbytes_ftq}:TQSIZE:CTQ:%{NUMBER}:FTQ:%{NUMBER}' + value: '{{.tqbytes_ftq}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_TQSIZE_CTQ + help: Transaction Queue Size - CTQ Value + match: 'SWT:%{NUMBER}:BFT:%{NUMBER}:TQBYTES:CTQ:%{NUMBER}:FTQ:%{NUMBER}:TQSIZE:CTQ:%{NUMBER:tqsize_ctq}:FTQ:%{NUMBER}' + value: '{{.tqsize_ctq}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_TQSIZE_FTQ + help: Transaction Queue Size - FTQ Value + match: 'SWT:%{NUMBER}:BFT:%{NUMBER}:TQBYTES:CTQ:%{NUMBER}:FTQ:%{NUMBER}:TQSIZE:CTQ:%{NUMBER}:FTQ:%{NUMBER:tqsize_ftq}' + value: '{{.tqsize_ftq}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' server: port: ${PORT} ******************************************** @@ -195,4 +303,4 @@ do killall grok_exporter ./grok_exporter-*/grok_exporter -config grok-exporter.yml& fi -done +done \ No newline at end of file From 9dc8164a0f83fdcb4442c1dc7b3f82b131edfee4 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 23 Jun 2025 18:30:03 +0100 Subject: [PATCH 081/279] Update docker compose mirage template --- .../ansible/roles/sync/templates/docker-compose-mirage.yml.j2 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 index 8956329..461a685 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 @@ -106,6 +106,7 @@ services: TELEGRAF: ${TELEGRAF} INFLUX_URL: ${INFLUX_URL} MIRAGE_CONTRACTS: ${MIRAGE_CONTRACTS} + SKALE_NETWORK_TYPE: "mirage" command: "python3 mirage.py" volumes: @@ -151,6 +152,7 @@ services: ALLOWED_TS_DIFF: 300 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} + SKALE_NETWORK_TYPE: "mirage" command: "gunicorn app:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale @@ -188,6 +190,7 @@ services: ENV_TYPE: ${ENV_TYPE} ALLOWED_TS_DIFF: 300 MIRAGE_CONTRACTS: ${MIRAGE_CONTRACTS} + SKALE_NETWORK_TYPE: "mirage" command: "gunicorn mirage_api:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale From c11ee659775f7b27fb1c3f34bc3398c4fd534cdc Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 23 Jun 2025 19:01:02 +0100 Subject: [PATCH 082/279] Fix mirage contracts env --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 4f3f2bb..df1def1 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -34,7 +34,7 @@ - name: Set env options for regular Mirage node set_fact: env_options: | - MIRAGE_CONTRACTS="{{ manager_contracts }}" + MIRAGE_CONTRACTS="{{ mirage_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" BOOT_ENDPOINT="{{ boot_endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" From 836ae3f8630b5d4c8ffc7492ed998f8a92cc33d5 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 24 Jun 2025 12:55:29 +0100 Subject: [PATCH 083/279] Add playbook for deploying Mirage contracts --- skale-nodes/ansible/deploy_mirage_manager.yaml | 8 ++++++++ .../ansible/roles/deploy_mm/tasks/deploy.yaml | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 skale-nodes/ansible/deploy_mirage_manager.yaml create mode 100644 skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml diff --git a/skale-nodes/ansible/deploy_mirage_manager.yaml b/skale-nodes/ansible/deploy_mirage_manager.yaml new file mode 100644 index 0000000..43a97d4 --- /dev/null +++ b/skale-nodes/ansible/deploy_mirage_manager.yaml @@ -0,0 +1,8 @@ +- name: Create Mirage manager contracts + hosts: 127.0.0.1 + connection: local + tasks: + - name: Deploy Mirage manager + import_role: + name: deploy_mm + tasks_from: deploy diff --git a/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml b/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml new file mode 100644 index 0000000..0ac6ea0 --- /dev/null +++ b/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml @@ -0,0 +1,17 @@ +- name: Deploy Mirage manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/mirage-deploy.log) + shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_mirage.sh 2>&1 | tee {{ playbook_dir }}/logs/mirage-deploy.log + run_once: yes + environment: + MIRAGE_TAG: "{{ mirage_tag }}" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + MAINNET_ENDPOINT: "{{ endpoint }}" + ENDPOINT: "{{ mirage_endpoint }}" + CHAIN_NAME: "{{ chain_name }}" + TARGET: "{{ manager_contracts }}" + tags: deploy_mirage + +- name: Copy Mirage ABI + copy: + src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/mirage.json" + dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/mirageManagerComponents.json" + tags: upload_mirage From a5380e11aa561242cb64093d4015fcad60300c4b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 25 Jun 2025 18:45:18 +0100 Subject: [PATCH 084/279] Save Mirage Contract Address to group vars --- .../ansible/roles/deploy_mm/tasks/deploy.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml b/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml index 0ac6ea0..47f8b60 100644 --- a/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml +++ b/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml @@ -15,3 +15,29 @@ src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/mirage.json" dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/mirageManagerComponents.json" tags: upload_mirage + +- name: Ensure group vars all + file: + state: touch + path: "{{ playbook_dir }}/group_vars/all" + tags: upload_mirage + +- name: Get Mirage Contract Address + shell: "jq -r '.Committee' {{ playbook_dir }}/../../helper-scripts/contracts_data/mirage.json" + register: mm_address_output + changed_when: false + tags: upload_mirage + +- name: Save Mirage Contract Address to variable + set_fact: + mirage_contracts: "{{ mm_address_output.stdout }}" + tags: upload_mirage + +- name: Save Mirage Contract Address to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + insertafter: EOF + regexp: "^mirage_contracts:" + line: 'mirage_contracts: "{{ mirage_contracts }}"' + state: present + tags: upload_mirage From 140e5347fe25485744577b47781bdfef2cef61ca Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 26 Jun 2025 13:28:33 +0100 Subject: [PATCH 085/279] Remove unused IMA parameters --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index df1def1..e9287f8 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -49,7 +49,6 @@ set_fact: env_options: | ENDPOINT="{{ endpoint }}" - IMA_ENDPOINT="{{ ima_endpoint }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" FILEBEAT_HOST="{{ filebeat_host }}" MANAGER_CONTRACTS="{{ manager_contracts }}" @@ -63,7 +62,6 @@ MONITORING_CONTAINERS="{{ monitoring_containers }}" DEFAULT_GAS_PRICE_WEI="{{ default_gas_price_wei }}" ENV_TYPE="{{ env_type }}" - DISABLE_IMA="{{ disable_ima }}" INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" when: From 035746be85d9a30be3193653e305b94badac5d0f Mon Sep 17 00:00:00 2001 From: Dmytro Date: Fri, 27 Jun 2025 15:34:03 +0100 Subject: [PATCH 086/279] Add boot endpoint for transaction-manager --- .../ansible/roles/sync/templates/docker-compose-mirage.yml.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 index 461a685..278e4dc 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 @@ -25,7 +25,8 @@ services: tty: true environment: SGX_URL: ${SGX_SERVER_URL} - ENDPOINT: ${ENDPOINT} + BOOT_ENDPOINT: ${BOOT_ENDPOINT} + SKALE_NETWORK_TYPE: "mirage" volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data From fb7c434793efad87770010e9f65abb274fac742a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 30 Jun 2025 19:23:28 +0100 Subject: [PATCH 087/279] Add `CHAIN_TYPE` variable --- skale-nodes/ansible/roles/create_chain/tasks/create.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/create_chain/tasks/create.yaml b/skale-nodes/ansible/roles/create_chain/tasks/create.yaml index ad5370b..56ceb52 100644 --- a/skale-nodes/ansible/roles/create_chain/tasks/create.yaml +++ b/skale-nodes/ansible/roles/create_chain/tasks/create.yaml @@ -6,6 +6,7 @@ ENDPOINT: "{{ endpoint }}" MANAGER_CONTRACTS: "{{ manager_contracts }}" CHAIN_NAME: "{{ chain_name }}" + CHAIN_TYPE: "{{ chain_type }}" args: executable: python3 tags: create_chain From 2a23182d6e128391b673acebc2c4011dcedb9e71 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 1 Jul 2025 15:02:37 +0100 Subject: [PATCH 088/279] Create a chain depending on its type --- skale-nodes/ansible/files/create_chain.py | 76 +++++++++++++++++------ 1 file changed, 57 insertions(+), 19 deletions(-) diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py index 5b5facd..5a3a227 100644 --- a/skale-nodes/ansible/files/create_chain.py +++ b/skale-nodes/ansible/files/create_chain.py @@ -20,16 +20,11 @@ import os import logging from eth_typing import HexStr - +from enum import Enum from skale import SkaleManager from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet -from skale.utils.contracts_provision.main import ( - add_test_permissions, - add_test2_schain_type, - add_test4_schain_type, - create_schain -) +from skale.utils.contracts_provision.main import add_test_permissions, create_schain logger = logging.getLogger(__name__) @@ -37,28 +32,71 @@ ENDPOINT = os.environ['ENDPOINT'] ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] +CHAIN_TYPE = os.environ.get('CHAIN_TYPE', 'SMALL2').upper() +class SchainType(Enum): + SMALL2 = [1, 2] + SMALL4 = [1, 4] + SMALL = [1, 16] + MEDIUM2 = [16, 2] + MEDIUM4 = [16, 4] + MEDIUM = [16, 16] + LARGE2 = [128, 2] + LARGE4 = [128, 4] + LARGE = [128, 16] + TEST0_4 = [0, 4] + TEST4_2 = [32, 2] + TEST4_4 = [32, 4] + TEST4 = [32, 16] + EMPTY = [0, 0] -def init_skale_manager( - endpoint: str, alias_or_address: str, eth_private_key: HexStr -) -> SkaleManager: - web3 = init_web3(endpoint) - wallet = Web3Wallet(eth_private_key, web3) - return SkaleManager(endpoint, alias_or_address, wallet) +def get_chain_type_params(chain_type: str) -> list: + try: + return SchainType[chain_type].value + except KeyError: + print(f"Error: '{chain_type}' is not a valid SchainType. " + f"Available types are: {[member.name for member in SchainType]}") + raise + +def add_schain_type(part_of_node, number_of_nodes): + return skale.schains_internal.add_schain_type( + part_of_node, number_of_nodes + ) +def get_schain_type_id(skale, type_parameters): + n = skale.schains_internal.contract.functions.numberOfSchainTypes().call() + for idx in range(1, n + 1): + params = skale.schains_internal.get_schain_type(idx) + print(f'PARAMS: {params}') + if type_parameters == params: + return idx + return None -def bootstrap_mirage(endpoint: str, alias_or_address: str, eth_private_key: HexStr) -> None: - skale = init_skale_manager(endpoint, alias_or_address, eth_private_key) +def prepare_and_create_chain(skale, chain_type=CHAIN_TYPE) -> None: add_test_permissions(skale) - add_test2_schain_type(skale) - add_test4_schain_type(skale) + type_params = get_chain_type_params(chain_type) + type_id = get_schain_type_id(skale, type_params) + if type_id is None: + print(f'sChain type {chain_type} ' + f'with {type_params[0]}, {type_params[1]} not found. Adding to contracts...') + add_schain_type(type_params[0], type_params[1]) + type_id = get_schain_type_id(skale, type_params) create_schain( skale, schain_name=CHAIN_NAME, - schain_type=1, + schain_type=type_id, ) +def init_skale_manager( + endpoint: str, alias_or_address: str, eth_private_key: HexStr +) -> SkaleManager: + web3 = init_web3(endpoint) + wallet = Web3Wallet(eth_private_key, web3) + return SkaleManager(endpoint, alias_or_address, wallet) + if __name__ == '__main__': - bootstrap_mirage(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) + skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) + prepare_and_create_chain(skale) + From dea34b5fcdb805b985e98c3e85677b37f4ee96ba Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 1 Jul 2025 18:24:49 +0100 Subject: [PATCH 089/279] Deploy the Mirage manager only if node_type is set to "mirage_boot" --- skale-nodes/ansible/deploy_mirage_manager.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/deploy_mirage_manager.yaml b/skale-nodes/ansible/deploy_mirage_manager.yaml index 43a97d4..cd71615 100644 --- a/skale-nodes/ansible/deploy_mirage_manager.yaml +++ b/skale-nodes/ansible/deploy_mirage_manager.yaml @@ -6,3 +6,5 @@ import_role: name: deploy_mm tasks_from: deploy + when: node_type == "mirage_boot" + From f106348ab06245b15c1d597c762cadc09eb1609b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 1 Jul 2025 20:12:04 +0100 Subject: [PATCH 090/279] Run Mirage migrate only if node_type is set to "mirage" --- skale-nodes/ansible/mirage_migrate.yaml | 7 +++++++ skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/mirage_migrate.yaml b/skale-nodes/ansible/mirage_migrate.yaml index 7782acc..363960d 100644 --- a/skale-nodes/ansible/mirage_migrate.yaml +++ b/skale-nodes/ansible/mirage_migrate.yaml @@ -1,6 +1,13 @@ - name: Migrate Mirage boot node to regular Mirage node hosts: nodes become: true + pre_tasks: + - name: Fail if node_type is not 'mirage' + run_once: true + delegate_to: localhost + fail: + msg: "Stopping playbook. This play requires node_type to be 'mirage', but it is '{{ node_type }}'." + when: node_type != "mirage" roles: - role: sync when: build_type == "source" diff --git a/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml index 2acb27a..4dde90e 100644 --- a/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml @@ -1,7 +1,6 @@ - name: Mirage migrate command: cmd: "mirage node migrate {{ base_path }}/init-env --yes" -# when: node_type is mirage register: migrate_cmd - name: Show migrate command output From 580c637c20ba1568f8bd42a1adfc008584a1dc85 Mon Sep 17 00:00:00 2001 From: andriy66 Date: Wed, 2 Jul 2025 15:19:51 +0300 Subject: [PATCH 091/279] Add STET metric --- skale-nodes/ansible/files/node-side-monitor.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/skale-nodes/ansible/files/node-side-monitor.sh b/skale-nodes/ansible/files/node-side-monitor.sh index 05d1f1d..8e6bcef 100644 --- a/skale-nodes/ansible/files/node-side-monitor.sh +++ b/skale-nodes/ansible/files/node-side-monitor.sh @@ -279,6 +279,13 @@ metrics: value: '{{.tqsize_ftq}}' labels: logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' +- type: gauge + name: logs_STET + help: STET - time of creating decryption shares for the block + match: 'STET:%{NUMBER:stet}' + value: '{{.stet}}' + labels: + logfile: '{{gsub .logfile ".*/log_links/(.+)/.*-json.log" "\\\\1"}}' server: port: ${PORT} ******************************************** From 2d7b57012ebda00dbb85f1aa724089f3ba5a1c49 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 2 Jul 2025 13:40:58 +0100 Subject: [PATCH 092/279] Apply code linting --- skale-nodes/ansible/files/create_chain.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py index 5a3a227..3288b04 100644 --- a/skale-nodes/ansible/files/create_chain.py +++ b/skale-nodes/ansible/files/create_chain.py @@ -18,7 +18,6 @@ # along with SKALE.py. If not, see . import os -import logging from eth_typing import HexStr from enum import Enum from skale import SkaleManager @@ -26,14 +25,13 @@ from skale.wallets import Web3Wallet from skale.utils.contracts_provision.main import add_test_permissions, create_schain -logger = logging.getLogger(__name__) - CHAIN_NAME = os.environ['CHAIN_NAME'] ENDPOINT = os.environ['ENDPOINT'] ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] CHAIN_TYPE = os.environ.get('CHAIN_TYPE', 'SMALL2').upper() + class SchainType(Enum): SMALL2 = [1, 2] SMALL4 = [1, 4] @@ -50,6 +48,7 @@ class SchainType(Enum): TEST4 = [32, 16] EMPTY = [0, 0] + def get_chain_type_params(chain_type: str) -> list: try: return SchainType[chain_type].value @@ -58,11 +57,13 @@ def get_chain_type_params(chain_type: str) -> list: f"Available types are: {[member.name for member in SchainType]}") raise + def add_schain_type(part_of_node, number_of_nodes): return skale.schains_internal.add_schain_type( part_of_node, number_of_nodes ) + def get_schain_type_id(skale, type_parameters): n = skale.schains_internal.contract.functions.numberOfSchainTypes().call() for idx in range(1, n + 1): @@ -72,6 +73,7 @@ def get_schain_type_id(skale, type_parameters): return idx return None + def prepare_and_create_chain(skale, chain_type=CHAIN_TYPE) -> None: add_test_permissions(skale) type_params = get_chain_type_params(chain_type) @@ -88,6 +90,7 @@ def prepare_and_create_chain(skale, chain_type=CHAIN_TYPE) -> None: schain_type=type_id, ) + def init_skale_manager( endpoint: str, alias_or_address: str, eth_private_key: HexStr ) -> SkaleManager: @@ -99,4 +102,3 @@ def init_skale_manager( if __name__ == '__main__': skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) prepare_and_create_chain(skale) - From 58a31fb60f42171c25622495b7083dba6cc437d7 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 2 Jul 2025 13:51:26 +0100 Subject: [PATCH 093/279] Fix the indentation --- skale-nodes/ansible/mirage_migrate.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/mirage_migrate.yaml b/skale-nodes/ansible/mirage_migrate.yaml index 363960d..8762458 100644 --- a/skale-nodes/ansible/mirage_migrate.yaml +++ b/skale-nodes/ansible/mirage_migrate.yaml @@ -2,12 +2,12 @@ hosts: nodes become: true pre_tasks: - - name: Fail if node_type is not 'mirage' - run_once: true - delegate_to: localhost - fail: - msg: "Stopping playbook. This play requires node_type to be 'mirage', but it is '{{ node_type }}'." - when: node_type != "mirage" + - name: Fail if node_type is not 'mirage' + run_once: true + delegate_to: localhost + fail: + msg: "Stopping playbook. This play requires node_type to be 'mirage', but it is '{{ node_type }}'." + when: node_type != "mirage" roles: - role: sync when: build_type == "source" From 9b9c21d7f5d1bf8a2efd0fc91a8280b00cea69b2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 2 Jul 2025 14:15:55 +0100 Subject: [PATCH 094/279] Refactor to remove `tasks_from` usage --- skale-nodes/ansible/create_chain.yaml | 9 ++++----- skale-nodes/ansible/deploy_mirage_manager.yaml | 18 +++++++++++------- .../tasks/{create.yaml => main.yaml} | 0 .../tasks/main.yaml} | 0 .../tasks/main.yaml} | 2 -- skale-nodes/ansible/validator.yaml | 11 +++++------ 6 files changed, 20 insertions(+), 20 deletions(-) rename skale-nodes/ansible/roles/create_chain/tasks/{create.yaml => main.yaml} (100%) rename skale-nodes/ansible/roles/{deploy_mm/tasks/deploy.yaml => deploy_mirage/tasks/main.yaml} (100%) rename skale-nodes/ansible/roles/{validators/tasks/generate.yaml => setup_validator/tasks/main.yaml} (91%) diff --git a/skale-nodes/ansible/create_chain.yaml b/skale-nodes/ansible/create_chain.yaml index 03b7bd1..00d765f 100644 --- a/skale-nodes/ansible/create_chain.yaml +++ b/skale-nodes/ansible/create_chain.yaml @@ -1,8 +1,7 @@ - name: Create chain on SKALE or Mirage nodes hosts: 127.0.0.1 connection: local - tasks: - - name: Create chain - import_role: - name: create_chain - tasks_from: create + roles: + - role: create_chain + tags: + - create_chain diff --git a/skale-nodes/ansible/deploy_mirage_manager.yaml b/skale-nodes/ansible/deploy_mirage_manager.yaml index cd71615..a075056 100644 --- a/skale-nodes/ansible/deploy_mirage_manager.yaml +++ b/skale-nodes/ansible/deploy_mirage_manager.yaml @@ -1,10 +1,14 @@ -- name: Create Mirage manager contracts +- name: Deploy Mirage manager contracts hosts: 127.0.0.1 connection: local - tasks: - - name: Deploy Mirage manager - import_role: - name: deploy_mm - tasks_from: deploy - when: node_type == "mirage_boot" + pre_tasks: + - name: Fail if node_type is not 'mirage_boot' + fail: + msg: "Stopping playbook. This play requires node_type to be 'mirage_boot', but it is '{{ node_type }}'." + when: node_type != "mirage_boot" + roles: + - role: deploy_mirage + tags: + - deploy_mirage + diff --git a/skale-nodes/ansible/roles/create_chain/tasks/create.yaml b/skale-nodes/ansible/roles/create_chain/tasks/main.yaml similarity index 100% rename from skale-nodes/ansible/roles/create_chain/tasks/create.yaml rename to skale-nodes/ansible/roles/create_chain/tasks/main.yaml diff --git a/skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml b/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml similarity index 100% rename from skale-nodes/ansible/roles/deploy_mm/tasks/deploy.yaml rename to skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml diff --git a/skale-nodes/ansible/roles/validators/tasks/generate.yaml b/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml similarity index 91% rename from skale-nodes/ansible/roles/validators/tasks/generate.yaml rename to skale-nodes/ansible/roles/setup_validator/tasks/main.yaml index 5d92c91..1d040ab 100644 --- a/skale-nodes/ansible/roles/validators/tasks/generate.yaml +++ b/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml @@ -1,7 +1,6 @@ - name: Set hosts set_fact: hosts="{{ hosts|default([]) + [ item.value['ansible_host'] ] }}" with_dict: "{{ hostvars }}" - tags: save_base_keys - name: Execute setup_validator script script: setup_validator.py @@ -16,4 +15,3 @@ NODES_NUMBER: "{{ hosts|length }}" args: executable: python3 - tags: setup_validators diff --git a/skale-nodes/ansible/validator.yaml b/skale-nodes/ansible/validator.yaml index 4d630e0..617a007 100644 --- a/skale-nodes/ansible/validator.yaml +++ b/skale-nodes/ansible/validator.yaml @@ -1,8 +1,7 @@ -- name: Setup validators +- name: Setup validator hosts: 127.0.0.1 connection: local - tasks: - - name: Generate and configure validator - import_role: - name: validators - tasks_from: generate + roles: + - role: setup_validator + tags: + - setup_validator From c16f38dba5585cc3f7efa4d09460f0be22f1bdbb Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 3 Jul 2025 18:59:47 +0100 Subject: [PATCH 095/279] Add playbook and script for deleting chain --- skale-nodes/ansible/delete_chain.yaml | 7 +++ skale-nodes/ansible/files/delete_chain.py | 43 +++++++++++++++++++ .../roles/delete_chain/tasks/main.yaml | 11 +++++ 3 files changed, 61 insertions(+) create mode 100644 skale-nodes/ansible/delete_chain.yaml create mode 100644 skale-nodes/ansible/files/delete_chain.py create mode 100644 skale-nodes/ansible/roles/delete_chain/tasks/main.yaml diff --git a/skale-nodes/ansible/delete_chain.yaml b/skale-nodes/ansible/delete_chain.yaml new file mode 100644 index 0000000..4a08c0c --- /dev/null +++ b/skale-nodes/ansible/delete_chain.yaml @@ -0,0 +1,7 @@ +- name: Delete chain on SKALE or Mirage nodes + hosts: 127.0.0.1 + connection: local + roles: + - role: delete_chain + tags: + - delete_chain diff --git a/skale-nodes/ansible/files/delete_chain.py b/skale-nodes/ansible/files/delete_chain.py new file mode 100644 index 0000000..3fe1f1f --- /dev/null +++ b/skale-nodes/ansible/files/delete_chain.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# +# This file is part of SKALE.py +# +# Copyright (C) 2025-Present SKALE Labs +# +# SKALE.py is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# SKALE.py is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with SKALE.py. If not, see . + +import os +from eth_typing import HexStr +from skale import SkaleManager +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet + +CHAIN_NAME = os.environ['CHAIN_NAME'] +ENDPOINT = os.environ['ENDPOINT'] +ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] +MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] + + +def init_skale_manager( + endpoint: str, alias_or_address: str, eth_private_key: HexStr +) -> SkaleManager: + web3 = init_web3(endpoint) + wallet = Web3Wallet(eth_private_key, web3) + return SkaleManager(endpoint, alias_or_address, wallet) + + +if __name__ == '__main__': + skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) + skale.manager.delete_schain_by_root(CHAIN_NAME, wait_for=True) + print(f'Schain {CHAIN_NAME} is deleted!') diff --git a/skale-nodes/ansible/roles/delete_chain/tasks/main.yaml b/skale-nodes/ansible/roles/delete_chain/tasks/main.yaml new file mode 100644 index 0000000..a1ad047 --- /dev/null +++ b/skale-nodes/ansible/roles/delete_chain/tasks/main.yaml @@ -0,0 +1,11 @@ +- name: Execute delete_chain script + script: delete_chain.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" + CHAIN_NAME: "{{ chain_name }}" + args: + executable: python3 + tags: delete_chain From 2c8d533ee056e0837cb1e2b0b216d84182061627 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 4 Jul 2025 19:32:33 +0100 Subject: [PATCH 096/279] Add playbook and modify script for deleting chains and nodes on contract --- skale-nodes/ansible/cleanup_contracts.yaml | 6 +++ .../ansible/files/cleanup_contracts.py | 53 ++++++++++++++----- .../roles/cleanup_contracts/tasks/main.yaml | 22 ++++++-- 3 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 skale-nodes/ansible/cleanup_contracts.yaml diff --git a/skale-nodes/ansible/cleanup_contracts.yaml b/skale-nodes/ansible/cleanup_contracts.yaml new file mode 100644 index 0000000..1729d71 --- /dev/null +++ b/skale-nodes/ansible/cleanup_contracts.yaml @@ -0,0 +1,6 @@ +- name: Cleanup contracts from schains and nodes + hosts: 127.0.0.1 + connection: local + roles: + - role: cleanup_contracts + tags: cleanup_contracts \ No newline at end of file diff --git a/skale-nodes/ansible/files/cleanup_contracts.py b/skale-nodes/ansible/files/cleanup_contracts.py index 1b3ed2d..91a0bbc 100644 --- a/skale-nodes/ansible/files/cleanup_contracts.py +++ b/skale-nodes/ansible/files/cleanup_contracts.py @@ -1,46 +1,71 @@ import logging import os +import sys +from eth_typing import HexStr from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger +from skale.utils.contracts_provision.main import cleanup_nodes logger = logging.getLogger(__name__) init_default_logger() -BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') -web3 = init_web3(ENDPOINT) -wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) -skale = SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) +def init_skale_manager( + endpoint: str, alias_or_address: str, eth_private_key: HexStr +) -> SkaleManager: + web3 = init_web3(endpoint) + wallet = Web3Wallet(eth_private_key, web3) + return SkaleManager(endpoint, alias_or_address, wallet) -def remove_active_nodes(): - for node_id in skale.nodes.get_active_node_ids(): - skale.manager.node_exit(node_id, wait_for=True) + +def remove_active_nodes(skale): + logger.info('Removing all active nodes...') + cleanup_nodes(skale) + logger.info('Finished removing active nodes') def get_all_schains_names(skale): schains_ids = skale.schains_internal.get_all_schains_ids() - print(schains_ids) - names = [skale.schains.get(sid).get('name') for sid in schains_ids] + logger.info(f'Found chain IDs: {schains_ids}') + names = [skale.schains.get(sid).name for sid in schains_ids] return names -def remove_all_schains(): +def remove_all_schains(skale): + logger.info('Removing all chains...') schain_names = get_all_schains_names(skale) + if not schain_names: + logger.info('No chains found to remove') + return for name in schain_names: + logger.info(f'Deleting chain: {name}') skale.manager.delete_schain(name, wait_for=True) + logger.info('Finished removing chains') -def cleanup(): - remove_all_schains() - remove_active_nodes() +def cleanup(skale): + remove_all_schains(skale) + remove_active_nodes(skale) if __name__ == '__main__': - cleanup() + skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) + if len(sys.argv) > 1: + action = sys.argv[1] + if action == 'remove_schains': + remove_all_schains(skale) + elif action == 'remove_nodes': + remove_active_nodes(skale) + else: + logger.error(f'Unknown action: {action}. Please use "remove_schains" or "remove_nodes"') + sys.exit(1) + else: + logger.info('No action specified, running full cleanup') + cleanup(skale) diff --git a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml index 34bc437..a46bff5 100644 --- a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml @@ -1,5 +1,6 @@ -- name: Cleanup contracts - script: cleanup_contracts.py +- name: Cleanup contracts - remove all s-chains + script: + cmd: cleanup_contracts.py remove_schains run_once: yes environment: BASE_DIR: "files" @@ -9,5 +10,18 @@ args: executable: python3 tags: - - cleanup - - cleanup_contracts + - cleanup_schains + +- name: Cleanup contracts - remove all active nodes + ansible.builtin.script: + cmd: cleanup_contracts.py remove_nodes + run_once: yes + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" + args: + executable: python3 + tags: + - cleanup_nodes From 7a9fdf1215f5dd71bf78c16321c1d61d5fb8354d Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 4 Jul 2025 19:42:46 +0100 Subject: [PATCH 097/279] Improve naming --- skale-nodes/ansible/files/cleanup_contracts.py | 4 ++-- skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/skale-nodes/ansible/files/cleanup_contracts.py b/skale-nodes/ansible/files/cleanup_contracts.py index 91a0bbc..6df0cf9 100644 --- a/skale-nodes/ansible/files/cleanup_contracts.py +++ b/skale-nodes/ansible/files/cleanup_contracts.py @@ -59,12 +59,12 @@ def cleanup(skale): skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) if len(sys.argv) > 1: action = sys.argv[1] - if action == 'remove_schains': + if action == 'remove_chains': remove_all_schains(skale) elif action == 'remove_nodes': remove_active_nodes(skale) else: - logger.error(f'Unknown action: {action}. Please use "remove_schains" or "remove_nodes"') + logger.error(f'Unknown action: {action}. Please use "remove_chains" or "remove_nodes"') sys.exit(1) else: logger.info('No action specified, running full cleanup') diff --git a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml index a46bff5..e25cdfd 100644 --- a/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_contracts/tasks/main.yaml @@ -1,6 +1,6 @@ -- name: Cleanup contracts - remove all s-chains +- name: Cleanup contracts - remove all chains script: - cmd: cleanup_contracts.py remove_schains + cmd: cleanup_contracts.py remove_chains run_once: yes environment: BASE_DIR: "files" @@ -10,7 +10,7 @@ args: executable: python3 tags: - - cleanup_schains + - cleanup_chains - name: Cleanup contracts - remove all active nodes ansible.builtin.script: From cd1f4f75b8e64fc1f8cb18c7d69be717b2a56ee3 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 4 Jul 2025 19:44:34 +0100 Subject: [PATCH 098/279] Fix naming --- skale-nodes/ansible/cleanup_contracts.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/cleanup_contracts.yaml b/skale-nodes/ansible/cleanup_contracts.yaml index 1729d71..5c5de40 100644 --- a/skale-nodes/ansible/cleanup_contracts.yaml +++ b/skale-nodes/ansible/cleanup_contracts.yaml @@ -1,4 +1,4 @@ -- name: Cleanup contracts from schains and nodes +- name: Cleanup contracts from chains and nodes hosts: 127.0.0.1 connection: local roles: From ba2ccb138818c88251743d4e26645ccf84838236 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 4 Jul 2025 21:25:27 +0100 Subject: [PATCH 099/279] Replace `boot_endpoint` variable by `endpoint` --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index e9287f8..2d45985 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -36,7 +36,7 @@ env_options: | MIRAGE_CONTRACTS="{{ mirage_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" - BOOT_ENDPOINT="{{ boot_endpoint }}" + BOOT_ENDPOINT="{{ endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" SGX_SERVER_URL="{{ sgx_url }}" DISK_MOUNTPOINT="{{ block_device }}" From c0f890b9388a6bc64dea3dd2cb66d1d16ec92825 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 4 Jul 2025 22:07:48 +0100 Subject: [PATCH 100/279] Add Mirage network creation instructions --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3473c37..ab717c4 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,19 @@ -# SKALE Node Provisoning +# SKALE and Mirage Node Provisoning [![Discord](https://img.shields.io/discord/534485763354787851.svg)](https://discord.gg/vvUtWJB) -This repo will help deploy and register multiple SKALE nodes in the cloud automatically. +This repo will help deploy and register multiple SKALE and Mirage nodes in the cloud automatically. NOTE: This is for QA and testing purposes only. +- [Mirage Node Provisoning](#mirage-node-provisoning) + - [Mirage network creating](#mirage-network-creating) + - [Setup Mirage boot nodes](#1-prepare-inventory) + - [Prepare inventory](#2-setup-mirage-boot-nodes) + - [Create schain](#3-create-schain) + - [Deploy Mirage contracts](#4-deploy-mirage-contracts) + - [Migrate Mirage boot nodes](#5-migrate-mirage-boot-nodes) + - [SKALE Node Provisoning](#skale-node-provisoning) - [Host requirements](#host-requirements) - [Supported providers](#supported-providers) @@ -21,6 +29,54 @@ NOTE: This is for QA and testing purposes only. - [Run main script without IMA deployment](#run-main-script-without-ima-deployment) - [Run skaled monitor](#run-skaled-monitor) + +# Mirage Node Provisioning + +## Mirage network creating + +### 1. Prepare inventory +1) Set `node_type=mirage_boot` +2) Set `build_type=git` (to use Docker image versions specified in the corresponding branch of the +`skale-node` repository on GitHub), or `build_type=source` (to build from source). In the second +case, set the appropriate local paths to the required cloned repositories and set +`container_configs_dir` variable (usually it's `/root/skale-node`). +3) Don't forget to set all other necessary variables like `eth_private_key`, `endpoint`, etc. + +### 2. Setup Mirage boot nodes +```bash +ansible-playbook -i inventory main.yaml +``` +The following playbooks are processed here: _deploy_contracts.yaml, sgx_sim.yaml, setup.yaml, +validator.yaml, signature.yaml, link_addresses.yaml, register.yaml_ + +### 3. Create schain +1) Set the schain name (it must match the name specified in the `mirage_static_params.yaml` file for +the corresponding network in the relevant branch of the `skale-node` repository). For example, for +the **devnet**, the typical name is `mirage-devnet1`. +2) Set the `chain_type=small2` +3) Run the following playbook: +```bash +ansible-playbook -i inventory create_chain.yaml +``` +### 4. Deploy Mirage contracts +1) Set `mirage_tag` variable (Mirage manager version) +2) Set `mirage_endpoint` variable (endpoint of schain that was created before) +3) Run the following playbook: +```bash +ansible-playbook -i inventory deploy_mirage_manager.yaml +``` +### 5. Migrate Mirage boot nodes +1) Set `node_type=mirage` +2) Set `boot_endpoint` to be the same as `endpoint` (temporarily - this will be removed after the +next PR is merged) +3) Run the following playbook: +```bash +ansible-playbook -i inventory mirage_migrate.yaml +``` + + +# SKALE Node Provisioning + ## Host requirements - Terraform >= 0.12 @@ -177,3 +233,4 @@ bash utils/generate_hosts.sh ```bash ansible-playbook -i inventory run_monitor.yaml ``` + From a89db4190c3d02486a238589813e03601ba8878e Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 7 Jul 2025 13:29:14 +0100 Subject: [PATCH 101/279] Update license headers --- skale-nodes/ansible/files/create_chain.py | 6 +++--- skale-nodes/ansible/files/delete_chain.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py index 3288b04..cc7e3c1 100644 --- a/skale-nodes/ansible/files/create_chain.py +++ b/skale-nodes/ansible/files/create_chain.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- # -# This file is part of SKALE.py +# This file is part of node-provisoning # # Copyright (C) 2025-Present SKALE Labs # -# SKALE.py is free software: you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with SKALE.py. If not, see . +# along with this program. If not, see . import os from eth_typing import HexStr diff --git a/skale-nodes/ansible/files/delete_chain.py b/skale-nodes/ansible/files/delete_chain.py index 3fe1f1f..3efb89b 100644 --- a/skale-nodes/ansible/files/delete_chain.py +++ b/skale-nodes/ansible/files/delete_chain.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- # -# This file is part of SKALE.py +# This file is part of node-provisoning # # Copyright (C) 2025-Present SKALE Labs # -# SKALE.py is free software: you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with SKALE.py. If not, see . +# along with this program. If not, see . import os from eth_typing import HexStr From 17dd419b02c6965564dd419c24ce589a83d84e21 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 7 Jul 2025 13:31:38 +0100 Subject: [PATCH 102/279] Fix `boot_endpoint` usage --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 2d45985..e9287f8 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -36,7 +36,7 @@ env_options: | MIRAGE_CONTRACTS="{{ mirage_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" - BOOT_ENDPOINT="{{ endpoint }}" + BOOT_ENDPOINT="{{ boot_endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" SGX_SERVER_URL="{{ sgx_url }}" DISK_MOUNTPOINT="{{ block_device }}" diff --git a/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml index 47f8b60..2c12cab 100644 --- a/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml +++ b/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml @@ -5,7 +5,7 @@ MIRAGE_TAG: "{{ mirage_tag }}" ETH_PRIVATE_KEY: "{{ eth_private_key }}" MAINNET_ENDPOINT: "{{ endpoint }}" - ENDPOINT: "{{ mirage_endpoint }}" + ENDPOINT: "{{ boot_endpoint }}" CHAIN_NAME: "{{ chain_name }}" TARGET: "{{ manager_contracts }}" tags: deploy_mirage From 67c6ef61c5d373e4318ded1aa58bcffab72f4832 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 7 Jul 2025 15:23:13 +0100 Subject: [PATCH 103/279] Add cleanup tags --- .../ansible/roles/cleanup_artifacts/tasks/main.yaml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index b1544b3..1078c9c 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -10,33 +10,41 @@ regexp: "{{ item }}" path: "{{ playbook_dir }}/group_vars/all" loop: ["^manager_contracts", "^ima_contracts"] - tags: group_vars_cleanup + tags: + - group_vars_cleanup + - contract_data_cleanup + - name: Find all abis find: paths: ["{{ playbook_dir }}/../../helper-scripts/contracts_data"] patterns: ["*.json"] register: abi_files + tags: contract_data_cleanup - name: Cleanup contract abis file: state: absent path: "{{ item.path }}" loop: "{{ abi_files.files }}" + tags: contract_data_cleanup - name: Cleanup manager manifests file: state: absent path: "{{ playbook_dir }}/../../helper-scripts/contracts_data/openzeppelin" + tags: contract_data_cleanup - name: Cleanup ima manifests file: state: absent path: "{{ playbook_dir }}/../../helper-scripts/contracts_data/ima-openzeppelin" + tags: contract_data_cleanup - name: Remove validator-id and validator-key files file: path: "{{ item }}" state: absent with_fileglob: - - "{{ playbook_dir}}/files/validator-*.txt" \ No newline at end of file + - "{{ playbook_dir}}/files/validator-*.txt" + tags: validator_data_cleanup \ No newline at end of file From db4bdced261a2d94aed4367e376524cc5bf7f463 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 7 Jul 2025 16:42:14 +0100 Subject: [PATCH 104/279] Fix tm env --- helper-scripts | 2 +- .../ansible/roles/sync/templates/docker-compose-mirage.yml.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/helper-scripts b/helper-scripts index 364e1da..681a813 160000 --- a/helper-scripts +++ b/helper-scripts @@ -1 +1 @@ -Subproject commit 364e1dad7e28ecfcd6b63d925df0fefa515d06ff +Subproject commit 681a8132ac8c139d5e4a90196c24441fe8cade4d diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 index 278e4dc..0d8ffdf 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 @@ -25,8 +25,8 @@ services: tty: true environment: SGX_URL: ${SGX_SERVER_URL} + ENDPOINT: ${ENDPOINT} BOOT_ENDPOINT: ${BOOT_ENDPOINT} - SKALE_NETWORK_TYPE: "mirage" volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data From 6bc5dd4cac0b8ed7910452517a7e56f56a4d1446 Mon Sep 17 00:00:00 2001 From: badrogger Date: Mon, 7 Jul 2025 16:44:10 +0100 Subject: [PATCH 105/279] Fix config for MIRAGE --- skale-nodes/ansible/roles/config/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index e9287f8..dc8332a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -42,6 +42,7 @@ DISK_MOUNTPOINT="{{ block_device }}" ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" + ENFORCE_BTRFS='False' when: node_type == "mirage" tags: env From 97032178fa4a5ffb858a2e4548f7c395bbb51a16 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 7 Jul 2025 17:41:23 +0100 Subject: [PATCH 106/279] Add hotfix for zero node --- .gitmodules | 1 + helper-scripts | 2 +- .../ansible/files/fix_zero_node_mirage.py | 42 +++++++++++++++++++ skale-nodes/ansible/requirements.txt | 2 +- .../ansible/roles/register/tasks/main.yaml | 13 +++++- 5 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 skale-nodes/ansible/files/fix_zero_node_mirage.py diff --git a/.gitmodules b/.gitmodules index d7ef978..ec403f0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "helper-scripts"] path = helper-scripts url = git@github.com:skalenetwork/helper-scripts.git + branch = mirage-naming diff --git a/helper-scripts b/helper-scripts index 681a813..bb11e3d 160000 --- a/helper-scripts +++ b/helper-scripts @@ -1 +1 @@ -Subproject commit 681a8132ac8c139d5e4a90196c24441fe8cade4d +Subproject commit bb11e3d86699d467b3fe81629c9f90d1f953a6b3 diff --git a/skale-nodes/ansible/files/fix_zero_node_mirage.py b/skale-nodes/ansible/files/fix_zero_node_mirage.py new file mode 100644 index 0000000..c57cb10 --- /dev/null +++ b/skale-nodes/ansible/files/fix_zero_node_mirage.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# +# This file is part of node-provisioning +# +# Copyright (C) 2025-Present SKALE Labs +# +# node-provisioning is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# node-provisioning is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with node-provisioning. If not, see . + +import os +from eth_typing import HexStr +from skale import SkaleManager +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet +from skale.utils.contracts_provision.mirage import set_up_nodes + +ENDPOINT = os.environ['ENDPOINT'] +ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] +MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] + + +def init_skale_manager( + endpoint: str, alias_or_address: str, eth_private_key: HexStr +) -> SkaleManager: + web3 = init_web3(endpoint) + wallet = Web3Wallet(eth_private_key, web3) + return SkaleManager(endpoint, alias_or_address, wallet) + + +if __name__ == '__main__': + skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) + set_up_nodes(skale, 0) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index 68111af..05cf05f 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.0dev2 +skale.py==7.1dev4 boto3==1.17.34 diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 461fa56..bb12b77 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -1,3 +1,14 @@ +- name: Hotfix for zero node in Mirage + script: fix_zero_node_mirage.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" + args: + executable: python3 + when: node_type == "mirage_boot" + - name: Register node command: cmd: "{{ node_commands[node_type] }}" @@ -11,4 +22,4 @@ - name: Show register command output debug: - msg: "{{ register_cmd.stdout }}" \ No newline at end of file + msg: "{{ register_cmd.stdout }}" From b6e379e525bc12654fc3d9a714ee55cc11206ad4 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 7 Jul 2025 18:08:38 +0100 Subject: [PATCH 107/279] Update readme --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ab717c4..ea21574 100644 --- a/README.md +++ b/README.md @@ -53,23 +53,21 @@ validator.yaml, signature.yaml, link_addresses.yaml, register.yaml_ 1) Set the schain name (it must match the name specified in the `mirage_static_params.yaml` file for the corresponding network in the relevant branch of the `skale-node` repository). For example, for the **devnet**, the typical name is `mirage-devnet1`. -2) Set the `chain_type=small2` +2) Set the desired `chain_type` (for example, LARGE4 - for 4-nodes chain ) 3) Run the following playbook: ```bash ansible-playbook -i inventory create_chain.yaml ``` ### 4. Deploy Mirage contracts 1) Set `mirage_tag` variable (Mirage manager version) -2) Set `mirage_endpoint` variable (endpoint of schain that was created before) +2) Set `boot_endpoint` variable (endpoint of schain that was created before) 3) Run the following playbook: ```bash ansible-playbook -i inventory deploy_mirage_manager.yaml ``` ### 5. Migrate Mirage boot nodes 1) Set `node_type=mirage` -2) Set `boot_endpoint` to be the same as `endpoint` (temporarily - this will be removed after the -next PR is merged) -3) Run the following playbook: +2) Run the following playbook: ```bash ansible-playbook -i inventory mirage_migrate.yaml ``` From 89758a11ec240c689b40c6eacb3ba7b52c711c58 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 7 Jul 2025 20:35:50 +0100 Subject: [PATCH 108/279] Add setup Mirage nodes instructions --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ea21574..6540316 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ NOTE: This is for QA and testing purposes only. - [Create schain](#3-create-schain) - [Deploy Mirage contracts](#4-deploy-mirage-contracts) - [Migrate Mirage boot nodes](#5-migrate-mirage-boot-nodes) + - [Setup Mirage nodes](#6-setup-mirage-nodes) - [SKALE Node Provisoning](#skale-node-provisoning) - [Host requirements](#host-requirements) @@ -71,7 +72,12 @@ ansible-playbook -i inventory deploy_mirage_manager.yaml ```bash ansible-playbook -i inventory mirage_migrate.yaml ``` - +### 6. Setup Mirage nodes +1) Set `node_type=mirage` +2) Run the following playbook: +```bash +ansible-playbook -i inventory main_mirage.yaml +``` # SKALE Node Provisioning From 206a33a6f6fef91f51bc3d882d206ae6dbdb8ca4 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 7 Jul 2025 21:18:53 +0100 Subject: [PATCH 109/279] Add playbook for regular Mirage node setup --- skale-nodes/ansible/main_mirage.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 skale-nodes/ansible/main_mirage.yaml diff --git a/skale-nodes/ansible/main_mirage.yaml b/skale-nodes/ansible/main_mirage.yaml new file mode 100644 index 0000000..7920585 --- /dev/null +++ b/skale-nodes/ansible/main_mirage.yaml @@ -0,0 +1,5 @@ +#- import_playbook: base.yaml +- import_playbook: sgx_sim.yaml +- import_playbook: setup.yaml +- import_playbook: register.yaml +#- import_playbook: ssl.yaml From c00693e810104b40f2268e84549829b9a75afe60 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 10 Jul 2025 19:00:45 +0100 Subject: [PATCH 110/279] Fix zero node issue --- .../ansible/files/fix_zero_node_mirage.py | 38 ++++++++++++++++++- skale-nodes/ansible/main.yaml | 12 +++--- .../roles/deploy_contracts/tasks/manager.yaml | 13 +++++++ .../ansible/roles/register/tasks/main.yaml | 11 ------ 4 files changed, 55 insertions(+), 19 deletions(-) diff --git a/skale-nodes/ansible/files/fix_zero_node_mirage.py b/skale-nodes/ansible/files/fix_zero_node_mirage.py index c57cb10..cc295af 100644 --- a/skale-nodes/ansible/files/fix_zero_node_mirage.py +++ b/skale-nodes/ansible/files/fix_zero_node_mirage.py @@ -22,8 +22,16 @@ from skale import SkaleManager from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet -from skale.utils.contracts_provision.mirage import set_up_nodes +from skale.wallets.web3_wallet import generate_wallet +from skale.utils.contracts_provision.mirage import ( + link_node_address, register_node, add_test_permissions, init_skale_from_wallet +) +from skale.utils.contracts_provision.main import ( + set_test_msr, create_validator, enable_validator, validator_exist +) +from skale.utils.account_tools import send_eth +ETH_AMOUNT = 0.2 ENDPOINT = os.environ['ENDPOINT'] ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] @@ -37,6 +45,32 @@ def init_skale_manager( return SkaleManager(endpoint, alias_or_address, wallet) +def setup_validator(skale: SkaleManager): + """Create and activate a validator""" + set_test_msr(skale, msr=0) + print('Address', skale.wallet.address) + if not validator_exist(skale): + create_validator(skale) + else: + print('Skipping default validator creation') + validator_id = skale.validator_service.validator_id_by_address(skale.wallet.address) + if not skale.validator_service.get(validator_id)['trusted']: + enable_validator(skale, validator_id) + + +def fix_zero_node(skale): + wallet = generate_wallet(skale.web3) + print(f'Node Address: {wallet.address}') + send_eth(skale.web3, skale.wallet, wallet.address, ETH_AMOUNT) + add_test_permissions(skale) + setup_validator(skale) + link_node_address(skale, wallet) + node_skale = init_skale_from_wallet(skale, wallet) + register_node(node_skale) + skale.nodes.init_exit(0) + skale.manager.node_exit(0) + + if __name__ == '__main__': skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) - set_up_nodes(skale, 0) + fix_zero_node(skale) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index c90613c..f7b4b03 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,10 +1,10 @@ #- import_playbook: base.yaml #- import_playbook: geth.yaml - import_playbook: deploy_contracts.yaml -- import_playbook: sgx_sim.yaml -- import_playbook: setup.yaml -- import_playbook: validator.yaml -- import_playbook: signature.yaml -- import_playbook: link_addresses.yaml -- import_playbook: register.yaml +#- import_playbook: sgx_sim.yaml +#- import_playbook: setup.yaml +#- import_playbook: validator.yaml +#- import_playbook: signature.yaml +#- import_playbook: link_addresses.yaml +#- import_playbook: register.yaml #- import_playbook: ssl.yaml diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index c58c9de..b3470df 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -41,3 +41,16 @@ line: 'manager_contracts: "{{ manager_contracts }}"' state: present tags: upload_sm + +- name: Hotfix for zero node in Mirage + run_once: yes + script: fix_zero_node_mirage.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + MANAGER_CONTRACTS: "{{ manager_contracts }}" + args: + executable: python3 + when: node_type == "mirage_boot" + tags: fix_zero_node \ No newline at end of file diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index bb12b77..3371be6 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -1,14 +1,3 @@ -- name: Hotfix for zero node in Mirage - script: fix_zero_node_mirage.py - environment: - BASE_DIR: "files" - ETH_PRIVATE_KEY: "{{ eth_private_key }}" - ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" - args: - executable: python3 - when: node_type == "mirage_boot" - - name: Register node command: cmd: "{{ node_commands[node_type] }}" From 0264c2f3a045c25797c51cbf77743b66c6394c6b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 14 Jul 2025 11:45:32 +0100 Subject: [PATCH 111/279] Uncomment main playbooks --- skale-nodes/ansible/main.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index f7b4b03..c90613c 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,10 +1,10 @@ #- import_playbook: base.yaml #- import_playbook: geth.yaml - import_playbook: deploy_contracts.yaml -#- import_playbook: sgx_sim.yaml -#- import_playbook: setup.yaml -#- import_playbook: validator.yaml -#- import_playbook: signature.yaml -#- import_playbook: link_addresses.yaml -#- import_playbook: register.yaml +- import_playbook: sgx_sim.yaml +- import_playbook: setup.yaml +- import_playbook: validator.yaml +- import_playbook: signature.yaml +- import_playbook: link_addresses.yaml +- import_playbook: register.yaml #- import_playbook: ssl.yaml From 258f759668d9403aac1adbe25d9242de3c466333 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 14 Jul 2025 12:16:04 +0100 Subject: [PATCH 112/279] Fix Mirage node registration command --- skale-nodes/ansible/roles/register/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 3371be6..299da57 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -4,7 +4,7 @@ vars: node_commands: mirage_boot: "mirage boot register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" - mirage: "mirage node register --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" + mirage: "mirage node register --ip {{ hostvars[inventory_hostname].ansible_host }}" skale: "skale node register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" when: node_type in node_commands register: register_cmd From ae8d6d4dd30c4b74e5831aa4f02de10d78ff490c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 14 Jul 2025 20:12:00 +0100 Subject: [PATCH 113/279] Transfer funds before Mirage node registration --- skale-nodes/ansible/files/transfer_funds.py | 10 +--- skale-nodes/ansible/main_mirage.yaml | 1 + .../link_addresses/tasks/transfer_funds.yaml | 22 ++++++-- skale-nodes/ansible/transfer_funds.yaml | 50 +++++++++++++++++++ 4 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 skale-nodes/ansible/transfer_funds.yaml diff --git a/skale-nodes/ansible/files/transfer_funds.py b/skale-nodes/ansible/files/transfer_funds.py index a0826d2..406741d 100644 --- a/skale-nodes/ansible/files/transfer_funds.py +++ b/skale-nodes/ansible/files/transfer_funds.py @@ -20,7 +20,6 @@ import os import logging -from skale import SkaleManager from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger @@ -39,16 +38,11 @@ init_default_logger() -def init_web3_skale(): +def main(): web3 = init_web3(ENDPOINT) wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) - return SkaleManager(ENDPOINT, MANAGER_CONTRACTS, wallet) - - -def main(): - skale = init_web3_skale() address = to_checksum_address(ADDRESS) - send_eth(skale.web3, skale.wallet, address, AMOUNT) + send_eth(web3, wallet, address, AMOUNT) if __name__ == '__main__': diff --git a/skale-nodes/ansible/main_mirage.yaml b/skale-nodes/ansible/main_mirage.yaml index 7920585..1a261c6 100644 --- a/skale-nodes/ansible/main_mirage.yaml +++ b/skale-nodes/ansible/main_mirage.yaml @@ -1,5 +1,6 @@ #- import_playbook: base.yaml - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml +- import_playbook: transfer_funds.yaml - import_playbook: register.yaml #- import_playbook: ssl.yaml diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index e023f26..5e8edf2 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -1,14 +1,26 @@ - name: Transfer funds to node wallets run_once: yes - script: transfer_funds.py + tags: node_funds + ansible.builtin.script: transfer_funds.py environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" - ADDRESS: "{{ lookup('file', '{{ item }}').split()[0].strip() }}" - ENDPOINT: "{{ endpoint }}" - MANAGER_CONTRACTS: "{{ manager_contracts }}" + ADDRESS: "{{ lookup('file', item).split()[0].strip() }}" + ENDPOINT: "{{ transfer_map[node_type].endpoint }}" + MANAGER_CONTRACTS: "{{ transfer_map[node_type].contracts }}" BASE_DIR: "files" AMOUNT: 0.2 args: executable: python3 with_fileglob: "node-info/*" - tags: node_funds + vars: + transfer_map: + mirage: + endpoint: "{{ boot_endpoint }}" + contracts: "{{ mirage_contracts }}" + mirage_boot: + endpoint: "{{ endpoint }}" + contracts: "{{ manager_contracts }}" + skale: + endpoint: "{{ endpoint }}" + contracts: "{{ manager_contracts }}" + when: node_type in transfer_map \ No newline at end of file diff --git a/skale-nodes/ansible/transfer_funds.yaml b/skale-nodes/ansible/transfer_funds.yaml new file mode 100644 index 0000000..c2a3311 --- /dev/null +++ b/skale-nodes/ansible/transfer_funds.yaml @@ -0,0 +1,50 @@ +#- name: Prepare node information +# hosts: nodes +# tasks: +# - name: Save folder name for nodes addresses info +# set_fact: +# node_info_dir: "files/node-info" +# delegate_to: "127.0.0.1" +# +# - name: Block for getting wallet info and saving it +# block: +# +# - name: Get wallet info +# command: +# cmd: "{{ node_commands[node_type] }}" +# vars: +# node_commands: +# mirage_boot: "sudo mirage wallet info -f json" +# mirage: "sudo mirage wallet info -f json" +# skale: "sudo skale wallet info -f json" +# when: node_type in node_commands +# register: wallet_info_cmd +# changed_when: false +# +# - name: Show wallet info command output +# debug: +# msg: "{{ wallet_info_cmd.stdout }}" +# +# - name: Get wallet data from json +# set_fact: +# wallet_data: "{{ wallet_info_cmd.stdout | from_json }}" +# +# - name: Show wallet info command output +# debug: +# msg: "{{ wallet_data.address }}" +# +# - name: Save address to a file on the control node +# copy: +# content: "{{ wallet_data.address }}" +# dest: "{{ node_info_dir }}/{{ inventory_hostname }}" +# delegate_to: "127.0.0.1" + +- name: Transfer funds to node address + hosts: 127.0.0.1 + connection: local + tasks: + - name: Transfer funds + import_role: + name: link_addresses + tasks_from: transfer_funds + From c07c5aea6067371bd097e8ff2c6b4d67b2435aa2 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 15 Jul 2025 15:10:49 +0100 Subject: [PATCH 114/279] Mirage to Fair renaming --- .gitmodules | 1 - README.md | 48 +++++++++---------- helper-scripts | 2 +- skale-nodes/ansible/create_chain.yaml | 2 +- skale-nodes/ansible/delete_chain.yaml | 2 +- skale-nodes/ansible/deploy_fair_manager.yaml | 14 ++++++ .../ansible/deploy_mirage_manager.yaml | 14 ------ ...{mirage_migrate.yaml => fair_migrate.yaml} | 12 ++--- ...o_node_mirage.py => fix_zero_node_fair.py} | 2 +- .../{main_mirage.yaml => main_fair.yaml} | 0 skale-nodes/ansible/requirements.txt | 2 +- .../roles/cleanup_nodes/tasks/containers.yaml | 14 +++--- .../ansible/roles/config/tasks/main.yaml | 10 ++-- .../roles/deploy_contracts/tasks/manager.yaml | 6 +-- .../ansible/roles/deploy_fair/tasks/main.yaml | 43 +++++++++++++++++ .../roles/deploy_mirage/tasks/main.yaml | 43 ----------------- .../tasks/main.yaml | 4 +- .../ansible/roles/init/tasks/main.yaml | 4 +- .../link_addresses/tasks/transfer_funds.yaml | 6 +-- .../ansible/roles/register/tasks/main.yaml | 4 +- .../ansible/roles/signature/tasks/main.yaml | 4 +- .../ansible/roles/skale_cli/tasks/main.yaml | 28 +++++------ .../ansible/roles/sync/tasks/main.yaml | 8 ++-- ...rage.yml.j2 => docker-compose-fair.yml.j2} | 32 ++++++------- .../roles/update/tasks/skale_update.yaml | 6 +-- skale-nodes/ansible/transfer_funds.yaml | 4 +- 26 files changed, 157 insertions(+), 158 deletions(-) create mode 100644 skale-nodes/ansible/deploy_fair_manager.yaml delete mode 100644 skale-nodes/ansible/deploy_mirage_manager.yaml rename skale-nodes/ansible/{mirage_migrate.yaml => fair_migrate.yaml} (55%) rename skale-nodes/ansible/files/{fix_zero_node_mirage.py => fix_zero_node_fair.py} (98%) rename skale-nodes/ansible/{main_mirage.yaml => main_fair.yaml} (100%) create mode 100644 skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml delete mode 100644 skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml rename skale-nodes/ansible/roles/{mirage_migrate => fair_migrate}/tasks/main.yaml (57%) rename skale-nodes/ansible/roles/sync/templates/{docker-compose-mirage.yml.j2 => docker-compose-fair.yml.j2} (93%) diff --git a/.gitmodules b/.gitmodules index ec403f0..d7ef978 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,3 @@ [submodule "helper-scripts"] path = helper-scripts url = git@github.com:skalenetwork/helper-scripts.git - branch = mirage-naming diff --git a/README.md b/README.md index 6540316..9d46216 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@ -# SKALE and Mirage Node Provisoning +# SKALE and Fair Node Provisoning [![Discord](https://img.shields.io/discord/534485763354787851.svg)](https://discord.gg/vvUtWJB) -This repo will help deploy and register multiple SKALE and Mirage nodes in the cloud automatically. +This repo will help deploy and register multiple SKALE and Fair nodes in the cloud automatically. NOTE: This is for QA and testing purposes only. -- [Mirage Node Provisoning](#mirage-node-provisoning) - - [Mirage network creating](#mirage-network-creating) - - [Setup Mirage boot nodes](#1-prepare-inventory) - - [Prepare inventory](#2-setup-mirage-boot-nodes) +- [Fair Node Provisoning](#fair-node-provisoning) + - [Fair network creating](#fair-network-creating) + - [Setup Fair boot nodes](#1-prepare-inventory) + - [Prepare inventory](#2-setup-fair-boot-nodes) - [Create schain](#3-create-schain) - - [Deploy Mirage contracts](#4-deploy-mirage-contracts) - - [Migrate Mirage boot nodes](#5-migrate-mirage-boot-nodes) - - [Setup Mirage nodes](#6-setup-mirage-nodes) + - [Deploy Fair contracts](#4-deploy-fair-contracts) + - [Migrate Fair boot nodes](#5-migrate-fair-boot-nodes) + - [Setup Fair nodes](#6-setup-fair-nodes) - [SKALE Node Provisoning](#skale-node-provisoning) - [Host requirements](#host-requirements) @@ -31,19 +31,19 @@ NOTE: This is for QA and testing purposes only. - [Run skaled monitor](#run-skaled-monitor) -# Mirage Node Provisioning +# Fair Node Provisioning -## Mirage network creating +## Fair network creating ### 1. Prepare inventory -1) Set `node_type=mirage_boot` +1) Set `node_type=fair_boot` 2) Set `build_type=git` (to use Docker image versions specified in the corresponding branch of the `skale-node` repository on GitHub), or `build_type=source` (to build from source). In the second case, set the appropriate local paths to the required cloned repositories and set `container_configs_dir` variable (usually it's `/root/skale-node`). 3) Don't forget to set all other necessary variables like `eth_private_key`, `endpoint`, etc. -### 2. Setup Mirage boot nodes +### 2. Setup Fair boot nodes ```bash ansible-playbook -i inventory main.yaml ``` @@ -51,32 +51,32 @@ The following playbooks are processed here: _deploy_contracts.yaml, sgx_sim.yaml validator.yaml, signature.yaml, link_addresses.yaml, register.yaml_ ### 3. Create schain -1) Set the schain name (it must match the name specified in the `mirage_static_params.yaml` file for +1) Set the schain name (it must match the name specified in the `fair_static_params.yaml` file for the corresponding network in the relevant branch of the `skale-node` repository). For example, for -the **devnet**, the typical name is `mirage-devnet1`. +the **devnet**, the typical name is `fair-devnet1`. 2) Set the desired `chain_type` (for example, LARGE4 - for 4-nodes chain ) 3) Run the following playbook: ```bash ansible-playbook -i inventory create_chain.yaml ``` -### 4. Deploy Mirage contracts -1) Set `mirage_tag` variable (Mirage manager version) +### 4. Deploy Fair contracts +1) Set `fair_tag` variable (Fair manager version) 2) Set `boot_endpoint` variable (endpoint of schain that was created before) 3) Run the following playbook: ```bash -ansible-playbook -i inventory deploy_mirage_manager.yaml +ansible-playbook -i inventory deploy_fair_manager.yaml ``` -### 5. Migrate Mirage boot nodes -1) Set `node_type=mirage` +### 5. Migrate Fair boot nodes +1) Set `node_type=fair` 2) Run the following playbook: ```bash -ansible-playbook -i inventory mirage_migrate.yaml +ansible-playbook -i inventory fair_migrate.yaml ``` -### 6. Setup Mirage nodes -1) Set `node_type=mirage` +### 6. Setup Fair nodes +1) Set `node_type=fair` 2) Run the following playbook: ```bash -ansible-playbook -i inventory main_mirage.yaml +ansible-playbook -i inventory main_fair.yaml ``` # SKALE Node Provisioning diff --git a/helper-scripts b/helper-scripts index bb11e3d..808c768 160000 --- a/helper-scripts +++ b/helper-scripts @@ -1 +1 @@ -Subproject commit bb11e3d86699d467b3fe81629c9f90d1f953a6b3 +Subproject commit 808c768feebfa99d9148e076b5b6b24b1b340734 diff --git a/skale-nodes/ansible/create_chain.yaml b/skale-nodes/ansible/create_chain.yaml index 00d765f..f78b1a4 100644 --- a/skale-nodes/ansible/create_chain.yaml +++ b/skale-nodes/ansible/create_chain.yaml @@ -1,4 +1,4 @@ -- name: Create chain on SKALE or Mirage nodes +- name: Create chain on SKALE or Fair nodes hosts: 127.0.0.1 connection: local roles: diff --git a/skale-nodes/ansible/delete_chain.yaml b/skale-nodes/ansible/delete_chain.yaml index 4a08c0c..aa19807 100644 --- a/skale-nodes/ansible/delete_chain.yaml +++ b/skale-nodes/ansible/delete_chain.yaml @@ -1,4 +1,4 @@ -- name: Delete chain on SKALE or Mirage nodes +- name: Delete chain on SKALE or Fair nodes hosts: 127.0.0.1 connection: local roles: diff --git a/skale-nodes/ansible/deploy_fair_manager.yaml b/skale-nodes/ansible/deploy_fair_manager.yaml new file mode 100644 index 0000000..50702de --- /dev/null +++ b/skale-nodes/ansible/deploy_fair_manager.yaml @@ -0,0 +1,14 @@ +- name: Deploy Fair manager contracts + hosts: 127.0.0.1 + connection: local + pre_tasks: + - name: Fail if node_type is not 'fair_boot' + fail: + msg: "Stopping playbook. This play requires node_type to be 'fair_boot', but it is '{{ node_type }}'." + when: node_type != "fair_boot" + roles: + - role: deploy_fair + tags: + - deploy_fair + + diff --git a/skale-nodes/ansible/deploy_mirage_manager.yaml b/skale-nodes/ansible/deploy_mirage_manager.yaml deleted file mode 100644 index a075056..0000000 --- a/skale-nodes/ansible/deploy_mirage_manager.yaml +++ /dev/null @@ -1,14 +0,0 @@ -- name: Deploy Mirage manager contracts - hosts: 127.0.0.1 - connection: local - pre_tasks: - - name: Fail if node_type is not 'mirage_boot' - fail: - msg: "Stopping playbook. This play requires node_type to be 'mirage_boot', but it is '{{ node_type }}'." - when: node_type != "mirage_boot" - roles: - - role: deploy_mirage - tags: - - deploy_mirage - - diff --git a/skale-nodes/ansible/mirage_migrate.yaml b/skale-nodes/ansible/fair_migrate.yaml similarity index 55% rename from skale-nodes/ansible/mirage_migrate.yaml rename to skale-nodes/ansible/fair_migrate.yaml index 8762458..d36fa6a 100644 --- a/skale-nodes/ansible/mirage_migrate.yaml +++ b/skale-nodes/ansible/fair_migrate.yaml @@ -1,13 +1,13 @@ -- name: Migrate Mirage boot node to regular Mirage node +- name: Migrate Fair boot node to regular Fair node hosts: nodes become: true pre_tasks: - - name: Fail if node_type is not 'mirage' + - name: Fail if node_type is not 'fair' run_once: true delegate_to: localhost fail: - msg: "Stopping playbook. This play requires node_type to be 'mirage', but it is '{{ node_type }}'." - when: node_type != "mirage" + msg: "Stopping playbook. This play requires node_type to be 'fair', but it is '{{ node_type }}'." + when: node_type != "fair" roles: - role: sync when: build_type == "source" @@ -16,5 +16,5 @@ - role: config tags: config - - role: mirage_migrate - tags: mirage_migrate + - role: fair_migrate + tags: fair_migrate diff --git a/skale-nodes/ansible/files/fix_zero_node_mirage.py b/skale-nodes/ansible/files/fix_zero_node_fair.py similarity index 98% rename from skale-nodes/ansible/files/fix_zero_node_mirage.py rename to skale-nodes/ansible/files/fix_zero_node_fair.py index cc295af..c2003ac 100644 --- a/skale-nodes/ansible/files/fix_zero_node_mirage.py +++ b/skale-nodes/ansible/files/fix_zero_node_fair.py @@ -23,7 +23,7 @@ from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet from skale.wallets.web3_wallet import generate_wallet -from skale.utils.contracts_provision.mirage import ( +from skale.utils.contracts_provision.fair import ( link_node_address, register_node, add_test_permissions, init_skale_from_wallet ) from skale.utils.contracts_provision.main import ( diff --git a/skale-nodes/ansible/main_mirage.yaml b/skale-nodes/ansible/main_fair.yaml similarity index 100% rename from skale-nodes/ansible/main_mirage.yaml rename to skale-nodes/ansible/main_fair.yaml diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index 05cf05f..c7b658b 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.1dev4 +skale.py==7.2.dev0 boto3==1.17.34 diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 5e5c5e6..8a8b207 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -18,7 +18,7 @@ with_items: "{{ monitoring_container_ids | default([]) }}" - name: Get all container ids - command: 'docker ps -a -q --filter="name=skale_" --filter="name=mirage_"' + command: 'docker ps -a -q --filter="name=skale_" --filter="name=fair_"' become: true register: containers_output tags: containers_ids @@ -38,25 +38,25 @@ tags: admin when: node_type == "skale" -- name: Destroy mirage boot admin container +- name: Destroy fair boot admin container become: true docker_container: - name: "mirage_boot_admin" + name: "fair_boot_admin" state: absent force_kill: yes keep_volumes: no tags: admin - when: node_type == "mirage_boot" + when: node_type == "fair_boot" -- name: Destroy mirage admin container +- name: Destroy fair admin container become: true docker_container: - name: "mirage_admin" + name: "fair_admin" state: absent force_kill: yes keep_volumes: no tags: admin - when: node_type == "mirage" + when: node_type == "fair" - name: Destroy all containers become: true diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index dc8332a..6f60b4a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -15,7 +15,7 @@ sgx_url: "https://{{ hostvars['sgx0'].ansible_host }}:1026" when: sgx_url is not defined or sgx_url == '' -- name: Set env options for Mirage boot node +- name: Set env options for Fair boot node set_fact: env_options: | MANAGER_CONTRACTS="{{ manager_contracts }}" @@ -28,13 +28,13 @@ ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" ENFORCE_BTRFS='False' - when: node_type == "mirage_boot" + when: node_type == "fair_boot" tags: env -- name: Set env options for regular Mirage node +- name: Set env options for regular Fair node set_fact: env_options: | - MIRAGE_CONTRACTS="{{ mirage_contracts }}" + FAIR_CONTRACTS="{{ fair_contracts }}" CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" BOOT_ENDPOINT="{{ boot_endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" @@ -43,7 +43,7 @@ ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" ENFORCE_BTRFS='False' - when: node_type == "mirage" + when: node_type == "fair" tags: env - name: Set env options for regular SKALE node diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index b3470df..9739e26 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -42,9 +42,9 @@ state: present tags: upload_sm -- name: Hotfix for zero node in Mirage +- name: Hotfix for zero node in Fair run_once: yes - script: fix_zero_node_mirage.py + script: fix_zero_node_fair.py environment: BASE_DIR: "files" ETH_PRIVATE_KEY: "{{ eth_private_key }}" @@ -52,5 +52,5 @@ MANAGER_CONTRACTS: "{{ manager_contracts }}" args: executable: python3 - when: node_type == "mirage_boot" + when: node_type == "fair_boot" tags: fix_zero_node \ No newline at end of file diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml new file mode 100644 index 0000000..fa70077 --- /dev/null +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml @@ -0,0 +1,43 @@ +- name: Deploy Fair manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/fair-deploy.log) + shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_fair.sh 2>&1 | tee {{ playbook_dir }}/logs/fair-deploy.log + run_once: yes + environment: + FAIR_TAG: "{{ fair_tag }}" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + MAINNET_ENDPOINT: "{{ endpoint }}" + ENDPOINT: "{{ boot_endpoint }}" + CHAIN_NAME: "{{ chain_name }}" + TARGET: "{{ manager_contracts }}" + tags: deploy_fair + +- name: Copy Fair ABI + copy: + src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/fair.json" + dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/fairManagerComponents.json" + tags: upload_fair + +- name: Ensure group vars all + file: + state: touch + path: "{{ playbook_dir }}/group_vars/all" + tags: upload_fair + +- name: Get Fair Contract Address + shell: "jq -r '.Committee' {{ playbook_dir }}/../../helper-scripts/contracts_data/fair.json" + register: mm_address_output + changed_when: false + tags: upload_fair + +- name: Save Fair Contract Address to variable + set_fact: + fair_contracts: "{{ mm_address_output.stdout }}" + tags: upload_fair + +- name: Save Fair Contract Address to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + insertafter: EOF + regexp: "^fair_contracts:" + line: 'fair_contracts: "{{ fair_contracts }}"' + state: present + tags: upload_fair diff --git a/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml deleted file mode 100644 index 2c12cab..0000000 --- a/skale-nodes/ansible/roles/deploy_mirage/tasks/main.yaml +++ /dev/null @@ -1,43 +0,0 @@ -- name: Deploy Mirage manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/mirage-deploy.log) - shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_mirage.sh 2>&1 | tee {{ playbook_dir }}/logs/mirage-deploy.log - run_once: yes - environment: - MIRAGE_TAG: "{{ mirage_tag }}" - ETH_PRIVATE_KEY: "{{ eth_private_key }}" - MAINNET_ENDPOINT: "{{ endpoint }}" - ENDPOINT: "{{ boot_endpoint }}" - CHAIN_NAME: "{{ chain_name }}" - TARGET: "{{ manager_contracts }}" - tags: deploy_mirage - -- name: Copy Mirage ABI - copy: - src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/mirage.json" - dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/mirageManagerComponents.json" - tags: upload_mirage - -- name: Ensure group vars all - file: - state: touch - path: "{{ playbook_dir }}/group_vars/all" - tags: upload_mirage - -- name: Get Mirage Contract Address - shell: "jq -r '.Committee' {{ playbook_dir }}/../../helper-scripts/contracts_data/mirage.json" - register: mm_address_output - changed_when: false - tags: upload_mirage - -- name: Save Mirage Contract Address to variable - set_fact: - mirage_contracts: "{{ mm_address_output.stdout }}" - tags: upload_mirage - -- name: Save Mirage Contract Address to group vars - lineinfile: - path: "{{ playbook_dir }}/group_vars/all" - insertafter: EOF - regexp: "^mirage_contracts:" - line: 'mirage_contracts: "{{ mirage_contracts }}"' - state: present - tags: upload_mirage diff --git a/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml similarity index 57% rename from skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml rename to skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 4dde90e..d925571 100644 --- a/skale-nodes/ansible/roles/mirage_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -1,6 +1,6 @@ -- name: Mirage migrate +- name: Fair migrate command: - cmd: "mirage node migrate {{ base_path }}/init-env --yes" + cmd: "fair node migrate {{ base_path }}/init-env --yes" register: migrate_cmd - name: Show migrate command output diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index f020562..cad9d5a 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -23,8 +23,8 @@ cmd: "{{ command_prefixes[node_type] }} init {{ base_path }}/init-env {{ sync_flags }}" vars: command_prefixes: - mirage_boot: "mirage boot" - mirage: "mirage node" + fair_boot: "fair boot" + fair: "fair node" skale: "{{ 'skale sync-node' if (sync_node | default(false) | bool) else 'skale node' }}" when: node_type in command_prefixes register: init_cmd diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 5e8edf2..4d1a13e 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -14,10 +14,10 @@ with_fileglob: "node-info/*" vars: transfer_map: - mirage: + fair: endpoint: "{{ boot_endpoint }}" - contracts: "{{ mirage_contracts }}" - mirage_boot: + contracts: "{{ fair_contracts }}" + fair_boot: endpoint: "{{ endpoint }}" contracts: "{{ manager_contracts }}" skale: diff --git a/skale-nodes/ansible/roles/register/tasks/main.yaml b/skale-nodes/ansible/roles/register/tasks/main.yaml index 299da57..71744a2 100644 --- a/skale-nodes/ansible/roles/register/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register/tasks/main.yaml @@ -3,8 +3,8 @@ cmd: "{{ node_commands[node_type] }}" vars: node_commands: - mirage_boot: "mirage boot register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" - mirage: "mirage node register --ip {{ hostvars[inventory_hostname].ansible_host }}" + fair_boot: "fair boot register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" + fair: "fair node register --ip {{ hostvars[inventory_hostname].ansible_host }}" skale: "skale node register -n {{ inventory_hostname }} --ip {{ hostvars[inventory_hostname].ansible_host }} -p 10000 -d {{ inventory_hostname }}.{{ base_domain_name }}" when: node_type in node_commands register: register_cmd diff --git a/skale-nodes/ansible/roles/signature/tasks/main.yaml b/skale-nodes/ansible/roles/signature/tasks/main.yaml index 0586689..89b0e4a 100644 --- a/skale-nodes/ansible/roles/signature/tasks/main.yaml +++ b/skale-nodes/ansible/roles/signature/tasks/main.yaml @@ -22,7 +22,7 @@ cmd: "{{ node_commands[node_type] }}" vars: node_commands: - mirage_boot: "sudo mirage wallet info -f json" + fair_boot: "sudo fair wallet info -f json" skale: "sudo skale wallet info -f json" when: node_type in node_commands register: wallet_info_cmd @@ -41,7 +41,7 @@ cmd: "{{ node_commands[node_type] }}" vars: node_commands: - mirage_boot: "sudo mirage boot signature {{ validator_id }}" + fair_boot: "sudo fair boot signature {{ validator_id }}" skale: "sudo skale node signature {{ validator_id }}" when: node_type in node_commands register: get_signature_cmd diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 858d6e0..bb4aab7 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -9,14 +9,14 @@ force: yes mode: "0755" vars: - base_node_type: "{{ 'mirage' if node_type == 'mirage_boot' else node_type }}" + base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" download_map: skale: url: "{{ skale_cli_url }}" dest: "/usr/local/bin/skale" - mirage: - url: "{{ mirage_cli_url }}" - dest: "/usr/local/bin/mirage" + fair: + url: "{{ fair_cli_url }}" + dest: "/usr/local/bin/fair" # --- Build binary from source --- @@ -50,12 +50,12 @@ set_fact: _build_target: "{{ build_target_map[lookup_key] | default('') }}" vars: - base_node_type: "{{ 'mirage' if node_type == 'mirage_boot' else node_type }}" + base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" build_target_map: - mirage_normal: "mirage" - # mirage_sync: "mirage_sync" + fair_normal: "fair" + # fair_sync: "fair_sync" skale_normal: "normal" skale_sync: "sync" @@ -86,16 +86,16 @@ set_fact: executable_paths: "{{ path_map[lookup_key] | default({}) }}" vars: - base_node_type: "{{ 'mirage' if node_type == 'mirage_boot' else node_type }}" + base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" path_map: - mirage_normal: - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage" - dest: "/usr/local/bin/mirage" - mirage_sync: - src: "" # TODO: replace it with correct path "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-mirage-sync" - dest: "" # TODO: replace it with correct path "/usr/local/bin/mirage" + fair_normal: + src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-fair" + dest: "/usr/local/bin/fair" + fair_sync: + src: "" # TODO: replace it with correct path "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-fair-sync" + dest: "" # TODO: replace it with correct path "/usr/local/bin/fair" skale_normal: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" dest: "/usr/local/bin/skale" diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index 2903b14..bbca5b4 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -55,12 +55,12 @@ when: - node_type == "skale" -- name: Replace mirage-node docker-compose-mirage file +- name: Replace fair-node docker-compose-fair file template: - src: docker-compose-mirage.yml.j2 - dest: "{{ base_path }}/skale-node/docker-compose-mirage.yml" + src: docker-compose-fair.yml.j2 + dest: "{{ base_path }}/skale-node/docker-compose-fair.yml" when: - - node_type in ['mirage_boot', 'mirage'] + - node_type in ['fair_boot', 'fair'] - name: Replace skale-node docker-compose-sync file template: diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 similarity index 93% rename from skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 rename to skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 0d8ffdf..dffbcf4 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-mirage.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -31,9 +31,9 @@ services: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data - mirage-boot: + fair-boot: <<: *skale_base - container_name: mirage_boot_admin + container_name: fair_boot_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -62,7 +62,7 @@ services: INFLUX_URL: ${INFLUX_URL} MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} - SKALE_NETWORK_TYPE: "mirage" + SKALE_NETWORK_TYPE: "fair" command: "python3 admin.py" volumes: @@ -77,9 +77,9 @@ services: retries: 2 start_period: 30s - mirage-admin: + fair-admin: <<: *skale_base - container_name: mirage_admin + container_name: fair_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -106,10 +106,10 @@ services: ALLOWED_TS_DIFF: 300 TELEGRAF: ${TELEGRAF} INFLUX_URL: ${INFLUX_URL} - MIRAGE_CONTRACTS: ${MIRAGE_CONTRACTS} - SKALE_NETWORK_TYPE: "mirage" + FAIR_CONTRACTS: ${FAIR_CONTRACTS} + SKALE_NETWORK_TYPE: "fair" - command: "python3 mirage.py" + command: "python3 fair.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol @@ -122,9 +122,9 @@ services: retries: 2 start_period: 30s - mirage-boot-api: + fair-boot-api: <<: *skale_base - container_name: mirage_boot_api + container_name: fair_boot_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -153,7 +153,7 @@ services: ALLOWED_TS_DIFF: 300 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} - SKALE_NETWORK_TYPE: "mirage" + SKALE_NETWORK_TYPE: "fair" command: "gunicorn app:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale @@ -161,9 +161,9 @@ services: - ${SKALE_DIR}/node_data:/skale_node_data - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains - mirage-api: + fair-api: <<: *skale_base - container_name: mirage_api + container_name: fair_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -190,9 +190,9 @@ services: DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} ENV_TYPE: ${ENV_TYPE} ALLOWED_TS_DIFF: 300 - MIRAGE_CONTRACTS: ${MIRAGE_CONTRACTS} - SKALE_NETWORK_TYPE: "mirage" - command: "gunicorn mirage_api:app -c gunicorn.conf.py" + FAIR_CONTRACTS: ${FAIR_CONTRACTS} + SKALE_NETWORK_TYPE: "fair" + command: "gunicorn fair_api:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index ef7c300..6ec16b8 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -8,9 +8,9 @@ sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" lookup_key: "{{ node_type }}_{{ sync_suffix }}" command_map: - mirage_boot_normal: "mirage boot update {{ base_path }}/init-env --yes" - mirage_normal: "mirage node update {{ base_path }}/init-env --yes" -# mirage_sync: "mirage sync-node update {{ base_path }}/init-env --yes" + fair_boot_normal: "fair boot update {{ base_path }}/init-env --yes" + fair_normal: "fair node update {{ base_path }}/init-env --yes" +# fair_sync: "fair sync-node update {{ base_path }}/init-env --yes" skale_normal: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" skale_sync: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" diff --git a/skale-nodes/ansible/transfer_funds.yaml b/skale-nodes/ansible/transfer_funds.yaml index c2a3311..c471a69 100644 --- a/skale-nodes/ansible/transfer_funds.yaml +++ b/skale-nodes/ansible/transfer_funds.yaml @@ -14,8 +14,8 @@ # cmd: "{{ node_commands[node_type] }}" # vars: # node_commands: -# mirage_boot: "sudo mirage wallet info -f json" -# mirage: "sudo mirage wallet info -f json" +# fair_boot: "sudo fair wallet info -f json" +# fair: "sudo fair wallet info -f json" # skale: "sudo skale wallet info -f json" # when: node_type in node_commands # register: wallet_info_cmd From a9770c4b40f3a300a524e65b0f7a18e751de448a Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 15 Jul 2025 16:28:52 +0100 Subject: [PATCH 115/279] Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d46216..d3d2f93 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SKALE and Fair Node Provisoning +# SKALE and Fair Node Provisioning [![Discord](https://img.shields.io/discord/534485763354787851.svg)](https://discord.gg/vvUtWJB) From 53abd13762dcce7abc6a7aaf19bb9092c1828f0f Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 15 Jul 2025 18:21:37 +0100 Subject: [PATCH 116/279] Update skale.py, fix script --- skale-nodes/ansible/requirements.txt | 2 +- skale-nodes/ansible/roles/skale_cli/tasks/main.yaml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index c7b658b..3d0ce73 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.2.dev0 +skale.py==7.3.dev0 boto3==1.17.34 diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index bb4aab7..7d609f1 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -18,7 +18,6 @@ url: "{{ fair_cli_url }}" dest: "/usr/local/bin/fair" - # --- Build binary from source --- - name: Makedir dist for CLI build @@ -66,7 +65,7 @@ - name: Set full build command set_fact: - build_cmd: "scripts/build.sh test test {{ _build_target }}" + build_cmd: "bash scripts/build.sh test test {{ _build_target }}" - name: Build binary docker_container: From fd68253a4ff0efd874603a888eef2f5a500f20eb Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 16 Jul 2025 20:24:15 +0100 Subject: [PATCH 117/279] Uncomment tasks for funds transfer preparation --- skale-nodes/ansible/transfer_funds.yaml | 80 ++++++++++++------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/skale-nodes/ansible/transfer_funds.yaml b/skale-nodes/ansible/transfer_funds.yaml index c471a69..7f9c67e 100644 --- a/skale-nodes/ansible/transfer_funds.yaml +++ b/skale-nodes/ansible/transfer_funds.yaml @@ -1,43 +1,43 @@ -#- name: Prepare node information -# hosts: nodes -# tasks: -# - name: Save folder name for nodes addresses info -# set_fact: -# node_info_dir: "files/node-info" -# delegate_to: "127.0.0.1" -# -# - name: Block for getting wallet info and saving it -# block: -# -# - name: Get wallet info -# command: -# cmd: "{{ node_commands[node_type] }}" -# vars: -# node_commands: -# fair_boot: "sudo fair wallet info -f json" -# fair: "sudo fair wallet info -f json" -# skale: "sudo skale wallet info -f json" -# when: node_type in node_commands -# register: wallet_info_cmd -# changed_when: false -# -# - name: Show wallet info command output -# debug: -# msg: "{{ wallet_info_cmd.stdout }}" -# -# - name: Get wallet data from json -# set_fact: -# wallet_data: "{{ wallet_info_cmd.stdout | from_json }}" -# -# - name: Show wallet info command output -# debug: -# msg: "{{ wallet_data.address }}" -# -# - name: Save address to a file on the control node -# copy: -# content: "{{ wallet_data.address }}" -# dest: "{{ node_info_dir }}/{{ inventory_hostname }}" -# delegate_to: "127.0.0.1" +- name: Prepare node information + hosts: nodes + tasks: + - name: Save folder name for nodes addresses info + set_fact: + node_info_dir: "files/node-info" + delegate_to: "127.0.0.1" + + - name: Block for getting wallet info and saving it + block: + + - name: Get wallet info + command: + cmd: "{{ node_commands[node_type] }}" + vars: + node_commands: + fair_boot: "sudo fair wallet info -f json" + fair: "sudo fair wallet info -f json" + skale: "sudo skale wallet info -f json" + when: node_type in node_commands + register: wallet_info_cmd + changed_when: false + + - name: Show wallet info command output + debug: + msg: "{{ wallet_info_cmd.stdout }}" + + - name: Get wallet data from json + set_fact: + wallet_data: "{{ wallet_info_cmd.stdout | from_json }}" + + - name: Show wallet info command output + debug: + msg: "{{ wallet_data.address }}" + + - name: Save address to a file on the control node + copy: + content: "{{ wallet_data.address }}" + dest: "{{ node_info_dir }}/{{ inventory_hostname }}" + delegate_to: "127.0.0.1" - name: Transfer funds to node address hosts: 127.0.0.1 From f3cbf601811c310c7aec0c93cef89de6374b0f09 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 16 Jul 2025 20:24:35 +0100 Subject: [PATCH 118/279] Set default value for `fair_contracts` variable --- .../ansible/roles/link_addresses/tasks/transfer_funds.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 4d1a13e..019ef0c 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -16,7 +16,7 @@ transfer_map: fair: endpoint: "{{ boot_endpoint }}" - contracts: "{{ fair_contracts }}" + contracts: "{{ fair_contracts | default('') }}" fair_boot: endpoint: "{{ endpoint }}" contracts: "{{ manager_contracts }}" From b7b0012e6aa94852a5df58e7bd059f6a87a872bd Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 16 Jul 2025 20:24:56 +0100 Subject: [PATCH 119/279] Add `set_rng` script --- skale-nodes/ansible/files/set_rng.py | 25 +++++++++++++++++++ .../roles/fair_migrate/tasks/main.yaml | 13 +++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 skale-nodes/ansible/files/set_rng.py diff --git a/skale-nodes/ansible/files/set_rng.py b/skale-nodes/ansible/files/set_rng.py new file mode 100644 index 0000000..f8600d3 --- /dev/null +++ b/skale-nodes/ansible/files/set_rng.py @@ -0,0 +1,25 @@ +import os +from eth_typing import HexStr +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet +from skale import FairManager + + +ENDPOINT = os.getenv('ENDPOINT') +FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') +ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') + + +def init_fair() -> FairManager: + web3 = init_web3(ENDPOINT) + wallet = Web3Wallet(HexStr(ETH_PRIVATE_KEY), web3) + if not FAIR_CONTRACTS: + raise ValueError('FAIR_CONTRACTS is not set') + return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet) + + +if __name__ == '__main__': + fair = init_fair() + rng_address = '0x0000000000000000000000000000000000000018' + skale_rng = fair.committee.skale_rng() + fair.committee.set_rng(rng_address) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index d925571..6d8f123 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -5,4 +5,15 @@ - name: Show migrate command output debug: - msg: "{{ migrate_cmd.stdout }}" \ No newline at end of file + msg: "{{ migrate_cmd.stdout }}" + +- name: Execute set_rng script + script: set_rng.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ boot_endpoint }}" + FAIR_CONTRACTS: "{{ fair_contracts }}" + args: + executable: python3 + tags: set_nrg \ No newline at end of file From e9420b9206933e0debb719f871d6e9ba575b49ec Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 17 Jul 2025 19:45:17 +0100 Subject: [PATCH 120/279] Uncomment transfer funds --- skale-nodes/ansible/transfer_funds.yaml | 80 ++++++++++++------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/skale-nodes/ansible/transfer_funds.yaml b/skale-nodes/ansible/transfer_funds.yaml index c471a69..3d2eccf 100644 --- a/skale-nodes/ansible/transfer_funds.yaml +++ b/skale-nodes/ansible/transfer_funds.yaml @@ -1,43 +1,42 @@ -#- name: Prepare node information -# hosts: nodes -# tasks: -# - name: Save folder name for nodes addresses info -# set_fact: -# node_info_dir: "files/node-info" -# delegate_to: "127.0.0.1" -# -# - name: Block for getting wallet info and saving it -# block: -# -# - name: Get wallet info -# command: -# cmd: "{{ node_commands[node_type] }}" -# vars: -# node_commands: -# fair_boot: "sudo fair wallet info -f json" -# fair: "sudo fair wallet info -f json" -# skale: "sudo skale wallet info -f json" -# when: node_type in node_commands -# register: wallet_info_cmd -# changed_when: false -# -# - name: Show wallet info command output -# debug: -# msg: "{{ wallet_info_cmd.stdout }}" -# -# - name: Get wallet data from json -# set_fact: -# wallet_data: "{{ wallet_info_cmd.stdout | from_json }}" -# -# - name: Show wallet info command output -# debug: -# msg: "{{ wallet_data.address }}" -# -# - name: Save address to a file on the control node -# copy: -# content: "{{ wallet_data.address }}" -# dest: "{{ node_info_dir }}/{{ inventory_hostname }}" -# delegate_to: "127.0.0.1" +- name: Prepare node information + hosts: nodes + tasks: + - name: Save folder name for nodes addresses info + set_fact: + node_info_dir: "files/node-info" + delegate_to: "127.0.0.1" + + - name: Block for getting wallet info and saving it + block: + - name: Get wallet info + command: + cmd: "{{ node_commands[node_type] }}" + vars: + node_commands: + fair_boot: "sudo fair wallet info -f json" + fair: "sudo fair wallet info -f json" + skale: "sudo skale wallet info -f json" + when: node_type in node_commands + register: wallet_info_cmd + changed_when: false + + - name: Show wallet info command output + debug: + msg: "{{ wallet_info_cmd.stdout }}" + + - name: Get wallet data from json + set_fact: + wallet_data: "{{ wallet_info_cmd.stdout | from_json }}" + + - name: Show wallet info command output + debug: + msg: "{{ wallet_data.address }}" + + - name: Save address to a file on the control node + copy: + content: "{{ wallet_data.address }}" + dest: "{{ node_info_dir }}/{{ inventory_hostname }}" + delegate_to: "127.0.0.1" - name: Transfer funds to node address hosts: 127.0.0.1 @@ -47,4 +46,3 @@ import_role: name: link_addresses tasks_from: transfer_funds - From b4b39992e8686f1323e40282b5da25b0e3a01b35 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 24 Jul 2025 13:29:34 +0100 Subject: [PATCH 121/279] Execute `set_rng` script on localhost --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 6d8f123..c3aee7f 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -16,4 +16,6 @@ FAIR_CONTRACTS: "{{ fair_contracts }}" args: executable: python3 + delegate_to: localhost + run_once: true tags: set_nrg \ No newline at end of file From f4a97d68ba1131ab18d62bbb3ccc1993d88df153 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 24 Jul 2025 15:03:52 +0100 Subject: [PATCH 122/279] Fix typo --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index c3aee7f..34493a0 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -18,4 +18,4 @@ executable: python3 delegate_to: localhost run_once: true - tags: set_nrg \ No newline at end of file + tags: set_rng \ No newline at end of file From 78d36f004ee67027baac88b37dbca6fe187206c5 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 24 Jul 2025 15:41:17 +0100 Subject: [PATCH 123/279] Move `rng_address` variable to constants --- skale-nodes/ansible/files/set_rng.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/files/set_rng.py b/skale-nodes/ansible/files/set_rng.py index f8600d3..80e371f 100644 --- a/skale-nodes/ansible/files/set_rng.py +++ b/skale-nodes/ansible/files/set_rng.py @@ -8,18 +8,16 @@ ENDPOINT = os.getenv('ENDPOINT') FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') +RNG_ADDRESS = '0x0000000000000000000000000000000000000018' def init_fair() -> FairManager: web3 = init_web3(ENDPOINT) wallet = Web3Wallet(HexStr(ETH_PRIVATE_KEY), web3) - if not FAIR_CONTRACTS: - raise ValueError('FAIR_CONTRACTS is not set') return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet) if __name__ == '__main__': fair = init_fair() - rng_address = '0x0000000000000000000000000000000000000018' skale_rng = fair.committee.skale_rng() - fair.committee.set_rng(rng_address) + fair.committee.set_rng(RNG_ADDRESS) From 6eec03d84633287bc41ab307707f2b509a68b37b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 24 Jul 2025 15:41:52 +0100 Subject: [PATCH 124/279] Bump skale.py to 7.3.dev1 --- skale-nodes/ansible/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index 3d0ce73..b4906bb 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.3.dev0 +skale.py==7.3.dev1 boto3==1.17.34 From 3d7f85e5533c9a6827c640ed1e7ec22e04c6f8be Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 24 Jul 2025 19:26:09 +0100 Subject: [PATCH 125/279] Run `set_rng` script without sudo --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 34493a0..5521cc6 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -18,4 +18,5 @@ executable: python3 delegate_to: localhost run_once: true + become: false tags: set_rng \ No newline at end of file From 11f0f9f888db52eb1552b0bdb57628eab32eb451 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 24 Jul 2025 19:29:52 +0100 Subject: [PATCH 126/279] Add license info --- skale-nodes/ansible/files/set_rng.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/skale-nodes/ansible/files/set_rng.py b/skale-nodes/ansible/files/set_rng.py index 80e371f..cbd955a 100644 --- a/skale-nodes/ansible/files/set_rng.py +++ b/skale-nodes/ansible/files/set_rng.py @@ -1,3 +1,22 @@ +# -*- coding: utf-8 -*- +# +# This file is part of node-provisioning +# +# Copyright (C) 2025-Present SKALE Labs +# +# node-provisioning is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# node-provisioning is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with node-provisioning. If not, see . + import os from eth_typing import HexStr from skale.utils.web3_utils import init_web3 From 6406f7209213cb7b56c0a926276131b81cdb1183 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Sun, 27 Jul 2025 15:48:57 +0100 Subject: [PATCH 127/279] Add script for generating valid random IP address --- skale-nodes/ansible/files/generate_ip.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 skale-nodes/ansible/files/generate_ip.py diff --git a/skale-nodes/ansible/files/generate_ip.py b/skale-nodes/ansible/files/generate_ip.py new file mode 100644 index 0000000..d00f54e --- /dev/null +++ b/skale-nodes/ansible/files/generate_ip.py @@ -0,0 +1,11 @@ +import random +import ipaddress + +def generate_random_ip() -> ipaddress.IPv4Address: + random_int = random.randint(0, 2**32 - 1) + ip_object = ipaddress.IPv4Address(random_int) + return ip_object + +if __name__ == '__main__': + random_ip_object = generate_random_ip() + print(random_ip_object) From 8a4eaeb012a22d588e5a304df9d704dbe89d7e4f Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Sun, 27 Jul 2025 16:06:41 +0100 Subject: [PATCH 128/279] Add a task for changing Fair node IP address --- .../roles/cleanup_nodes/tasks/change_ip.yaml | 21 +++++++++++++++++++ .../roles/cleanup_nodes/tasks/main.yaml | 4 ++++ 2 files changed, 25 insertions(+) create mode 100644 skale-nodes/ansible/roles/cleanup_nodes/tasks/change_ip.yaml diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/change_ip.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/change_ip.yaml new file mode 100644 index 0000000..7d0178d --- /dev/null +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/change_ip.yaml @@ -0,0 +1,21 @@ +- name: Generate random IP address + script: generate_ip.py + environment: + BASE_DIR: "files" + args: + executable: python3 + register: random_ip + changed_when: false + +- name: Show generated IP + debug: + msg: "{{ random_ip }}" + +- name: Change node IP + command: + cmd: "fair node change-ip {{ random_ip.stdout | trim }}" + register: change_ip_cmd + +- name: Show change-ip command output + debug: + msg: "{{ change_ip_cmd.stdout }}" diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml index 5277d9e..3641ed4 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml @@ -1,3 +1,7 @@ +- name: Change Fair node IP + import_tasks: change_ip.yaml + tags: change_ip + - name: Run container cleanup import_tasks: containers.yaml tags: container_cleanup From 1d9e18876067cda2240cb709f6f059810241f545 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 28 Jul 2025 12:05:07 +0100 Subject: [PATCH 129/279] Run `change_ip` task for Fair nodes only --- skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml index 3641ed4..9fdcb61 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml @@ -1,6 +1,7 @@ - name: Change Fair node IP import_tasks: change_ip.yaml tags: change_ip + when: node_type == "fair" - name: Run container cleanup import_tasks: containers.yaml From 13fcbb36d77c8a520f07c0677c3aaf0a1d1f0667 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 28 Jul 2025 12:40:33 +0100 Subject: [PATCH 130/279] Delete empty lines --- skale-nodes/ansible/transfer_funds.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/skale-nodes/ansible/transfer_funds.yaml b/skale-nodes/ansible/transfer_funds.yaml index 7f9c67e..3d2eccf 100644 --- a/skale-nodes/ansible/transfer_funds.yaml +++ b/skale-nodes/ansible/transfer_funds.yaml @@ -8,7 +8,6 @@ - name: Block for getting wallet info and saving it block: - - name: Get wallet info command: cmd: "{{ node_commands[node_type] }}" @@ -47,4 +46,3 @@ import_role: name: link_addresses tasks_from: transfer_funds - From 7d359c14b2ae09d82fa385fd4b5e7f97d4951baf Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 28 Jul 2025 16:22:45 +0100 Subject: [PATCH 131/279] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d3d2f93..05c7d5e 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ NOTE: This is for QA and testing purposes only. # Fair Node Provisioning -## Fair network creating +## Fair network creation ### 1. Prepare inventory 1) Set `node_type=fair_boot` From 030295201893749016289126bb9e7e5c31b43eee Mon Sep 17 00:00:00 2001 From: badrogger Date: Tue, 29 Jul 2025 13:46:17 +0100 Subject: [PATCH 132/279] Fix docker-compose-fair.yml template --- .../ansible/roles/sync/templates/docker-compose-fair.yml.j2 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index dffbcf4..bee18ee 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -69,6 +69,7 @@ services: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains healthcheck: test: ["CMD", "python3", "healthchecks/admin.py"] @@ -114,6 +115,7 @@ services: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains healthcheck: test: ["CMD", "python3", "healthchecks/admin.py"] @@ -159,6 +161,7 @@ services: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains fair-api: @@ -197,6 +200,7 @@ services: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains redis: @@ -285,4 +289,4 @@ services: - ${SKALE_DIR}/node_data/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro - /var/lib/docker:/var/lib/docker:ro - /var/log/docker-lvmpy:/var/log/docker-lvmpy:ro - - /var/run/skale:/var/run/skale \ No newline at end of file + - /var/run/skale:/var/run/skale From fe646604761f76ddf21aef8896b520796a1d8b43 Mon Sep 17 00:00:00 2001 From: badrogger Date: Tue, 29 Jul 2025 17:10:27 +0100 Subject: [PATCH 133/279] Fix cleanup --- skale-nodes/ansible/cleanup_sgx.yaml | 2 +- skale-nodes/ansible/files/create_chain.py | 7 +++++-- skale-nodes/ansible/requirements.txt | 2 +- .../roles/cleanup_nodes/tasks/cli_cleanup.yaml | 12 ++++++++++++ .../roles/cleanup_nodes/tasks/containers.yaml | 1 + .../ansible/roles/cleanup_nodes/tasks/main.yaml | 4 ++++ .../roles/link_addresses/tasks/transfer_funds.yaml | 2 +- 7 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml diff --git a/skale-nodes/ansible/cleanup_sgx.yaml b/skale-nodes/ansible/cleanup_sgx.yaml index 8a9d295..ae5278e 100644 --- a/skale-nodes/ansible/cleanup_sgx.yaml +++ b/skale-nodes/ansible/cleanup_sgx.yaml @@ -1,5 +1,5 @@ - name: Cleanup sgx - hosts: sgx + hosts: sgx,nodes become: true roles: - name: Remove all sgx skale software from the machines diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py index cc7e3c1..ebfdc20 100644 --- a/skale-nodes/ansible/files/create_chain.py +++ b/skale-nodes/ansible/files/create_chain.py @@ -43,8 +43,8 @@ class SchainType(Enum): LARGE4 = [128, 4] LARGE = [128, 16] TEST0_4 = [0, 4] - TEST4_2 = [32, 2] TEST4_4 = [32, 4] + TEST4_2 = [32, 2] TEST4 = [32, 16] EMPTY = [0, 0] @@ -75,8 +75,10 @@ def get_schain_type_id(skale, type_parameters): def prepare_and_create_chain(skale, chain_type=CHAIN_TYPE) -> None: + chain_type = 'TEST4_4' add_test_permissions(skale) type_params = get_chain_type_params(chain_type) + print(type_params) type_id = get_schain_type_id(skale, type_params) if type_id is None: print(f'sChain type {chain_type} ' @@ -100,5 +102,6 @@ def init_skale_manager( if __name__ == '__main__': - skale = init_skale_manager(ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) + skale = init_skale_manager( + ENDPOINT, MANAGER_CONTRACTS, HexStr(ETH_PRIVATE_KEY)) prepare_and_create_chain(skale) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index b4906bb..9e3e138 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.3.dev1 +skale.py==7.3.dev3 boto3==1.17.34 diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml new file mode 100644 index 0000000..7088160 --- /dev/null +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml @@ -0,0 +1,12 @@ +- name: Build and execute cleanup command + command: + cmd: "{{ command_prefixes[node_type] }} node cleanup --yes" + vars: + command_prefixes: + fair: "fair node" + when: node_type in command_prefixes + register: cleanup_cmd + +- name: Show cleanup command output + debug: + msg: "{{ cleanup_cmd.stdout }}" diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 8a8b207..0086abb 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -70,6 +70,7 @@ - name: Prune docker command: cmd: "docker system prune -af" + when: prune_docker is defined and prune_docker - name: Umount shared-space command: diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml index 5277d9e..7f36fff 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml @@ -1,3 +1,7 @@ +- name: Cli cleanup command + import_tasks: cli_cleanup.yaml + tags: cli_cleanup + - name: Run container cleanup import_tasks: containers.yaml tags: container_cleanup diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 019ef0c..ab7a42d 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -23,4 +23,4 @@ skale: endpoint: "{{ endpoint }}" contracts: "{{ manager_contracts }}" - when: node_type in transfer_map \ No newline at end of file + when: node_type in transfer_map From 2542e87b2c7f34c814dcfe7624da5a1c6798b5d7 Mon Sep 17 00:00:00 2001 From: badrogger Date: Tue, 29 Jul 2025 17:14:49 +0100 Subject: [PATCH 134/279] Fix create_chain.py --- skale-nodes/ansible/files/create_chain.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py index ebfdc20..6f2da71 100644 --- a/skale-nodes/ansible/files/create_chain.py +++ b/skale-nodes/ansible/files/create_chain.py @@ -75,10 +75,8 @@ def get_schain_type_id(skale, type_parameters): def prepare_and_create_chain(skale, chain_type=CHAIN_TYPE) -> None: - chain_type = 'TEST4_4' add_test_permissions(skale) type_params = get_chain_type_params(chain_type) - print(type_params) type_id = get_schain_type_id(skale, type_params) if type_id is None: print(f'sChain type {chain_type} ' From 6a696917126c7867a76965b58ce06151957f847d Mon Sep 17 00:00:00 2001 From: Dmytro Date: Wed, 30 Jul 2025 13:31:09 +0100 Subject: [PATCH 135/279] Add explorer url for fair manager deployment --- skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml index fa70077..bf8ce8c 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml @@ -8,6 +8,7 @@ ENDPOINT: "{{ boot_endpoint }}" CHAIN_NAME: "{{ chain_name }}" TARGET: "{{ manager_contracts }}" + EXPLORER_URL: "{{ explorer_url | default('') }}" tags: deploy_fair - name: Copy Fair ABI From 1ad5576c1f93c9087dc31694606db8af22a7bf1f Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 31 Jul 2025 16:01:38 +0100 Subject: [PATCH 136/279] Rename container configs stream to node version --- skale-nodes/ansible/roles/config/tasks/main.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 6f60b4a..be9fac7 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -20,7 +20,7 @@ env_options: | MANAGER_CONTRACTS="{{ manager_contracts }}" IMA_CONTRACTS="{{ ima_contracts }}" - CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + NODE_VERSION="{{ node_version }}" ENDPOINT="{{ endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DISK_MOUNTPOINT="{{ block_device }}" @@ -35,7 +35,7 @@ set_fact: env_options: | FAIR_CONTRACTS="{{ fair_contracts }}" - CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + NODE_VERSION="{{ node_version }}" BOOT_ENDPOINT="{{ boot_endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" SGX_SERVER_URL="{{ sgx_url }}" @@ -50,7 +50,7 @@ set_fact: env_options: | ENDPOINT="{{ endpoint }}" - CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + NODE_VERSION="{{ node_version }}" FILEBEAT_HOST="{{ filebeat_host }}" MANAGER_CONTRACTS="{{ manager_contracts }}" IMA_CONTRACTS="{{ ima_contracts }}" @@ -73,7 +73,7 @@ - name: Set env options for SKALE sync node set_fact: env_options: | - CONTAINER_CONFIGS_STREAM="{{ container_configs_stream }}" + NODE_VERSION="{{ node_version }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" ENDPOINT={{ endpoint }} ENFORCE_BTRFS='True' From cf45b398256d974103241134d315658d5a9ae4bf Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 5 Aug 2025 13:06:57 +0100 Subject: [PATCH 137/279] Update helper-scripts --- helper-scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper-scripts b/helper-scripts index 808c768..4c8ff3a 160000 --- a/helper-scripts +++ b/helper-scripts @@ -1 +1 @@ -Subproject commit 808c768feebfa99d9148e076b5b6b24b1b340734 +Subproject commit 4c8ff3a82011794b1ba0d3028cf16ee0d73c2bf1 From d56c6c51c6d12837381f874fb51a2995231b2be8 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Sat, 9 Aug 2025 15:16:51 +0100 Subject: [PATCH 138/279] Add skale network type to watchdog --- .../ansible/roles/sync/templates/docker-compose-fair.yml.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index bee18ee..149e84c 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -231,6 +231,7 @@ services: FLASK_APP_PORT: 3010 FLASK_APP_HOST: "127.0.0.1" FLASK_DEBUG_MODE: "False" + SKALE_NETWORK_TYPE: "fair" nginx: <<: *skale_base From 3fe081cee5af13a76d1667476d5b2b4d13fd1935 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 11 Aug 2025 21:07:25 +0100 Subject: [PATCH 139/279] Add passive node support --- skale-nodes/ansible/main_fair_passive.yaml | 1 + .../ansible/roles/config/tasks/main.yaml | 4 +- .../ansible/roles/init/tasks/main.yaml | 10 +- .../ansible/roles/skale_cli/tasks/main.yaml | 8 +- .../ansible/roles/sync/tasks/main.yaml | 16 ++- .../docker-compose-fair-passive.yml.j2 | 120 ++++++++++++++++++ ...c.yml.j2 => docker-compose-passive.yml.j2} | 4 +- .../roles/update/tasks/skale_update.yaml | 6 +- 8 files changed, 149 insertions(+), 20 deletions(-) create mode 100644 skale-nodes/ansible/main_fair_passive.yaml create mode 100644 skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 rename skale-nodes/ansible/roles/sync/templates/{docker-compose-sync.yml.j2 => docker-compose-passive.yml.j2} (96%) diff --git a/skale-nodes/ansible/main_fair_passive.yaml b/skale-nodes/ansible/main_fair_passive.yaml new file mode 100644 index 0000000..295a950 --- /dev/null +++ b/skale-nodes/ansible/main_fair_passive.yaml @@ -0,0 +1 @@ +- import_playbook: setup.yaml diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index be9fac7..c4c5fa1 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -67,7 +67,7 @@ TELEGRAF="{{ telegraf }}" when: - node_type == "skale" - - (sync_node is not defined or not sync_node) + - (passive_node is not defined or not passive_node) tags: env - name: Set env options for SKALE sync node @@ -87,7 +87,7 @@ TELEGRAF="{{ telegraf }}" when: - node_type == "skale" - - (sync_node is defined and sync_node) + - (passive_node is defined and passive_node) tags: env - name: Show env diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index cad9d5a..47088aa 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,13 +1,13 @@ -- name: Set sync_flags based on sync_node and catchup status +- name: Set sync_flags based on passive_node and catchup status set_fact: - sync_flags: "{{ '--catchup' if (sync_node | default(false) | bool) and (catchup | default(false) | bool) else '' }}" + sync_flags: "{{ '--catchup' if (passive_node | default(false) | bool) and (catchup | default(false) | bool) else '' }}" - name: Add --archive if needed (SKALE sync node) set_fact: sync_flags: "{{ sync_flags }} --archive" when: - node_type == "skale" - - sync_node is defined and sync_node + - passive_node is defined and passive_node - archive is defined and archive - name: Add --historic-state if needed (SKALE sync node) @@ -15,7 +15,7 @@ sync_flags: "{{ sync_flags }} --historic-state" when: - node_type == "skale" - - sync_node is defined and sync_node + - passive_node is defined and passive_node - historic_state is defined and historic_state - name: Build and execute init command @@ -25,7 +25,7 @@ command_prefixes: fair_boot: "fair boot" fair: "fair node" - skale: "{{ 'skale sync-node' if (sync_node | default(false) | bool) else 'skale node' }}" + skale: "{{ 'skale sync-node' if (passive_node | default(false) | bool) else 'skale node' }}" when: node_type in command_prefixes register: init_cmd diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 7d609f1..9c21f65 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -50,7 +50,7 @@ _build_target: "{{ build_target_map[lookup_key] | default('') }}" vars: base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" - sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" + sync_suffix: "{{ 'sync' if (passive_node | default(false) | bool) else 'normal' }}" lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" build_target_map: fair_normal: "fair" @@ -60,7 +60,7 @@ - name: Fail if build target is unknown fail: - msg: "Unsupported combination: node_type={{ node_type }}, sync_node={{ sync_node | default('not defined') }}" + msg: "Unsupported combination: node_type={{ node_type }}, passive_node={{ passive_node | default('not defined') }}" when: _build_target | length == 0 - name: Set full build command @@ -86,7 +86,7 @@ executable_paths: "{{ path_map[lookup_key] | default({}) }}" vars: base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" - sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" + sync_suffix: "{{ 'sync' if (passive_node | default(false) | bool) else 'normal' }}" lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" path_map: fair_normal: @@ -104,7 +104,7 @@ - name: Fail if executable paths could not be determined fail: - msg: "Could not determine which executable to copy for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." + msg: "Could not determine which executable to copy for node_type='{{ node_type }}' and passive_node='{{ passive_node | default('not defined') }}'." when: executable_paths | length == 0 or executable_paths.src == "" - name: Copy the correct executable to /usr/local/bin diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index bbca5b4..71641ed 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -62,10 +62,18 @@ when: - node_type in ['fair_boot', 'fair'] -- name: Replace skale-node docker-compose-sync file +- name: Replace fair-node docker-compose-fair-passive file template: - src: docker-compose-sync.yml.j2 - dest: "{{ base_path }}/skale-node/docker-compose-sync.yml" + src: docker-compose-fair-passive.yml.j2 + dest: "{{ base_path }}/skale-node/docker-compose-fair-passive.yml" + when: + - node_type == "fair" + - passive_node is defined and passive_node + +- name: Replace skale-node docker-compose-passive file + template: + src: docker-compose-passive.yml.j2 + dest: "{{ base_path }}/skale-node/docker-compose-passive.yml" when: - node_type == "skale" - - sync_node is defined and sync_node + - passive_node is defined and passive_node diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 new file mode 100644 index 0000000..dad18dd --- /dev/null +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 @@ -0,0 +1,120 @@ +services: + base: &skale_base + image: rancher/pause:3.6 + restart: unless-stopped + labels: + com.skale.prefix: "node" + cpu_shares: 128 + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + + fair-admin-passive: + <<: *skale_base + container_name: fair_admin + image: "skale-admin:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-admin" + network: host + dockerfile: Dockerfile + cpu_shares: 192 + network_mode: host + tty: true + cap_add: + - NET_ADMIN + - NET_RAW + environment: + BOOT_ENDPOINT: ${BOOT_ENDPOINT} + SKALE_DIR_HOST: ${SKALE_DIR} + MAX_ALLOWED_LOG_TIME_DIFF: 600 + ENV_TYPE: ${ENV_TYPE} + ALLOWED_TS_DIFF: 300 + TELEGRAF: ${TELEGRAF} + INFLUX_URL: ${INFLUX_URL} + FAIR_CONTRACTS: ${FAIR_CONTRACTS} + SKALE_NETWORK_TYPE: "fair" + PASSIVE_NODE: "True" + + command: "python3 fair_passive.py" + volumes: + - /var/run/skale:/var/run/skale + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} + - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + healthcheck: + test: ["CMD", "python3", "healthchecks/admin.py"] + interval: 1m + timeout: 10s + retries: 2 + start_period: 30s + + fair-api: + <<: *skale_base + image: "skale-admin:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-admin" + network: host + dockerfile: Dockerfile + network_mode: host + tty: true + cap_add: + - NET_ADMIN + - NET_RAW + environment: + SGX_SERVER_URL: ${SGX_SERVER_URL} + SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} + BOOT_ENDPOINT: ${BOOT_ENDPOINT} + FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} + FLASK_APP_PORT: 3007 + FLASK_APP_HOST: "127.0.0.1" + FLASK_DEBUG_MODE: "False" + SKALE_DIR_HOST: ${SKALE_DIR} + MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} + BACKUP_RUN: ${BACKUP_RUN} + DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} + DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} + DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} + ENV_TYPE: ${ENV_TYPE} + ALLOWED_TS_DIFF: 300 + FAIR_CONTRACTS: ${FAIR_CONTRACTS} + SKALE_NETWORK_TYPE: "fair" + PASSIVE_NODE: "True" + command: "gunicorn fair_api:app -c gunicorn.conf.py" + volumes: + - /var/run/skale:/var/run/skale + - ${SKALE_DIR}:/skale_vol + - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} + - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains + + redis: + <<: *skale_base + container_name: skale_redis + image: "redis:8.0.1-alpine" + network_mode: host + tty: true + environment: + - REDIS_REPLICATION_MODE=master + command: "redis-server /data/redis.conf" + volumes: + - ${SKALE_DIR}/node_data/redis-data:/data:rw + - ${SKALE_DIR}/config/redis.conf:/data/redis.conf + restart: unless-stopped + + nginx: + <<: *skale_base + image: nginx:1.20.2 + container_name: skale_nginx + network_mode: host + volumes: + - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro + - ${SKALE_DIR}/node_data/ssl:/ssl:ro + - type: bind + bind: + propagation: slave + source: ${SCHAINS_MNT_DIR} + target: ${SCHAINS_MNT_DIR} + read_only: true diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 similarity index 96% rename from skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 rename to skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 index 96b8986..6611fee 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-sync.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 @@ -33,11 +33,11 @@ services: SCHAIN_NAME: ${SCHAIN_NAME} TELEGRAF: ${TELEGRAF} INFLUX_URL: ${INFLUX_URL} - SYNC_NODE: "True" + PASSIVE_NODE: "True" MAX_SCHAIN_FAILED_RPC_COUNT: 60 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} - command: "python3 sync_node.py" + command: "python3 passive_node.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 6ec16b8..083250c 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -5,18 +5,18 @@ set_fact: update_cmd: "{{ command_map[lookup_key] | default('') }}" vars: - sync_suffix: "{{ 'sync' if (sync_node | default(false) | bool) else 'normal' }}" + sync_suffix: "{{ 'sync' if (passive_node | default(false) | bool) else 'normal' }}" lookup_key: "{{ node_type }}_{{ sync_suffix }}" command_map: fair_boot_normal: "fair boot update {{ base_path }}/init-env --yes" fair_normal: "fair node update {{ base_path }}/init-env --yes" -# fair_sync: "fair sync-node update {{ base_path }}/init-env --yes" + # fair_sync: "fair sync-node update {{ base_path }}/init-env --yes" skale_normal: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" skale_sync: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" - name: Fail if update command could not be determined fail: - msg: "Could not determine update command for node_type='{{ node_type }}' and sync_node='{{ sync_node | default('not defined') }}'." + msg: "Could not determine update command for node_type='{{ node_type }}' and passive_node='{{ passive_node | default('not defined') }}'." when: update_cmd | length == 0 - name: Show node update command From 7bc51f2a27dcdb1fd53c682ff5c005c125832833 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 11 Aug 2025 21:54:50 +0100 Subject: [PATCH 140/279] Rename fair passive node services --- .../roles/sync/templates/docker-compose-fair-passive.yml.j2 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 index dad18dd..acbbb9e 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 @@ -11,7 +11,7 @@ services: max-file: "5" max-size: "10m" - fair-admin-passive: + fair-admin: <<: *skale_base container_name: fair_admin image: "skale-admin:${TAG:-latest}" @@ -37,7 +37,7 @@ services: SKALE_NETWORK_TYPE: "fair" PASSIVE_NODE: "True" - command: "python3 fair_passive.py" + command: "python3 fair.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol @@ -53,6 +53,7 @@ services: fair-api: <<: *skale_base + container_name: fair_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" From 2f0e7475b9e82502ddc2155ce8630422dcfad177 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 12 Aug 2025 23:56:55 +0100 Subject: [PATCH 141/279] Add fixes for passive node --- .../ansible/roles/config/tasks/main.yaml | 3 +- .../ansible/roles/init/tasks/main.yaml | 2 +- .../ansible/roles/skale_cli/tasks/main.yaml | 4 +-- .../docker-compose-fair-passive.yml.j2 | 29 +++++++++++++++++++ .../templates/docker-compose-passive.yml.j2 | 2 +- .../roles/update/tasks/skale_update.yaml | 8 ++--- 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index c4c5fa1..125bb31 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -37,8 +37,7 @@ FAIR_CONTRACTS="{{ fair_contracts }}" NODE_VERSION="{{ node_version }}" BOOT_ENDPOINT="{{ boot_endpoint }}" - CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" - SGX_SERVER_URL="{{ sgx_url }}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DISK_MOUNTPOINT="{{ block_device }}" ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 47088aa..be80169 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -25,7 +25,7 @@ command_prefixes: fair_boot: "fair boot" fair: "fair node" - skale: "{{ 'skale sync-node' if (passive_node | default(false) | bool) else 'skale node' }}" + skale: "{{ 'skale passive-node' if (passive_node | default(false) | bool) else 'skale node' }}" when: node_type in command_prefixes register: init_cmd diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 9c21f65..97f8756 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -56,7 +56,7 @@ fair_normal: "fair" # fair_sync: "fair_sync" skale_normal: "normal" - skale_sync: "sync" + skale_passive: "passive" - name: Fail if build target is unknown fail: @@ -98,7 +98,7 @@ skale_normal: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" dest: "/usr/local/bin/skale" - skale_sync: + skale_passive: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" dest: "/usr/local/bin/skale" diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 index acbbb9e..ff5e27f 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 @@ -119,3 +119,32 @@ services: source: ${SCHAINS_MNT_DIR} target: ${SCHAINS_MNT_DIR} read_only: true + + watchdog: + <<: *skale_base + container_name: skale_watchdog + image: "skale-watchdog:${TAG:-latest}" + build: + context: "{{ base_path }}/skale-watchdog" + dockerfile: Dockerfile + network: host + network_mode: host + environment: + ALLOWED_TS_DIFF: 300 + FLASK_APP_PORT: 3010 + FLASK_APP_HOST: "127.0.0.1" + FLASK_DEBUG_MODE: "False" + SKALE_NETWORK_TYPE: "fair" + + filebeat: + <<: *skale_base + container_name: skale_filebeat + user: root + image: docker.elastic.co/beats/filebeat:7.3.1 + network_mode: host + environment: + FILEBEAT_HOST: ${FILEBEAT_HOST} + volumes: + - ${SKALE_DIR}/node_data/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro + - /var/lib/docker:/var/lib/docker:ro + - /var/run/skale:/var/run/skale \ No newline at end of file diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 index 6611fee..5c7af9a 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 @@ -15,7 +15,7 @@ services: skale-sync-admin: <<: *skale_base - container_name: skale_sync_admin + container_name: skale_passive_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" diff --git a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml index 083250c..553b4bb 100644 --- a/skale-nodes/ansible/roles/update/tasks/skale_update.yaml +++ b/skale-nodes/ansible/roles/update/tasks/skale_update.yaml @@ -5,14 +5,14 @@ set_fact: update_cmd: "{{ command_map[lookup_key] | default('') }}" vars: - sync_suffix: "{{ 'sync' if (passive_node | default(false) | bool) else 'normal' }}" - lookup_key: "{{ node_type }}_{{ sync_suffix }}" + passive_suffix: "{{ 'passive' if (passive_node | default(false) | bool) else 'normal' }}" + lookup_key: "{{ node_type }}_{{ passive_suffix }}" command_map: fair_boot_normal: "fair boot update {{ base_path }}/init-env --yes" fair_normal: "fair node update {{ base_path }}/init-env --yes" - # fair_sync: "fair sync-node update {{ base_path }}/init-env --yes" + fair_passive: "fair passive-node update {{ base_path }}/init-env --yes" skale_normal: "skale node update {{ base_path }}/init-env --yes --pull-config all --unsafe" - skale_sync: "skale sync-node update {{ base_path }}/init-env --yes --unsafe" + skale_passive: "skale passive-node update {{ base_path }}/init-env --yes --unsafe" - name: Fail if update command could not be determined fail: From 21ba712a14e4c81483bd2b63a02d1d9d51aa7c55 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 14 Aug 2025 19:55:14 +0100 Subject: [PATCH 142/279] Remove separate file for fair passive node --- .../ansible/roles/sync/tasks/main.yaml | 8 - .../docker-compose-fair-passive.yml.j2 | 150 ------------------ .../sync/templates/docker-compose-fair.yml.j2 | 2 + 3 files changed, 2 insertions(+), 158 deletions(-) delete mode 100644 skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index 71641ed..887023c 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -62,14 +62,6 @@ when: - node_type in ['fair_boot', 'fair'] -- name: Replace fair-node docker-compose-fair-passive file - template: - src: docker-compose-fair-passive.yml.j2 - dest: "{{ base_path }}/skale-node/docker-compose-fair-passive.yml" - when: - - node_type == "fair" - - passive_node is defined and passive_node - - name: Replace skale-node docker-compose-passive file template: src: docker-compose-passive.yml.j2 diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 deleted file mode 100644 index ff5e27f..0000000 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair-passive.yml.j2 +++ /dev/null @@ -1,150 +0,0 @@ -services: - base: &skale_base - image: rancher/pause:3.6 - restart: unless-stopped - labels: - com.skale.prefix: "node" - cpu_shares: 128 - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" - - fair-admin: - <<: *skale_base - container_name: fair_admin - image: "skale-admin:${TAG:-latest}" - build: - context: "{{ base_path }}/skale-admin" - network: host - dockerfile: Dockerfile - cpu_shares: 192 - network_mode: host - tty: true - cap_add: - - NET_ADMIN - - NET_RAW - environment: - BOOT_ENDPOINT: ${BOOT_ENDPOINT} - SKALE_DIR_HOST: ${SKALE_DIR} - MAX_ALLOWED_LOG_TIME_DIFF: 600 - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - TELEGRAF: ${TELEGRAF} - INFLUX_URL: ${INFLUX_URL} - FAIR_CONTRACTS: ${FAIR_CONTRACTS} - SKALE_NETWORK_TYPE: "fair" - PASSIVE_NODE: "True" - - command: "python3 fair.py" - volumes: - - /var/run/skale:/var/run/skale - - ${SKALE_DIR}:/skale_vol - - ${SKALE_DIR}/node_data:/skale_node_data - - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains - healthcheck: - test: ["CMD", "python3", "healthchecks/admin.py"] - interval: 1m - timeout: 10s - retries: 2 - start_period: 30s - - fair-api: - <<: *skale_base - container_name: fair_api - image: "skale-admin:${TAG:-latest}" - build: - context: "{{ base_path }}/skale-admin" - network: host - dockerfile: Dockerfile - network_mode: host - tty: true - cap_add: - - NET_ADMIN - - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - BOOT_ENDPOINT: ${BOOT_ENDPOINT} - FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} - FLASK_APP_PORT: 3007 - FLASK_APP_HOST: "127.0.0.1" - FLASK_DEBUG_MODE: "False" - SKALE_DIR_HOST: ${SKALE_DIR} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - FAIR_CONTRACTS: ${FAIR_CONTRACTS} - SKALE_NETWORK_TYPE: "fair" - PASSIVE_NODE: "True" - command: "gunicorn fair_api:app -c gunicorn.conf.py" - volumes: - - /var/run/skale:/var/run/skale - - ${SKALE_DIR}:/skale_vol - - ${SKALE_DIR}/node_data:/skale_node_data - - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains - - redis: - <<: *skale_base - container_name: skale_redis - image: "redis:8.0.1-alpine" - network_mode: host - tty: true - environment: - - REDIS_REPLICATION_MODE=master - command: "redis-server /data/redis.conf" - volumes: - - ${SKALE_DIR}/node_data/redis-data:/data:rw - - ${SKALE_DIR}/config/redis.conf:/data/redis.conf - restart: unless-stopped - - nginx: - <<: *skale_base - image: nginx:1.20.2 - container_name: skale_nginx - network_mode: host - volumes: - - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro - - ${SKALE_DIR}/node_data/ssl:/ssl:ro - - type: bind - bind: - propagation: slave - source: ${SCHAINS_MNT_DIR} - target: ${SCHAINS_MNT_DIR} - read_only: true - - watchdog: - <<: *skale_base - container_name: skale_watchdog - image: "skale-watchdog:${TAG:-latest}" - build: - context: "{{ base_path }}/skale-watchdog" - dockerfile: Dockerfile - network: host - network_mode: host - environment: - ALLOWED_TS_DIFF: 300 - FLASK_APP_PORT: 3010 - FLASK_APP_HOST: "127.0.0.1" - FLASK_DEBUG_MODE: "False" - SKALE_NETWORK_TYPE: "fair" - - filebeat: - <<: *skale_base - container_name: skale_filebeat - user: root - image: docker.elastic.co/beats/filebeat:7.3.1 - network_mode: host - environment: - FILEBEAT_HOST: ${FILEBEAT_HOST} - volumes: - - ${SKALE_DIR}/node_data/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro - - /var/lib/docker:/var/lib/docker:ro - - /var/run/skale:/var/run/skale \ No newline at end of file diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 149e84c..c0fba3c 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -109,6 +109,7 @@ services: INFLUX_URL: ${INFLUX_URL} FAIR_CONTRACTS: ${FAIR_CONTRACTS} SKALE_NETWORK_TYPE: "fair" + PASSIVE_NODE: ${PASSIVE_NODE} command: "python3 fair.py" volumes: @@ -195,6 +196,7 @@ services: ALLOWED_TS_DIFF: 300 FAIR_CONTRACTS: ${FAIR_CONTRACTS} SKALE_NETWORK_TYPE: "fair" + PASSIVE_NODE: ${PASSIVE_NODE} command: "gunicorn fair_api:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale From 3cca8c91c8f8af31a9e1d01be9530edf96283d4d Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Sun, 17 Aug 2025 21:18:35 +0100 Subject: [PATCH 143/279] Set `SGX_SERVER_URL` depending on node type --- skale-nodes/ansible/roles/config/tasks/main.yaml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 125bb31..93889b5 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -31,13 +31,13 @@ when: node_type == "fair_boot" tags: env -- name: Set env options for regular Fair node +- name: Set common env options for regular Fair node set_fact: env_options: | FAIR_CONTRACTS="{{ fair_contracts }}" NODE_VERSION="{{ node_version }}" BOOT_ENDPOINT="{{ boot_endpoint }}" - CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" + CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DISK_MOUNTPOINT="{{ block_device }}" ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" @@ -45,6 +45,14 @@ when: node_type == "fair" tags: env +- name: Add SGX_SERVER_URL to env options if not passive + set_fact: + env_options: "{{ env_options }}\nSGX_SERVER_URL={{ sgx_url }}" + when: + - node_type == "fair" + - passive_node is not defined or not passive_node + tags: env + - name: Set env options for regular SKALE node set_fact: env_options: | From 73e498395bedca600a56c7efa09fb882484f8083 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 18 Aug 2025 16:30:21 +0100 Subject: [PATCH 144/279] Bump skale.py version to 7.3.dev8 --- skale-nodes/ansible/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index b4906bb..f8c51ed 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.3.dev1 +skale.py==7.3.dev8 boto3==1.17.34 From 9f41c3da45268ba45dfd8df6f7be6b5a1b7bd7d3 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 18 Aug 2025 18:03:06 +0100 Subject: [PATCH 145/279] Add script for registering FAIR passive nodes --- .../ansible/files/register_passive_fair.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 skale-nodes/ansible/files/register_passive_fair.py diff --git a/skale-nodes/ansible/files/register_passive_fair.py b/skale-nodes/ansible/files/register_passive_fair.py new file mode 100644 index 0000000..16d6bc7 --- /dev/null +++ b/skale-nodes/ansible/files/register_passive_fair.py @@ -0,0 +1,59 @@ +# This file is part of node-provisioning +# +# Copyright (C) 2025-Present SKALE Labs +# +# node-provisioning is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# node-provisioning is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with node-provisioning. If not, see . + +import os +import logging +from eth_typing import HexStr +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet +from skale import FairManager +from eth_keys import keys +import codecs +from skale.utils.helper import init_default_logger + +logger = logging.getLogger(__name__) +init_default_logger() + +BASE_DIR = os.getenv('BASE_DIR') +ENDPOINT = os.getenv('ENDPOINT') +FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') +ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') +PASSIVE_FAIR_IP = os.getenv('PASSIVE_FAIR_IP') +PASSIVE_FAIR_PORT = 10000 +PASSIVE_ID_FILEPATH = os.path.join(BASE_DIR, 'passive-id.txt') + + +def init_fair() -> FairManager: + web3 = init_web3(ENDPOINT) + wallet = Web3Wallet(HexStr(ETH_PRIVATE_KEY), web3) + return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet) + + +if __name__ == '__main__': + fair = init_fair() + fair.nodes.register_passive(PASSIVE_FAIR_IP, PASSIVE_FAIR_PORT) + private_key_bytes = codecs.decode(ETH_PRIVATE_KEY, 'hex') + priv_key = keys.PrivateKey(private_key_bytes) + pub_key = priv_key.public_key + address = pub_key.to_checksum_address() + passive_ids = fair.nodes.get_passive_node_ids_for_address(address) + logger.info(f'All passive nodes for current address: {passive_ids}') + if len(passive_ids): + new_passive_node_id = passive_ids[-1] + logger.info(f'New passive node ID: {new_passive_node_id}') + with open(PASSIVE_ID_FILEPATH, 'w') as passive_id_file: + passive_id_file.write(str(new_passive_node_id)) From f9b307c3dc3f62532d3e9a79fb05fd414e4047b2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 18 Aug 2025 18:04:23 +0100 Subject: [PATCH 146/279] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a579e72..0764fec 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ skale-nodes/ansible/sgx/ansible.cfg skale-nodes/ansible/files/base-key.txt skale-nodes/ansible/files/validator-key.txt skale-nodes/ansible/files/validator-id.txt +skale-nodes/ansible/files/passive-id.txt skale-nodes/ansible/files/cert.pem skale-nodes/ansible/files/privkey.pem From 70bc1fcde180c0b8aaff0af79dd054a67ce2d434 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 18 Aug 2025 18:07:47 +0100 Subject: [PATCH 147/279] Add playbook and role for registering passive nodes --- skale-nodes/ansible/main_fair_passive.yaml | 3 +++ skale-nodes/ansible/register_passive_fair.yaml | 7 +++++++ .../roles/register_passive_fair/tasks/main.yaml | 10 ++++++++++ 3 files changed, 20 insertions(+) create mode 100644 skale-nodes/ansible/register_passive_fair.yaml create mode 100644 skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml diff --git a/skale-nodes/ansible/main_fair_passive.yaml b/skale-nodes/ansible/main_fair_passive.yaml index 295a950..0d78dfb 100644 --- a/skale-nodes/ansible/main_fair_passive.yaml +++ b/skale-nodes/ansible/main_fair_passive.yaml @@ -1 +1,4 @@ +#- import_playbook: base.yaml +- import_playbook: register_passive.yaml - import_playbook: setup.yaml +#- import_playbook: ssl.yaml diff --git a/skale-nodes/ansible/register_passive_fair.yaml b/skale-nodes/ansible/register_passive_fair.yaml new file mode 100644 index 0000000..74e187a --- /dev/null +++ b/skale-nodes/ansible/register_passive_fair.yaml @@ -0,0 +1,7 @@ +- name: Register passive FAIR node + hosts: 127.0.0.1 + connection: local + roles: + - role: register_passive_fair + tags: + - register_passive_fair diff --git a/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml b/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml new file mode 100644 index 0000000..2c7d0ed --- /dev/null +++ b/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml @@ -0,0 +1,10 @@ +- name: Execute register_passive_fair script + script: register_passive_fair.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + FAIR_CONTRACTS: "{{ fair_contracts }}" + PASSIVE_FAIR_IP: {{ hostvars[inventory_hostname].ansible_host }} + args: + executable: python3 From d7e650518e7685635b53d009884de0df0a226e24 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 18 Aug 2025 18:13:14 +0100 Subject: [PATCH 148/279] Sort imports --- skale-nodes/ansible/files/generate_ip.py | 4 +++- skale-nodes/ansible/files/register_passive_fair.py | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/files/generate_ip.py b/skale-nodes/ansible/files/generate_ip.py index d00f54e..f9f3125 100644 --- a/skale-nodes/ansible/files/generate_ip.py +++ b/skale-nodes/ansible/files/generate_ip.py @@ -1,11 +1,13 @@ -import random import ipaddress +import random + def generate_random_ip() -> ipaddress.IPv4Address: random_int = random.randint(0, 2**32 - 1) ip_object = ipaddress.IPv4Address(random_int) return ip_object + if __name__ == '__main__': random_ip_object = generate_random_ip() print(random_ip_object) diff --git a/skale-nodes/ansible/files/register_passive_fair.py b/skale-nodes/ansible/files/register_passive_fair.py index 16d6bc7..8bf9978 100644 --- a/skale-nodes/ansible/files/register_passive_fair.py +++ b/skale-nodes/ansible/files/register_passive_fair.py @@ -15,15 +15,16 @@ # You should have received a copy of the GNU Affero General Public License # along with node-provisioning. If not, see . -import os +import codecs import logging +import os + +from eth_keys import keys from eth_typing import HexStr -from skale.utils.web3_utils import init_web3 -from skale.wallets import Web3Wallet from skale import FairManager -from eth_keys import keys -import codecs from skale.utils.helper import init_default_logger +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet logger = logging.getLogger(__name__) init_default_logger() From e28aa96aa4258cb190397b6617bc0d50b882fa66 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 18 Aug 2025 19:51:35 +0100 Subject: [PATCH 149/279] Build two binary types only --- .../ansible/roles/skale_cli/tasks/main.yaml | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 97f8756..2512263 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -45,22 +45,18 @@ - name: Determine and set build command based on node type when: build_type == "source" block: - - name: Determine build target from map with readable keys + - name: Determine build target from a simple map set_fact: - _build_target: "{{ build_target_map[lookup_key] | default('') }}" + _build_target: "{{ build_target_map[base_node_type] | default('') }}" vars: base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" - sync_suffix: "{{ 'sync' if (passive_node | default(false) | bool) else 'normal' }}" - lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" build_target_map: - fair_normal: "fair" - # fair_sync: "fair_sync" - skale_normal: "normal" - skale_passive: "passive" + fair: "fair" + skale: "skale" - name: Fail if build target is unknown fail: - msg: "Unsupported combination: node_type={{ node_type }}, passive_node={{ passive_node | default('not defined') }}" + msg: "Unsupported node_type: {{ node_type }}" when: _build_target | length == 0 - name: Set full build command @@ -83,28 +79,20 @@ block: - name: Determine source and destination paths for the executable set_fact: - executable_paths: "{{ path_map[lookup_key] | default({}) }}" + executable_paths: "{{ path_map[base_node_type] | default({}) }}" vars: base_node_type: "{{ 'fair' if node_type == 'fair_boot' else node_type }}" - sync_suffix: "{{ 'sync' if (passive_node | default(false) | bool) else 'normal' }}" - lookup_key: "{{ base_node_type }}_{{ sync_suffix }}" path_map: - fair_normal: + fair: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-fair" dest: "/usr/local/bin/fair" - fair_sync: - src: "" # TODO: replace it with correct path "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-fair-sync" - dest: "" # TODO: replace it with correct path "/usr/local/bin/fair" - skale_normal: + skale: src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64" dest: "/usr/local/bin/skale" - skale_passive: - src: "{{ base_path }}/node-cli/dist/skale-test-Linux-x86_64-sync" - dest: "/usr/local/bin/skale" - name: Fail if executable paths could not be determined fail: - msg: "Could not determine which executable to copy for node_type='{{ node_type }}' and passive_node='{{ passive_node | default('not defined') }}'." + msg: "Unsupported node_type for copy operation: {{ node_type }}" when: executable_paths | length == 0 or executable_paths.src == "" - name: Copy the correct executable to /usr/local/bin From 88bdde93124d4ed9c27d40fcf166be8feb850bda Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 19 Aug 2025 16:10:23 +0100 Subject: [PATCH 150/279] Support FAIR passive nodes init --- .../ansible/roles/init/tasks/main.yaml | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index be80169..587cde3 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -1,22 +1,28 @@ -- name: Set sync_flags based on passive_node and catchup status +- name: Get FAIR passive node ID (for passive FAIR nodes only) + run_once: yes set_fact: - sync_flags: "{{ '--catchup' if (passive_node | default(false) | bool) and (catchup | default(false) | bool) else '' }}" + passive_node_id: "{{ lookup('file', 'files/passive-id.txt') }}" + when: + - node_type == "fair" + - passive_node is defined and passive_node -- name: Add --archive if needed (SKALE sync node) +- name: Set sync_flags based on passive_node status set_fact: - sync_flags: "{{ sync_flags }} --archive" + sync_flags: "{{ '--id ' ~ passive_node_id if node_type == 'fair' and (passive_node | default(false) | bool) else '' }}" + +- name: Add --indexer if needed + set_fact: + sync_flags: "{{ sync_flags }} --indexer" when: - - node_type == "skale" - passive_node is defined and passive_node - - archive is defined and archive + - indexer is defined and indexer -- name: Add --historic-state if needed (SKALE sync node) +- name: Add --archive if needed set_fact: - sync_flags: "{{ sync_flags }} --historic-state" + sync_flags: "{{ sync_flags }} --archive" when: - - node_type == "skale" - passive_node is defined and passive_node - - historic_state is defined and historic_state + - archive is defined and archive - name: Build and execute init command command: @@ -24,7 +30,7 @@ vars: command_prefixes: fair_boot: "fair boot" - fair: "fair node" + fair: "{{ 'fair passive-node' if (passive_node | default(false) | bool) else 'fair node' }}" skale: "{{ 'skale passive-node' if (passive_node | default(false) | bool) else 'skale node' }}" when: node_type in command_prefixes register: init_cmd From e5b923f267aa5f05a6cac2df9616aab66aacf1b2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 19 Aug 2025 16:11:10 +0100 Subject: [PATCH 151/279] Fix naming --- skale-nodes/ansible/main_fair_passive.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/main_fair_passive.yaml b/skale-nodes/ansible/main_fair_passive.yaml index 0d78dfb..c3f6a46 100644 --- a/skale-nodes/ansible/main_fair_passive.yaml +++ b/skale-nodes/ansible/main_fair_passive.yaml @@ -1,4 +1,4 @@ #- import_playbook: base.yaml -- import_playbook: register_passive.yaml +- import_playbook: register_passive_fair.yaml - import_playbook: setup.yaml #- import_playbook: ssl.yaml From a0425619c1a0bf5d5615a77c07cb4835c0e02a65 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 19 Aug 2025 16:14:51 +0100 Subject: [PATCH 152/279] Fix endpoint and IP retrieval from inventory --- .../ansible/roles/register_passive_fair/tasks/main.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml b/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml index 2c7d0ed..488017a 100644 --- a/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml +++ b/skale-nodes/ansible/roles/register_passive_fair/tasks/main.yaml @@ -3,8 +3,8 @@ environment: BASE_DIR: "files" ETH_PRIVATE_KEY: "{{ eth_private_key }}" - ENDPOINT: "{{ endpoint }}" + ENDPOINT: "{{ boot_endpoint }}" FAIR_CONTRACTS: "{{ fair_contracts }}" - PASSIVE_FAIR_IP: {{ hostvars[inventory_hostname].ansible_host }} + PASSIVE_FAIR_IP: "{{ hostvars[groups['nodes'][0]]['ansible_host'] }}" args: - executable: python3 + executable: python3 \ No newline at end of file From 04d3838f32b5bc01bf866a1ea748aa85736163ce Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 19 Aug 2025 16:52:16 +0100 Subject: [PATCH 153/279] Return back the utf-8 coding string (fix for running Python scripts) --- skale-nodes/ansible/files/register_passive_fair.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/files/register_passive_fair.py b/skale-nodes/ansible/files/register_passive_fair.py index 8bf9978..f57b75c 100644 --- a/skale-nodes/ansible/files/register_passive_fair.py +++ b/skale-nodes/ansible/files/register_passive_fair.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# # This file is part of node-provisioning # # Copyright (C) 2025-Present SKALE Labs From 6354094ec8b1a6e558c1e1a39b3a1419a8b48374 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 21 Aug 2025 18:09:38 +0100 Subject: [PATCH 154/279] Rename disk mountpoint --- bare-metal/README.md | 2 +- .../roles/cleanup_nodes/tasks/cli_cleanup.yaml | 2 +- .../ansible/roles/cleanup_nodes/tasks/main.yaml | 8 ++++---- skale-nodes/ansible/roles/config/tasks/main.yaml | 12 ++++++------ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bare-metal/README.md b/bare-metal/README.md index f69a309..5fa2c5e 100644 --- a/bare-metal/README.md +++ b/bare-metal/README.md @@ -40,7 +40,7 @@ When Vagrant provision is completed `hosts` file will be created in `bare-metal/ ansible-playbook -i inventory -v main.yaml ``` -Default `DISK_MOUNTPOINT` for VirtualBox VMs: `/dev/sdb` +Default `BLOCK_DEVICE` for VirtualBox VMs: `/dev/sdb` ## Destroy machines diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml index 7088160..7e2596c 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml @@ -3,7 +3,7 @@ cmd: "{{ command_prefixes[node_type] }} node cleanup --yes" vars: command_prefixes: - fair: "fair node" + fair: "fair" when: node_type in command_prefixes register: cleanup_cmd diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml index ba6c40b..60f0112 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml @@ -1,7 +1,7 @@ -- name: Change Fair node IP - import_tasks: change_ip.yaml - tags: change_ip - when: node_type == "fair" +# - name: Change Fair node IP +# import_tasks: change_ip.yaml +# tags: change_ip +# when: node_type == "fair" - name: Cli cleanup command import_tasks: cli_cleanup.yaml diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 93889b5..e6c6bd6 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -23,7 +23,7 @@ NODE_VERSION="{{ node_version }}" ENDPOINT="{{ endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" - DISK_MOUNTPOINT="{{ block_device }}" + BLOCK_DEVICE="{{ block_device }}" SGX_SERVER_URL="{{ sgx_url }}" ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" @@ -38,7 +38,7 @@ NODE_VERSION="{{ node_version }}" BOOT_ENDPOINT="{{ boot_endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" - DISK_MOUNTPOINT="{{ block_device }}" + BLOCK_DEVICE="{{ block_device }}" ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" ENFORCE_BTRFS='False' @@ -62,8 +62,8 @@ MANAGER_CONTRACTS="{{ manager_contracts }}" IMA_CONTRACTS="{{ ima_contracts }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" - DOCKER_LVMPY_STREAM="{{ docker_lvmpy_stream }}" - DISK_MOUNTPOINT="{{ block_device }}" + DOCKER_LVMPY_VERSION="{{ docker_lvmpy_version }}" + BLOCK_DEVICE="{{ block_device }}" SGX_SERVER_URL="{{ sgx_url }}" TG_API_KEY="{{ tg_api_key }}" TG_CHAT_ID="{{ tg_chat_id }}" @@ -84,12 +84,12 @@ CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" ENDPOINT={{ endpoint }} ENFORCE_BTRFS='True' - DOCKER_LVMPY_STREAM="{{ docker_lvmpy_stream }}" + DOCKER_LVMPY_VERSION="{{ docker_lvmpy_version }}" ENV_TYPE="{{ env_type }}" SCHAIN_NAME="{{ schain_name }}" MANAGER_CONTRACTS={{ manager_contracts }} IMA_CONTRACTS={{ ima_contracts }} - DISK_MOUNTPOINT={{ block_device }} + BLOCK_DEVICE={{ block_device }} INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" when: From f62a728c29e0b41df4db6249b67e3bf1f14d92a2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 26 Aug 2025 19:53:12 +0100 Subject: [PATCH 155/279] Add `fair passive-node cleanup` command --- .../ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml index 7e2596c..89f4c1d 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml @@ -1,9 +1,9 @@ - name: Build and execute cleanup command command: - cmd: "{{ command_prefixes[node_type] }} node cleanup --yes" + cmd: "{{ command_prefixes[node_type] }} cleanup --yes" vars: command_prefixes: - fair: "fair" + fair: "{{ 'fair passive-node' if (passive_node | default(false) | bool) else 'fair node' }}" when: node_type in command_prefixes register: cleanup_cmd From 3073f34356a64e1d0b33421497dee1f1a5d24db6 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 26 Aug 2025 20:21:17 +0100 Subject: [PATCH 156/279] Remove unused `Set sgx url` task --- skale-nodes/ansible/roles/config/tasks/main.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index e6c6bd6..5de0794 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -10,11 +10,6 @@ when: ima_contracts is undefined tags: contracts -- name: Set sgx url - set_fact: - sgx_url: "https://{{ hostvars['sgx0'].ansible_host }}:1026" - when: sgx_url is not defined or sgx_url == '' - - name: Set env options for Fair boot node set_fact: env_options: | From 34671150d98513bcacdbfd3e98237107a6576434 Mon Sep 17 00:00:00 2001 From: badrogger Date: Wed, 27 Aug 2025 13:05:52 +0100 Subject: [PATCH 157/279] Always run fix node id --- skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 9739e26..4318e6e 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -52,5 +52,4 @@ MANAGER_CONTRACTS: "{{ manager_contracts }}" args: executable: python3 - when: node_type == "fair_boot" - tags: fix_zero_node \ No newline at end of file + tags: fix_zero_node From 894bcbd59a9e06ad287d86b315f3e8b55af18157 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Fri, 29 Aug 2025 18:14:05 +0100 Subject: [PATCH 158/279] Update docker compose fair template --- .../ansible/roles/sync/templates/docker-compose-fair.yml.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index c0fba3c..354f2f6 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -1,5 +1,3 @@ -version: '3.4' - services: base: &skale_base image: rancher/pause:3.6 @@ -27,6 +25,7 @@ services: SGX_URL: ${SGX_SERVER_URL} ENDPOINT: ${ENDPOINT} BOOT_ENDPOINT: ${BOOT_ENDPOINT} + CONFIRMATION_BLOCKS: 0 volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data @@ -234,6 +233,7 @@ services: FLASK_APP_HOST: "127.0.0.1" FLASK_DEBUG_MODE: "False" SKALE_NETWORK_TYPE: "fair" + PASSIVE_NODE: ${PASSIVE_NODE} nginx: <<: *skale_base From 9a21883e0486ae080ddf9f7e52df799164cd5230 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Wed, 3 Sep 2025 18:07:43 +0100 Subject: [PATCH 159/279] Update container names --- .../roles/cleanup_nodes/tasks/containers.yaml | 2 +- .../sync/templates/docker-compose-fair.yml.j2 | 52 +++++++++---------- .../templates/docker-compose-passive.yml.j2 | 14 ++--- .../sync/templates/docker-compose.yml.j2 | 46 ++++++++-------- 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 0086abb..b9f0eec 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -31,7 +31,7 @@ - name: Destroy skale admin container become: true docker_container: - name: "skale_admin" + name: "sk_admin" state: absent force_kill: yes keep_volumes: no diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 354f2f6..9050426 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -1,5 +1,5 @@ services: - base: &skale_base + base: &sk_base image: rancher/pause:3.6 restart: unless-stopped labels: @@ -12,8 +12,8 @@ services: max-size: "10m" transaction-manager: - <<: *skale_base - container_name: skale_transaction-manager + <<: *sk_base + container_name: sk_tm image: "skalenetwork/transaction-manager:${TAG:-latest}" build: context: "{{ base_path }}/transaction-manager" @@ -30,9 +30,9 @@ services: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data - fair-boot: - <<: *skale_base - container_name: fair_boot_admin + boot-admin: + <<: *sk_base + container_name: sk_boot_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -77,9 +77,9 @@ services: retries: 2 start_period: 30s - fair-admin: - <<: *skale_base - container_name: fair_admin + admin: + <<: *sk_base + container_name: sk_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -124,9 +124,9 @@ services: retries: 2 start_period: 30s - fair-boot-api: - <<: *skale_base - container_name: fair_boot_api + boot-api: + <<: *sk_base + container_name: sk_boot_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -164,9 +164,9 @@ services: - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains - fair-api: - <<: *skale_base - container_name: fair_api + api: + <<: *sk_base + container_name: sk_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -205,8 +205,8 @@ services: - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains redis: - <<: *skale_base - container_name: skale_redis + <<: *sk_base + container_name: sk_redis image: "redis:8.0.1-alpine" network_mode: host tty: true @@ -219,8 +219,8 @@ services: restart: unless-stopped watchdog: - <<: *skale_base - container_name: skale_watchdog + <<: *sk_base + container_name: sk_watchdog image: "skale-watchdog:${TAG:-latest}" build: context: "{{ base_path }}/skale-watchdog" @@ -236,9 +236,9 @@ services: PASSIVE_NODE: ${PASSIVE_NODE} nginx: - <<: *skale_base + <<: *sk_base image: nginx:1.20.2 - container_name: skale_nginx + container_name: sk_nginx network_mode: host depends_on: - watchdog @@ -253,7 +253,7 @@ services: read_only: true advisor: - <<: *skale_base + <<: *sk_base image: gcr.io/cadvisor/cadvisor-amd64:v0.50.0 container_name: monitor_cadvisor cpu_shares: 128 @@ -266,7 +266,7 @@ services: - /dev/disk/:/dev/disk:ro node-exporter: - <<: *skale_base + <<: *sk_base container_name: monitor_node_exporter image: quay.io/prometheus/node-exporter volumes: @@ -281,10 +281,10 @@ services: network_mode: host filebeat: - <<: *skale_base - container_name: skale_filebeat + <<: *sk_base + container_name: sk_filebeat user: root - image: docker.elastic.co/beats/filebeat:7.3.1 + image: elastic/filebeat:9.1.3 network_mode: host environment: FILEBEAT_HOST: ${FILEBEAT_HOST} diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 index 5c7af9a..5d09aff 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 @@ -1,7 +1,7 @@ version: '3.4' services: - base: &skale_base + base: &sk_base image: rancher/pause:3.6 restart: unless-stopped labels: @@ -13,9 +13,9 @@ services: max-file: "5" max-size: "10m" - skale-sync-admin: - <<: *skale_base - container_name: skale_passive_admin + admin: + <<: *sk_base + container_name: sk_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -37,7 +37,7 @@ services: MAX_SCHAIN_FAILED_RPC_COUNT: 60 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} - command: "python3 passive_node.py" + command: "python3 skale_passive.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol @@ -52,9 +52,9 @@ services: start_period: 30s nginx: - <<: *skale_base + <<: *sk_base image: nginx:1.20.2 - container_name: skale_nginx + container_name: sk_nginx network_mode: host volumes: - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 2e0cb25..2a209b6 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -1,7 +1,7 @@ version: '3.4' services: - base: &skale_base + base: &sk_base image: rancher/pause:3.6 restart: unless-stopped labels: @@ -14,8 +14,8 @@ services: max-size: "10m" transaction-manager: - <<: *skale_base - container_name: skale_transaction-manager + <<: *sk_base + container_name: sk_tm image: "skalenetwork/transaction-manager:${TAG:-latest}" build: context: "{{ base_path }}/transaction-manager" @@ -30,9 +30,9 @@ services: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data - skale-admin: - <<: *skale_base - container_name: skale_admin + admin: + <<: *sk_base + container_name: sk_admin image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -78,9 +78,9 @@ services: retries: 2 start_period: 30s - skale-api: - <<: *skale_base - container_name: skale_api + api: + <<: *sk_base + container_name: sk_api image: "skale-admin:${TAG:-latest}" build: context: "{{ base_path }}/skale-admin" @@ -119,7 +119,7 @@ services: - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains celery: - <<: *skale_base + <<: *sk_base container_name: celery image: "skale-admin:${TAG:-latest}" build: @@ -138,8 +138,8 @@ services: - /var/run/skale:/var/run/skale redis: - <<: *skale_base - container_name: skale_redis + <<: *sk_base + container_name: sk_redis image: "redis:6.0.10-alpine" network_mode: host tty: true @@ -151,8 +151,8 @@ services: - ${SKALE_DIR}/config/redis.conf:/data/redis.conf bounty: - <<: *skale_base - container_name: skale_bounty + <<: *sk_base + container_name: sk_bounty image: "bounty-agent:${TAG:-latest}" build: context: "{{ base_path }}/bounty-agent" @@ -174,8 +174,8 @@ services: - ${SKALE_DIR}/node_data:/skale_node_data watchdog: - <<: *skale_base - container_name: skale_watchdog + <<: *sk_base + container_name: sk_watchdog image: "skale-watchdog:${TAG:-latest}" build: context: "{{ base_path }}/skale-watchdog" @@ -189,9 +189,9 @@ services: FLASK_DEBUG_MODE: "False" nginx: - <<: *skale_base + <<: *sk_base image: nginx:1.20.2 - container_name: skale_nginx + container_name: sk_nginx network_mode: host depends_on: - watchdog @@ -207,7 +207,7 @@ services: read_only: true advisor: - <<: *skale_base + <<: *sk_base image: gcr.io/cadvisor/cadvisor-amd64:v0.50.0 container_name: monitor_cadvisor cpu_shares: 128 @@ -220,7 +220,7 @@ services: - /dev/disk/:/dev/disk:ro node-exporter: - <<: *skale_base + <<: *sk_base container_name: monitor_node_exporter image: quay.io/prometheus/node-exporter volumes: @@ -235,10 +235,10 @@ services: network_mode: host filebeat: - <<: *skale_base - container_name: skale_filebeat + <<: *sk_base + container_name: sk_filebeat user: root - image: docker.elastic.co/beats/filebeat:7.3.1 + image: elastic/filebeat:9.1.3 network_mode: host environment: FILEBEAT_HOST: ${FILEBEAT_HOST} From 21d76a9b5481016a5e779e758943e204dffcac1e Mon Sep 17 00:00:00 2001 From: badrogger Date: Mon, 15 Sep 2025 15:46:40 +0100 Subject: [PATCH 160/279] Minor improvements --- skale-nodes/ansible/files/fix_zero_node_fair.py | 13 +++++++++++++ skale-nodes/ansible/files/register_passive_fair.py | 5 ++++- skale-nodes/ansible/main.yaml | 3 --- skale-nodes/ansible/main_fair.yaml | 2 -- skale-nodes/ansible/main_fair_passive.yaml | 2 -- .../roles/cleanup_nodes/tasks/node_artifacts.yaml | 6 ++++++ .../ansible/roles/deploy_contracts/tasks/main.yaml | 2 +- skale-nodes/ansible/setup.yaml | 4 ++-- skale-nodes/ansible/update.yaml | 2 +- 9 files changed, 27 insertions(+), 12 deletions(-) diff --git a/skale-nodes/ansible/files/fix_zero_node_fair.py b/skale-nodes/ansible/files/fix_zero_node_fair.py index c2003ac..85e1529 100644 --- a/skale-nodes/ansible/files/fix_zero_node_fair.py +++ b/skale-nodes/ansible/files/fix_zero_node_fair.py @@ -18,6 +18,7 @@ # along with node-provisioning. If not, see . import os +import time from eth_typing import HexStr from skale import SkaleManager from skale.utils.web3_utils import init_web3 @@ -58,9 +59,21 @@ def setup_validator(skale: SkaleManager): enable_validator(skale, validator_id) +def wait_for_next_block(web3): + """Wait for the next block to be mined""" + current_block = web3.eth.block_number + print(f'Current block: {current_block}, waiting for next block...') + while web3.eth.block_number == current_block: + time.sleep(1) # Check every second + new_block = web3.eth.block_number + print(f'New block mined: {new_block}') + + def fix_zero_node(skale): wallet = generate_wallet(skale.web3) print(f'Node Address: {wallet.address}') + wait_for_next_block(skale.web3) + send_eth(skale.web3, skale.wallet, wallet.address, ETH_AMOUNT) add_test_permissions(skale) setup_validator(skale) diff --git a/skale-nodes/ansible/files/register_passive_fair.py b/skale-nodes/ansible/files/register_passive_fair.py index f57b75c..9b77e6a 100644 --- a/skale-nodes/ansible/files/register_passive_fair.py +++ b/skale-nodes/ansible/files/register_passive_fair.py @@ -49,7 +49,10 @@ def init_fair() -> FairManager: if __name__ == '__main__': fair = init_fair() fair.nodes.register_passive(PASSIVE_FAIR_IP, PASSIVE_FAIR_PORT) - private_key_bytes = codecs.decode(ETH_PRIVATE_KEY, 'hex') + pk = ETH_PRIVATE_KEY + if pk and pk.startswith('0x'): + pk = pk[2:] + private_key_bytes = codecs.decode(pk, 'hex') priv_key = keys.PrivateKey(private_key_bytes) pub_key = priv_key.public_key address = pub_key.to_checksum_address() diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index c90613c..252eeeb 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,5 +1,3 @@ -#- import_playbook: base.yaml -#- import_playbook: geth.yaml - import_playbook: deploy_contracts.yaml - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml @@ -7,4 +5,3 @@ - import_playbook: signature.yaml - import_playbook: link_addresses.yaml - import_playbook: register.yaml -#- import_playbook: ssl.yaml diff --git a/skale-nodes/ansible/main_fair.yaml b/skale-nodes/ansible/main_fair.yaml index 1a261c6..d247174 100644 --- a/skale-nodes/ansible/main_fair.yaml +++ b/skale-nodes/ansible/main_fair.yaml @@ -1,6 +1,4 @@ -#- import_playbook: base.yaml - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml - import_playbook: transfer_funds.yaml - import_playbook: register.yaml -#- import_playbook: ssl.yaml diff --git a/skale-nodes/ansible/main_fair_passive.yaml b/skale-nodes/ansible/main_fair_passive.yaml index c3f6a46..0ac72db 100644 --- a/skale-nodes/ansible/main_fair_passive.yaml +++ b/skale-nodes/ansible/main_fair_passive.yaml @@ -1,4 +1,2 @@ -#- import_playbook: base.yaml - import_playbook: register_passive_fair.yaml - import_playbook: setup.yaml -#- import_playbook: ssl.yaml diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml index e07d9b4..3540509 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/node_artifacts.yaml @@ -35,3 +35,9 @@ chain: "{{ item }}" flush: yes with_items: ["INPUT", "FORWARD", "OUTPUT"] + +- name: Load firewall rules from configuration file + ansible.builtin.command: + cmd: "nft -f /etc/nftables.conf" + register: nft_load_result + tags: cleanup_firewall diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml index a6d907a..1c03cd9 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml @@ -1,2 +1,2 @@ - import_tasks: manager.yaml -- import_tasks: ima.yaml \ No newline at end of file +- import_tasks: ima.yaml diff --git a/skale-nodes/ansible/setup.yaml b/skale-nodes/ansible/setup.yaml index ca0d598..3967cdc 100644 --- a/skale-nodes/ansible/setup.yaml +++ b/skale-nodes/ansible/setup.yaml @@ -1,5 +1,5 @@ - name: Propagate manager_contracts to nodes - hosts: nodes + hosts: nodes,archive gather_facts: no tasks: - name: Set manager_contracts fact for each node @@ -11,7 +11,7 @@ when: manager_contracts is undefined - name: Setup skale node - hosts: nodes + hosts: nodes,archive become: true roles: - role: sync diff --git a/skale-nodes/ansible/update.yaml b/skale-nodes/ansible/update.yaml index 3859206..9d1a21b 100644 --- a/skale-nodes/ansible/update.yaml +++ b/skale-nodes/ansible/update.yaml @@ -1,5 +1,5 @@ - name: Update skale node - hosts: nodes + hosts: nodes,archive become: true roles: - role: sync From 91edbb1f9c5b2bfa8ff495a5a9ba2df690b87e0c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 16 Sep 2025 17:19:39 +0100 Subject: [PATCH 161/279] Run `backup_schains.yaml` for SKALE nodes only --- skale-nodes/ansible/backup.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/backup.yaml b/skale-nodes/ansible/backup.yaml index 5082e2f..b9b94e0 100644 --- a/skale-nodes/ansible/backup.yaml +++ b/skale-nodes/ansible/backup.yaml @@ -1,2 +1,3 @@ - import_playbook: backup_nodes.yaml -- import_playbook: backup_schains.yaml +- include_playbook: backup_schains.yaml + when: node_type is defined and node_type == 'skale' From ca1cf32ecf40f0f60428d6a48ae5c2314318ea5d Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 16 Sep 2025 17:24:50 +0100 Subject: [PATCH 162/279] Update node backup to support FAIR nodes --- .../ansible/roles/node_backup/tasks/node.yaml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/roles/node_backup/tasks/node.yaml b/skale-nodes/ansible/roles/node_backup/tasks/node.yaml index 66913e9..0055b1a 100644 --- a/skale-nodes/ansible/roles/node_backup/tasks/node.yaml +++ b/skale-nodes/ansible/roles/node_backup/tasks/node.yaml @@ -1,9 +1,20 @@ +- name: Validate node_type + fail: + msg: > + The 'node_type' variable must be defined and set to either 'skale' or 'fair'. + Current value: '{{ node_type | default('undefined') }}' + when: node_type is not defined or node_type not in ['skale', 'fair'] + - name: Setting backup archive folder set_fact: backup_path="{{ base_path }}/backup" +- name: Set node command prefix + set_fact: + node_cmd_prefix: "{{ 'fair' if node_type == 'fair' else 'skale' }}" + - name: Turn off the node command: - cmd: "skale node turn-off --yes" + cmd: "{{ node_cmd_prefix }} node turn-off --yes" when: not no_downtime is defined or not no_downtime become: true @@ -15,7 +26,7 @@ - name: Create backup archive command: - cmd: "skale node backup {{ backup_path }}" + cmd: "{{ node_cmd_prefix }} node backup {{ backup_path }}" become: true - name: Create sgx sim backup @@ -28,7 +39,7 @@ - name: Turn on the node back command: - cmd: "skale node turn-on {{ base_path }}/init-env --yes" + cmd: "{{ node_cmd_prefix }} node turn-on {{ base_path }}/init-env --yes" when: not no_downtime is defined or not no_downtime become: true From 0320ac9c60a48027e1db7359bbd612d6416af29f Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 16 Sep 2025 20:18:40 +0100 Subject: [PATCH 163/279] Revert to import --- skale-nodes/ansible/backup.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/skale-nodes/ansible/backup.yaml b/skale-nodes/ansible/backup.yaml index b9b94e0..5082e2f 100644 --- a/skale-nodes/ansible/backup.yaml +++ b/skale-nodes/ansible/backup.yaml @@ -1,3 +1,2 @@ - import_playbook: backup_nodes.yaml -- include_playbook: backup_schains.yaml - when: node_type is defined and node_type == 'skale' +- import_playbook: backup_schains.yaml From 96e5eb9e0efedea79aab94c56dcfe8e33cfe9260 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 16 Sep 2025 20:19:28 +0100 Subject: [PATCH 164/279] Remove unused variable --- skale-nodes/ansible/backup_nodes.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/skale-nodes/ansible/backup_nodes.yaml b/skale-nodes/ansible/backup_nodes.yaml index 8c9ece6..ea4594b 100644 --- a/skale-nodes/ansible/backup_nodes.yaml +++ b/skale-nodes/ansible/backup_nodes.yaml @@ -1,6 +1,4 @@ - name: Backup node hosts: nodes - vars: - - ip_address: "{{ hostvars[inventory_hostname].ansible_host }}" roles: - node_backup From 4e0a09add0ba80f0407c1686502c24b22eaa92ab Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 16 Sep 2025 20:20:08 +0100 Subject: [PATCH 165/279] Fix including --- skale-nodes/ansible/backup_schains.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index ce31c67..e3626f1 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -32,7 +32,7 @@ node_schains: "{{ hostvars['localhost'].node_schains }}" - name: Make snapshot - include: tasks/schains_backup.yaml + include_tasks: tasks/schains_backup.yaml vars: schains: "{{ node_schains[ip_address] }}" when: ip_address in node_schains From 7e34dbd3a2c27fc98acb623b42d7123f5bad8cd7 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 16 Sep 2025 20:21:19 +0100 Subject: [PATCH 166/279] Run schain backup for SKALE nodes only --- skale-nodes/ansible/backup_schains.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index e3626f1..bb955a0 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -1,3 +1,14 @@ +- name: Validate node_type + hosts: nodes + gather_facts: false + tasks: + - name: Validate node_type + fail: + msg: > + The 'node_type' variable must be defined and set to 'skale'. + Current value: '{{ node_type | default('undefined') }}' + when: node_type is not defined or node_type != 'skale' + - name: Fetch schain nodes script hosts: localhost serial: True From 6184e50e64c49bb89966d5438689cec6b1dfa6b9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 17:37:05 +0100 Subject: [PATCH 167/279] Run `node_backup` and `node_restore` roles if node_type in ['skale', 'fair'] only --- skale-nodes/ansible/backup_nodes.yaml | 7 +++++-- skale-nodes/ansible/restore_node.yaml | 5 ++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/skale-nodes/ansible/backup_nodes.yaml b/skale-nodes/ansible/backup_nodes.yaml index ea4594b..8cca410 100644 --- a/skale-nodes/ansible/backup_nodes.yaml +++ b/skale-nodes/ansible/backup_nodes.yaml @@ -1,4 +1,7 @@ -- name: Backup node +- name: Backup SKALE or FAIR nodes hosts: nodes + roles: - - node_backup + - role: node_backup + when: node_type is defined and node_type in ['skale', 'fair'] + tags: backup_node \ No newline at end of file diff --git a/skale-nodes/ansible/restore_node.yaml b/skale-nodes/ansible/restore_node.yaml index f6c6f2a..ff565b8 100644 --- a/skale-nodes/ansible/restore_node.yaml +++ b/skale-nodes/ansible/restore_node.yaml @@ -1,8 +1,7 @@ -- name: Restore node from backup tarball +- name: Restore SKALE or FAIR nodes from backup tarball hosts: nodes - vars: - - ip_address: "{{ hostvars[inventory_hostname].ansible_host }}" roles: - role: node_restore + when: node_type is defined and node_type in ['skale', 'fair'] tags: restore_node From 68a1d61b9fb3e42a0a2fba0ef1fca69193e0b9d6 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 17:45:49 +0100 Subject: [PATCH 168/279] Replace `include` by `import_tasks` --- skale-nodes/ansible/roles/node_restore/tasks/main.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/node_restore/tasks/main.yaml b/skale-nodes/ansible/roles/node_restore/tasks/main.yaml index 0eb30ab..d5134f5 100644 --- a/skale-nodes/ansible/roles/node_restore/tasks/main.yaml +++ b/skale-nodes/ansible/roles/node_restore/tasks/main.yaml @@ -1 +1,2 @@ -- include: node.yaml +- import_tasks: node.yaml + tags: [restore_node] From 553b52c7e18f6bf7daaac2396566079e7047cec6 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 17:46:52 +0100 Subject: [PATCH 169/279] Clear code --- skale-nodes/ansible/roles/node_backup/tasks/main.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/node_backup/tasks/main.yaml b/skale-nodes/ansible/roles/node_backup/tasks/main.yaml index 969745b..5434734 100644 --- a/skale-nodes/ansible/roles/node_backup/tasks/main.yaml +++ b/skale-nodes/ansible/roles/node_backup/tasks/main.yaml @@ -1,4 +1,2 @@ -- name: Backup node - import_tasks: - file: node.yaml - tags: node +- import_tasks: node.yaml + tags: [backup_node] \ No newline at end of file From 4149f4f442e97d185ad30b928002366fac598332 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 17:52:44 +0100 Subject: [PATCH 170/279] Update node restoring procedure to support FAIR nodes --- .../roles/node_restore/tasks/node.yaml | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/roles/node_restore/tasks/node.yaml b/skale-nodes/ansible/roles/node_restore/tasks/node.yaml index 5c90e0e..c672793 100644 --- a/skale-nodes/ansible/roles/node_restore/tasks/node.yaml +++ b/skale-nodes/ansible/roles/node_restore/tasks/node.yaml @@ -1,3 +1,14 @@ +- name: Validate node_type + fail: + msg: > + The 'node_type' variable must be defined and set to either 'skale' or 'fair'. + Current value: '{{ node_type | default('undefined') }}' + when: node_type is not defined or node_type not in ['skale', 'fair'] + +- name: Set node command prefix + set_fact: + node_cmd_prefix: "{{ 'fair' if node_type == 'fair' else 'skale' }}" + - name: Lookup backupfile delegate_to: localhost find: @@ -11,7 +22,7 @@ - name: Get latest backup set_fact: - backup_name: "{{ (search_result.files | sort(attribute='mtime'))[-1].path | basename }}" + backup_name: "{{ (search_result.files | sort(attribute='mtime', reverse=true) | first).path | basename }}" - name: Upload node backup file copy: @@ -25,17 +36,18 @@ - name: Compose regular cmd set_fact: - cmd: "skale node restore {{ base_path }}/backup.tar.gz {{ base_path }}/init-env" + cmd: "{{ node_cmd_prefix }} node restore {{ base_path }}/backup.tar.gz {{ base_path }}/init-env" when: config_only is not defined or not config_only - name: Compose cmd with config only set_fact: - cmd: "skale node restore --config-only {{ base_path }}/backup.tar.gz {{ base_path }}/init-env" - when: config_only is defined and config_only + cmd: "{{ node_cmd_prefix }} node restore --config-only {{ base_path }}/backup.tar.gz {{ base_path }}/init-env" + when: + - node_type == "skale" + - config_only is defined and config_only -- name: Run skale node restore +- name: Run skale/fair node restore shell: cmd: "{{ cmd }}" environment: HOME_DIR: "{{ base_path }}" - tags: skale_restore From e5df02eb4d34cf333e563bb1c5d21b4407a79f26 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 18:18:01 +0100 Subject: [PATCH 171/279] Refactor code --- skale-nodes/ansible/backup_schains.yaml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/skale-nodes/ansible/backup_schains.yaml b/skale-nodes/ansible/backup_schains.yaml index bb955a0..73ad50b 100644 --- a/skale-nodes/ansible/backup_schains.yaml +++ b/skale-nodes/ansible/backup_schains.yaml @@ -1,19 +1,17 @@ -- name: Validate node_type - hosts: nodes +- name: Fetch schain nodes script + hosts: localhost + connection: local gather_facts: false + serial: True + tasks: - name: Validate node_type fail: msg: > - The 'node_type' variable must be defined and set to 'skale'. + The 'node_type' variable must be defined and set to 'skale' for sChain backup. Current value: '{{ node_type | default('undefined') }}' when: node_type is not defined or node_type != 'skale' -- name: Fetch schain nodes script - hosts: localhost - serial: True - - tasks: - name: Run fetch schain nodes script script: fetch_node_schains.py -u environment: From ba841078cf369b4bb57ecc3bd3f46a668689a751 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 18:19:20 +0100 Subject: [PATCH 172/279] Validate `node_type` before running `restore_chain` playbook --- skale-nodes/ansible/restore_schain.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/restore_schain.yaml b/skale-nodes/ansible/restore_schain.yaml index 5f99e23..1a85bd7 100644 --- a/skale-nodes/ansible/restore_schain.yaml +++ b/skale-nodes/ansible/restore_schain.yaml @@ -1,9 +1,18 @@ - name: Fetch schain nodes script hosts: localhost + connection: local + gather_facts: false serial: True tasks: - - name: Fetch nodes schains script + - name: Validate node_type + fail: + msg: > + The 'node_type' variable must be defined and set to 'skale' for sChain restore. + Current value: '{{ node_type | default('undefined') }}' + when: node_type is not defined or node_type != 'skale' + + - name: Run fetch schain nodes script script: fetch_node_schains.py environment: ETH_PRIVATE_KEY: "{{ eth_private_key }}" From 96fa5494d6b9d5562df49b393ec76a91ab18e607 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 17 Sep 2025 18:33:09 +0100 Subject: [PATCH 173/279] Remove compounded 'backup' and 'restore' playbooks --- skale-nodes/ansible/backup.yaml | 2 -- skale-nodes/ansible/restore.yaml | 7 ------- 2 files changed, 9 deletions(-) delete mode 100644 skale-nodes/ansible/backup.yaml delete mode 100644 skale-nodes/ansible/restore.yaml diff --git a/skale-nodes/ansible/backup.yaml b/skale-nodes/ansible/backup.yaml deleted file mode 100644 index 5082e2f..0000000 --- a/skale-nodes/ansible/backup.yaml +++ /dev/null @@ -1,2 +0,0 @@ -- import_playbook: backup_nodes.yaml -- import_playbook: backup_schains.yaml diff --git a/skale-nodes/ansible/restore.yaml b/skale-nodes/ansible/restore.yaml deleted file mode 100644 index cec9686..0000000 --- a/skale-nodes/ansible/restore.yaml +++ /dev/null @@ -1,7 +0,0 @@ -- import_playbook: restore_node.yaml - vars: - config_only: True - -- import_playbook: restore_schain.yaml - -- import_playbook: update.yaml From 86e705b81d788e8528b7bb97cc60c66b57122939 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 18 Sep 2025 19:31:29 +0100 Subject: [PATCH 174/279] Move `deploy_fair` to a separate role --- .../roles/deploy_fair/tasks/deploy_fair.yaml | 44 ++++++++++++++++++ .../ansible/roles/deploy_fair/tasks/main.yaml | 46 +------------------ 2 files changed, 46 insertions(+), 44 deletions(-) create mode 100644 skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml new file mode 100644 index 0000000..bf8ce8c --- /dev/null +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml @@ -0,0 +1,44 @@ +- name: Deploy Fair manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/fair-deploy.log) + shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_fair.sh 2>&1 | tee {{ playbook_dir }}/logs/fair-deploy.log + run_once: yes + environment: + FAIR_TAG: "{{ fair_tag }}" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + MAINNET_ENDPOINT: "{{ endpoint }}" + ENDPOINT: "{{ boot_endpoint }}" + CHAIN_NAME: "{{ chain_name }}" + TARGET: "{{ manager_contracts }}" + EXPLORER_URL: "{{ explorer_url | default('') }}" + tags: deploy_fair + +- name: Copy Fair ABI + copy: + src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/fair.json" + dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/fairManagerComponents.json" + tags: upload_fair + +- name: Ensure group vars all + file: + state: touch + path: "{{ playbook_dir }}/group_vars/all" + tags: upload_fair + +- name: Get Fair Contract Address + shell: "jq -r '.Committee' {{ playbook_dir }}/../../helper-scripts/contracts_data/fair.json" + register: mm_address_output + changed_when: false + tags: upload_fair + +- name: Save Fair Contract Address to variable + set_fact: + fair_contracts: "{{ mm_address_output.stdout }}" + tags: upload_fair + +- name: Save Fair Contract Address to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + insertafter: EOF + regexp: "^fair_contracts:" + line: 'fair_contracts: "{{ fair_contracts }}"' + state: present + tags: upload_fair diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml index bf8ce8c..597f80a 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml @@ -1,44 +1,2 @@ -- name: Deploy Fair manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/fair-deploy.log) - shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_fair.sh 2>&1 | tee {{ playbook_dir }}/logs/fair-deploy.log - run_once: yes - environment: - FAIR_TAG: "{{ fair_tag }}" - ETH_PRIVATE_KEY: "{{ eth_private_key }}" - MAINNET_ENDPOINT: "{{ endpoint }}" - ENDPOINT: "{{ boot_endpoint }}" - CHAIN_NAME: "{{ chain_name }}" - TARGET: "{{ manager_contracts }}" - EXPLORER_URL: "{{ explorer_url | default('') }}" - tags: deploy_fair - -- name: Copy Fair ABI - copy: - src: "{{ playbook_dir }}/../../helper-scripts/contracts_data/fair.json" - dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/fairManagerComponents.json" - tags: upload_fair - -- name: Ensure group vars all - file: - state: touch - path: "{{ playbook_dir }}/group_vars/all" - tags: upload_fair - -- name: Get Fair Contract Address - shell: "jq -r '.Committee' {{ playbook_dir }}/../../helper-scripts/contracts_data/fair.json" - register: mm_address_output - changed_when: false - tags: upload_fair - -- name: Save Fair Contract Address to variable - set_fact: - fair_contracts: "{{ mm_address_output.stdout }}" - tags: upload_fair - -- name: Save Fair Contract Address to group vars - lineinfile: - path: "{{ playbook_dir }}/group_vars/all" - insertafter: EOF - regexp: "^fair_contracts:" - line: 'fair_contracts: "{{ fair_contracts }}"' - state: present - tags: upload_fair +- import_tasks: deploy_fair.yaml +- import_tasks: whitelist_and_stake.yaml From d0f012a5852993e6753e7f2c33ea9b4f6eff0ef2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 18 Sep 2025 20:01:50 +0100 Subject: [PATCH 175/279] Addd python script for whitelisting and staking fair boot nodes --- .../ansible/files/whitelist_and_stake.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 skale-nodes/ansible/files/whitelist_and_stake.py diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py new file mode 100644 index 0000000..dfef1a3 --- /dev/null +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -0,0 +1,42 @@ +import logging +import os + +from skale import FairManager +from eth_typing import HexStr +from skale.wallets import Web3Wallet +from skale.utils.web3_utils import init_web3 +from skale.utils.helper import init_default_logger + +ENDPOINT = os.getenv('ENDPOINT') +FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') +ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') +WEI_AMOUNT = int(os.getenv('WEI_AMOUNT')) + +logger = logging.getLogger(__name__) +init_default_logger() + +def init_fair_manager() -> FairManager: + web3 = init_web3(ENDPOINT) + wallet = Web3Wallet(HexStr(ETH_PRIVATE_KEY), web3) + return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet=wallet) + +if __name__ == '__main__': + + fair = init_fair_manager() + nodes = fair.nodes.get_active_node_ids() + logger.debug(nodes) + for node_id in nodes: + try: + if fair.status.is_whitelisted(node_id): + logger.info(f'Node {node_id} is already whitelisted. Skipping...') + else: + fair.status.whitelist_node(node_id) + logger.info(f'Node {node_id} is successfully whitelisted') + except Exception as e: + logger.warning(f'Cannot whitelist node {node_id}: {e}') + try: + fair.staking.stake(node_id, value=WEI_AMOUNT) + logger.info(f'Node {node_id} is successfully staked') + except Exception as e: + logger.warning(f'Cannot stake node {node_id}: {e}') + From b3b4e6ba8c30a724ce6567bfde94eb5056ffb6a5 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 18 Sep 2025 21:00:44 +0100 Subject: [PATCH 176/279] Addd the new role for whitelisting and staking fair boot nodes --- .../roles/deploy_fair/tasks/whitelist_and_stake.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml new file mode 100644 index 0000000..581e271 --- /dev/null +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml @@ -0,0 +1,10 @@ +- name: Execute whitelist_and_stake script + script: whitelist_and_stake.py + environment: + BASE_DIR: "files" + WEI_AMOUNT: "10000000000000000" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ boot_endpoint }}" + FAIR_CONTRACTS: "{{ fair_contracts }}" + args: + executable: python3 \ No newline at end of file From de59e5faee02d3bd889cc3ee7c40f43ca87169b9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 18 Sep 2025 22:38:43 +0100 Subject: [PATCH 177/279] Refactor code --- .../ansible/files/whitelist_and_stake.py | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py index dfef1a3..2acd3b7 100644 --- a/skale-nodes/ansible/files/whitelist_and_stake.py +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -1,11 +1,11 @@ import logging import os -from skale import FairManager from eth_typing import HexStr -from skale.wallets import Web3Wallet -from skale.utils.web3_utils import init_web3 +from skale import FairManager from skale.utils.helper import init_default_logger +from skale.utils.web3_utils import init_web3 +from skale.wallets import Web3Wallet ENDPOINT = os.getenv('ENDPOINT') FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') @@ -15,28 +15,46 @@ logger = logging.getLogger(__name__) init_default_logger() + def init_fair_manager() -> FairManager: web3 = init_web3(ENDPOINT) wallet = Web3Wallet(HexStr(ETH_PRIVATE_KEY), web3) return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet=wallet) -if __name__ == '__main__': - fair = init_fair_manager() - nodes = fair.nodes.get_active_node_ids() - logger.debug(nodes) - for node_id in nodes: - try: - if fair.status.is_whitelisted(node_id): - logger.info(f'Node {node_id} is already whitelisted. Skipping...') - else: - fair.status.whitelist_node(node_id) - logger.info(f'Node {node_id} is successfully whitelisted') - except Exception as e: - logger.warning(f'Cannot whitelist node {node_id}: {e}') - try: - fair.staking.stake(node_id, value=WEI_AMOUNT) - logger.info(f'Node {node_id} is successfully staked') - except Exception as e: - logger.warning(f'Cannot stake node {node_id}: {e}') +def process_node(fair_manager: FairManager, node_id: int) -> None: + try: + if fair_manager.status.is_whitelisted(node_id): + logger.info(f'Node {node_id} is already whitelisted. Skipping whitelisting.') + else: + fair_manager.status.whitelist_node(node_id) + logger.info(f'Node {node_id} was successfully whitelisted.') + except Exception as e: + logger.warning(f'Could not whitelist node {node_id}: {e}') + try: + fair_manager.staking.stake(node_id, value=WEI_AMOUNT) + logger.info(f'Node {node_id} was successfully staked with {WEI_AMOUNT} Wei.') + except Exception as e: + logger.warning(f'Could not stake node {node_id}: {e}') + + +def main() -> None: + fair_manager = init_fair_manager() + + try: + nodes_to_process = fair_manager.nodes.get_active_node_ids() + if not nodes_to_process: + logger.info('No active nodes found') + return + logger.info(f'Found active nodes: {nodes_to_process}') + except Exception as e: + logger.critical(f'Failed to get active node IDs: {e}') + return + + for node_id in nodes_to_process: + process_node(fair_manager, node_id) + + +if __name__ == '__main__': + main() From ab682fedf64d38e5143de4072e9ca2b41b78d1e0 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 18 Sep 2025 22:46:04 +0100 Subject: [PATCH 178/279] Fix node_id type --- skale-nodes/ansible/files/whitelist_and_stake.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py index 2acd3b7..9b06efa 100644 --- a/skale-nodes/ansible/files/whitelist_and_stake.py +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -6,6 +6,7 @@ from skale.utils.helper import init_default_logger from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet +from skale.types.node import NodeId ENDPOINT = os.getenv('ENDPOINT') FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') @@ -22,7 +23,7 @@ def init_fair_manager() -> FairManager: return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet=wallet) -def process_node(fair_manager: FairManager, node_id: int) -> None: +def process_node(fair_manager: FairManager, node_id: NodeId) -> None: try: if fair_manager.status.is_whitelisted(node_id): logger.info(f'Node {node_id} is already whitelisted. Skipping whitelisting.') From 3f23b0c3cf10977b86f0d5a2d17e8a2806c907bf Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 18 Sep 2025 22:52:45 +0100 Subject: [PATCH 179/279] Sort imports --- skale-nodes/ansible/files/whitelist_and_stake.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py index 9b06efa..585e450 100644 --- a/skale-nodes/ansible/files/whitelist_and_stake.py +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -3,10 +3,10 @@ from eth_typing import HexStr from skale import FairManager +from skale.types.node import NodeId from skale.utils.helper import init_default_logger from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet -from skale.types.node import NodeId ENDPOINT = os.getenv('ENDPOINT') FAIR_CONTRACTS = os.getenv('FAIR_CONTRACTS') From db00a637be82ce93c7f9849cb2f04dc8ff2b2ba9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 19 Sep 2025 18:47:29 +0100 Subject: [PATCH 180/279] Use sys.exit(1) instead of return and write errors to stderr for Ansible --- .../ansible/files/whitelist_and_stake.py | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py index 585e450..d07d193 100644 --- a/skale-nodes/ansible/files/whitelist_and_stake.py +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -1,5 +1,6 @@ import logging import os +import sys from eth_typing import HexStr from skale import FairManager @@ -23,7 +24,8 @@ def init_fair_manager() -> FairManager: return FairManager(ENDPOINT, FAIR_CONTRACTS, wallet=wallet) -def process_node(fair_manager: FairManager, node_id: NodeId) -> None: +def process_node(fair_manager: FairManager, node_id: NodeId) -> list[str]: + node_errors = [] try: if fair_manager.status.is_whitelisted(node_id): logger.info(f'Node {node_id} is already whitelisted. Skipping whitelisting.') @@ -31,18 +33,22 @@ def process_node(fair_manager: FairManager, node_id: NodeId) -> None: fair_manager.status.whitelist_node(node_id) logger.info(f'Node {node_id} was successfully whitelisted.') except Exception as e: - logger.warning(f'Could not whitelist node {node_id}: {e}') + error_msg = f'Could not whitelist node {node_id}: {e}' + logger.warning(error_msg) + node_errors.append(error_msg) try: fair_manager.staking.stake(node_id, value=WEI_AMOUNT) logger.info(f'Node {node_id} was successfully staked with {WEI_AMOUNT} Wei.') except Exception as e: - logger.warning(f'Could not stake node {node_id}: {e}') + error_msg = f'Could not stake node {node_id}: {e}' + logger.warning(error_msg) + node_errors.append(error_msg) + return node_errors def main() -> None: fair_manager = init_fair_manager() - try: nodes_to_process = fair_manager.nodes.get_active_node_ids() if not nodes_to_process: @@ -50,12 +56,21 @@ def main() -> None: return logger.info(f'Found active nodes: {nodes_to_process}') except Exception as e: - logger.critical(f'Failed to get active node IDs: {e}') - return + logger.critical(f'Failed to get active node IDs: {e}') # Removed to prevent duplication in stdout + sys.stderr.write(f"CRITICAL: Failed to get active node IDs: {e}\n") + sys.exit(1) + errors = [] for node_id in nodes_to_process: - process_node(fair_manager, node_id) + node_errors = process_node(fair_manager, node_id) + if node_errors: + errors.extend(node_errors) + if errors: + sys.stderr.write("Errors occurred during script execution:\n") + for err in errors: + sys.stderr.write(f"- {err}\n") + sys.exit(1) if __name__ == '__main__': main() From 197c4a26fe8999b456cfefdef899173cee1c8d28 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 19 Sep 2025 18:56:07 +0100 Subject: [PATCH 181/279] Do not use `init_default_logger` --- skale-nodes/ansible/files/whitelist_and_stake.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py index d07d193..901f80b 100644 --- a/skale-nodes/ansible/files/whitelist_and_stake.py +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -5,7 +5,6 @@ from eth_typing import HexStr from skale import FairManager from skale.types.node import NodeId -from skale.utils.helper import init_default_logger from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet @@ -15,7 +14,6 @@ WEI_AMOUNT = int(os.getenv('WEI_AMOUNT')) logger = logging.getLogger(__name__) -init_default_logger() def init_fair_manager() -> FairManager: @@ -48,6 +46,9 @@ def process_node(fair_manager: FairManager, node_id: NodeId) -> list[str]: def main() -> None: + logging.basicConfig( + level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', stream=sys.stdout + ) fair_manager = init_fair_manager() try: nodes_to_process = fair_manager.nodes.get_active_node_ids() From dd7a2d11a3e3f0751e2c78556c9943582c8b3c33 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 19 Sep 2025 18:59:14 +0100 Subject: [PATCH 182/279] Remove extra logging --- skale-nodes/ansible/files/whitelist_and_stake.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/skale-nodes/ansible/files/whitelist_and_stake.py b/skale-nodes/ansible/files/whitelist_and_stake.py index 901f80b..43e29a0 100644 --- a/skale-nodes/ansible/files/whitelist_and_stake.py +++ b/skale-nodes/ansible/files/whitelist_and_stake.py @@ -32,7 +32,6 @@ def process_node(fair_manager: FairManager, node_id: NodeId) -> list[str]: logger.info(f'Node {node_id} was successfully whitelisted.') except Exception as e: error_msg = f'Could not whitelist node {node_id}: {e}' - logger.warning(error_msg) node_errors.append(error_msg) try: @@ -40,7 +39,6 @@ def process_node(fair_manager: FairManager, node_id: NodeId) -> list[str]: logger.info(f'Node {node_id} was successfully staked with {WEI_AMOUNT} Wei.') except Exception as e: error_msg = f'Could not stake node {node_id}: {e}' - logger.warning(error_msg) node_errors.append(error_msg) return node_errors @@ -57,7 +55,6 @@ def main() -> None: return logger.info(f'Found active nodes: {nodes_to_process}') except Exception as e: - logger.critical(f'Failed to get active node IDs: {e}') # Removed to prevent duplication in stdout sys.stderr.write(f"CRITICAL: Failed to get active node IDs: {e}\n") sys.exit(1) From ef9db13f58d1ae5b25b71782fe523ffd49e3a9a9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 19 Sep 2025 19:03:26 +0100 Subject: [PATCH 183/279] Use yaml callback to make Ansible output more compact and clear --- skale-nodes/ansible/ansible.cfg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 skale-nodes/ansible/ansible.cfg diff --git a/skale-nodes/ansible/ansible.cfg b/skale-nodes/ansible/ansible.cfg new file mode 100644 index 0000000..599205a --- /dev/null +++ b/skale-nodes/ansible/ansible.cfg @@ -0,0 +1,3 @@ +[defaults] +host_key_checking = False +stdout_callback = yaml \ No newline at end of file From 7da07694e5c04a16bae1984fd5c73f9e4d63f543 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 19 Sep 2025 19:04:17 +0100 Subject: [PATCH 184/279] Remove ansible.cfg from .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0764fec..ddc974e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ skale-nodes/ansible/files/authorized_keys skale-nodes/ansible/files/validator-id*.txt skale-nodes/ansible/terraform/do/hosts skale-nodes/ansible/terraform/aws/hosts* -skale-nodes/ansible/ansible.cfg skale-nodes/ansible/sgx/ansible.cfg skale-nodes/ansible/files/base-key.txt From 5cfa9a69a494da6e8a9f4d041709876c2af190e9 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 22 Sep 2025 12:11:05 +0100 Subject: [PATCH 185/279] Add `snapshot` parameter for FAIR nodes --- skale-nodes/ansible/roles/init/tasks/main.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 587cde3..a49b76b 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -3,7 +3,7 @@ set_fact: passive_node_id: "{{ lookup('file', 'files/passive-id.txt') }}" when: - - node_type == "fair" + - node_type == 'fair' - passive_node is defined and passive_node - name: Set sync_flags based on passive_node status @@ -24,6 +24,15 @@ - passive_node is defined and passive_node - archive is defined and archive +- name: Add --snapshot if needed + set_fact: + sync_flags: "{{ sync_flags }} --snapshot {{ snapshot }}" + when: + - node_type == 'fair' + - passive_node is defined and passive_node + - snapshot is defined + - snapshot == 'any' or 'http' in snapshot + - name: Build and execute init command command: cmd: "{{ command_prefixes[node_type] }} init {{ base_path }}/init-env {{ sync_flags }}" From 24c477f981e3fb7e5b999d553adba717f803ce22 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 23 Sep 2025 18:27:20 +0100 Subject: [PATCH 186/279] Decrease WEI_AMOUNT to 1 wei --- .../ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml index 581e271..8ca2612 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/whitelist_and_stake.yaml @@ -2,7 +2,7 @@ script: whitelist_and_stake.py environment: BASE_DIR: "files" - WEI_AMOUNT: "10000000000000000" + WEI_AMOUNT: "1" ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ boot_endpoint }}" FAIR_CONTRACTS: "{{ fair_contracts }}" From d05b83d52c0c78586525dc2932d920e9372d48ad Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 24 Sep 2025 17:14:25 +0100 Subject: [PATCH 187/279] Add `deploy_fair` and `whitelist_and_stake` tags --- skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml index 597f80a..991a210 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/main.yaml @@ -1,2 +1,5 @@ - import_tasks: deploy_fair.yaml + tags: [deploy_fair] - import_tasks: whitelist_and_stake.yaml + tags: [whitelist_and_stake] + From da179abef57014ad2c7671fc67462da67bb84fa0 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 25 Sep 2025 19:38:59 +0100 Subject: [PATCH 188/279] Bump skale.py version to 7.4dev6 --- skale-nodes/ansible/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index f8c51ed..e1f0c00 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.3.dev8 +skale.py==7.4dev6 boto3==1.17.34 From 77114aa421c1e1ecd01b0d107d74697fdf82b49b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 25 Sep 2025 19:40:27 +0100 Subject: [PATCH 189/279] Temporary comment `set_rng` --- .../roles/fair_migrate/tasks/main.yaml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 5521cc6..8a41740 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -7,16 +7,16 @@ debug: msg: "{{ migrate_cmd.stdout }}" -- name: Execute set_rng script - script: set_rng.py - environment: - BASE_DIR: "files" - ETH_PRIVATE_KEY: "{{ eth_private_key }}" - ENDPOINT: "{{ boot_endpoint }}" - FAIR_CONTRACTS: "{{ fair_contracts }}" - args: - executable: python3 - delegate_to: localhost - run_once: true - become: false - tags: set_rng \ No newline at end of file +#- name: Execute set_rng script +# script: set_rng.py +# environment: +# BASE_DIR: "files" +# ETH_PRIVATE_KEY: "{{ eth_private_key }}" +# ENDPOINT: "{{ boot_endpoint }}" +# FAIR_CONTRACTS: "{{ fair_contracts }}" +# args: +# executable: python3 +# delegate_to: localhost +# run_once: true +# become: false +# tags: set_rng \ No newline at end of file From 2e8918777cc51b48000928639dd1c3e47bd237ed Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 25 Sep 2025 19:46:13 +0100 Subject: [PATCH 190/279] Set `ALLOWED_TS_DIFF` to -1 to use anvil without `--block-time` parameter --- skale-nodes/ansible/roles/create_chain/tasks/main.yaml | 1 + skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml | 1 + .../ansible/roles/link_addresses/tasks/link_addresses.yaml | 1 + skale-nodes/ansible/roles/setup_validator/tasks/main.yaml | 1 + 4 files changed, 4 insertions(+) diff --git a/skale-nodes/ansible/roles/create_chain/tasks/main.yaml b/skale-nodes/ansible/roles/create_chain/tasks/main.yaml index 56ceb52..612632d 100644 --- a/skale-nodes/ansible/roles/create_chain/tasks/main.yaml +++ b/skale-nodes/ansible/roles/create_chain/tasks/main.yaml @@ -7,6 +7,7 @@ MANAGER_CONTRACTS: "{{ manager_contracts }}" CHAIN_NAME: "{{ chain_name }}" CHAIN_TYPE: "{{ chain_type }}" + ALLOWED_TS_DIFF: -1 args: executable: python3 tags: create_chain diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 4318e6e..97e7760 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -50,6 +50,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" MANAGER_CONTRACTS: "{{ manager_contracts }}" + ALLOWED_TS_DIFF: -1 args: executable: python3 tags: fix_zero_node diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml index 2ce9d78..d7fc66f 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml @@ -13,6 +13,7 @@ ENDPOINT: "{{ endpoint }}" MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" + ALLOWED_TS_DIFF: -1 args: executable: python3 with_fileglob: "node-info/*" diff --git a/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml b/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml index 1d040ab..b6da337 100644 --- a/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml +++ b/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml @@ -13,5 +13,6 @@ MANAGER_CONTRACTS: "{{ manager_contracts }}" COMMISSION_RATE: "1" NODES_NUMBER: "{{ hosts|length }}" + ALLOWED_TS_DIFF: -1 args: executable: python3 From 6097a97ef3e7c0340cac39d494bc89ad6fe6c738 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 26 Sep 2025 09:51:46 +0100 Subject: [PATCH 191/279] Temporary comment `wait_for_next_block` to support anvil --- skale-nodes/ansible/files/fix_zero_node_fair.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/files/fix_zero_node_fair.py b/skale-nodes/ansible/files/fix_zero_node_fair.py index 85e1529..6bd07ca 100644 --- a/skale-nodes/ansible/files/fix_zero_node_fair.py +++ b/skale-nodes/ansible/files/fix_zero_node_fair.py @@ -72,7 +72,7 @@ def wait_for_next_block(web3): def fix_zero_node(skale): wallet = generate_wallet(skale.web3) print(f'Node Address: {wallet.address}') - wait_for_next_block(skale.web3) + # wait_for_next_block(skale.web3) # TODO: make it conditional send_eth(skale.web3, skale.wallet, wallet.address, ETH_AMOUNT) add_test_permissions(skale) From c7f40f12e00e2106ab1384f9525fe144f7d26528 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 29 Sep 2025 11:54:20 +0100 Subject: [PATCH 192/279] Add anvil support to `transfer_funds` script --- skale-nodes/ansible/files/transfer_funds.py | 35 ++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/files/transfer_funds.py b/skale-nodes/ansible/files/transfer_funds.py index 406741d..784d334 100644 --- a/skale-nodes/ansible/files/transfer_funds.py +++ b/skale-nodes/ansible/files/transfer_funds.py @@ -19,7 +19,9 @@ import os import logging +import sys +from eth_typing import HexStr from skale.wallets import Web3Wallet from skale.utils.web3_utils import init_web3 from skale.utils.helper import init_default_logger @@ -29,10 +31,11 @@ BASE_DIR = os.getenv('BASE_DIR') ENDPOINT = os.getenv('ENDPOINT') -MANAGER_CONTRACTS = os.getenv('MANAGER_CONTRACTS') ETH_PRIVATE_KEY = os.getenv('ETH_PRIVATE_KEY') ADDRESS = os.getenv('ADDRESS') AMOUNT = float(os.getenv('AMOUNT')) +TARGET_PRIVATE_KEY = os.getenv('TARGET_PRIVATE_KEY') +ALLOWED_TS_DIFF = int(os.getenv('ALLOWED_TS_DIFF', 300)) logger = logging.getLogger(__name__) init_default_logger() @@ -40,9 +43,33 @@ def main(): web3 = init_web3(ENDPOINT) - wallet = Web3Wallet(ETH_PRIVATE_KEY, web3) - address = to_checksum_address(ADDRESS) - send_eth(web3, wallet, address, AMOUNT) + + # If using anvil, disable the stale check middleware to prevent StaleBlockchain errors + if ALLOWED_TS_DIFF < 0: + if 'stalecheck' in web3.middleware_onion: + logger.info("Disabling stalecheck middleware for anvil.") + web3.middleware_onion.remove('stalecheck') + else: + logger.info("Stalecheck middleware not found, no action needed.") + + wallet = Web3Wallet(HexStr(ETH_PRIVATE_KEY), web3) + + target_address = None + if ADDRESS: + target_address = ADDRESS + elif TARGET_PRIVATE_KEY: + logger.info("ADDRESS not provided, deriving from TARGET_PRIVATE_KEY.") + target_wallet = Web3Wallet(HexStr(TARGET_PRIVATE_KEY), web3) + target_address = target_wallet.address + + if not target_address: + logger.critical("Error: Neither ADDRESS nor TARGET_PRIVATE_KEY environment variables were provided.") + sys.exit(1) + + checksum_address = to_checksum_address(target_address) + logger.info(f"Sending {AMOUNT} ETH to {checksum_address}...") + send_eth(web3, wallet, checksum_address, AMOUNT) + logger.info("Transfer successful.") if __name__ == '__main__': From a05519c1fb7a99d81292eb96e3bfb3db095f8a40 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 29 Sep 2025 11:57:51 +0100 Subject: [PATCH 193/279] Add the role for transferring funds before deploying to anvil --- .../deploy_contracts/tasks/transfer_funds.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml new file mode 100644 index 0000000..b90901f --- /dev/null +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml @@ -0,0 +1,18 @@ +- name: Set allowed_ts_diff based on anvil variable + set_fact: + allowed_ts_diff: "{{ -1 if anvil is defined and anvil else 300 }}" + run_once: yes + +- name: Transfer funds from the base anvil account to main one + run_once: yes + tags: anvil_funds + ansible.builtin.script: transfer_funds.py + environment: + ETH_PRIVATE_KEY: "{{ anvil_private_key }}" + TARGET_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ endpoint }}" + BASE_DIR: "files" + AMOUNT: "{{ anvil_base_funds_amount | default(10) }}" + ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" + args: + executable: python3 From 9d689a1c4aad24a095b2d876cfab0b5ea3ae299a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 29 Sep 2025 12:01:06 +0100 Subject: [PATCH 194/279] Set and use `allowed_ts_diff` variable --- .../roles/create_chain/tasks/main.yaml | 2 +- .../roles/deploy_contracts/tasks/main.yaml | 2 ++ .../roles/deploy_contracts/tasks/manager.yaml | 19 ++++++++++++++++++- .../link_addresses/tasks/link_addresses.yaml | 2 +- .../roles/setup_validator/tasks/main.yaml | 2 +- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/create_chain/tasks/main.yaml b/skale-nodes/ansible/roles/create_chain/tasks/main.yaml index 612632d..a46e1f8 100644 --- a/skale-nodes/ansible/roles/create_chain/tasks/main.yaml +++ b/skale-nodes/ansible/roles/create_chain/tasks/main.yaml @@ -7,7 +7,7 @@ MANAGER_CONTRACTS: "{{ manager_contracts }}" CHAIN_NAME: "{{ chain_name }}" CHAIN_TYPE: "{{ chain_type }}" - ALLOWED_TS_DIFF: -1 + ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" args: executable: python3 tags: create_chain diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml index 1c03cd9..ce37a0a 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/main.yaml @@ -1,2 +1,4 @@ +- import_tasks: transfer_funds.yaml + when: anvil is defined and anvil - import_tasks: manager.yaml - import_tasks: ima.yaml diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 97e7760..0fb1814 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -42,6 +42,23 @@ state: present tags: upload_sm +- name: Set allowed_ts_diff based on anvil variable + set_fact: + allowed_ts_diff: "{{ -1 if anvil is defined and anvil else 300 }}" + run_once: yes + tags: fix_zero_node + +- name: Save allowed_ts_diff to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + insertafter: EOF + regexp: "^allowed_ts_diff:" + line: 'allowed_ts_diff: "{{ allowed_ts_diff }}"' + state: present + run_once: yes + tags: fix_zero_node + + - name: Hotfix for zero node in Fair run_once: yes script: fix_zero_node_fair.py @@ -50,7 +67,7 @@ ETH_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" MANAGER_CONTRACTS: "{{ manager_contracts }}" - ALLOWED_TS_DIFF: -1 + ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" args: executable: python3 tags: fix_zero_node diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml index d7fc66f..cbdeb1b 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/link_addresses.yaml @@ -13,7 +13,7 @@ ENDPOINT: "{{ endpoint }}" MANAGER_CONTRACTS: "{{ manager_contracts }}" BASE_DIR: "files" - ALLOWED_TS_DIFF: -1 + ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" args: executable: python3 with_fileglob: "node-info/*" diff --git a/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml b/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml index b6da337..b58357e 100644 --- a/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml +++ b/skale-nodes/ansible/roles/setup_validator/tasks/main.yaml @@ -13,6 +13,6 @@ MANAGER_CONTRACTS: "{{ manager_contracts }}" COMMISSION_RATE: "1" NODES_NUMBER: "{{ hosts|length }}" - ALLOWED_TS_DIFF: -1 + ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" args: executable: python3 From 8ecf8c152c9109026be6e11c461493462e0f6975 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 29 Sep 2025 12:02:01 +0100 Subject: [PATCH 195/279] Uncomment `Execute set_rng script` task --- .../roles/fair_migrate/tasks/main.yaml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 8a41740..5521cc6 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -7,16 +7,16 @@ debug: msg: "{{ migrate_cmd.stdout }}" -#- name: Execute set_rng script -# script: set_rng.py -# environment: -# BASE_DIR: "files" -# ETH_PRIVATE_KEY: "{{ eth_private_key }}" -# ENDPOINT: "{{ boot_endpoint }}" -# FAIR_CONTRACTS: "{{ fair_contracts }}" -# args: -# executable: python3 -# delegate_to: localhost -# run_once: true -# become: false -# tags: set_rng \ No newline at end of file +- name: Execute set_rng script + script: set_rng.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ boot_endpoint }}" + FAIR_CONTRACTS: "{{ fair_contracts }}" + args: + executable: python3 + delegate_to: localhost + run_once: true + become: false + tags: set_rng \ No newline at end of file From c951fb1f6aac11a21401a2425bffce41c2fcaf8a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 29 Sep 2025 12:31:09 +0100 Subject: [PATCH 196/279] Cleanup group_vars `fair_contracts` and `allowed_ts_diff` --- skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index 1078c9c..d394727 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -9,12 +9,11 @@ state: absent regexp: "{{ item }}" path: "{{ playbook_dir }}/group_vars/all" - loop: ["^manager_contracts", "^ima_contracts"] + loop: ["^manager_contracts", "^ima_contracts", "^fair_contracts", "^allowed_ts_diff"] tags: - group_vars_cleanup - contract_data_cleanup - - name: Find all abis find: paths: ["{{ playbook_dir }}/../../helper-scripts/contracts_data"] From 11611c478de1da4dfde69e1016d623109adb6426 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 15:41:44 +0100 Subject: [PATCH 197/279] Set endpoint for anvil --- .../roles/deploy_contracts/tasks/manager.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 0fb1814..afe988e 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -1,3 +1,24 @@ +- name: Set endpoint for anvil + set_fact: + endpoint: "http://{{ hostvars[groups['nodes'][0]].ansible_host }}:8545" + run_once: true + when: anvil is defined and anvil + tags: + - deploy_sm + - anvil + +- name: Save endpoint for anvil to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + create: yes + regexp: "^endpoint:" + line: "endpoint: {{ endpoint }}" + run_once: yes + when: anvil is defined and anvil + tags: + - deploy_sm + - anvil + - name: Deploy manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/sm-deploy.log) shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_manager.sh 2>&1 | tee {{ playbook_dir }}/logs/sm-deploy.log run_once: yes From df41064663c535c91315844391a9f970317f6184 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 15:48:34 +0100 Subject: [PATCH 198/279] Improve updating `group_vars/all` --- .../roles/deploy_contracts/tasks/manager.yaml | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index afe988e..4ee168d 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -37,12 +37,6 @@ dest: "{{ playbook_dir }}/../../helper-scripts/contracts_data/skaleManagerComponents.json" tags: upload_sm -- name: Ensure group vars all - file: - state: touch - path: "{{ playbook_dir }}/group_vars/all" - tags: upload_sm - - name: Get SM Contract Address shell: "jq -r '.skale_manager_address' {{ playbook_dir }}/../../helper-scripts/contracts_data/manager.json" register: sm_address_output @@ -57,10 +51,9 @@ - name: Save SM URL to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" - insertafter: EOF + create: yes regexp: "^manager_contracts:" - line: 'manager_contracts: "{{ manager_contracts }}"' - state: present + line: "manager_contracts: {{ manager_contracts }}" tags: upload_sm - name: Set allowed_ts_diff based on anvil variable @@ -72,10 +65,9 @@ - name: Save allowed_ts_diff to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" - insertafter: EOF + create: yes regexp: "^allowed_ts_diff:" - line: 'allowed_ts_diff: "{{ allowed_ts_diff }}"' - state: present + line: "allowed_ts_diff: {{ allowed_ts_diff }}" run_once: yes tags: fix_zero_node From a349454add98e65129a8e7fcda96c64b73fba3ab Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 15:49:06 +0100 Subject: [PATCH 199/279] Save `allowed_ts_diff` to group vars --- .../deploy_contracts/tasks/transfer_funds.yaml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml index b90901f..107f107 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml @@ -2,17 +2,29 @@ set_fact: allowed_ts_diff: "{{ -1 if anvil is defined and anvil else 300 }}" run_once: yes + tags: + - anvil + +- name: Save allowed_ts_diff to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + create: yes + regexp: "^allowed_ts_diff:" + line: "allowed_ts_diff: {{ allowed_ts_diff }}" + run_once: yes + tags: + - anvil - name: Transfer funds from the base anvil account to main one run_once: yes tags: anvil_funds - ansible.builtin.script: transfer_funds.py + script: transfer_funds.py environment: ETH_PRIVATE_KEY: "{{ anvil_private_key }}" TARGET_PRIVATE_KEY: "{{ eth_private_key }}" ENDPOINT: "{{ endpoint }}" BASE_DIR: "files" - AMOUNT: "{{ anvil_base_funds_amount | default(10) }}" + AMOUNT: "{{ anvil_eth_amount | default(10) }}" ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" args: executable: python3 From e1ae5c5b4501c6c665e1a33520496ecef8dc548c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 15:49:32 +0100 Subject: [PATCH 200/279] Run anvil container --- .../deploy_contracts/tasks/run_anvil.yaml | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml new file mode 100644 index 0000000..17b7472 --- /dev/null +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml @@ -0,0 +1,45 @@ +- name: Manage anvil container on the first remote node + run_once: true + tags: + - anvil + block: + - name: Ensure previous anvil container is removed + docker_container: + name: anvil + state: absent + + - name: Run anvil container + docker_container: + name: anvil + image: "ghcr.io/foundry-rs/foundry:rc-3" + command: "anvil --gas-price 0 --block-base-fee-per-gas 0 --disable-min-priority-fee" + network_mode: host + detach: yes + state: started + + - name: Wait for anvil to start + pause: + seconds: 15 + + - name: Get private key from anvil logs + shell: "docker logs anvil 2>&1 | grep -A 10 'Private Keys' | grep '(0)' | awk '{print $2}'" + register: key_output + changed_when: false + +- name: Set anvil_private_key fact + run_once: true + set_fact: + anvil_private_key: "{{ key_output.stdout | trim }}" + tags: + - anvil + +- name: Save anvil_private_key to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + create: yes + regexp: "^anvil_private_key:" + line: "anvil_private_key: {{ anvil_private_key }}" + run_once: yes + delegate_to: localhost + tags: + - anvil From bbb9e689df5a95ba9d471b3d551869966dee2c68 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 16:08:45 +0100 Subject: [PATCH 201/279] Add tasks dor running anvil to `deploy_contracts` role --- skale-nodes/ansible/deploy_contracts.yaml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/deploy_contracts.yaml b/skale-nodes/ansible/deploy_contracts.yaml index 9777eae..9dc7ba4 100644 --- a/skale-nodes/ansible/deploy_contracts.yaml +++ b/skale-nodes/ansible/deploy_contracts.yaml @@ -1,7 +1,23 @@ +- name: Run anvil container on the first node + hosts: "{{ groups['nodes'][0] }}" + gather_facts: false + tasks: + - name: Run only run_anvil.yaml + import_role: + name: deploy_contracts + tasks_from: run_anvil.yaml + tags: [anvil] + - name: Deploy mainnet contracts hosts: 127.0.0.1 connection: local roles: - role: deploy_contracts - tags: - - deploy_contracts + tasks_from: transfer_funds.yaml + tags: anvil + - role: deploy_contracts + tasks_from: manager.yaml + tags: deploy_contracts + - role: deploy_contracts + tasks_from: ima.yaml + tags: deploy_contracts From f350bab7fc5b979d07a4d860074533e59eb7905c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 16:09:58 +0100 Subject: [PATCH 202/279] Change anvil image and make container available from outside --- .../roles/deploy_contracts/tasks/run_anvil.yaml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml index 17b7472..300021f 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml @@ -11,10 +11,19 @@ - name: Run anvil container docker_container: name: anvil - image: "ghcr.io/foundry-rs/foundry:rc-3" - command: "anvil --gas-price 0 --block-base-fee-per-gas 0 --disable-min-priority-fee" - network_mode: host - detach: yes + image: ghcr.io/foundry-rs/foundry:latest + entrypoint: anvil + command: + - --host + - 0.0.0.0 + - --gas-price + - "0" + - --block-base-fee-per-gas + - "0" + - --disable-min-priority-fee + published_ports: + - "8545:8545" + detach: true state: started - name: Wait for anvil to start From 9eaca8b7da6244887f282eedda6f86f6b4aced4a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 20:14:58 +0100 Subject: [PATCH 203/279] Publish endpoint to all nodes for subsequent plays --- .../roles/deploy_contracts/tasks/manager.yaml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 4ee168d..059c6a9 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -3,9 +3,7 @@ endpoint: "http://{{ hostvars[groups['nodes'][0]].ansible_host }}:8545" run_once: true when: anvil is defined and anvil - tags: - - deploy_sm - - anvil + tags: [deploy_sm, anvil] - name: Save endpoint for anvil to group vars lineinfile: @@ -15,9 +13,18 @@ line: "endpoint: {{ endpoint }}" run_once: yes when: anvil is defined and anvil - tags: - - deploy_sm - - anvil + tags: [deploy_sm, anvil] + +- name: Publish endpoint to all nodes for subsequent plays + set_fact: + endpoint: "{{ endpoint }}" + delegate_to: "{{ item }}" + delegate_facts: true + loop: "{{ groups['nodes'] }}" + run_once: true + when: anvil is defined and anvil + tags: [deploy_sm, anvil] + - name: Deploy manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/sm-deploy.log) shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_manager.sh 2>&1 | tee {{ playbook_dir }}/logs/sm-deploy.log From faf42134014fe306d752790ca113a51a8bda8989 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 20:16:01 +0100 Subject: [PATCH 204/279] Improve updating `group_vars/all` --- .../ansible/roles/deploy_contracts/tasks/ima.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml index 9157f30..d007f79 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml @@ -24,9 +24,9 @@ - name: Save IMA URL to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" - insertafter: EOF - regexp: "^ima_contracts:" - line: 'ima_contracts: "{{ ima_contracts }}"' - state: present + create: yes + regexp: "^ima_contracts::" + line: "ima_contracts: {{ ima_contracts }}" + run_once: yes tags: - - upload_ima + - upload_ima \ No newline at end of file From 732207469c8cfc8e5bb9a136457230e0497a2e54 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 20:18:30 +0100 Subject: [PATCH 205/279] Import new playbook for running anvil --- skale-nodes/ansible/deploy_contracts.yaml | 20 ++----------------- skale-nodes/ansible/main.yaml | 1 + .../tasks/transfer_funds.yaml | 5 +++++ .../tasks/main.yaml} | 9 ++++++++- 4 files changed, 16 insertions(+), 19 deletions(-) rename skale-nodes/ansible/roles/{deploy_contracts/tasks/run_anvil.yaml => run_anvil/tasks/main.yaml} (86%) diff --git a/skale-nodes/ansible/deploy_contracts.yaml b/skale-nodes/ansible/deploy_contracts.yaml index 9dc7ba4..9777eae 100644 --- a/skale-nodes/ansible/deploy_contracts.yaml +++ b/skale-nodes/ansible/deploy_contracts.yaml @@ -1,23 +1,7 @@ -- name: Run anvil container on the first node - hosts: "{{ groups['nodes'][0] }}" - gather_facts: false - tasks: - - name: Run only run_anvil.yaml - import_role: - name: deploy_contracts - tasks_from: run_anvil.yaml - tags: [anvil] - - name: Deploy mainnet contracts hosts: 127.0.0.1 connection: local roles: - role: deploy_contracts - tasks_from: transfer_funds.yaml - tags: anvil - - role: deploy_contracts - tasks_from: manager.yaml - tags: deploy_contracts - - role: deploy_contracts - tasks_from: ima.yaml - tags: deploy_contracts + tags: + - deploy_contracts diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index 252eeeb..9abdf89 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -1,3 +1,4 @@ +- import_playbook: run_anvil.yaml - import_playbook: deploy_contracts.yaml - import_playbook: sgx_sim.yaml - import_playbook: setup.yaml diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml index 107f107..9aef052 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml @@ -15,6 +15,11 @@ tags: - anvil +- name: Show anvil_private_key + debug: + msg: "{{ anvil_private_key }}" + + - name: Transfer funds from the base anvil account to main one run_once: yes tags: anvil_funds diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml similarity index 86% rename from skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml rename to skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index 300021f..d1310a0 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/run_anvil.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -42,6 +42,13 @@ tags: - anvil +- name: Expose anvil_private_key to 127.0.0.1 for subsequent plays + set_fact: + anvil_private_key: "{{ anvil_private_key }}" + delegate_to: 127.0.0.1 + delegate_facts: true + run_once: true + - name: Save anvil_private_key to group vars lineinfile: path: "{{ playbook_dir }}/group_vars/all" @@ -51,4 +58,4 @@ run_once: yes delegate_to: localhost tags: - - anvil + - anvil \ No newline at end of file From e9870c6e944a9b5a5197ba56352741b8f9251f65 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 30 Sep 2025 20:19:31 +0100 Subject: [PATCH 206/279] Run anvil container on the first node from host file --- skale-nodes/ansible/run_anvil.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 skale-nodes/ansible/run_anvil.yaml diff --git a/skale-nodes/ansible/run_anvil.yaml b/skale-nodes/ansible/run_anvil.yaml new file mode 100644 index 0000000..8c4f077 --- /dev/null +++ b/skale-nodes/ansible/run_anvil.yaml @@ -0,0 +1,6 @@ +- name: Run anvil container on the first node + hosts: "{{ groups['nodes'][0] }}" + roles: + - role: run_anvil + tags: [anvil] + when: anvil is defined and anvil \ No newline at end of file From 078538636cba76ee7c799473a1b5a49d115bba93 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 2 Oct 2025 17:28:00 +0100 Subject: [PATCH 207/279] Update helper-scripts submodule --- helper-scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper-scripts b/helper-scripts index 4c8ff3a..2e26feb 160000 --- a/helper-scripts +++ b/helper-scripts @@ -1 +1 @@ -Subproject commit 4c8ff3a82011794b1ba0d3028cf16ee0d73c2bf1 +Subproject commit 2e26feb5b7ebaebfb332dd7215fdcba58d095546 From 54f67f3b183a4baf865dc43f8d8bb64e12cfe465 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 2 Oct 2025 19:50:00 +0100 Subject: [PATCH 208/279] Add quotes for contract addresses and private key --- skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml | 6 +++--- .../ansible/roles/deploy_contracts/tasks/manager.yaml | 2 +- skale-nodes/ansible/roles/run_anvil/tasks/main.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml index d007f79..a18725e 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/ima.yaml @@ -25,8 +25,8 @@ lineinfile: path: "{{ playbook_dir }}/group_vars/all" create: yes - regexp: "^ima_contracts::" - line: "ima_contracts: {{ ima_contracts }}" + regexp: "^ima_contracts:" + line: "ima_contracts: '{{ ima_contracts }}'" run_once: yes tags: - - upload_ima \ No newline at end of file + - upload_ima diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 059c6a9..8e131f8 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -60,7 +60,7 @@ path: "{{ playbook_dir }}/group_vars/all" create: yes regexp: "^manager_contracts:" - line: "manager_contracts: {{ manager_contracts }}" + line: "manager_contracts: '{{ manager_contracts }}'" tags: upload_sm - name: Set allowed_ts_diff based on anvil variable diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index d1310a0..19d8cd1 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -54,7 +54,7 @@ path: "{{ playbook_dir }}/group_vars/all" create: yes regexp: "^anvil_private_key:" - line: "anvil_private_key: {{ anvil_private_key }}" + line: "anvil_private_key: '{{ anvil_private_key }}'" run_once: yes delegate_to: localhost tags: From 550e124b6be45192e56f03d95e8abd01b5cbdc9a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 2 Oct 2025 19:51:58 +0100 Subject: [PATCH 209/279] Set anvil endpoint --- .../tasks/transfer_funds.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml index 9aef052..c4e9979 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/transfer_funds.yaml @@ -19,6 +19,32 @@ debug: msg: "{{ anvil_private_key }}" +- name: Set endpoint for anvil + set_fact: + endpoint: "http://{{ hostvars[groups['nodes'][0]].ansible_host }}:8545" + run_once: true + when: anvil is defined and anvil + tags: [anvil] + +- name: Save endpoint for anvil to group vars + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + create: yes + regexp: "^endpoint:" + line: "endpoint: {{ endpoint }}" + run_once: yes + when: anvil is defined and anvil + tags: [anvil] + +- name: Publish endpoint to all nodes for subsequent plays + set_fact: + endpoint: "{{ endpoint }}" + delegate_to: "{{ item }}" + delegate_facts: true + loop: "{{ groups['nodes'] }}" + run_once: true + when: anvil is defined and anvil + tags: [anvil] - name: Transfer funds from the base anvil account to main one run_once: yes From b4de295948f0adc3f94f17fdb53ee8e272208097 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 2 Oct 2025 19:55:02 +0100 Subject: [PATCH 210/279] Stop and remove anvil container --- .../ansible/roles/fair_migrate/tasks/main.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 5521cc6..4687e40 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -19,4 +19,19 @@ delegate_to: localhost run_once: true become: false - tags: set_rng \ No newline at end of file + tags: set_rng + when: set_rng_script_has_run is not defined + +- name: Mark set_rng script as executed + set_fact: + set_rng_script_has_run: true + run_once: true + +- name: Stop and remove anvil container + docker_container: + name: anvil + state: absent + delegate_to: "{{ groups['nodes'][0] }}" + run_once: true + when: anvil is defined and anvil + tags: stop_anvil From 29e38f50f3c1f953275b86e46ed4f34b59747769 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:09:51 +0100 Subject: [PATCH 211/279] Delete extra anvil endpoint publishing --- .../roles/deploy_contracts/tasks/manager.yaml | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 8e131f8..89527f5 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -1,31 +1,3 @@ -- name: Set endpoint for anvil - set_fact: - endpoint: "http://{{ hostvars[groups['nodes'][0]].ansible_host }}:8545" - run_once: true - when: anvil is defined and anvil - tags: [deploy_sm, anvil] - -- name: Save endpoint for anvil to group vars - lineinfile: - path: "{{ playbook_dir }}/group_vars/all" - create: yes - regexp: "^endpoint:" - line: "endpoint: {{ endpoint }}" - run_once: yes - when: anvil is defined and anvil - tags: [deploy_sm, anvil] - -- name: Publish endpoint to all nodes for subsequent plays - set_fact: - endpoint: "{{ endpoint }}" - delegate_to: "{{ item }}" - delegate_facts: true - loop: "{{ groups['nodes'] }}" - run_once: true - when: anvil is defined and anvil - tags: [deploy_sm, anvil] - - - name: Deploy manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/sm-deploy.log) shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_manager.sh 2>&1 | tee {{ playbook_dir }}/logs/sm-deploy.log run_once: yes From 73396c45f3f83757bd0cd8f202a54d93d93b2b47 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:11:47 +0100 Subject: [PATCH 212/279] Add new playbook for complete FAIR nodes setup --- skale-nodes/ansible/run_fair_all.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 skale-nodes/ansible/run_fair_all.yaml diff --git a/skale-nodes/ansible/run_fair_all.yaml b/skale-nodes/ansible/run_fair_all.yaml new file mode 100644 index 0000000..1cd7ed0 --- /dev/null +++ b/skale-nodes/ansible/run_fair_all.yaml @@ -0,0 +1,11 @@ +- import_playbook: run_anvil.yaml +- import_playbook: deploy_contracts.yaml +- import_playbook: sgx_sim.yaml +- import_playbook: setup.yaml +- import_playbook: validator.yaml +- import_playbook: signature.yaml +- import_playbook: link_addresses.yaml +- import_playbook: register.yaml +- import_playbook: create_chain.yaml +- import_playbook: deploy_fair_manager.yaml +- import_playbook: fair_migrate.yaml \ No newline at end of file From 235ca96c036474fadcf7d559bbebcc6d875e0cb2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:21:22 +0100 Subject: [PATCH 213/279] Comment `Execute set_rng script` task --- .../roles/fair_migrate/tasks/main.yaml | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 4687e40..722929a 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -7,25 +7,19 @@ debug: msg: "{{ migrate_cmd.stdout }}" -- name: Execute set_rng script - script: set_rng.py - environment: - BASE_DIR: "files" - ETH_PRIVATE_KEY: "{{ eth_private_key }}" - ENDPOINT: "{{ boot_endpoint }}" - FAIR_CONTRACTS: "{{ fair_contracts }}" - args: - executable: python3 - delegate_to: localhost - run_once: true - become: false - tags: set_rng - when: set_rng_script_has_run is not defined - -- name: Mark set_rng script as executed - set_fact: - set_rng_script_has_run: true - run_once: true +#- name: Execute set_rng script +# script: set_rng.py +# environment: +# BASE_DIR: "files" +# ETH_PRIVATE_KEY: "{{ eth_private_key }}" +# ENDPOINT: "{{ boot_endpoint }}" +# FAIR_CONTRACTS: "{{ fair_contracts }}" +# args: +# executable: python3 +# delegate_to: localhost +# run_once: true +# become: false +# tags: set_rng - name: Stop and remove anvil container docker_container: From 0fd84f155411c0d3b6cc28ad1c96fe0c9df72332 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:22:27 +0100 Subject: [PATCH 214/279] Set node_type to "fair" before migration process --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 722929a..3a4e206 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -1,3 +1,7 @@ +- name: Set node_type to fair for migration + set_fact: + node_type: "fair" + - name: Fair migrate command: cmd: "fair node migrate {{ base_path }}/init-env --yes" From 2f5757adc9db16763982a9a5e44039ed50c251a1 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:28:32 +0100 Subject: [PATCH 215/279] Change node_type to "fair" before migration process --- skale-nodes/ansible/fair_migrate.yaml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/skale-nodes/ansible/fair_migrate.yaml b/skale-nodes/ansible/fair_migrate.yaml index d36fa6a..1d3c628 100644 --- a/skale-nodes/ansible/fair_migrate.yaml +++ b/skale-nodes/ansible/fair_migrate.yaml @@ -1,13 +1,20 @@ - name: Migrate Fair boot node to regular Fair node hosts: nodes become: true +# pre_tasks: +# - name: Fail if node_type is not 'fair' +# run_once: true +# delegate_to: localhost +# fail: +# msg: "Stopping playbook. This play requires node_type to be 'fair', but it is '{{ node_type }}'." +# when: node_type != "fair" + pre_tasks: - - name: Fail if node_type is not 'fair' - run_once: true - delegate_to: localhost - fail: - msg: "Stopping playbook. This play requires node_type to be 'fair', but it is '{{ node_type }}'." - when: node_type != "fair" + - name: Set node_type to fair for migration + set_fact: + node_type: "fair" + when: node_type is defined and node_type =='fair_boot' + roles: - role: sync when: build_type == "source" From 78810b3d24a83ced70b8dbace10f01b402c81232 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:29:37 +0100 Subject: [PATCH 216/279] Wait for chain to start on boot nodes --- .../roles/deploy_fair/tasks/deploy_fair.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml index bf8ce8c..647993c 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml @@ -1,3 +1,19 @@ +- name: Wait for chain to start on boot nodes + ansible.builtin.uri: + url: "{{ boot_endpoint }}" + method: POST + body: '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' + body_format: json + headers: + Content-Type: "application/json" + status_code: 200 + register: block_number_response + until: "block_number_response.json.result is defined and (block_number_response.json.result | int(base=16)) > 1" + retries: 90 + delay: 10 + run_once: true + tags: deploy_fair + - name: Deploy Fair manager contracts (this may take a while, logs - {{ playbook_dir }}/logs/fair-deploy.log) shell: bash {{ playbook_dir }}/../../helper-scripts/deploy_fair.sh 2>&1 | tee {{ playbook_dir }}/logs/fair-deploy.log run_once: yes From 962a0ed6b439c35a3d3eb36b89c932d2db5c5db2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 13:30:19 +0100 Subject: [PATCH 217/279] Publish `fair_contracts` variable to all nodes for subsequent plays --- .../ansible/roles/deploy_fair/tasks/deploy_fair.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml index 647993c..79fd979 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml @@ -58,3 +58,11 @@ line: 'fair_contracts: "{{ fair_contracts }}"' state: present tags: upload_fair + +- name: Publish fair_contracts to all nodes for subsequent plays + set_fact: + fair_contracts: "{{ fair_contracts }}" + delegate_to: "{{ item }}" + delegate_facts: true + loop: "{{ groups['nodes'] }}" + run_once: true \ No newline at end of file From f5b2c17b5769ec49aab8fc13205c6a0b43c6c97a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 14:04:50 +0100 Subject: [PATCH 218/279] Change anvil docker image and set up memory limit to Gb --- skale-nodes/ansible/roles/run_anvil/tasks/main.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index 19d8cd1..23968f2 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -11,7 +11,8 @@ - name: Run anvil container docker_container: name: anvil - image: ghcr.io/foundry-rs/foundry:latest + image: "ghcr.io/foundry-rs/foundry:v1.4.0-rc1" + memory: "2g" entrypoint: anvil command: - --host From b5ca2ce4b479eaebe19cbb70bbd232a8035107e2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 3 Oct 2025 14:06:51 +0100 Subject: [PATCH 219/279] Turn on anvil detailed logging --- skale-nodes/ansible/roles/run_anvil/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index 23968f2..22496df 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -22,6 +22,7 @@ - --block-base-fee-per-gas - "0" - --disable-min-priority-fee + - -vvvv published_ports: - "8545:8545" detach: true From 765b3d98baace2a84f9bf6e02ae5babb192a1e74 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 6 Oct 2025 19:26:36 +0100 Subject: [PATCH 220/279] Update local cleanup --- .../ansible/roles/cleanup_artifacts/tasks/main.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index d394727..4f23896 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -9,7 +9,7 @@ state: absent regexp: "{{ item }}" path: "{{ playbook_dir }}/group_vars/all" - loop: ["^manager_contracts", "^ima_contracts", "^fair_contracts", "^allowed_ts_diff"] + loop: ["^manager_contracts", "^ima_contracts", "^fair_contracts", "^allowed_ts_diff", "^anvil_private_key", "^endpoint"] tags: - group_vars_cleanup - contract_data_cleanup @@ -40,6 +40,12 @@ path: "{{ playbook_dir }}/../../helper-scripts/contracts_data/ima-openzeppelin" tags: contract_data_cleanup +- name: Cleanup contracts data + file: + state: absent + path: "{{ playbook_dir }}/../../helper-scripts/contracts_data/.openzeppelin" + tags: contract_data_cleanup + - name: Remove validator-id and validator-key files file: path: "{{ item }}" From 93ebd3070a6cfa5b3d846525c02d10c1d347d25f Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 6 Oct 2025 19:53:57 +0100 Subject: [PATCH 221/279] Add `--block-time` parameter and increase anvil log level --- .../roles/deploy_fair/tasks/deploy_fair.yaml | 2 +- .../ansible/roles/run_anvil/tasks/main.yaml | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml index 79fd979..70743fe 100644 --- a/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml +++ b/skale-nodes/ansible/roles/deploy_fair/tasks/deploy_fair.yaml @@ -1,5 +1,5 @@ - name: Wait for chain to start on boot nodes - ansible.builtin.uri: + uri: url: "{{ boot_endpoint }}" method: POST body: '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index 22496df..8d6484c 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -8,11 +8,20 @@ name: anvil state: absent +# - name: Create directory for anvil state on host +# file: +# path: /var/lib/anvil-state +# state: directory +# owner: '1000' +# group: '1000' +# mode: '0755' + - name: Run anvil container docker_container: name: anvil - image: "ghcr.io/foundry-rs/foundry:v1.4.0-rc1" - memory: "2g" + image: "ghcr.io/foundry-rs/foundry:rc-3" +# restart_policy: always +# memory: "2g" entrypoint: anvil command: - --host @@ -21,10 +30,18 @@ - "0" - --block-base-fee-per-gas - "0" + - --block-time + - "1" +# - --state +# - /state/anvil-state.json +# - --state-interval +# - "5" - --disable-min-priority-fee - - -vvvv + - -vvvvv published_ports: - "8545:8545" +# volumes: +# - /var/lib/anvil-state:/state detach: true state: started From fcf5ddec39456d5f7621d4600c3f94b0d2c56edc Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 7 Oct 2025 18:17:11 +0100 Subject: [PATCH 222/279] Enable anvil state saving and disable auto mining --- .../ansible/roles/run_anvil/tasks/main.yaml | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index 8d6484c..e6dbace 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -8,20 +8,19 @@ name: anvil state: absent -# - name: Create directory for anvil state on host -# file: -# path: /var/lib/anvil-state -# state: directory -# owner: '1000' -# group: '1000' -# mode: '0755' + - name: Create directory for anvil state on host + file: + path: /var/lib/anvil-state + state: directory + owner: '1000' + group: '1000' + mode: '0755' - name: Run anvil container docker_container: name: anvil image: "ghcr.io/foundry-rs/foundry:rc-3" -# restart_policy: always -# memory: "2g" + restart_policy: always entrypoint: anvil command: - --host @@ -30,18 +29,18 @@ - "0" - --block-base-fee-per-gas - "0" - - --block-time - - "1" -# - --state -# - /state/anvil-state.json -# - --state-interval -# - "5" +# - --block-time +# - "1" + - --state + - /state/anvil-state.json + - --state-interval + - "10" - --disable-min-priority-fee - -vvvvv published_ports: - "8545:8545" -# volumes: -# - /var/lib/anvil-state:/state + volumes: + - /var/lib/anvil-state:/state detach: true state: started From c049e3408900240581f13f0d5f273a2f7ec267fc Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 7 Oct 2025 19:52:52 +0100 Subject: [PATCH 223/279] Remove anvil state directory --- .../roles/fair_migrate/tasks/main.yaml | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 3a4e206..5b3c390 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -11,6 +11,22 @@ debug: msg: "{{ migrate_cmd.stdout }}" +- name: Clean up anvil resources + delegate_to: "{{ groups['nodes'][0] }}" + run_once: true + when: anvil is defined and anvil + tags: stop_anvil + block: + - name: Stop and remove anvil container + docker_container: + name: anvil + state: absent + + - name: Remove anvil state directory + file: + path: /var/lib/anvil-state + state: absent + #- name: Execute set_rng script # script: set_rng.py # environment: @@ -23,13 +39,4 @@ # delegate_to: localhost # run_once: true # become: false -# tags: set_rng - -- name: Stop and remove anvil container - docker_container: - name: anvil - state: absent - delegate_to: "{{ groups['nodes'][0] }}" - run_once: true - when: anvil is defined and anvil - tags: stop_anvil +# tags: set_rng \ No newline at end of file From 3b00f101901c41c6337dc8c233610cc0d3a7a796 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 7 Oct 2025 20:21:55 +0100 Subject: [PATCH 224/279] Enable `set_rng` with `skip_dry_run=True` --- skale-nodes/ansible/files/set_rng.py | 2 +- .../roles/fair_migrate/tasks/main.yaml | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/skale-nodes/ansible/files/set_rng.py b/skale-nodes/ansible/files/set_rng.py index cbd955a..190580c 100644 --- a/skale-nodes/ansible/files/set_rng.py +++ b/skale-nodes/ansible/files/set_rng.py @@ -39,4 +39,4 @@ def init_fair() -> FairManager: if __name__ == '__main__': fair = init_fair() skale_rng = fair.committee.skale_rng() - fair.committee.set_rng(RNG_ADDRESS) + fair.committee.set_rng(RNG_ADDRESS, skip_dry_run=True) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 5b3c390..093f399 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -27,16 +27,16 @@ path: /var/lib/anvil-state state: absent -#- name: Execute set_rng script -# script: set_rng.py -# environment: -# BASE_DIR: "files" -# ETH_PRIVATE_KEY: "{{ eth_private_key }}" -# ENDPOINT: "{{ boot_endpoint }}" -# FAIR_CONTRACTS: "{{ fair_contracts }}" -# args: -# executable: python3 -# delegate_to: localhost -# run_once: true -# become: false -# tags: set_rng \ No newline at end of file +- name: Execute set_rng script + script: set_rng.py + environment: + BASE_DIR: "files" + ETH_PRIVATE_KEY: "{{ eth_private_key }}" + ENDPOINT: "{{ boot_endpoint }}" + FAIR_CONTRACTS: "{{ fair_contracts }}" + args: + executable: python3 + delegate_to: localhost + run_once: true + become: false + tags: set_rng \ No newline at end of file From 4b73c886bff265aabd827efd725a8f0a7278bf6e Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 10 Oct 2025 15:59:19 +0100 Subject: [PATCH 225/279] Add new role for setting up `node_type` variable to 'fair_boot' --- .../roles/set_fair_boot_node_type/tasks/main.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml diff --git a/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml b/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml new file mode 100644 index 0000000..0355807 --- /dev/null +++ b/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml @@ -0,0 +1,12 @@ +- name: Set node_type fact for all nodes including localhost + set_fact: + node_type: "fair_boot" + delegate_to: "{{ item }}" + loop: "{{ ['localhost'] + groups['nodes'] }}" + +- name: Save node_type to group_vars/all for future runs + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + create: yes + regexp: "^node_type:" + line: "node_type: fair_boot" From 914e60d15b6bd4869297a99fcd30b6e583a4dafa Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 10 Oct 2025 18:48:15 +0100 Subject: [PATCH 226/279] Add new playbook for setting up `node_type` variable to 'fair_boot' --- skale-nodes/ansible/run_fair_all.yaml | 1 + skale-nodes/ansible/set_fair_boot_node_type.yaml | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 skale-nodes/ansible/set_fair_boot_node_type.yaml diff --git a/skale-nodes/ansible/run_fair_all.yaml b/skale-nodes/ansible/run_fair_all.yaml index 1cd7ed0..93b9d02 100644 --- a/skale-nodes/ansible/run_fair_all.yaml +++ b/skale-nodes/ansible/run_fair_all.yaml @@ -1,3 +1,4 @@ +- import_playbook: set_fair_boot_node_type.yaml - import_playbook: run_anvil.yaml - import_playbook: deploy_contracts.yaml - import_playbook: sgx_sim.yaml diff --git a/skale-nodes/ansible/set_fair_boot_node_type.yaml b/skale-nodes/ansible/set_fair_boot_node_type.yaml new file mode 100644 index 0000000..2a5a03d --- /dev/null +++ b/skale-nodes/ansible/set_fair_boot_node_type.yaml @@ -0,0 +1,7 @@ +- name: Set node_type to fair_boot + hosts: 127.0.0.1 + connection: local + roles: + - role: set_fair_boot_node_type + tags: + - set_fair_boot From bd950705d06efbfe807ddaaed6631b1e9c334ee8 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 10 Oct 2025 19:15:24 +0100 Subject: [PATCH 227/279] Remove node_type from group_vars/all after FAIR migrating --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index 093f399..bf527a0 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -39,4 +39,10 @@ delegate_to: localhost run_once: true become: false - tags: set_rng \ No newline at end of file + tags: set_rng + +- name: Remove node_type from group_vars/all + lineinfile: + path: "{{ playbook_dir }}/group_vars/all" + regexp: '^node_type: fair_boot$' + state: absent From 05956ccefd601d94c5c0d710edfeb30e1b0d5659 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 10 Oct 2025 19:35:48 +0100 Subject: [PATCH 228/279] Update cleaning `group_vars/all` --- skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml index 4f23896..20abbbc 100644 --- a/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_artifacts/tasks/main.yaml @@ -4,12 +4,12 @@ path: "{{ playbook_dir}}/files/node-info/" tags: node_info_cleanup -- name: Cleanup group_vars/all from contracts links +- name: Cleanup group_vars/all lineinfile: state: absent regexp: "{{ item }}" path: "{{ playbook_dir }}/group_vars/all" - loop: ["^manager_contracts", "^ima_contracts", "^fair_contracts", "^allowed_ts_diff", "^anvil_private_key", "^endpoint"] + loop: ["^manager_contracts", "^ima_contracts", "^fair_contracts", "^allowed_ts_diff", "^anvil_private_key", "^endpoint", "^node_type"] tags: - group_vars_cleanup - contract_data_cleanup From cfb3358e3e025507deaf7354165214b98dbd2c37 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 10 Oct 2025 19:37:16 +0100 Subject: [PATCH 229/279] Fix setting `node_type` to 'fair_boot' --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 2 +- .../roles/set_fair_boot_node_type/tasks/main.yaml | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index bf527a0..dbcb13d 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -44,5 +44,5 @@ - name: Remove node_type from group_vars/all lineinfile: path: "{{ playbook_dir }}/group_vars/all" - regexp: '^node_type: fair_boot$' + regexp: '^node_type' state: absent diff --git a/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml b/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml index 0355807..922eb8b 100644 --- a/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml +++ b/skale-nodes/ansible/roles/set_fair_boot_node_type/tasks/main.yaml @@ -1,8 +1,14 @@ -- name: Set node_type fact for all nodes including localhost +- name: Set node_type to fair_boot + set_fact: + node_type: "fair_boot" + +- name: Publish node_type to all nodes for subsequent plays set_fact: node_type: "fair_boot" delegate_to: "{{ item }}" - loop: "{{ ['localhost'] + groups['nodes'] }}" + delegate_facts: true + loop: "{{ groups['nodes'] }}" + run_once: true - name: Save node_type to group_vars/all for future runs lineinfile: From 8aa2cf5959c204d66f5ac321b7e3c432fa3ee5f5 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 13 Oct 2025 11:58:57 +0100 Subject: [PATCH 230/279] Bump anvil docker image version to v1.4.0 --- skale-nodes/ansible/roles/run_anvil/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index e6dbace..5f2edc8 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -19,7 +19,7 @@ - name: Run anvil container docker_container: name: anvil - image: "ghcr.io/foundry-rs/foundry:rc-3" + image: "ghcr.io/foundry-rs/foundry:v1.4.0" restart_policy: always entrypoint: anvil command: From 9dbf1786c988f0a3b4d4a09435ddd760b5a4158f Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 13 Oct 2025 11:59:34 +0100 Subject: [PATCH 231/279] Delete commented lines --- skale-nodes/ansible/fair_migrate.yaml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/skale-nodes/ansible/fair_migrate.yaml b/skale-nodes/ansible/fair_migrate.yaml index 1d3c628..b9d98d2 100644 --- a/skale-nodes/ansible/fair_migrate.yaml +++ b/skale-nodes/ansible/fair_migrate.yaml @@ -1,19 +1,11 @@ - name: Migrate Fair boot node to regular Fair node hosts: nodes become: true -# pre_tasks: -# - name: Fail if node_type is not 'fair' -# run_once: true -# delegate_to: localhost -# fail: -# msg: "Stopping playbook. This play requires node_type to be 'fair', but it is '{{ node_type }}'." -# when: node_type != "fair" - pre_tasks: - name: Set node_type to fair for migration set_fact: node_type: "fair" - when: node_type is defined and node_type =='fair_boot' + when: node_type is defined and node_type == 'fair_boot' roles: - role: sync From 08a60c31f15cb9b65f561b60f53c1fc47a3d9b3e Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 13 Oct 2025 12:00:20 +0100 Subject: [PATCH 232/279] Fix Removing `node_type` from 'group_vars/all' on localhost --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index dbcb13d..ffa91de 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -42,6 +42,8 @@ tags: set_rng - name: Remove node_type from group_vars/all + delegate_to: localhost + run_once: true lineinfile: path: "{{ playbook_dir }}/group_vars/all" regexp: '^node_type' From 4d797053088395c14685b313faa112d710f36077 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 13 Oct 2025 12:46:37 +0100 Subject: [PATCH 233/279] Add `become: false` to avoid using `sudo` --- skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml index ffa91de..6c25dae 100644 --- a/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml +++ b/skale-nodes/ansible/roles/fair_migrate/tasks/main.yaml @@ -44,6 +44,7 @@ - name: Remove node_type from group_vars/all delegate_to: localhost run_once: true + become: false lineinfile: path: "{{ playbook_dir }}/group_vars/all" regexp: '^node_type' From d1e858ba9adb8334bd3e4cc3b8cf1ec768bf9716 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 13 Oct 2025 17:28:58 +0100 Subject: [PATCH 234/279] Wait for next block to be mined if ALLOWED_TS_DIFF > 0 (not anvil setup) --- skale-nodes/ansible/files/fix_zero_node_fair.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/files/fix_zero_node_fair.py b/skale-nodes/ansible/files/fix_zero_node_fair.py index 6bd07ca..a2edbc1 100644 --- a/skale-nodes/ansible/files/fix_zero_node_fair.py +++ b/skale-nodes/ansible/files/fix_zero_node_fair.py @@ -36,6 +36,7 @@ ENDPOINT = os.environ['ENDPOINT'] ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] +ALLOWED_TS_DIFF = int(os.getenv('ALLOWED_TS_DIFF')) def init_skale_manager( @@ -47,7 +48,6 @@ def init_skale_manager( def setup_validator(skale: SkaleManager): - """Create and activate a validator""" set_test_msr(skale, msr=0) print('Address', skale.wallet.address) if not validator_exist(skale): @@ -60,7 +60,6 @@ def setup_validator(skale: SkaleManager): def wait_for_next_block(web3): - """Wait for the next block to be mined""" current_block = web3.eth.block_number print(f'Current block: {current_block}, waiting for next block...') while web3.eth.block_number == current_block: @@ -72,7 +71,8 @@ def wait_for_next_block(web3): def fix_zero_node(skale): wallet = generate_wallet(skale.web3) print(f'Node Address: {wallet.address}') - # wait_for_next_block(skale.web3) # TODO: make it conditional + if ALLOWED_TS_DIFF > 0: + wait_for_next_block(skale.web3) send_eth(skale.web3, skale.wallet, wallet.address, ETH_AMOUNT) add_test_permissions(skale) From 4ce7dd05aaf5f3b103a500920567e33b5d4ae51c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 28 Oct 2025 15:40:34 +0000 Subject: [PATCH 235/279] Bump `skale.py` version to 7.6dev5 --- skale-nodes/ansible/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index e1f0c00..bfb6f6b 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.4dev6 +skale.py==7.6dev5 boto3==1.17.34 From 7a51aeda30946aed7cdba21a6b23070b2b550229 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 30 Oct 2025 19:59:20 +0000 Subject: [PATCH 236/279] Do not run `Hotfix for zero node` for SKALE nodes --- skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml index 89527f5..328a8ae 100644 --- a/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml +++ b/skale-nodes/ansible/roles/deploy_contracts/tasks/manager.yaml @@ -63,3 +63,4 @@ args: executable: python3 tags: fix_zero_node + when: node_type == "fair_boot" or node_type == "fair" From fa890f7d2bc5f5b62242636782c48a20bab74cd2 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 30 Oct 2025 20:01:58 +0000 Subject: [PATCH 237/279] Fix tasks for removing containers --- .../roles/cleanup_nodes/tasks/containers.yaml | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index b9f0eec..14b0c08 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -18,7 +18,7 @@ with_items: "{{ monitoring_container_ids | default([]) }}" - name: Get all container ids - command: 'docker ps -a -q --filter="name=skale_" --filter="name=fair_"' + command: 'docker ps -a -q --filter="name=sk_"' become: true register: containers_output tags: containers_ids @@ -28,7 +28,7 @@ set_fact: skale_container_ids: "{{ containers_output.stdout.split('\n') }}" -- name: Destroy skale admin container +- name: Destroy skale/fair admin container become: true docker_container: name: "sk_admin" @@ -36,28 +36,18 @@ force_kill: yes keep_volumes: no tags: admin - when: node_type == "skale" + when: node_type == "skale" or node_type == "fair" - name: Destroy fair boot admin container become: true docker_container: - name: "fair_boot_admin" + name: "sk_boot_admin" state: absent force_kill: yes keep_volumes: no tags: admin when: node_type == "fair_boot" -- name: Destroy fair admin container - become: true - docker_container: - name: "fair_admin" - state: absent - force_kill: yes - keep_volumes: no - tags: admin - when: node_type == "fair" - - name: Destroy all containers become: true docker_container: From 18c2f7b7cb2c11e289cb4045ff1a9446d4e1e70a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 31 Oct 2025 11:58:12 +0000 Subject: [PATCH 238/279] Set default value for `boot_endpoint` --- .../ansible/roles/link_addresses/tasks/transfer_funds.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index ab7a42d..78ffc7c 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -15,7 +15,7 @@ vars: transfer_map: fair: - endpoint: "{{ boot_endpoint }}" + endpoint: "{{ boot_endpoint | default('') }}" contracts: "{{ fair_contracts | default('') }}" fair_boot: endpoint: "{{ endpoint }}" @@ -23,4 +23,4 @@ skale: endpoint: "{{ endpoint }}" contracts: "{{ manager_contracts }}" - when: node_type in transfer_map + when: node_type in transfer_map \ No newline at end of file From d2dbfb6f9ab6aad91b29e5112ee412e6828aeec6 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 31 Oct 2025 12:16:06 +0000 Subject: [PATCH 239/279] Transfer env variable `ALLOWED_TS_DIFF` to transfer_funds.py --- .../ansible/roles/link_addresses/tasks/transfer_funds.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml index 78ffc7c..eed87d5 100644 --- a/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml +++ b/skale-nodes/ansible/roles/link_addresses/tasks/transfer_funds.yaml @@ -9,6 +9,7 @@ MANAGER_CONTRACTS: "{{ transfer_map[node_type].contracts }}" BASE_DIR: "files" AMOUNT: 0.2 + ALLOWED_TS_DIFF: "{{ allowed_ts_diff }}" args: executable: python3 with_fileglob: "node-info/*" From 18fd8b4326c08b2c53d31f8b7729690fc3d8518a Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 31 Oct 2025 17:49:57 +0000 Subject: [PATCH 240/279] Turn on anvil auto mining when `node_type` == 'skale' --- .../ansible/roles/run_anvil/tasks/main.yaml | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml index 5f2edc8..458f370 100644 --- a/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml +++ b/skale-nodes/ansible/roles/run_anvil/tasks/main.yaml @@ -16,27 +16,34 @@ group: '1000' mode: '0755' - - name: Run anvil container - docker_container: - name: anvil - image: "ghcr.io/foundry-rs/foundry:v1.4.0" - restart_policy: always - entrypoint: anvil - command: + - name: Define base anvil command + set_fact: + anvil_cmd: - --host - 0.0.0.0 - --gas-price - "0" - --block-base-fee-per-gas - "0" -# - --block-time -# - "1" - --state - /state/anvil-state.json - --state-interval - "10" - --disable-min-priority-fee - - -vvvvv + - -vvvv + + - name: Add block-time for skale node type + set_fact: + anvil_cmd: "{{ anvil_cmd + ['--block-time', '1'] }}" + when: node_type == 'skale' + + - name: Run anvil container + docker_container: + name: anvil + image: "ghcr.io/foundry-rs/foundry:v1.4.0" + restart_policy: always + entrypoint: anvil + command: "{{ anvil_cmd }}" published_ports: - "8545:8545" volumes: From 45c17f7096e2c19d29de285df7444c5f8f06aca7 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 31 Oct 2025 18:46:49 +0000 Subject: [PATCH 241/279] Import playbook `create_chain.yaml` --- skale-nodes/ansible/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main.yaml index 9abdf89..443cf97 100644 --- a/skale-nodes/ansible/main.yaml +++ b/skale-nodes/ansible/main.yaml @@ -6,3 +6,4 @@ - import_playbook: signature.yaml - import_playbook: link_addresses.yaml - import_playbook: register.yaml +- import_playbook: create_chain.yaml From dbbfeb529101b910c0ac5ca348428d7b9b467dcd Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 31 Oct 2025 19:22:05 +0000 Subject: [PATCH 242/279] Rename main.yaml to main_skale.yaml --- skale-nodes/ansible/{main.yaml => main_skale.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename skale-nodes/ansible/{main.yaml => main_skale.yaml} (100%) diff --git a/skale-nodes/ansible/main.yaml b/skale-nodes/ansible/main_skale.yaml similarity index 100% rename from skale-nodes/ansible/main.yaml rename to skale-nodes/ansible/main_skale.yaml From 58fa8e070b4874e8c68e6b06611fdd51211795dd Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 3 Nov 2025 18:38:12 +0000 Subject: [PATCH 243/279] Rename main FAIR and SKALE playbooks --- skale-nodes/ansible/{main_fair.yaml => fair_node.yaml} | 0 .../ansible/{main_fair_passive.yaml => fair_node_passive.yaml} | 0 skale-nodes/ansible/{run_fair_all.yaml => fair_pipeline.yaml} | 0 skale-nodes/ansible/{main_skale.yaml => skale_pipeline.yaml} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename skale-nodes/ansible/{main_fair.yaml => fair_node.yaml} (100%) rename skale-nodes/ansible/{main_fair_passive.yaml => fair_node_passive.yaml} (100%) rename skale-nodes/ansible/{run_fair_all.yaml => fair_pipeline.yaml} (100%) rename skale-nodes/ansible/{main_skale.yaml => skale_pipeline.yaml} (100%) diff --git a/skale-nodes/ansible/main_fair.yaml b/skale-nodes/ansible/fair_node.yaml similarity index 100% rename from skale-nodes/ansible/main_fair.yaml rename to skale-nodes/ansible/fair_node.yaml diff --git a/skale-nodes/ansible/main_fair_passive.yaml b/skale-nodes/ansible/fair_node_passive.yaml similarity index 100% rename from skale-nodes/ansible/main_fair_passive.yaml rename to skale-nodes/ansible/fair_node_passive.yaml diff --git a/skale-nodes/ansible/run_fair_all.yaml b/skale-nodes/ansible/fair_pipeline.yaml similarity index 100% rename from skale-nodes/ansible/run_fair_all.yaml rename to skale-nodes/ansible/fair_pipeline.yaml diff --git a/skale-nodes/ansible/main_skale.yaml b/skale-nodes/ansible/skale_pipeline.yaml similarity index 100% rename from skale-nodes/ansible/main_skale.yaml rename to skale-nodes/ansible/skale_pipeline.yaml From eea9cef4c46eaf8d036c020921ae6701e5f8d754 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 5 Nov 2025 17:39:03 +0000 Subject: [PATCH 244/279] Add cleanup `command_prefix` for SKALE nodes --- skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml index 89f4c1d..89b47d2 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/cli_cleanup.yaml @@ -4,6 +4,7 @@ vars: command_prefixes: fair: "{{ 'fair passive-node' if (passive_node | default(false) | bool) else 'fair node' }}" + skale: "{{ 'skale passive-node' if (passive_node | default(false) | bool) else 'skale node' }}" when: node_type in command_prefixes register: cleanup_cmd From d0ee73d2d473ab29916c1b6febf1757b1a69a85f Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 5 Nov 2025 17:48:15 +0000 Subject: [PATCH 245/279] Update docker-compose files to match `skale-node` --- .../sync/templates/docker-compose-fair.yml.j2 | 23 +++++++++---------- .../templates/docker-compose-passive.yml.j2 | 23 ++++++++----------- .../sync/templates/docker-compose.yml.j2 | 23 ++++++++----------- 3 files changed, 31 insertions(+), 38 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 9050426..7dcfba6 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -1,16 +1,15 @@ -services: - base: &sk_base - image: rancher/pause:3.6 - restart: unless-stopped - labels: - com.skale.prefix: "node" - cpu_shares: 128 - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" +x-sk-base: &sk_base + restart: unless-stopped + labels: + com.skale.prefix: "node" + cpu_shares: 128 + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" +services: transaction-manager: <<: *sk_base container_name: sk_tm diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 index 5d09aff..2951ba5 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 @@ -1,18 +1,15 @@ -version: '3.4' +x-sk-base: &sk_base + restart: unless-stopped + labels: + com.skale.prefix: "node" + cpu_shares: 128 + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" services: - base: &sk_base - image: rancher/pause:3.6 - restart: unless-stopped - labels: - com.skale.prefix: "node" - cpu_shares: 128 - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" - admin: <<: *sk_base container_name: sk_admin diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 2a209b6..a089a47 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -1,18 +1,15 @@ -version: '3.4' +x-sk-base: &sk_base + restart: unless-stopped + labels: + com.skale.prefix: "node" + cpu_shares: 128 + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" services: - base: &sk_base - image: rancher/pause:3.6 - restart: unless-stopped - labels: - com.skale.prefix: "node" - cpu_shares: 128 - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" - transaction-manager: <<: *sk_base container_name: sk_tm From 408e0a617e64bbf536f29e56f600d67d2a4a66bd Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 5 Nov 2025 19:06:25 +0000 Subject: [PATCH 246/279] Check if node is Passive --- skale-nodes/ansible/register_passive_fair.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/register_passive_fair.yaml b/skale-nodes/ansible/register_passive_fair.yaml index 74e187a..4912c8a 100644 --- a/skale-nodes/ansible/register_passive_fair.yaml +++ b/skale-nodes/ansible/register_passive_fair.yaml @@ -5,3 +5,4 @@ - role: register_passive_fair tags: - register_passive_fair + when: passive_node is defined and passive_node From c206c560e308622c2624b4bad3abc59ebcd0c57d Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 5 Nov 2025 19:13:07 +0000 Subject: [PATCH 247/279] Delete unused playbook 'nodes.yaml' --- skale-nodes/ansible/nodes.yaml | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 skale-nodes/ansible/nodes.yaml diff --git a/skale-nodes/ansible/nodes.yaml b/skale-nodes/ansible/nodes.yaml deleted file mode 100644 index e8108dc..0000000 --- a/skale-nodes/ansible/nodes.yaml +++ /dev/null @@ -1,8 +0,0 @@ -- import_playbook: upload_authorized_keys.yaml -- import_playbook: base.yaml -- import_playbook: setup.yaml -- import_playbook: validator.yaml -- import_playbook: signature.yaml -- import_playbook: link_addresses.yaml -- import_playbook: register.yaml -- import_playbook: ssl.yaml From 0c21b72a1872797653b3fdc45b52d4dd7020b7e1 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 24 Nov 2025 15:52:21 +0000 Subject: [PATCH 248/279] Force removing old binary builder image --- skale-nodes/ansible/roles/skale_cli/tasks/main.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml index 2512263..c0c21c5 100644 --- a/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml +++ b/skale-nodes/ansible/roles/skale_cli/tasks/main.yaml @@ -27,10 +27,18 @@ when: - build_type == "source" +- name: Ensure builder container is removed before image operations + docker_container: + name: "node-cli-builder" + state: absent + when: + - build_type == "source" + - name: Remove old binary builder image community.docker.docker_image: name: "node-cli-builder" state: absent + force_source: true when: - build_type == "source" From 26ea7695950f8df0e9ad216603b4fa200cc01b7c Mon Sep 17 00:00:00 2001 From: Dmytro Date: Fri, 26 Dec 2025 20:04:37 +0000 Subject: [PATCH 249/279] Fix passive node skale --- skale-nodes/ansible/roles/config/tasks/main.yaml | 4 +--- .../sync/templates/docker-compose-passive.yml.j2 | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 5de0794..629074a 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -79,14 +79,12 @@ CONTAINER_CONFIGS_DIR="{{ container_configs_dir }}" ENDPOINT={{ endpoint }} ENFORCE_BTRFS='True' - DOCKER_LVMPY_VERSION="{{ docker_lvmpy_version }}" ENV_TYPE="{{ env_type }}" SCHAIN_NAME="{{ schain_name }}" MANAGER_CONTRACTS={{ manager_contracts }} IMA_CONTRACTS={{ ima_contracts }} BLOCK_DEVICE={{ block_device }} - INFLUX_URL="{{ influx_url }}" - TELEGRAF="{{ telegraf }}" + FILEBEAT_HOST="{{ filebeat_host }}" when: - node_type == "skale" - (passive_node is defined and passive_node) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 index 5d09aff..94ef381 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 @@ -66,3 +66,16 @@ services: source: ${SCHAINS_MNT_DIR} target: ${SCHAINS_MNT_DIR} read_only: true + + redis: + <<: *sk_base + container_name: sk_redis + image: "redis:8.4.0-alpine" + network_mode: host + tty: true + environment: + - REDIS_REPLICATION_MODE=master + command: "redis-server /data/redis.conf" + volumes: + - ${SKALE_DIR}/node_data/redis-data:/data/db:rw + - ${SKALE_DIR}/config/redis.conf:/data/redis.conf \ No newline at end of file From eee515dba48bc92d37ba271857eeffdb3596269e Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 5 Jan 2026 12:55:16 +0000 Subject: [PATCH 250/279] Run docker-lvmpy cleanup for active nodes only --- skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml index 60f0112..163b476 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml @@ -14,6 +14,8 @@ - name: Run docker-lvmpy cleanup import_tasks: docker_lvmpy.yaml tags: lvmpy_cleanup + when: + - (passive_node is not defined or not passive_node) - name: Run node artifacts cleanup import_tasks: node_artifacts.yaml From dccfda0af6d12466b1f5d11f7b7a94d3fb58fa28 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 5 Jan 2026 20:24:28 +0000 Subject: [PATCH 251/279] Check if docker-lvmpy service exists --- .../roles/cleanup_nodes/tasks/docker_lvmpy.yaml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml index 9a6c859..fa9f4a1 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/docker_lvmpy.yaml @@ -1,8 +1,16 @@ +- name: Check if docker-lvmpy service exists + stat: + path: /etc/systemd/system/docker-lvmpy.service + register: docker_lvmpy_service + when: node_type == "skale" + - name: Disable docker-lvmpy systemd: state: stopped name: docker-lvmpy - when: node_type == "skale" + when: + - node_type == "skale" + - docker_lvmpy_service.stat.exists - name: Remove docker-lvmpy artifacts file: From 001c2c9df7869c28d0f5e88d4b5face6a301899e Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 6 Jan 2026 17:40:13 +0000 Subject: [PATCH 252/279] Use l2.py as unified entry point for active/passive modes of SKALE node --- .../ansible/roles/sync/templates/docker-compose.yml.j2 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index a089a47..a82d398 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -61,8 +61,10 @@ services: INFLUX_URL: ${INFLUX_URL} MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} + PASSIVE_NODE: ${PASSIVE_NODE} + SCHAIN_NAME: ${SCHAIN_NAME} - command: "python3 admin.py" + command: "python3 l2.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol @@ -108,6 +110,8 @@ services: ALLOWED_TS_DIFF: 300 MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} IMA_CONTRACTS: ${IMA_CONTRACTS} + SKALE_NETWORK_TYPE: "skale" + PASSIVE_NODE: ${PASSIVE_NODE} command: "gunicorn app:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale @@ -184,6 +188,8 @@ services: FLASK_APP_PORT: 3010 FLASK_APP_HOST: "127.0.0.1" FLASK_DEBUG_MODE: "False" + SKALE_NETWORK_TYPE: "skale" + PASSIVE_NODE: ${PASSIVE_NODE} nginx: <<: *sk_base From 983726e519ad61b50155405a6dce144564eac382 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 6 Jan 2026 17:45:31 +0000 Subject: [PATCH 253/279] Bump redis docker image version to 8.4.0-alpine --- .../ansible/roles/sync/templates/docker-compose-fair.yml.j2 | 2 +- skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 7dcfba6..0e0008a 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -206,7 +206,7 @@ services: redis: <<: *sk_base container_name: sk_redis - image: "redis:8.0.1-alpine" + image: "redis:8.4.0-alpine" network_mode: host tty: true environment: diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index a82d398..35495d1 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -141,7 +141,7 @@ services: redis: <<: *sk_base container_name: sk_redis - image: "redis:6.0.10-alpine" + image: "redis:8.4.0-alpine" network_mode: host tty: true environment: From 20164309dc469de8cb74a0665e29c0a966b2e7ae Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 6 Jan 2026 17:47:25 +0000 Subject: [PATCH 254/279] Remove passive/active mode check for docker-lvmpy cleanup --- skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml index 163b476..60f0112 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/main.yaml @@ -14,8 +14,6 @@ - name: Run docker-lvmpy cleanup import_tasks: docker_lvmpy.yaml tags: lvmpy_cleanup - when: - - (passive_node is not defined or not passive_node) - name: Run node artifacts cleanup import_tasks: node_artifacts.yaml From bd192b64e0551a50d0fb73564ee0c34fe6faaec6 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Tue, 6 Jan 2026 18:09:49 +0000 Subject: [PATCH 255/279] Add `SKALE_LIB_PATH` mount for passive nodes --- skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 35495d1..800afe1 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -69,6 +69,7 @@ services: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains healthcheck: test: ["CMD", "python3", "healthchecks/admin.py"] From 0f663b19dd4de9bf0b25506afb33f46096b74b46 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Wed, 7 Jan 2026 15:51:19 +0000 Subject: [PATCH 256/279] Update admin service command to support passive node mode --- .../ansible/roles/sync/templates/docker-compose.yml.j2 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 800afe1..869edb7 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -64,7 +64,12 @@ services: PASSIVE_NODE: ${PASSIVE_NODE} SCHAIN_NAME: ${SCHAIN_NAME} - command: "python3 l2.py" + command: > + sh -c 'if [ "$$PASSIVE_NODE" = "True" ]; then + python3 skale_passive.py; + else + python3 admin.py; + fi' volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol From 4b5c38f4611a1916fde7465211e8b5b1223712ab Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 8 Jan 2026 16:12:26 +0000 Subject: [PATCH 257/279] Set permissions for redis data directory (temperory solution) --- skale-nodes/ansible/roles/init/tasks/main.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index a49b76b..2f86a3c 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -48,6 +48,14 @@ debug: msg: "{{ init_cmd.stdout }}" +- name: Set permissions for redis data directory + file: + path: "{{ base_path }}/.skale/node_data/redis-data" + state: directory + owner: "999" + group: "1000" + recurse: yes + - name: Pause to make sure skale-admin exchange certs with sgx server pause: seconds: 120 From 71ffd9919c4e425c0f85dc1a476460a75b91fdeb Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 8 Jan 2026 18:11:19 +0000 Subject: [PATCH 258/279] Don't wait sgx certs exchange for passive nodes --- skale-nodes/ansible/roles/init/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index 2f86a3c..eadc830 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -59,3 +59,4 @@ - name: Pause to make sure skale-admin exchange certs with sgx server pause: seconds: 120 + when: passive_node is not defined or not passive_node From 38cd206de1b86d9a3065b16b73c14581354b5804 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 8 Jan 2026 18:40:20 +0000 Subject: [PATCH 259/279] Add `SKALE_LIB_PATH` mount for api container --- skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 869edb7..6fc92a6 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -123,6 +123,7 @@ services: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains celery: From 7bcaf259cbcf1b6ec837e715c6596988aa568b73 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 8 Jan 2026 18:47:25 +0000 Subject: [PATCH 260/279] Remove permissions for redis data directory (implemented in node-cli) --- skale-nodes/ansible/roles/init/tasks/main.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/skale-nodes/ansible/roles/init/tasks/main.yaml b/skale-nodes/ansible/roles/init/tasks/main.yaml index eadc830..45693b1 100644 --- a/skale-nodes/ansible/roles/init/tasks/main.yaml +++ b/skale-nodes/ansible/roles/init/tasks/main.yaml @@ -48,14 +48,6 @@ debug: msg: "{{ init_cmd.stdout }}" -- name: Set permissions for redis data directory - file: - path: "{{ base_path }}/.skale/node_data/redis-data" - state: directory - owner: "999" - group: "1000" - recurse: yes - - name: Pause to make sure skale-admin exchange certs with sgx server pause: seconds: 120 From 3d6de7d0fb5b8634ab4c5fae9420690a64ea97db Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 8 Jan 2026 19:46:08 +0000 Subject: [PATCH 261/279] Delete unused 'CONFIRMATION_BLOCKS' --- .../ansible/roles/sync/templates/docker-compose-fair.yml.j2 | 1 - 1 file changed, 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 0e0008a..b95946f 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -24,7 +24,6 @@ services: SGX_URL: ${SGX_SERVER_URL} ENDPOINT: ${ENDPOINT} BOOT_ENDPOINT: ${BOOT_ENDPOINT} - CONFIRMATION_BLOCKS: 0 volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data From 53436a67485086fdfce6f2800d228bdc15cf6512 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 8 Jan 2026 19:48:32 +0000 Subject: [PATCH 262/279] Add skale_node_passive.yaml for skale passive nodes provisioning --- skale-nodes/ansible/skale_node_passive.yaml | 1 + 1 file changed, 1 insertion(+) create mode 100644 skale-nodes/ansible/skale_node_passive.yaml diff --git a/skale-nodes/ansible/skale_node_passive.yaml b/skale-nodes/ansible/skale_node_passive.yaml new file mode 100644 index 0000000..295a950 --- /dev/null +++ b/skale-nodes/ansible/skale_node_passive.yaml @@ -0,0 +1 @@ +- import_playbook: setup.yaml From cdbffc10adb00a8052c768f293f3b0a469d0474b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 16 Jan 2026 19:46:58 +0000 Subject: [PATCH 263/279] Delete unused docker-compose-passive.yml.j2 --- .../templates/docker-compose-passive.yml.j2 | 78 ------------------- 1 file changed, 78 deletions(-) delete mode 100644 skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 deleted file mode 100644 index 02f317e..0000000 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 +++ /dev/null @@ -1,78 +0,0 @@ -x-sk-base: &sk_base - restart: unless-stopped - labels: - com.skale.prefix: "node" - cpu_shares: 128 - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" - -services: - admin: - <<: *sk_base - container_name: sk_admin - image: "skale-admin:${TAG:-latest}" - build: - context: "{{ base_path }}/skale-admin" - network: host - dockerfile: Dockerfile - network_mode: host - tty: true - cap_add: - - NET_ADMIN - - NET_RAW - environment: - ENDPOINT: ${ENDPOINT} - SKALE_DIR_HOST: ${SKALE_DIR} - ENV_TYPE: ${ENV_TYPE} - SCHAIN_NAME: ${SCHAIN_NAME} - TELEGRAF: ${TELEGRAF} - INFLUX_URL: ${INFLUX_URL} - PASSIVE_NODE: "True" - MAX_SCHAIN_FAILED_RPC_COUNT: 60 - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} - command: "python3 skale_passive.py" - volumes: - - /var/run/skale:/var/run/skale - - ${SKALE_DIR}:/skale_vol - - ${SKALE_DIR}/node_data:/skale_node_data - - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains - healthcheck: - test: ["CMD", "python3", "healthchecks/admin.py"] - interval: 1m - timeout: 10s - retries: 2 - start_period: 30s - - nginx: - <<: *sk_base - image: nginx:1.20.2 - container_name: sk_nginx - network_mode: host - volumes: - - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro - - ${SKALE_DIR}/node_data/ssl:/ssl:ro - - ${FILESTORAGE_MAPPING}:/filestorage:ro - - type: bind - bind: - propagation: slave - source: ${SCHAINS_MNT_DIR} - target: ${SCHAINS_MNT_DIR} - read_only: true - - redis: - <<: *sk_base - container_name: sk_redis - image: "redis:8.4.0-alpine" - network_mode: host - tty: true - environment: - - REDIS_REPLICATION_MODE=master - command: "redis-server /data/redis.conf" - volumes: - - ${SKALE_DIR}/node_data/redis-data:/data/db:rw - - ${SKALE_DIR}/config/redis.conf:/data/redis.conf \ No newline at end of file From a0c0d11fbb2f50a3f48b13b654c35b7219e4847b Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 22 Jan 2026 19:14:40 +0000 Subject: [PATCH 264/279] Delete `docker-compose-passive file sync` task --- skale-nodes/ansible/roles/sync/tasks/main.yaml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index 887023c..cfdefb9 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -60,12 +60,4 @@ src: docker-compose-fair.yml.j2 dest: "{{ base_path }}/skale-node/docker-compose-fair.yml" when: - - node_type in ['fair_boot', 'fair'] - -- name: Replace skale-node docker-compose-passive file - template: - src: docker-compose-passive.yml.j2 - dest: "{{ base_path }}/skale-node/docker-compose-passive.yml" - when: - - node_type == "skale" - - passive_node is defined and passive_node + - node_type in ['fair_boot', 'fair'] \ No newline at end of file From ddcd12d4403afee1ffa40b77f691cb23c6a6def1 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 23 Jan 2026 13:51:08 +0000 Subject: [PATCH 265/279] Add `BITE` variable --- skale-nodes/ansible/roles/config/tasks/main.yaml | 1 + skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 1 + 2 files changed, 2 insertions(+) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 629074a..6fa6987 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -67,6 +67,7 @@ ENV_TYPE="{{ env_type }}" INFLUX_URL="{{ influx_url }}" TELEGRAF="{{ telegraf }}" + BITE="{{ bite }}" when: - node_type == "skale" - (passive_node is not defined or not passive_node) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 6fc92a6..7f466e5 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -63,6 +63,7 @@ services: IMA_CONTRACTS: ${IMA_CONTRACTS} PASSIVE_NODE: ${PASSIVE_NODE} SCHAIN_NAME: ${SCHAIN_NAME} + BITE: ${BITE} command: > sh -c 'if [ "$$PASSIVE_NODE" = "True" ]; then From d1f7f2707eb1f27f6cce4a5344218b3e1e0cbbd3 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Sun, 25 Jan 2026 19:09:24 +0000 Subject: [PATCH 266/279] Add `BITE` variable for SKALE sync node --- skale-nodes/ansible/roles/config/tasks/main.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 6fa6987..54ce655 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -86,6 +86,7 @@ IMA_CONTRACTS={{ ima_contracts }} BLOCK_DEVICE={{ block_device }} FILEBEAT_HOST="{{ filebeat_host }}" + BITE="{{ bite }}" when: - node_type == "skale" - (passive_node is defined and passive_node) From 704f12fc29f07bdc08160bb3c5cb76ce7e90f046 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 2 Feb 2026 12:12:36 +0000 Subject: [PATCH 267/279] Bump filebeat version to 9.1.5 --- skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 7f466e5..19a6bb6 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -249,7 +249,7 @@ services: <<: *sk_base container_name: sk_filebeat user: root - image: elastic/filebeat:9.1.3 + image: elastic/filebeat:9.1.5 network_mode: host environment: FILEBEAT_HOST: ${FILEBEAT_HOST} From c021c55367ad15524fdbbeaf1b2c294b1a44f7d4 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Mon, 2 Feb 2026 12:13:25 +0000 Subject: [PATCH 268/279] Clean anvil --- .../roles/cleanup_nodes/tasks/containers.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml index 14b0c08..88836bc 100644 --- a/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml +++ b/skale-nodes/ansible/roles/cleanup_nodes/tasks/containers.yaml @@ -91,3 +91,19 @@ force: yes tags: - lvm_artifacts + +- name: Clean up anvil resources + delegate_to: "{{ groups['nodes'][0] }}" + run_once: true + when: anvil is defined and anvil + tags: stop_anvil + block: + - name: Stop and remove anvil container + docker_container: + name: anvil + state: absent + + - name: Remove anvil state directory + file: + path: /var/lib/anvil-state + state: absent From 95a7ffe29265e96ceeb7a6a9ab9a72a0e28166c2 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 17 Feb 2026 17:28:21 +0000 Subject: [PATCH 269/279] update node provisioning - new settings structure --- .../ansible/roles/config/tasks/main.yaml | 9 +-- .../sync/templates/docker-compose-fair.yml.j2 | 81 ------------------- .../sync/templates/docker-compose.yml.j2 | 58 ------------- 3 files changed, 4 insertions(+), 144 deletions(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 629074a..87f69ed 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -19,7 +19,7 @@ ENDPOINT="{{ endpoint }}" CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" BLOCK_DEVICE="{{ block_device }}" - SGX_SERVER_URL="{{ sgx_url }}" + SGX_URL="{{ sgx_url }}" ENV_TYPE="{{ env_type }}" FILEBEAT_HOST="{{ filebeat_host }}" ENFORCE_BTRFS='False' @@ -40,9 +40,9 @@ when: node_type == "fair" tags: env -- name: Add SGX_SERVER_URL to env options if not passive +- name: Add SGX_URL to env options if not passive set_fact: - env_options: "{{ env_options }}\nSGX_SERVER_URL={{ sgx_url }}" + env_options: "{{ env_options }}\nSGX_URL={{ sgx_url }}" when: - node_type == "fair" - passive_node is not defined or not passive_node @@ -59,14 +59,13 @@ CONTAINER_CONFIGS_DIR="{{ container_configs_dir if (build_type | default('')) == 'source' else ''}}" DOCKER_LVMPY_VERSION="{{ docker_lvmpy_version }}" BLOCK_DEVICE="{{ block_device }}" - SGX_SERVER_URL="{{ sgx_url }}" + SGX_URL="{{ sgx_url }}" TG_API_KEY="{{ tg_api_key }}" TG_CHAT_ID="{{ tg_chat_id }}" MONITORING_CONTAINERS="{{ monitoring_containers }}" DEFAULT_GAS_PRICE_WEI="{{ default_gas_price_wei }}" ENV_TYPE="{{ env_type }}" INFLUX_URL="{{ influx_url }}" - TELEGRAF="{{ telegraf }}" when: - node_type == "skale" - (passive_node is not defined or not passive_node) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 index 7dcfba6..381c0e1 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose-fair.yml.j2 @@ -20,11 +20,6 @@ services: network: host network_mode: host tty: true - environment: - SGX_URL: ${SGX_SERVER_URL} - ENDPOINT: ${ENDPOINT} - BOOT_ENDPOINT: ${BOOT_ENDPOINT} - CONFIRMATION_BLOCKS: 0 volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data @@ -43,25 +38,6 @@ services: cap_add: - NET_ADMIN - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - ENDPOINT: ${ENDPOINT} - SKALE_DIR_HOST: ${SKALE_DIR} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - MAX_ALLOWED_LOG_TIME_DIFF: 600 - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - TELEGRAF: ${TELEGRAF} - INFLUX_URL: ${INFLUX_URL} - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} - SKALE_NETWORK_TYPE: "fair" - command: "python3 admin.py" volumes: - /var/run/skale:/var/run/skale @@ -90,25 +66,6 @@ services: cap_add: - NET_ADMIN - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - BOOT_ENDPOINT: ${BOOT_ENDPOINT} - SKALE_DIR_HOST: ${SKALE_DIR} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - MAX_ALLOWED_LOG_TIME_DIFF: 600 - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - TELEGRAF: ${TELEGRAF} - INFLUX_URL: ${INFLUX_URL} - FAIR_CONTRACTS: ${FAIR_CONTRACTS} - SKALE_NETWORK_TYPE: "fair" - PASSIVE_NODE: ${PASSIVE_NODE} - command: "python3 fair.py" volumes: - /var/run/skale:/var/run/skale @@ -136,25 +93,6 @@ services: cap_add: - NET_ADMIN - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - ENDPOINT: ${ENDPOINT} - FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} - FLASK_APP_PORT: 3007 - FLASK_APP_HOST: "127.0.0.1" - FLASK_DEBUG_MODE: "False" - SKALE_DIR_HOST: ${SKALE_DIR} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} - SKALE_NETWORK_TYPE: "fair" command: "gunicorn app:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale @@ -176,25 +114,6 @@ services: cap_add: - NET_ADMIN - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - BOOT_ENDPOINT: ${BOOT_ENDPOINT} - FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} - FLASK_APP_PORT: 3007 - FLASK_APP_HOST: "127.0.0.1" - FLASK_DEBUG_MODE: "False" - SKALE_DIR_HOST: ${SKALE_DIR} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - FAIR_CONTRACTS: ${FAIR_CONTRACTS} - SKALE_NETWORK_TYPE: "fair" - PASSIVE_NODE: ${PASSIVE_NODE} command: "gunicorn fair_api:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index a089a47..c1b1ade 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -20,9 +20,6 @@ services: network: host network_mode: host tty: true - environment: - SGX_URL: ${SGX_SERVER_URL} - ENDPOINT: ${ENDPOINT} volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data @@ -41,27 +38,6 @@ services: cap_add: - NET_ADMIN - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - ENDPOINT: ${ENDPOINT} - SKALE_DIR_HOST: ${SKALE_DIR} - TG_API_KEY: ${TG_API_KEY} - TG_CHAT_ID: ${TG_CHAT_ID} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - MAX_ALLOWED_LOG_TIME_DIFF: 600 - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - PULL_CONFIG_FOR_SCHAIN: ${PULL_CONFIG_FOR_SCHAIN} - TELEGRAF: ${TELEGRAF} - INFLUX_URL: ${INFLUX_URL} - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} - command: "python3 admin.py" volumes: - /var/run/skale:/var/run/skale @@ -88,26 +64,6 @@ services: cap_add: - NET_ADMIN - NET_RAW - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - ENDPOINT: ${ENDPOINT} - FLASK_SECRET_KEY: ${FLASK_SECRET_KEY} - FLASK_APP_PORT: 3007 - FLASK_APP_HOST: "127.0.0.1" - FLASK_DEBUG_MODE: "False" - SKALE_DIR_HOST: ${SKALE_DIR} - TG_API_KEY: ${TG_API_KEY} - TG_CHAT_ID: ${TG_CHAT_ID} - MONITORING_CONTAINERS: ${MONITORING_CONTAINERS} - BACKUP_RUN: ${BACKUP_RUN} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - ENV_TYPE: ${ENV_TYPE} - ALLOWED_TS_DIFF: 300 - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} command: "gunicorn app:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale @@ -125,10 +81,6 @@ services: network: host network_mode: host tty: true - environment: - TG_API_KEY: ${TG_API_KEY} - TG_CHAT_ID: ${TG_CHAT_ID} - SKALE_DIR_HOST: ${SKALE_DIR} command: "celery -A tools.notifications.tasks worker --loglevel=info" volumes: @@ -156,16 +108,6 @@ services: dockerfile: Dockerfile network: host network_mode: host - environment: - SGX_SERVER_URL: ${SGX_SERVER_URL} - SGX_CERTIFICATES_DIR_NAME: ${SGX_CERTIFICATES_DIR_NAME} - ENDPOINT: ${ENDPOINT} - DISABLE_DRY_RUN: ${DISABLE_DRY_RUN} - DEFAULT_GAS_LIMIT: ${DEFAULT_GAS_LIMIT} - DEFAULT_GAS_PRICE_WEI: ${DEFAULT_GAS_PRICE_WEI} - ALLOWED_TS_DIFF: 300 - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} volumes: - ${SKALE_DIR}:/skale_vol - ${SKALE_DIR}/node_data:/skale_node_data From 913bf983fd4e82ee487860e4edc66925ce443030 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 19 Feb 2026 18:19:54 +0000 Subject: [PATCH 270/279] update admin entrypoint --- skale-nodes/ansible/inventory-template/dev | 2 ++ .../ansible/roles/sync/templates/docker-compose.yml.j2 | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/inventory-template/dev b/skale-nodes/ansible/inventory-template/dev index b24e56f..f432e2e 100644 --- a/skale-nodes/ansible/inventory-template/dev +++ b/skale-nodes/ansible/inventory-template/dev @@ -30,6 +30,8 @@ env_type='' sgx_version='' cert_mode='certbot/custom' +influx_url='http://example.com' + ## dev variables (skip if env=test) skale_admin_path='' diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index c1b1ade..0b3bacd 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -38,7 +38,7 @@ services: cap_add: - NET_ADMIN - NET_RAW - command: "python3 admin.py" + command: "python3 skale_admin.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol @@ -64,7 +64,7 @@ services: cap_add: - NET_ADMIN - NET_RAW - command: "gunicorn app:app -c gunicorn.conf.py" + command: "gunicorn skale_api:app -c gunicorn.conf.py" volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol From b90e9e6df0c6c9854c5ed151b8e1f1f2855c0229 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Thu, 19 Feb 2026 18:20:25 +0000 Subject: [PATCH 271/279] remove docker compose passive --- .../ansible/roles/sync/tasks/main.yaml | 8 -- .../templates/docker-compose-passive.yml.j2 | 78 ------------------- 2 files changed, 86 deletions(-) delete mode 100644 skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 diff --git a/skale-nodes/ansible/roles/sync/tasks/main.yaml b/skale-nodes/ansible/roles/sync/tasks/main.yaml index 887023c..bf81bff 100644 --- a/skale-nodes/ansible/roles/sync/tasks/main.yaml +++ b/skale-nodes/ansible/roles/sync/tasks/main.yaml @@ -61,11 +61,3 @@ dest: "{{ base_path }}/skale-node/docker-compose-fair.yml" when: - node_type in ['fair_boot', 'fair'] - -- name: Replace skale-node docker-compose-passive file - template: - src: docker-compose-passive.yml.j2 - dest: "{{ base_path }}/skale-node/docker-compose-passive.yml" - when: - - node_type == "skale" - - passive_node is defined and passive_node diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 deleted file mode 100644 index 02f317e..0000000 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose-passive.yml.j2 +++ /dev/null @@ -1,78 +0,0 @@ -x-sk-base: &sk_base - restart: unless-stopped - labels: - com.skale.prefix: "node" - cpu_shares: 128 - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" - -services: - admin: - <<: *sk_base - container_name: sk_admin - image: "skale-admin:${TAG:-latest}" - build: - context: "{{ base_path }}/skale-admin" - network: host - dockerfile: Dockerfile - network_mode: host - tty: true - cap_add: - - NET_ADMIN - - NET_RAW - environment: - ENDPOINT: ${ENDPOINT} - SKALE_DIR_HOST: ${SKALE_DIR} - ENV_TYPE: ${ENV_TYPE} - SCHAIN_NAME: ${SCHAIN_NAME} - TELEGRAF: ${TELEGRAF} - INFLUX_URL: ${INFLUX_URL} - PASSIVE_NODE: "True" - MAX_SCHAIN_FAILED_RPC_COUNT: 60 - MANAGER_CONTRACTS: ${MANAGER_CONTRACTS} - IMA_CONTRACTS: ${IMA_CONTRACTS} - command: "python3 skale_passive.py" - volumes: - - /var/run/skale:/var/run/skale - - ${SKALE_DIR}:/skale_vol - - ${SKALE_DIR}/node_data:/skale_node_data - - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains - healthcheck: - test: ["CMD", "python3", "healthchecks/admin.py"] - interval: 1m - timeout: 10s - retries: 2 - start_period: 30s - - nginx: - <<: *sk_base - image: nginx:1.20.2 - container_name: sk_nginx - network_mode: host - volumes: - - ${SKALE_DIR}/node_data/nginx.conf:/etc/nginx/conf.d/default.conf:ro - - ${SKALE_DIR}/node_data/ssl:/ssl:ro - - ${FILESTORAGE_MAPPING}:/filestorage:ro - - type: bind - bind: - propagation: slave - source: ${SCHAINS_MNT_DIR} - target: ${SCHAINS_MNT_DIR} - read_only: true - - redis: - <<: *sk_base - container_name: sk_redis - image: "redis:8.4.0-alpine" - network_mode: host - tty: true - environment: - - REDIS_REPLICATION_MODE=master - command: "redis-server /data/redis.conf" - volumes: - - ${SKALE_DIR}/node_data/redis-data:/data/db:rw - - ${SKALE_DIR}/config/redis.conf:/data/redis.conf \ No newline at end of file From 798ccf1a03131757be5aceb4c0636084c3a1e9fd Mon Sep 17 00:00:00 2001 From: Dmytro Date: Tue, 24 Feb 2026 16:31:01 +0000 Subject: [PATCH 272/279] add bite option to init-env --- skale-nodes/ansible/inventory-template/dev | 2 ++ skale-nodes/ansible/roles/config/tasks/main.yaml | 1 + 2 files changed, 3 insertions(+) diff --git a/skale-nodes/ansible/inventory-template/dev b/skale-nodes/ansible/inventory-template/dev index f432e2e..43f90f4 100644 --- a/skale-nodes/ansible/inventory-template/dev +++ b/skale-nodes/ansible/inventory-template/dev @@ -30,6 +30,8 @@ env_type='' sgx_version='' cert_mode='certbot/custom' +bite=False + influx_url='http://example.com' ## dev variables (skip if env=test) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index 87f69ed..b2c23a5 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -66,6 +66,7 @@ DEFAULT_GAS_PRICE_WEI="{{ default_gas_price_wei }}" ENV_TYPE="{{ env_type }}" INFLUX_URL="{{ influx_url }}" + BITE="{{ bite }}" when: - node_type == "skale" - (passive_node is not defined or not passive_node) From 318ab2f7e8409928c703778dbcd6148b140193ec Mon Sep 17 00:00:00 2001 From: Dmytro Date: Wed, 25 Feb 2026 19:02:11 +0000 Subject: [PATCH 273/279] add settings volume to watchdog --- skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 0b3bacd..1370448 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -121,6 +121,8 @@ services: dockerfile: Dockerfile network: host network_mode: host + volumes: + - ${SKALE_DIR}/node_data/settings:/settings:ro environment: ALLOWED_TS_DIFF: 300 FLASK_APP_PORT: 3010 From 2e73379d0ec3501fba8a0ca2f9c1728c837ed75c Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 26 Feb 2026 17:01:33 +0000 Subject: [PATCH 274/279] Bump skale.py version to 7.11dev6 --- skale-nodes/ansible/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/requirements.txt b/skale-nodes/ansible/requirements.txt index bfb6f6b..14202f9 100644 --- a/skale-nodes/ansible/requirements.txt +++ b/skale-nodes/ansible/requirements.txt @@ -1,3 +1,3 @@ ansible==11.3.0 -skale.py==7.6dev5 +skale.py==7.11dev6 boto3==1.17.34 From c700b37242e9202c56a6e9e431c0c86f94fc1cce Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 26 Feb 2026 17:03:28 +0000 Subject: [PATCH 275/279] Create schain with new gas price parameters --- skale-nodes/ansible/files/create_chain.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/skale-nodes/ansible/files/create_chain.py b/skale-nodes/ansible/files/create_chain.py index 6f2da71..783f4cb 100644 --- a/skale-nodes/ansible/files/create_chain.py +++ b/skale-nodes/ansible/files/create_chain.py @@ -24,13 +24,16 @@ from skale.utils.web3_utils import init_web3 from skale.wallets import Web3Wallet from skale.utils.contracts_provision.main import add_test_permissions, create_schain +from skale.dataclasses.schain_options import get_default_schain_options CHAIN_NAME = os.environ['CHAIN_NAME'] ENDPOINT = os.environ['ENDPOINT'] ETH_PRIVATE_KEY = os.environ['ETH_PRIVATE_KEY'] MANAGER_CONTRACTS = os.environ['MANAGER_CONTRACTS'] CHAIN_TYPE = os.environ.get('CHAIN_TYPE', 'SMALL2').upper() - +MIN_GAS_PRICE = 47619047620 +MAX_GAS_PRICE = 1000000000000000000 +EXTERNAL_GAS_DIFFICULTY = '0x0' class SchainType(Enum): SMALL2 = [1, 2] @@ -84,10 +87,16 @@ def prepare_and_create_chain(skale, chain_type=CHAIN_TYPE) -> None: add_schain_type(type_params[0], type_params[1]) type_id = get_schain_type_id(skale, type_params) + schain_options = get_default_schain_options() + schain_options.min_gas_price = MIN_GAS_PRICE + schain_options.max_gas_price = MAX_GAS_PRICE + schain_options.external_gas_difficulty = HexStr(EXTERNAL_GAS_DIFFICULTY) + create_schain( skale, schain_name=CHAIN_NAME, schain_type=type_id, + schain_options=schain_options, ) From b9359df6549caf50ee28e214f726960589428c40 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 26 Feb 2026 19:56:38 +0000 Subject: [PATCH 276/279] Rename inventory variable `schain_name` to 'chain_name' --- skale-nodes/ansible/roles/config/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skale-nodes/ansible/roles/config/tasks/main.yaml b/skale-nodes/ansible/roles/config/tasks/main.yaml index b74f50f..345102b 100644 --- a/skale-nodes/ansible/roles/config/tasks/main.yaml +++ b/skale-nodes/ansible/roles/config/tasks/main.yaml @@ -80,7 +80,7 @@ ENDPOINT={{ endpoint }} ENFORCE_BTRFS='True' ENV_TYPE="{{ env_type }}" - SCHAIN_NAME="{{ schain_name }}" + SCHAIN_NAME="{{ chain_name }}" MANAGER_CONTRACTS={{ manager_contracts }} IMA_CONTRACTS={{ ima_contracts }} BLOCK_DEVICE={{ block_device }} From 5d13948ef7476bed27446cee4a6379ac37ec7cb5 Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Thu, 26 Feb 2026 20:20:20 +0000 Subject: [PATCH 277/279] Update inventory template --- skale-nodes/ansible/inventory-template/dev | 33 ++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/skale-nodes/ansible/inventory-template/dev b/skale-nodes/ansible/inventory-template/dev index 43f90f4..27c7dc3 100644 --- a/skale-nodes/ansible/inventory-template/dev +++ b/skale-nodes/ansible/inventory-template/dev @@ -1,26 +1,35 @@ [all:vars] ansible_ssh_user='root' ansible_python_interpreter=/usr/bin/python3 -env=test + +# build_type should be 'git' or 'source' +build_type=source + +# node_type should be be one of these - 'skale', 'fair_boot', 'fair' +node_type=skale +passive_node=False +bite=False +anvil=True + +chain_name='' +chain_type='' + +node_version='' base_path=/root sgx_url='' block_device='' eth_private_key='' endpoint='' -ima_endpoint='' -db_user='' -db_password='' -db_root_password='' -db_port='' docker_username='' docker_password='' filebeat_host='' manager_contracts='' ima_contracts='' -container_configs_stream='' +fair_contracts='' docker_lvmpy_stream='' container_configs_dir='' skale_cli_url='' +fair_cli_url='' pem_cert_path='' tg_api_key='' tg_chat_id='' @@ -30,17 +39,16 @@ env_type='' sgx_version='' cert_mode='certbot/custom' -bite=False - influx_url='http://example.com' -## dev variables (skip if env=test) +## dev variables (skip if build_type=git) skale_admin_path='' transaction_manager_path='' skale_node_path='' skale_node_cli_path='' - +bounty_agent_path='' +skale_watchdog_path=' # optional parameters @@ -54,7 +62,10 @@ disable_ima='' ## contracts deployment manager_tag='' +fair_tag='' +ima_tag='' deploy_gas_price='2000000000' # 2 gwei +default_gas_price_wei='' aws_key='' aws_secret='' From 35d227d91cbb14f2e8f544a0ca1fdaf47b480aaf Mon Sep 17 00:00:00 2001 From: Alex Sheverdin Date: Fri, 27 Feb 2026 17:56:43 +0000 Subject: [PATCH 278/279] Reorganize inventory template --- skale-nodes/ansible/inventory-template/dev | 75 ++++++++++++++-------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/skale-nodes/ansible/inventory-template/dev b/skale-nodes/ansible/inventory-template/dev index 27c7dc3..e74b0c5 100644 --- a/skale-nodes/ansible/inventory-template/dev +++ b/skale-nodes/ansible/inventory-template/dev @@ -5,67 +5,90 @@ ansible_python_interpreter=/usr/bin/python3 # build_type should be 'git' or 'source' build_type=source +base_path=/root +container_configs_dir='/root/skale-node' + # node_type should be be one of these - 'skale', 'fair_boot', 'fair' node_type=skale -passive_node=False + bite=False +env_type=devnet +passive_node=False +snapshot=any + anvil=True chain_name='' chain_type='' node_version='' -base_path=/root +sgx_version='' sgx_url='' +sgx_simulator=True +cleanup_sgx=True + block_device='' eth_private_key='' endpoint='' -docker_username='' -docker_password='' -filebeat_host='' +boot_endpoint='' + +###################################################################### +# Change this part with correct addresses after deployment if needed # +###################################################################### manager_contracts='' ima_contracts='' fair_contracts='' +###################################################################### + +filebeat_host='' +influx_url='http://example.com' docker_lvmpy_stream='' -container_configs_dir='' -skale_cli_url='' -fair_cli_url='' -pem_cert_path='' tg_api_key='' tg_chat_id='' -monitoring_containers='' -base_domain_name='' -env_type='' -sgx_version='' -cert_mode='certbot/custom' +monitoring_containers=True +default_gas_price_wei='' +base_domain_name==skalenodes.com -influx_url='http://example.com' +cert_mode='certbot' -## dev variables (skip if build_type=git) +skale_cli_url='' +fair_cli_url='' +######################################################################################### +# Change this part with your cloned repo filepaths (you can skip it if build_type=git) # +######################################################################################### skale_admin_path='' transaction_manager_path='' skale_node_path='' skale_node_cli_path='' bounty_agent_path='' skale_watchdog_path=' - -# optional parameters - -email= -do_token= - -## skale-node - -disable_ima='' +######################################################################################### ## contracts deployment manager_tag='' fair_tag='' ima_tag='' + deploy_gas_price='2000000000' # 2 gwei -default_gas_price_wei='' + +## optional parameters + +email='' +do_token='' +docker_username='' +docker_password='' + + +## geth parameters + +geth_image=ethereum/client-go:alltools-v1.13.11 +geth_password=12345 +etherbase="0x1aa5a64A25d58924a2A1059eE66Df835D6dB7Ce6" +geth_subnet="10.3.155.0/24" + +## aws parameters aws_key='' aws_secret='' From 150639693b9111c17bf4f0bed58e449a6fe6b723 Mon Sep 17 00:00:00 2001 From: badrogger Date: Wed, 4 Mar 2026 20:08:04 +0000 Subject: [PATCH 279/279] Fix template --- skale-nodes/ansible/ansible.cfg | 3 ++- skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/skale-nodes/ansible/ansible.cfg b/skale-nodes/ansible/ansible.cfg index 599205a..8a02561 100644 --- a/skale-nodes/ansible/ansible.cfg +++ b/skale-nodes/ansible/ansible.cfg @@ -1,3 +1,4 @@ [defaults] host_key_checking = False -stdout_callback = yaml \ No newline at end of file +stdout_callback = yaml +inventory = ./inventory diff --git a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 index 1370448..2b4a491 100644 --- a/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 +++ b/skale-nodes/ansible/roles/sync/templates/docker-compose.yml.j2 @@ -42,7 +42,7 @@ services: volumes: - /var/run/skale:/var/run/skale - ${SKALE_DIR}:/skale_vol - - ${SKALE_DIR}/node_data:/skale_node_data + - ${SKALE_LIB_PATH}:${SKALE_LIB_PATH} - /etc/nft.conf.d/skale/chains:/etc/nft.conf.d/skale/chains healthcheck: test: ["CMD", "python3", "healthchecks/admin.py"]