Configuración

Configuración de Kore Node

Estos parámetros de configuración son generales a cualquier nodo indpendientemente del tipo de cliente que se vaya a usar, los parámetros específicos de cada cliente se encontrarán en sus respectivas secciones.

La configuración de un nodo puede realizarse de diferentes maneras. A continuación se enumeran los mecanismos admitidos, de menor a mayor prioridad:

  • Variables de entorno.
  • Archivo de configuración.

Variables de entorno

Los siguientes parámetros de configuración solo se pueden configurar a través de variables de entorno y como parámetros al binario que se genera al compilar el cliente, pero no haciendo uso de archivos:

Variable de entorno Descripción Parámetro de entrada Qué recibe
KORE_PASSWORD Contraseña que se utilizará para encriptar el material criptográfico -p La contraseña
KORE_FILE_PATH Ruta del archivo de configuración a utilizar -f Ruta del archivo

Los parámetros que se pueden configurar mediante variables de entorno y archivos son:

Variable de entorno Descripción Qué recibe Valor por defecto
KORE_PROMETHEUS Dirección y puerto donde se va a exponer el servidor que contiene el endpoint /metrics donde se encuentra el prometheus Una dirección IP y un puerto 0.0.0.0:3050
KORE_KEYS_PATH Ruta donde se guardará la clave privada en formato PKCS8 encriptada con PKCS5 Un directorio examples/keys
KORE_DB_PATH Ruta donde se creará la base de datos si no existe o donde se encuentra la base de datos en caso de que ya exista Un directorio Para LevelDB examples/leveldb y para SQlite examples/sqlitedb
KORE_NODE_KEY_DERIVATOR Key derivator a utilizar Un String con Ed25519 o Secp256k1 Ed25519
KORE_NODE_DIGEST_DERIVATOR Digest derivator a utilizar Un String con Blake3_256, Blake3_512, SHA2_256, SHA2_512, SHA3_256 o SHA3_512 Blake3_256
KORE_NODE_REPLICATION_FACTOR Porcentaje de nodos de red que reciben mensajes de protocolo en una iteración Valor flotante 0.25
KORE_NODE_TIMEOUT Tiempo de espera que se utilizará entre iteraciones del protocolo Valor entero sin signo 3000
KORE_NODE_PASSVOTATION Comportamiento del nodo en la fase de aprobación Valor entero sin signo, 1 para aprobar siempre, 2 para denegar siempre, otro valor para aprobación manual 0
KORE_NODE_SMARTCONTRACTS_DIRECTORY Directorio donde se almacenarán los contratos de los sujetos Un directorio Contracts
KORE_NETWORK_PORT_REUSE Verdadero para configurar la reutilización de puertos para sockets locales, lo que implica la reutilización de puertos de escucha para conexiones salientes para mejorar las capacidades transversales de NAT. Valor Boolean false
KORE_NETWORK_USER_AGENT El user agent El user agent kore-node
KORE_NETWORK_NODE_TYPE Tipo de nodo Un String: Bootstrap, Addressable o Ephemeral Bootstrap
KORE_NETWORK_LISTEN_ADDRESSES Direcciones donde el nodo va a escuchar Direcciones donde el nodo va a escuchar /ip4/0.0.0.0/tcp/50000
KORE_NETWORK_EXTERNAL_ADDRESSES Dirección externa por la cual se puede acceder al nodo, pero no se encuentra entre sus interfaces Dirección externa por la cual se puede acceder al nodo, pero no se encuentra entre sus interfaces /ip4/90.0.0.70/tcp/50000
KORE_NETWORK_ROUTING_BOOT_NODES Direcciones de los Boot Nodes en la red P2P a los cuales nos conectaremos para empezar a formar parte de la red Direcciones de los Boot Nodes, donde si tiene más de una dirección será separada con una _ y las direcciones se separan del Peer-ID del nodo mediante /p2p/
KORE_NETWORK_ROUTING_DHT_RANDOM_WALK Verdadero para activar el random walk en la DHT de Kademlia Valor Boolean true
KORE_NETWORK_ROUTING_DISCOVERY_ONLY_IF_UNDER_NUM Número de conexiones activas sobre las que interrumpimos el proceso de descubrimiento Cantidad de conexiónes activas u64::MAX
KORE_NETWORK_ROUTING_ALLOW_NON_GLOBALS_IN_DHT Verdadero si se permiten direcciones no globales en el DHT Valor Boolean false
KORE_NETWORK_ROUTING_ALLOW_PRIVATE_IP Si es false el dirección de un nodo no puede ser privada Valor Boolean false
KORE_NETWORK_ROUTING_ENABLE_MDNS Verdadero para activar mDNS Valor Boolean true
KORE_NETWORK_ROUTING_KADEMLIA_DISJOINT_QUERY_PATHS Cuando está habilitado, el número de rutas separadas utilizadas es igual al paralelismo configurado Valor Boolean true
KORE_NETWORK_ROUTING_KADEMLIA_REPLICATION_FACTOR El factor de replicación determina a cuántos peers más cercanos se replica un registro Valor entero sin signo mayor a 0 false
KORE_NETWORK_ROUTING_PROTOCOL_NAMES Protocolos que soporta el nodo Protocolos que soporta el nodo /kore/routing/1.0.0
KORE_NETWORK_TELL_MESSAGE_TIMEOUT_SECS Tiempo de espera de un mensaje Cantidad de segundos 10
KORE_NETWORK_TELL_MAX_CONCURRENT_STREAMS Cantidad máxima de transmisiones simultáneas Valor entero sin signo 100
KORE_NETWORK_CONTROL_LIST_ENABLE Habilitar lista de control Valor booleano true
KORE_NETWORK_CONTROL_LIST_ALLOW_LIST Lista de peers permitidos Cadena de texto separada por comas Peer200,Peer300
KORE_NETWORK_CONTROL_LIST_BLOCK_LIST Lista de peers bloqueados Cadena de texto separada por comas Peer1,Peer2
KORE_NETWORK_CONTROL_LIST_SERVICE_ALLOW_LIST Lista de URLs de servicios permitidos Cadena de texto separada por comas http://90.0.0.1:3000/allow_list
KORE_NETWORK_CONTROL_LIST_SERVICE_BLOCK_LIST Lista de URLs de servicios bloqueados Cadena de texto separada por comas http://90.0.0.1:3000/block_list
KORE_NETWORK_CONTROL_LIST_INTERVAL_REQUEST Intervalo de solicitud en segundos Cantidad de segundos 58

