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
{
"name": "TOPO Testnet Pool",
"description": "Most awesome pool ever XD",
"ticker": "TOPO⚡",
"homepage": "https://topopool.com",
"extended": "https://URL-to-my/meta-extra.json"
}

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
{
    "how-to-implement": "",
    "info": {
        "url_png_icon_64x64": "https://URL-to-my/icon.png",
        "url_png_logo": "https://URL-to-my/logo.png",
        "location": "",
        "social": {
            "twitter_handle": "TOPO_Pool",
            "telegram_handle": "CrypTopo",
            "facebook_handle": "",
            "youtube_handle": "UCdeo5yelth9FICeTbVII9Rg",
            "twitch_handle": "",
            "discord_handle": "CrypTopo [TOPO⚡]#9159",
            "github_handle": ""
        },
        "company": {
            "name": "",
            "addr": "",
            "city": "",
            "country": "",
            "company_id": "",
            "vat_id": ""
        },
        "about": {
            "me": "Cardano Hispano https://www.youtube.com/channel/UCdeo5yelth9FICeTbVII9Rg",
            "server": "My server info",
            "company": "TOPO Pools - An independent pool operator"
        },
        "rss": ""
    },
    "my-pool-ids": [
        "9dda57fac3474adbe8b64be4....31f59909231f202b642d33"
    ],
    "when-satured-then-recommend": [
        ""
    ],
    "telegram-admin-handle": [
        ""
    ],
	"adapools_ext": {
		"prometheus": {
			"0": {
				"name": "my node",
				"type": "relay",
				"key": "68d92ce7....b6a3431817fcc85"
			}
		}
	} 
}

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:

cardano-cli stake-pool metadata-hash --pool-metadata-file meta.json

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%.

cardano-cli stake-pool registration-certificate \
	--cold-verification-key-file BP.cold.vkey \
	--vrf-verification-key-file BP.vrf.vkey \
	--pool-pledge 10000000000 \
	--pool-cost 340000000 \
	--pool-margin 0.01 \
	--pool-reward-account-verification-key-file stake.vkey \
	--pool-owner-stake-verification-key-file stake.vkey \
	--mainnet \
	--single-host-pool-relay relay-1.my-domain.com \
	--pool-relay-port 3001 \
	--single-host-pool-relay relay-2.my-domain.com \
	--pool-relay-port 3001 \
	--metadata-url https://URL-to-my/meta.json \
	--metadata-hash hash_de_meta.json \
	--out-file out/pool-registration.cert

Certificado de delegación

Ahora generamos un certificado de delegación, así nuestro pledge queda activo al registrar el pool.

cardano-cli stake-address delegation-certificate \
	--stake-verification-key-file stake.vkey \
	--cold-verification-key-file BP.cold.vkey \
	--out-file out/delegation.cert

Generar borrador

Generamos el borrador de nuestra transacción, para esto consultamos nuestro balance y UTXOs, luego corremos:

cardano-cli transaction build-raw \
	--tx-in 1e91967936ea55d369ab3d......4107882fc079b28b6b8f484a#0 \
	--tx-out $(cat payment.addr)+0 \
	--ttl 0 \
	--fee 0 \
	--out-file tmp/tx.draft \
	--certificate-file out/pool-registration.cert \
	--certificate-file out/delegation.cert

Cálculo de fees

Calculamos los fees

cardano-cli transaction calculate-min-fee \
	--tx-body-file tmp/tx.draft \
	--tx-in-count 1 \
	--tx-out-count 1 \
	--mainnet \
	--witness-count 3 \
	--byron-witness-count 0 \
	--protocol-params-file out/protocol.json

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:

cat out/protocol.json | jq .poolDeposit

expr 10547827547 - 500000000 - 197929

Generar transacción

Ahora estamos listos para generar nuestra transacción

cardano-cli transaction build-raw \
	--tx-in 1e91967936ea55d369ab3d8c.....7744107882fc079b28b6b8f484a#0 \
	--tx-out $(cat payment.addr)+10047629618 \
	--ttl 4868620 \
	--fee 197929 \
	--out-file tmp/tx.raw \
	--certificate-file out/pool-registration.cert \
	--certificate-file out/delegation.cert

Firma de transacción

Firmamos la transacción

cardano-cli transaction sign \
	--tx-body-file tmp/tx.raw \
	--signing-key-file payment.skey \
	--signing-key-file stake.skey \
	--signing-key-file BP.cold.skey \
	--mainnet \
	--out-file tmp/tx.signed

Someter transacción

Y por último, sometemos la transacción a la blockchain desde un nodo online

cardano-cli transaction submit \
	--tx-file tmp/tx.signed \
	--mainnet

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

cardano-cli stake-pool id \
  --output-format hex \
  --verification-key-file BP.cold.vkey

Consultar el ledger state

cardano-cli query ledger-state --mainnet \
  | grep publicKey \
  | grep pool_id_from_last_command

Si obtenemos al menos un resultado, nuestro pool ya esta registrado como BP en la red.

Última actualización