TOPO⚡
  • Glosario
  • Consejos
  • ¿Como crear un pool?
    • Preparando el servidor
    • 👉Instalación y actualización
    • Configuración de un nodo
    • Ejecutar como un servicio
    • Keys y certificado del pool
    • Direcciones de payment y stake
    • Registrar pool
  • Mantenimiento del pool
    • Renovar KES keys
    • Retirar un pool
  • Novedades
    • Conectar wallet a nodo de TOPO⚡
    • Migrar pledge a Ledger Nano
    • Votar en Catalyst con wallet de pledge (deprecado)
Con tecnología de GitBook
En esta página
  • Descargar archivos necesarios
  • config.json
  • topology.json
  • Iniciar el nodo

¿Te fue útil?

  1. ¿Como crear un pool?

Configuración de un nodo

Aquí vamos a configurar nuestro nodo; nos enfocaremos en lo necesario e indispensable para arrancar un nodo de Cardano.

AnteriorInstalación y actualizaciónSiguienteEjecutar como un servicio

Última actualización hace 2 años

¿Te fue útil?

Descargar archivos necesarios

Necesitamos como mínimo 5 archivos que son indispensables para poder correr un nodo de Cardano. Estos son:

  • config.json

  • byron-genesis.json

  • shelley-genesis.json

  • alonzo-genesis.json

  • topology.son

Podemos bajar las ultimas versiones desde:

Debemos asegurarnos de bajar las versiones de mainnet o testnet según corresponda.

mkdir ~/cardano-node/relay
cd ~/cardano-node/relay
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-config.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-byron-genesis.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-shelley-genesis.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-alonzo-genesis.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-topology.json

mv mainnet-byron-genesis.json byron-genesis.json
mv mainnet-shelley-genesis.json shelley-genesis.json
mv mainnet-alonzo-genesis.json alonzo-genesis.json
mv mainnet-config.json config.json
mv mainnet-topology.json topology.json
mkdir ~/cardano-node/block
cd ~/cardano-node/block
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-config.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-byron-genesis.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-shelley-genesis.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-alonzo-genesis.json
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-topology.json

mv mainnet-byron-genesis.json byron-genesis.json
mv mainnet-shelley-genesis.json shelley-genesis.json
mv mainnet-alonzo-genesis.json alonzo-genesis.json
mv mainnet-config.json config.json
mv mainnet-topology.json topology.json

config.json

El siguiente paso es modificar nuestro archivo config.json para darle las rutas a los archivos genesis de Shelley y Byron, configurar logging y métricas. Deberemos modificar los valores de los siguientes parámetros:

