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
1
mkdir ~/cardano-node/relay
2
cd ~/cardano-node/relay
3
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-config.json
4
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-byron-genesis.json
5
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-shelley-genesis.json
6
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-alonzo-genesis.json
7
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-topology.json
8
9
mv mainnet-byron-genesis.json byron-genesis.json
10
mv mainnet-shelley-genesis.json shelley-genesis.json
11
mv mainnet-alonzo-genesis.json alonzo-genesis.json
12
mv mainnet-config.json config.json
13
mv mainnet-topology.json topology.json
Copied!
1
mkdir ~/cardano-node/block
2
cd ~/cardano-node/block
3
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-config.json
4
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-byron-genesis.json
5
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-shelley-genesis.json
6
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-alonzo-genesis.json
7
wget https://hydra.iohk.io/build/7654130/download/1/mainnet-topology.json
8
9
mv mainnet-byron-genesis.json byron-genesis.json
10
mv mainnet-shelley-genesis.json shelley-genesis.json
11
mv mainnet-alonzo-genesis.json alonzo-genesis.json
12
mv mainnet-config.json config.json
13
mv mainnet-topology.json topology.json
Copied!

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
1
{
2
"AlonzoGenesisFile": "alonzo-genesis.json",
3
"AlonzoGenesisHash": "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874",
4
"ApplicationName": "cardano-sl",
5
"ApplicationVersion": 1,
6
"ByronGenesisFile": "byron-genesis.json",
7
"ByronGenesisHash": "5f20df933584822601f9e3f8c024eb5eb252fe8cefb24d1317dc3d432e940ebb",
8
"LastKnownBlockVersion-Alt": 0,
9
"LastKnownBlockVersion-Major": 3,
10
"LastKnownBlockVersion-Minor": 0,
11
"MaxKnownMajorProtocolVersion": 2,
12
"Protocol": "Cardano",
13
"RequiresNetworkMagic": "RequiresNoMagic",
14
"ShelleyGenesisFile": "shelley-genesis.json",
15
"ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
16
"TraceBlockFetchClient": false,
17
"TraceBlockFetchDecisions": true,
18
"TraceBlockFetchProtocol": false,
19
"TraceBlockFetchProtocolSerialised": false,
20
"TraceBlockFetchServer": false,
21
"TraceChainDb": true,
22
"TraceChainSyncBlockServer": false,
23
"TraceChainSyncClient": false,
24
"TraceChainSyncHeaderServer": false,
25
"TraceChainSyncProtocol": false,
26
"TraceConnectionManager": true,
27
"TraceDNSResolver": true,
28
"TraceDNSSubscription": true,
29
"TraceDiffusionInitialization": true,
30
"TraceErrorPolicy": true,
31
"TraceForge": true,
32
"TraceHandshake": false,
33
"TraceInboundGovernor": true,
34
"TraceIpSubscription": true,
35
"TraceLedgerPeers": true,
36
"TraceLocalChainSyncProtocol": false,
37
"TraceLocalErrorPolicy": true,
38
"TraceLocalHandshake": false,
39
"TraceLocalRootPeers": true,
40
"TraceLocalTxSubmissionProtocol": false,
41
"TraceLocalTxSubmissionServer": false,
42
"TraceMempool": false,
43
"TraceMux": false,
44
"TracePeerSelection": true,
45
"TracePeerSelectionActions": true,
46
"TracePublicRootPeers": true,
47
"TraceServer": true,
48
"TraceTxInbound": false,
49
"TraceTxOutbound": false,
50
"TraceTxSubmissionProtocol": false,
51
"TracingVerbosity": "NormalVerbosity",
52
"TurnOnLogMetrics": true,
53
"TurnOnLogging": true,
54
"defaultBackends": [
55
"KatipBK"
56
],
57
"defaultScribes": [
58
[
59
"FileSK",
60
"logs/node.json"
61
]
62
],
63
"hasEKG": 12788,
64
"hasPrometheus": [
65
"0.0.0.0",
66
12798
67
],
68
"minSeverity": "Info",
69
"options": {
70
"mapBackends": {
71
"cardano.node.metrics": [
72
"EKGViewBK"
73
],
74
"cardano.node.resources": [
75
"EKGViewBK"
76
]
77
},
78
"mapSubtrace": {
79
"cardano.node.metrics": {
80
"subtrace": "Neutral"
81
}
82
}
83
},
84
"rotation": {
85
"rpKeepFilesNum": 10,
86
"rpLogLimitBytes": 20000000,
87
"rpMaxAgeHours": 24
88
},
89
"setupBackends": [
90
"KatipBK"
91
],
92
"setupScribes": [
93
{
94
"scFormat": "ScJson",
95
"scKind": "FileSK",
96
"scName": "logs/node.json",
97
"scRotation": null
98
}
99
]
100
}
101
Copied!
~/cardano-node/block/config.json
1
{
2
"AlonzoGenesisFile": "alonzo-genesis.json",
3
"AlonzoGenesisHash": "7e94a15f55d1e82d10f09203fa1d40f8eede58fd8066542cf6566008068ed874",
4
"ApplicationName": "cardano-sl",
5
"ApplicationVersion": 1,
6
"ByronGenesisFile": "byron-genesis.json",
7
"ByronGenesisHash": "5f20df933584822601f9e3f8c024eb5eb252fe8cefb24d1317dc3d432e940ebb",
8
"LastKnownBlockVersion-Alt": 0,
9
"LastKnownBlockVersion-Major": 3,
10
"LastKnownBlockVersion-Minor": 0,
11
"MaxKnownMajorProtocolVersion": 2,
12
"Protocol": "Cardano",
13
"RequiresNetworkMagic": "RequiresNoMagic",
14
"ShelleyGenesisFile": "shelley-genesis.json",
15
"ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
16
"TraceBlockFetchClient": false,
17
"TraceBlockFetchDecisions": true,
18
"TraceBlockFetchProtocol": false,
19
"TraceBlockFetchProtocolSerialised": false,
20
"TraceBlockFetchServer": false,
21
"TraceChainDb": true,
22
"TraceChainSyncBlockServer": false,
23
"TraceChainSyncClient": false,
24
"TraceChainSyncHeaderServer": false,
25
"TraceChainSyncProtocol": false,
26
"TraceConnectionManager": true,
27
"TraceDNSResolver": true,
28
"TraceDNSSubscription": true,
29
"TraceDiffusionInitialization": true,
30
"TraceErrorPolicy": true,
31
"TraceForge": true,
32
"TraceHandshake": false,
33
"TraceInboundGovernor": true,
34
"TraceIpSubscription": true,
35
"TraceLedgerPeers": true,
36
"TraceLocalChainSyncProtocol": false,
37
"TraceLocalErrorPolicy": true,
38
"TraceLocalHandshake": false,
39
"TraceLocalRootPeers": true,
40
"TraceLocalTxSubmissionProtocol": false,
41
"TraceLocalTxSubmissionServer": false,
42
"TraceMempool": true,
43
"TraceMux": false,
44
"TracePeerSelection": true,
45
"TracePeerSelectionActions": true,
46
"TracePublicRootPeers": true,
47
"TraceServer": true,
48
"TraceTxInbound": false,
49
"TraceTxOutbound": false,
50
"TraceTxSubmissionProtocol": false,
51
"TracingVerbosity": "NormalVerbosity",
52
"TurnOnLogMetrics": true,
53
"TurnOnLogging": true,
54
"defaultBackends": [
55
"KatipBK"
56
],
57
"defaultScribes": [
58
[
59
"FileSK",
60
"logs/node.json"
61
]
62
],
63
"hasEKG": 12788,
64
"hasPrometheus": [
65
"0.0.0.0",
66
12798
67
],
68
"minSeverity": "Info",
69
"options": {
70
"mapBackends": {
71
"cardano.node.metrics": [
72
"EKGViewBK"
73
],
74
"cardano.node.resources": [
75
"EKGViewBK"
76
]
77
},
78
"mapSubtrace": {
79
"cardano.node.metrics": {
80
"subtrace": "Neutral"
81
}
82
}
83
},
84
"rotation": {
85
"rpKeepFilesNum": 10,
86
"rpLogLimitBytes": 20000000,
87
"rpMaxAgeHours": 24
88
},
89
"setupBackends": [
90
"KatipBK"
91
],
92
"setupScribes": [
93
{
94
"scFormat": "ScJson",
95
"scKind": "FileSK",
96
"scName": "logs/node.json",
97
"scRotation": null
98
}
99
]
100
}
101
Copied!

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
1
{
2
"Producers": [
3
{
4
"addr": "ip.de.bp.node",
5
"port": 3000,
6
"valency": 1
7
},
8
{
9
"addr": "relays-new.cardano-mainnet.iohk.io",
10
"port": 3001,
11
"valency": 2
12
},
13
{
14
"friendly_name": "TOPO USA1",
15
"addr": "relays-us1.topopool.com",
16
"port": 3001,
17
"valency": 1
18
},
19
{
20
"friendly_name": "TOPO GERMANY1",
21
"addr": "relays-de1.topopool.com",
22
"port": 3001,
23
"valency": 1
24
}
25
]
26
}
Copied!
~/cardano-node/block/topology.json
1
{
2
"Producers": [
3
{
4
"friendly_name": "RELAY1",
5
"addr": "ip.de.relay.1",
6
"port": 3001,
7
"valency": 1
8
},
9
{
10
"friendly_name": "RELAY2",
11
"addr": "ip.de.relay.2",
12
"port": 3001,
13
"valency": 1
14
}
15
]
16
}
Copied!
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 :)
1
screen -dmS RELAY bash -c 'cardano-node run \
2
--topology /home/ubuntu/cardano-node/relay/topology.json \
3
--database-path /home/ubuntu/cardano-node/relay/db \
4
--socket-path /home/ubuntu/cardano-node/relay/db/socket \
5
--port 3001 \
6
--config /home/ubuntu/cardano-node/relay/config.json; exec bash'
Copied!
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.