.json File

{
            "kore": {
              "network": {
                  "user_agent": "Kore2.0",
                  "node_type": "Addressable",
                  "listen_addresses": ["/ip4/127.0.0.1/tcp/50000","/ip4/127.0.0.1/tcp/50001","/ip4/127.0.0.1/tcp/50002"],
                  "external_addresses": ["/ip4/90.1.0.60/tcp/50000", "/ip4/90.1.0.61/tcp/50000"],
                  "tell": {
                    "message_timeout_secs": 58,
                    "max_concurrent_streams": 166
                  },
                  "control_list": {
                    "enable": true,
                    "allow_list": ["Peer200", "Peer300"],
                    "block_list": ["Peer1", "Peer2"],
                    "service_allow_list": ["http://90.0.0.1:3000/allow_list", "http://90.0.0.2:4000/allow_list"],
                    "service_block_list": ["http://90.0.0.1:3000/block_list", "http://90.0.0.2:4000/block_list"],
                    "interval_request": 99
                  },
                  "routing": {
                    "boot_nodes": ["/ip4/172.17.0.1/tcp/50000_/ip4/127.0.0.1/tcp/60001/p2p/12D3KooWLXexpg81PjdjnrhmHUxN7U5EtfXJgr9cahei1SJ9Ub3B","/ip4/11.11.0.11/tcp/10000_/ip4/12.22.33.44/tcp/55511/p2p/12D3KooWRS3QVwqBtNp7rUCG4SF3nBrinQqJYC1N5qc1Wdr4jrze"],
                    "dht_random_walk": false,
                    "discovery_only_if_under_num": 55,
                    "allow_non_globals_in_dht": true,
                    "allow_private_ip": true,
                    "enable_mdns": false,
                    "kademlia_disjoint_query_paths": false,
                    "kademlia_replication_factor": 30,
                    "protocol_names": ["/kore/routing/2.2.2","/kore/routing/1.1.1"]
                  },
                  "port_reuse": true
              },
              "node": {
                "key_derivator": "Secp256k1",
                "digest_derivator": "Blake3_512",
                "replication_factor": 0.555,
                "timeout": 30,
                "passvotation": 50,
                "smartcontracts_directory": "./fake_route"
              },
              "db_path": "./fake/db/path",
              "keys_path": "./fake/keys/path",
              "prometheus": "10.0.0.0:3030"
            }
          }

