Registrar pool
Procedimiento para registrar un pool en la blockchain y ser elegible para delegación y recompensas, para esto se necesitan alrededor de 501 ADA. 500 en depósito y 1 ADA para cubrir los fees.
Este procedimiento solo se realiza para el nodo productor de bloques.
Es muy recomendado que toda operación que implique acceso a las cold keys, payment.addr o stake.addr se realicen en una maquina sin acceso a internet a fin de minimizar posibilidades de exponer info sensitiva de nuestro pool y/o fondos a terceros mal intencionados. Luego se copian los archivos firmados al BP o un relay online y desde ahí se les agrega a la blockchain.
Para registrar un pool deberíamos tener al menos nuestro nodos BP y un relay totalmente sincronizados con la red, los pasos a seguir para registrar nuestro pool son los siguientes:

meta.json

Para registrar un pool necesitamos alojar un archivo con la info básica de nuestro pool en algún hosting online, la URL debe ser pública y accesible. El contenido de dicho archivo debe ser similar a:
meta.json
1
{
2
"name": "TOPO Testnet Pool",
3
"description": "Most awesome pool ever XD",
4
"ticker": "TOPO⚡",
5
"homepage": "https://topopool.com",
6
"extended": "https://URL-to-my/meta-extra.json"
7
}
Copied!

meta-extra.json

En el campo extended de meta.json podemos incluir la URL a un segundo archivo con metadata del pool que permite proporcionar mas info y tiene la ventaja que puede modificarse libremente, ya que el archivo meta.json no puede ser cambiado sin que debamos volver a registrar el pool... es un proceso simple pero obviamente implica transacciones "innecesarias" para nuestro pool.
meta-extra.json
1
{
2
"how-to-implement": "",
3
"info": {
4
"url_png_icon_64x64": "https://URL-to-my/icon.png",
5
"url_png_logo": "https://URL-to-my/logo.png",
6
"location": "",
7
"social": {
8
"twitter_handle": "TOPO_Pool",
9
"telegram_handle": "CrypTopo",
10
"facebook_handle": "",
11
"youtube_handle": "UCdeo5yelth9FICeTbVII9Rg",
12
"twitch_handle": "",
13
"discord_handle": "CrypTopo [TOPO⚡]#9159",
14
"github_handle": ""
15
},
16
"company": {
17
"name": "",
18
"addr": "",
19
"city": "",
20
"country": "",
21
"company_id": "",
22
"vat_id": ""
23
},
24
"about": {
25
"me": "Cardano Hispano https://www.youtube.com/channel/UCdeo5yelth9FICeTbVII9Rg",
26
"server": "My server info",
27
"company": "TOPO Pools - An independent pool operator"
28
},
29
"rss": ""
30
},
31
"my-pool-ids": [
32
"9dda57fac3474adbe8b64be4....31f59909231f202b642d33"
33
],
34
"when-satured-then-recommend": [
35
""
36
],
37
"telegram-admin-handle": [
38
""
39
],
40
"adapools_ext": {
41
"prometheus": {
42
"0": {
43
"name": "my node",
44
"type": "relay",
45
"key": "68d92ce7....b6a3431817fcc85"
46
}
47
}
48
}
49
}
Copied!

Hash de meta.json

Una vez que el archivo esta hosteado en una URL publica debemos ademas copiarlo a nuestro nodo (rsync, wget, curl o scp) y calculamos su hash:
1
cardano-cli stake-pool metadata-hash --pool-metadata-file meta.json
Copied!

Certificado de registro de pool

