# Retirar un pool

{% 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 esto necesitamos crear un certificado de des-registro y someter la transacción. El retiro del pool se hará al final del epoch que indiquemos en nuestro certificado. El mismo debe ser un epoch mayor al actual y menor que `eMax`, cuyo valor podemos consultar en el `protocol.json`.

```
cd ~/cardano-node
cardano-cli query protocol-parameters \
  --mainnet \
  --out-file out/protocol.json

cat out/protocol.json | jq .eMax
```

Necesitamos consultar también el epoch actual, una forma simple y rápida es consultar las métricas de cardano-node.

```
curl -s http://127.0.0.1:12798/metrics | grep epoch
```

Para este ejemplo tenemos que `eMax` es igual a 18 y el epoch actual es 200, es decir que nuestro epoch para retirar el pool debe estar comprendido entre 201 y 218.

## Certificado de des-registro

Generamos un certificado indicando el epoch en que retiraremos el pool

```
cardano-cli stake-pool deregistration-certificate \
  --cold-verification-key-file pool-keys/cold.vkey \
  --epoch 210 \
  --out-file out/pool.deregistration
```

### Borrador de transacción

Consultamos nuestros UTXO y tip. Luego generamos nuestro borrador.

```
cardano-cli query utxo \
	--address $(cat payment.addr) \
	--mainnet
	
cardano-cli query tip --mainnet | jq .slotNo
	
cardano-cli transaction build-raw \
  --tx-in 4fec1c3bcd8752befae60ca69f....28cb28319cba44115281f925add#0 \
  --tx-out $(cat payment.addr)+0 \
  --ttl 0 \
  --fee 0 \
  --out-file tmp/tx.draft \
  --certificate-file out/pool.deregistration
```

### Cálculo de saldo, fees y ttl

Aplicamos la fórmula `Saldo_UTXO - fee`. Para el `--ttl` podemos usar un valor seguro como `tip + 2000`.

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

### Generar transacción

Ahora si generamos nuestra transacción con los valores obtenidos, la firmamos y sometemos a la blockchain

```
cardano-cli transaction build-raw \
  --tx-in 4fec1c3bcd8752befae60ca69f6042......8319cba44115281f925add#0 \
  --tx-out $(cat payment.addr)+826433\
  --ttl 5027980 \
  --fee 826433 \
  --out-file tmp/tx.raw \
  --certificate-file out/pool.deregistration

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

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

{% hint style="info" %}
Se debe tener en cuenta ademas que luego de retirar el pool se deben esperar 2 epochs para recibir el depósito de 500 ADA en nuestro `stake.addr`.
{% endhint %}
