Retirar un pool

Procedimiento para retirar un pool. Se recomienda dar al menos un par de epochs para que los delegadores tengan tiempo de buscar otro pool donde delegar su stake.

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

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.

Última actualización