~/cardano-node/relay/config.json
{
  "AlonzoGenesisFile": "alonzo-genesis.json",
  "AlonzoGenesisHash": "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874",
  "ApplicationName": "cardano-sl",
  "ApplicationVersion": 1,
  "ByronGenesisFile": "byron-genesis.json",
  "ByronGenesisHash": "5f20df933584822601f9e3f8c024eb5eb252fe8cefb24d1317dc3d432e940ebb",
  "ConwayGenesisFile": "conway-genesis.json",
  "ConwayGenesisHash": "f28f1c1280ea0d32f8cd3143e268650d6c1a8e221522ce4a7d20d62fc09783e1",
  "LastKnownBlockVersion-Alt": 0,
  "LastKnownBlockVersion-Major": 3,
  "LastKnownBlockVersion-Minor": 0,
  "MaxKnownMajorProtocolVersion": 2,
  "Protocol": "Cardano",
  "RequiresNetworkMagic": "RequiresNoMagic",
  "ShelleyGenesisFile": "shelley-genesis.json",
  "ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
  "TraceAcceptPolicy": true,
  "TraceBlockFetchClient": false,
  "TraceBlockFetchDecisions": true,
  "TraceBlockFetchProtocol": false,
  "TraceBlockFetchProtocolSerialised": false,
  "TraceBlockFetchServer": false,
  "TraceChainDb": true,
  "TraceChainSyncBlockServer": false,
  "TraceChainSyncClient": false,
  "TraceChainSyncHeaderServer": false,
  "TraceChainSyncProtocol": false,
  "TraceConnectionManager": true,
  "TraceDNSResolver": true,
  "TraceDNSSubscription": true,
  "TraceDiffusionInitialization": true,
  "TraceErrorPolicy": true,
  "TraceForge": true,
  "TraceHandshake": false,
  "TraceInboundGovernor": true,
  "TraceIpSubscription": true,
  "TraceLedgerPeers": true,
  "TraceLocalChainSyncProtocol": false,
  "TraceLocalErrorPolicy": true,
  "TraceLocalHandshake": false,
  "TraceLocalRootPeers": true,
  "TraceLocalTxSubmissionProtocol": false,
  "TraceLocalTxSubmissionServer": false,
  "TraceMempool": false,
  "TraceMux": false,
  "TracePeerSelection": true,
  "TracePeerSelectionActions": true,
  "TracePublicRootPeers": true,
  "TraceServer": true,
  "TraceTxInbound": false,
  "TraceTxOutbound": false,
  "TraceTxSubmissionProtocol": false,
  "TracingVerbosity": "NormalVerbosity",
  "TurnOnLogMetrics": true,
  "TurnOnLogging": true,
  "MempoolCapacityBytesOverride": 1024000,
  "EnableP2P": true,
  "TargetNumberOfActivePeers": 20,
  "TargetNumberOfEstablishedPeers": 50,
  "TargetNumberOfKnownPeers": 100,
  "TargetNumberOfRootPeers": 100,
  "ExperimentalProtocolsEnabled": true,
  "MaxConcurrencyDeadline": 4,
  "defaultBackends": [
    "KatipBK"
  ],
  "defaultScribes": [
    [
      "FileSK",
      "logs/node.json"
    ]
  ],
  "hasEKG": 12789,
  "hasPrometheus": [
    "0.0.0.0",
    12798
  ],
  "minSeverity": "Info",
  "options": {
    "mapBackends": {
      "cardano.node.metrics": [
        "EKGViewBK"
      ],
      "cardano.node.resources": [
        "EKGViewBK"
      ]
    },
    "mapSubtrace": {
      "cardano.node.metrics": {
        "subtrace": "Neutral"
      }
    }
  },
  "rotation": {
    "rpKeepFilesNum": 10,
    "rpLogLimitBytes": 20000000,
    "rpMaxAgeHours": 24
  },
  "setupBackends": [
    "KatipBK"
  ],
  "setupScribes": [
    {
      "scFormat": "ScJson",
      "scKind": "FileSK",
      "scName": "logs/node.json",
      "scRotation": null
    }
  ]
}
~/cardano-node/block/config.json
{
  "AlonzoGenesisFile": "alonzo-genesis.json",
  "AlonzoGenesisHash": "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874",
  "ApplicationName": "cardano-sl",
  "ApplicationVersion": 1,
  "ByronGenesisFile": "byron-genesis.json",
  "ByronGenesisHash": "5f20df933584822601f9e3f8c024eb5eb252fe8cefb24d1317dc3d432e940ebb",
  "ConwayGenesisFile": "conway-genesis.json",
  "ConwayGenesisHash": "f28f1c1280ea0d32f8cd3143e268650d6c1a8e221522ce4a7d20d62fc09783e1",
  "LastKnownBlockVersion-Alt": 0,
  "LastKnownBlockVersion-Major": 3,
  "LastKnownBlockVersion-Minor": 0,
  "MaxKnownMajorProtocolVersion": 2,
  "Protocol": "Cardano",
  "RequiresNetworkMagic": "RequiresNoMagic",
  "ShelleyGenesisFile": "shelley-genesis.json",
  "ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
  "TraceAcceptPolicy": true,
  "TraceBlockFetchClient": false,
  "TraceBlockFetchDecisions": true,
  "TraceBlockFetchProtocol": false,
  "TraceBlockFetchProtocolSerialised": false,
  "TraceBlockFetchServer": false,
  "TraceChainDb": true,
  "TraceChainSyncBlockServer": false,
  "TraceChainSyncClient": false,
  "TraceChainSyncHeaderServer": false,
  "TraceChainSyncProtocol": false,
  "TraceConnectionManager": true,
  "TraceDNSResolver": true,
  "TraceDNSSubscription": true,
  "TraceDiffusionInitialization": true,
  "TraceErrorPolicy": true,
  "TraceForge": true,
  "TraceHandshake": false,
  "TraceInboundGovernor": true,
  "TraceIpSubscription": true,
  "TraceLedgerPeers": true,
  "TraceLocalChainSyncProtocol": false,
  "TraceLocalErrorPolicy": true,
  "TraceLocalHandshake": false,
  "TraceLocalRootPeers": true,
  "TraceLocalTxSubmissionProtocol": false,
  "TraceLocalTxSubmissionServer": false,
  "TraceMempool": false,
  "TraceMux": false,
  "TracePeerSelection": true,
  "TracePeerSelectionActions": true,
  "TracePublicRootPeers": true,
  "TraceServer": true,
  "TraceTxInbound": false,
  "TraceTxOutbound": false,
  "TraceTxSubmissionProtocol": false,
  "TracingVerbosity": "NormalVerbosity",
  "TurnOnLogMetrics": true,
  "TurnOnLogging": true,
  "MempoolCapacityBytesOverride": 1024000,
  "EnableP2P": false,
  "TargetNumberOfActivePeers": 20,
  "TargetNumberOfEstablishedPeers": 50,
  "TargetNumberOfKnownPeers": 100,
  "TargetNumberOfRootPeers": 100,
  "ExperimentalProtocolsEnabled": false,
  "MaxConcurrencyDeadline": 4,
  "defaultBackends": [
    "KatipBK"
  ],
  "defaultScribes": [
    [
      "FileSK",
      "logs/node.json"
    ]
  ],
  "hasEKG": 12789,
  "hasPrometheus": [
    "0.0.0.0",
    12798
  ],
  "minSeverity": "Info",
  "options": {
    "mapBackends": {
      "cardano.node.metrics": [
        "EKGViewBK"
      ],
      "cardano.node.resources": [
        "EKGViewBK"
      ]
    },
    "mapSubtrace": {
      "cardano.node.metrics": {
        "subtrace": "Neutral"
      }
    }
  },
  "rotation": {
    "rpKeepFilesNum": 10,
    "rpLogLimitBytes": 20000000,
    "rpMaxAgeHours": 24
  },
  "setupBackends": [
    "KatipBK"
  ],
  "setupScribes": [
    {
      "scFormat": "ScJson",
      "scKind": "FileSK",
      "scName": "logs/node.json",
      "scRotation": null
    }
  ]
}

