C贸mo delegar fondos en un 芦stake pool禄

Para ser capaces de delegar fondos en un determinado Stake Pool ser谩 necesario cumplir tres condiciones:

  1. La direcci贸n de payment en la cual tenemos los fondos que deseamos delegar deber谩 estar asociada a una direcci贸n de stake.
  2. Dicha direcci贸n de stake debe estar convenientemente registrada en la en la cadena de bloques mediante un certificado de registro. Este certificado deber谩 ser remitido a la cadena de bloques con una transferencia espec铆fica que comporta un dep贸sito. En el momento de escribir estas l铆neas, el dep贸sito es de 2 鈧陈
  3. Ser谩 necesario, adem谩s, un certificado de delegaci贸n que asocie la direcci贸n de stake con el pool seleccionado, que deber谩 ser remitido a la cadena de bloques con una transferencia est谩ndar con la tarifa m铆nima.

Una vez realizado el proceso completo, los fondos depositados en la direcci贸n de payment asociada a la clave de stake en cuesti贸n participar谩n del monto total de fondos delegados al pool, colaborando en la creaci贸n de bloques por parte de ese pool y recibiendo recompensas por ello en la misma direcci贸n de stake.

Dado el procedimiento, podemos ver tambi茅n que cambiar de pool es tan sencillo como crear un nuevo certificado de delegaci贸n y remitirlo a la cadena de bloques, lo que implica una transacci贸n est谩ndar con tarifa m铆nima. El dep贸sito inicial de 2 鈧 es necesario realizarlo solamente una vez para habilitar nuestra direcci贸n a participar en el proceso de delegaci贸n.聽

  • Crear una direcci贸n de payment asociada a una direcci贸n de stake

Para obtener una direcci贸n de payment asociada a una direcci贸n de stake, el procedimiento es muy sencillo, ya que basta con generar la direcci贸n aportando la clave de verificaci贸n de stake, adem谩s de la clave de verificaci贸n de payment. En este ejemplo, para distinguir la direcci贸n de payment asociada a stake de una direcci贸n de payment regular, la llamaremos paymentwithstake.addr

cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file paymentwithstake.addr \
--testnet-magic $MAGIC_NUM
  • Registrar la direcci贸n de Stake

  • Crear un certificado de registro

Antes de poder empezar a delegar fondos es necesario registrar la direcci贸n de stake en la cadena de bloques. Y el primer paso para ellos es crear un certificado de registro de dicha direcci贸n.

cardano-cli stake-address registration-certificate \
--stake-verification-key-file stake.vkey \
--out-file stake.cert

A continuaci贸n, es encesario remitir el certificado a la cadena de bloques. Para ello, realizaremos una transacci贸n desde la direcci贸n de pago , en este caso, paymentwithstake.addr en la cual hay que incluir, de la tarifa est谩ndar, el dep贸sito antes mencionado. Ambas se deducen del balance de la direcci贸n de pago a la hora de especificar el cambio devuelto.

Es importante se帽alar que en este tipo de transacci贸n no se transfieren fondos a ninguna direcci贸n. Tanto la tarifa como el dep贸sito son descontados durante la transacci贸n al calcular el balance resultante que es devuelto en la misma direcci贸n de pago. El destino de ambas cantidades podemos entenderlo como una especie de servicio de tesorer铆a dentro sistema de Cardano, el mismo que genera y administra las recompensas y la expansi贸n monetaria del sistema. Los pasos para realizar la transacci贸n son los habituales:

  • Obtenemos el balance de la direcci贸n de pago

cardano-cli query utxo --address $(cat paymentwithstake.addr) --testnet-magic $MAGIC_NUM

                          TxHash                                 TxIx        Amount
--------------------------------------------------------------------------------------
96c74decbb8079ef017efabe5901ef40ff046a9c1f74ddd0c5eefc46353b53e5     0        1000000000 lovelace + TxOutDatumHashNone
  • Comprobamos la tarifa de registro

Si no lo hemos hecho antes, obtenemos los par谩metros del protocolo que guardaremos en el archivo params.json. Entre otras muchas cosas, podemos obtener la tarifa por registrar la direcci贸n de stake que, como ya hemos dicho, en este momento es de 2 鈧.