.toml File

[kore.network]
user_agent = "Kore2.0"
node_type = "Addressable"
port_reuse = true
listen_addresses = ["/ip4/127.0.0.1/tcp/50000","/ip4/127.0.0.1/tcp/50001","/ip4/127.0.0.1/tcp/50002"]
external_addresses = ["/ip4/90.1.0.60/tcp/50000","/ip4/90.1.0.61/tcp/50000"]
        
[kore.network.control_list]
enable = true
allow_list = ["Peer200", "Peer300"]
block_list = ["Peer1", "Peer2"]
service_allow_list = ["http://90.0.0.1:3000/allow_list", "http://90.0.0.2:4000/allow_list"]
service_block_list = ["http://90.0.0.1:3000/block_list", "http://90.0.0.2:4000/block_list"]
interval_request = 99

[kore.network.tell]
message_timeout_secs = 58
max_concurrent_streams = 166
        
[kore.network.routing]
boot_nodes = ["/ip4/172.17.0.1/tcp/50000_/ip4/127.0.0.1/tcp/60001/p2p/12D3KooWLXexpg81PjdjnrhmHUxN7U5EtfXJgr9cahei1SJ9Ub3B", "/ip4/11.11.0.11/tcp/10000_/ip4/12.22.33.44/tcp/55511/p2p/12D3KooWRS3QVwqBtNp7rUCG4SF3nBrinQqJYC1N5qc1Wdr4jrze"]
dht_random_walk = false
discovery_only_if_under_num = 55
allow_non_globals_in_dht = true
allow_private_ip = true
enable_mdns = false
kademlia_disjoint_query_paths = false
kademlia_replication_factor = 30
protocol_names = ["/kore/routing/2.2.2", "/kore/routing/1.1.1"]
        
[kore.node]
key_derivator = "Secp256k1"
digest_derivator = "Blake3_512"
replication_factor = 0.555
timeout = 30
passvotation = 50
smartcontracts_directory = "./fake_route"
        
[kore]
db_path = "./fake/db/path"
keys_path = "./fake/keys/path"    
prometheus = "10.0.0.0:3030"  

.yaml File

kore:
  network:
    control_list:
      allow_list:
        - "Peer200"
        - "Peer300"
      block_list:
        - "Peer1"
        - "Peer2"
      service_allow_list:
        - "http://90.0.0.1:3000/allow_list"
        - "http://90.0.0.2:4000/allow_list"
      service_block_list:
        - "http://90.0.0.1:3000/block_list"
        - "http://90.0.0.2:4000/block_list"
      interval_request: 99
      enable: true
    user_agent: "Kore2.0"
    node_type: "Addressable"
    listen_addresses:
      - "/ip4/127.0.0.1/tcp/50000"
      - "/ip4/127.0.0.1/tcp/50001"
      - "/ip4/127.0.0.1/tcp/50002"
    external_addresses:
      - "/ip4/90.1.0.60/tcp/50000"
      - "/ip4/90.1.0.61/tcp/50000"
    tell:
      message_timeout_secs: 58
      max_concurrent_streams: 166
    routing:
      boot_nodes:
        - "/ip4/172.17.0.1/tcp/50000_/ip4/127.0.0.1/tcp/60001/p2p/12D3KooWLXexpg81PjdjnrhmHUxN7U5EtfXJgr9cahei1SJ9Ub3B"
        - "/ip4/11.11.0.11/tcp/10000_/ip4/12.22.33.44/tcp/55511/p2p/12D3KooWRS3QVwqBtNp7rUCG4SF3nBrinQqJYC1N5qc1Wdr4jrze"
      dht_random_walk: false
      discovery_only_if_under_num: 55
      allow_non_globals_in_dht: true
      allow_private_ip: true
      enable_mdns: false
      kademlia_disjoint_query_paths: false
      kademlia_replication_factor: 30
      protocol_names:
        - "/kore/routing/2.2.2"
        - "/kore/routing/1.1.1"
    port_reuse: true
  node:
    key_derivator: "Secp256k1"
    digest_derivator: "Blake3_512"
    replication_factor: 0.555
    timeout: 30
    passvotation: 50
    smartcontracts_directory: "./fake_route"
  db_path: "./fake/db/path"
  keys_path: "./fake/keys/path"
  prometheus: "10.0.0.0:3030"