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

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
Debemos asegurarnos de bajar las versiones de mainnet o testnet según corresponda.
RELAY
BLOCK
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:
RELAY
BLOCK
~/cardano-node/relay/config.json
{
"AlonzoGenesisFile": "alonzo-genesis.json",
"AlonzoGenesisHash": "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874",
"ApplicationName": "cardano-sl",
"ApplicationVersion": 1,
"ByronGenesisFile": "byron-genesis.json",
"ByronGenesisHash": "5f20df933584822601f9e3f8c024eb5eb252fe8cefb24d1317dc3d432e940ebb",
"LastKnownBlockVersion-Alt": 0,
"LastKnownBlockVersion-Major": 3,
"LastKnownBlockVersion-Minor": 0,
"MaxKnownMajorProtocolVersion": 2,
"Protocol": "Cardano",
"RequiresNetworkMagic": "RequiresNoMagic",
"ShelleyGenesisFile": "shelley-genesis.json",
"ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
"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,
"defaultBackends": [
"KatipBK"
],
"defaultScribes": [
[
"FileSK",
"logs/node.json"
]
],
"hasEKG": 12788,
"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",
"LastKnownBlockVersion-Alt": 0,
"LastKnownBlockVersion-Major": 3,
"LastKnownBlockVersion-Minor": 0,
"MaxKnownMajorProtocolVersion": 2,
"Protocol": "Cardano",
"RequiresNetworkMagic": "RequiresNoMagic",
"ShelleyGenesisFile": "shelley-genesis.json",
"ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
"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": true,
"TraceMux": false,
"TracePeerSelection": true,
"TracePeerSelectionActions": true,
"TracePublicRootPeers": true,
"TraceServer": true,
"TraceTxInbound": false,
"TraceTxOutbound": false,
"TraceTxSubmissionProtocol": false,
"TracingVerbosity": "NormalVerbosity",
"TurnOnLogMetrics": true,
"TurnOnLogging": true,
"defaultBackends": [
"KatipBK"
],
"defaultScribes": [
[
"FileSK",
"logs/node.json"
]
],
"hasEKG": 12788,
"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.
RELAY
BLOCK
~/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

¡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 próxima sección.
Si este es tu primer nodo se recomienda dejes que sincronice completamente antes de continuar con el proceso de crear tus llaves y certificados. Prepárate un café por que el sync inicial va a tomar un buen rato :)
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.
Copiar enlace
Esquema
Descargar archivos necesarios
config.json
topology.json
Iniciar el nodo