# Registrar pool

Este procedimiento solo se realiza para el nodo productor de bloques.

{% hint style="danger" %}
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.
{% endhint %}

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:

{% code title="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"
}
```

{% endcode %}

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

{% code title="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"
			}
		}
	} 
}
```

{% endcode %}

## 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:&#x20;

```
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
```

{% hint style="success" %}
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.&#x20;
{% endhint %}

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://es-kb.topopool.com/primeros-pasos/registrar-pool.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