cardano-cli query protocol-parameters \
--testnet-magic $MAGIC_NUM \
--out-file params.json
  • Calcular el TTL (Time To Live)

Obtenemos el slot actual de la cadena para calcular el TTL (Time To Live) de la transacci贸n

cardano-cli query tip --testnet-magic $MAGIC_NUM

{
    "epoch": 166,
    "hash": "13e9f47d0a19feb5f860a4b7b571162479ad103331cff1c56d24c116a937ae8f",
    "slot": 41347556,
    "block": 3036045,
    "era": "Alonzo",
    "syncProgress": "100.00"
}

Sabiendo que el tiempo entre dos slots es de un segundo, basta con sumar al slot actual un tiempo que consideremos razonable para armar la transacci贸n sin prisas (normalmente, unos pocos minutos es suficiente)

  • Construimos el borrador de la transacci贸n

Esto es necesario como paso previo para poder calcular la tarifa de la transacci贸n. En este caso podemos dar un valor ‘0’ a los par谩metros espec铆ficos de la transacci贸n, tales como la tarifa, el cambio o el ttl.

cardano-cli shelley transaction build-raw \
--tx-in 96c74decbb8079ef017efabe5901ef40ff046a9c1f74ddd0c5eefc46353b53e5#0 \
--tx-out $(cat paymentwithstake.addr)+0 \
--ttl 0 \
--fee 0 \
--out-file tx.draft \
--certificate-file stake.cert
  • Calcular la tarifa m铆nima

A partir del borrador, calculamos la tarifa m铆nima

Es interesante comprobar que la tarifa de la transacci贸n no depende para nada de las cantidades a transferir.

cardano-cli transaction calculate-min-fee \
--tx-body-file tx.draft \
--tx-in-count 1 \
--tx-out-count 1 \
--witness-count 1 \
--byron-witness-count 0 \
--testnet-magic $MAGIC_NUM \
--protocol-params-file protocol.json
 
172761 Lovelace
  • Construir la transacci贸n definitiva

Aqu铆 es donde podemos observar como la 煤nica direcci贸n de salida es la misma que aquella de la que se obtienen los fondos y que se especifica solamente para recibir el 芦cambio禄 de la transacci贸n, el cual es b谩sicamente el balance inicial menos la tarifa y el dep贸sito.

En mi caso, el c谩lculo de dicho cambio es el siguiente: 1000.000.000 – 2.000.000 – 172.761 = 997.827.239

cardano-cli transaction build-raw \
--tx-in 96c74decbb8079ef017efabe5901ef40ff046a9c1f74ddd0c5eefc46353b53e5#0 \
--tx-out $(cat paymentwithstake.addr)+997827239 \
--ttl 41444206 \
--fee 172761 \
--out-file tx.raw \
--certificate-file stake.cert
  • Firmar la transacci贸n

Aqu铆 podemos observar una caracter铆sitica espec铆fica de este tipo de transacci贸n con respecto a una transacci贸n convencional de movimiento de fondos: En este caso se proporcionan ambas claves de firma: la de pago y la de stake.

cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
--signing-key-file stake.skey \
--testnet-magic $MAGIC_NUM \
--out-file tx.signed
  • Enviar la transacci贸n firmada

cardano-cli transaction submit \
--tx-file tx.signed \
--testnet-magic $MAGIC_NUM

Transaction successfully submitted.

Y… voil脿!

  • Registrar la delegaci贸n en un determinado pool

  • Crear el certificado de delegaci贸n

Si deseamos delegar en un determinado pool, necesitaremos conocer el identificador de dicho pool. Se trata de un valor p煤blico que contiene la informaci贸n necesaria para asociar nuestros fondos al pool sin necesidad de conocer sus claves y, por lo tanto, sin comprometer la seguridad del mismo.

cardano-cli stake-address delegation-certificate \
    --stake-verification-key-file stake.vkey \
    --stake-pool-id <stake pool ID> \
    --out-file deleg.cert

Igual que antes, hay que remitir este nuevo certificado a la cadena de bloques mediante una transacci贸n que, en este caso, no implica realizar ning煤n dep贸sito m谩s all谩 de la tarifa est谩ndar. Los pasos ser谩n los mismos que en la transacci贸n anterior.

 

Deja una respuesta