Con estos datos podemos generar nuestro certificado de registro de pool. Todos los valores son en Lovelace. En nuestro ejemplo el pledge es de 10k ADA, el fee fijo es de 340 ADA y el fee variable es 1%.
1
cardano-cli stake-pool registration-certificate \
2
--cold-verification-key-file pool-keys/cold.vkey \
3
--vrf-verification-key-file pool-keys/vrf.vkey \
4
--pool-pledge 10000000000 \
5
--pool-cost 340000000 \
6
--pool-margin 0.01 \
7
--pool-reward-account-verification-key-file stake.vkey \
8
--pool-owner-stake-verification-key-file stake.vkey \
9
--mainnet \
10
--single-host-pool-relay relay-1.my-domain.com \
11
--pool-relay-port 3001 \
12
--single-host-pool-relay relay-2.my-domain.com \
13
--pool-relay-port 3001 \
14
--metadata-url https://URL-to-my/meta.json \
15
--metadata-hash hash_de_meta.json \
16
--out-file out/pool-registration.cert
Copied!

Certificado de delegación

Ahora generamos un certificado de delegación, así nuestro pledge queda activo al registrar el pool.
1
cardano-cli stake-address delegation-certificate \
2
--stake-verification-key-file stake.vkey \
3
--cold-verification-key-file pool-keys/cold.vkey \
4
--out-file out/delegation.cert
Copied!

Generar borrador

Generamos el borrador de nuestra transacción, para esto consultamos nuestro balance y UTXOs, luego corremos:
1
cardano-cli transaction build-raw \
2
--tx-in 1e91967936ea55d369ab3d......4107882fc079b28b6b8f484a#0 \
3
--tx-out $(cat payment.addr)+0 \
4
--ttl 0 \
5
--fee 0 \
6
--out-file tmp/tx.draft \
7
--certificate-file out/pool-registration.cert \
8
--certificate-file out/delegation.cert
Copied!

Cálculo de fees

Calculamos los fees
1
cardano-cli transaction calculate-min-fee \
2
--tx-body-file tmp/tx.draft \
3
--tx-in-count 1 \
4
--tx-out-count 1 \
5
--mainnet \
6
--witness-count 3 \
7
--byron-witness-count 0 \
8
--protocol-params-file out/protocol.json
Copied!

Cálculo de saldos

Calculamos los saldos. La fórmula es simple, Saldo_UTXO - poolDeposit - fee. La primera vez que registramos el pool debemos incluir un depósito de 500 ADA por defecto. Este valor se puede consultar también como se muestra a continuación:
1
cat out/protocol.json | jq .poolDeposit
2
3
expr 10547827547 - 500000000 - 197929
Copied!

Generar transacción

Ahora estamos listos para generar nuestra transacción
1
cardano-cli transaction build-raw \
2
--tx-in 1e91967936ea55d369ab3d8c.....7744107882fc079b28b6b8f484a#0 \
3
--tx-out $(cat payment.addr)+10047629618 \
4
--ttl 4868620 \
5
--fee 197929 \
6
--out-file tmp/tx.raw \
7
--certificate-file out/pool-registration.cert \
8
--certificate-file out/delegation.cert
Copied!

Firma de transacción

Firmamos la transacción
1
cardano-cli transaction sign \
2
--tx-body-file tmp/tx.raw \
3
--signing-key-file payment.skey \
4
--signing-key-file stake.skey \
5
--signing-key-file pool-keys/cold.skey \
6
--mainnet \
7
--out-file tmp/tx.signed
8
Copied!

Someter transacción

Y por último, sometemos la transacción a la blockchain desde un nodo online
1
cardano-cli transaction submit \
2
--tx-file tmp/tx.signed \
3
--mainnet
Copied!
Si no recibimos un error al ejecutar nuestro ultimo comando, el pool ha sido creado exitosamente, en breve debería ser visible en los exploradores y Daedalus.

Verificar creación del pool

Para verificar nuestro pool podemos realizar los siguientes pasos:

Obtener pool id

1
cardano-cli stake-pool id \
2
--output-format hex \
3
--verification-key-file pool-keys/cold.vkey
Copied!

Consultar el ledger state

1
cardano-cli query ledger-state --mainnet \
2
| grep publicKey \
3
| grep pool_id_from_last_command
Copied!
Si obtenemos al menos un resultado, nuestro pool ya esta registrado como BP en la red.
Última actualización 8mo ago