topology.json

Aquí definimos los nodos contra los que vamos a establecer conexiones salientes, es importante recordar que para poder propagar tus bloques es necesario tener conexiones entrantes también desde la red. IOHK incluye en su topología a los relays de un pool registrados en la blockchain. Para asegurarte de tener conexiones entrantes contacta otros operadores en los canales de Telegram, el grupo de SPOCRA en Discord o usa el script topologyUpdater.

~/cardano-node/relay/topology.json
{
  "Producers": [
    {
      "addr": "ip.de.bp.node",
      "port": 3000,
      "valency": 1
    },
    {
      "addr": "relays-new.cardano-mainnet.iohk.io",
      "port": 3001,
      "valency": 2
    },
    {
      "friendly_name": "TOPO USA1",
      "addr": "relays-us1.topopool.com",
      "port": 3001,
      "valency": 1
    },
    {
      "friendly_name": "TOPO GERMANY1",
      "addr": "relays-de1.topopool.com",
      "port": 3001,
      "valency": 1
    }
  ]
}

~/cardano-node/block/topology.json
{
  "Producers": [
    {
      "friendly_name": "RELAY1",
      "addr": "ip.de.relay.1",
      "port": 3001,
      "valency": 1
    },
    {
      "friendly_name": "RELAY2",
      "addr": "ip.de.relay.2",
      "port": 3001,
      "valency": 1
    }
  ]
}

IMPORTANTE: Tu nodo productor de bloques (BP) solamente debe ser accesible desde tus relays, no debe ser accesible desde una IP que no esté bajo tu control y no debes incluir a peers de terceros. Los relays incluyen en sus topology.json a nodos externos pertenecientes a otros operadores y tu BP.

Iniciar el nodo

screen -dmS RELAY bash -c 'cardano-node run \
   --topology /home/ubuntu/cardano-node/relay/topology.json \
   --database-path /home/ubuntu/cardano-node/relay/db \
   --socket-path /home/ubuntu/cardano-node/relay/db/socket \
   --port 3001 \
   --config /home/ubuntu/cardano-node/relay/config.json; exec bash'

Usamos la aplicación screen para poder dejar el nodo corriendo y monitorear el avance. Para desconectar la sesión de screen pero dejarla corriendo en el background puedes usar: Ctrl + a, y luego la tecla "d"

Para volver a conectarse a la sesión de screen: screen -r RELAY

Notarás que el nodo esta en línea por que el consumo de CPU baja considerablemente, puedes utilizar el comando htop para ver el consumo de recursos.

¡Felicitaciones! Si llegaste hasta aquí ya tienes un nodo completo listo para correr. Si deseas puedes levantar el nodo con el siguiente comando y dejar la base de datos (DB) sincronizando, o puedes preparar tu sistema para correr como servicios, tal como se explica en la .

Si este es tu primer nodo se recomienda dejes que sincronice completamente antes de continuar con el proceso de . Prepárate un café por que el sync inicial va a tomar un buen rato :)

https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/index.html
próxima sección
crear tus llaves y certificados