Tx stake address
Transacción de registro de dirección stake o participación.
Nos movemos al directorio donde tenemos los certificados:
cd
cd cnode/keys
Añadir fondos a la stake pool
El siguiente paso es enviar fondos reales de tu billetera personal a la dirección recién creada paymentwithstake.addr
.
Como mínimo tienes que enviar un valor superior a la suma del depósito + pledge + comisión
. El pledge es el grado de compromiso económico con el que un operador crea una stake pool, es decir, con este mecanismo el operador se convierte en el primero en delegar una cantidad determinada de ADAs.
Obtenemos el valor de la dirección.
cat paymentwithstake.addr
2. Enviamos los fondos a la dirección anterior.
Puedes comprobar el estado de la transacción directamente desde cardano explorer.
Obtener los parámetros del protocolo:
cardano-cli query protocol-parameters \
--mainnet \
--out-file protocol.json
Obtener la cantidad de deposito necesario
poolDeposit=$(cat protocol.json | jq -r '.keyDeposit')
echo $poolDeposit
Vamos a obtener el balance total de ADAs y UTXOs, de esta forma comprobamos que la transacción de depósito está correctamente registrada en la blockchain:
cardano-cli query utxo \
--address $(cat paymentwithstake.addr) \
--mainnet > fullUtxo.out
tail -n +3 fullUtxo.out | sort -k3 -nr > balance.out
cat balance.out
tx_in=""
total_balance=0
while read -r utxo; do
in_addr=$(awk '{ print $1 }' <<< "${utxo}")
idx=$(awk '{ print $2 }' <<< "${utxo}")
utxo_balance=$(awk '{ print $3 }' <<< "${utxo}")
total_balance=$((${total_balance}+${utxo_balance}))
echo TxHash: ${in_addr}#${idx}
echo ADA: ${utxo_balance}
tx_in="${tx_in} --tx-in ${in_addr}#${idx}"
done < balance.out
txcnt=$(cat balance.out | wc -l)
echo Total ADA balance: ${total_balance}
echo Number of UTXOs: ${txcnt}
Tenemos creado hasta el momento los siguientes certificados:
stake.vkey stake.skey stake.addr payment.vkey payment.skey paymentwithstake.addr
Necesitamos registrar nuestro stake key en la blockchain. Para lograr esto, necesitamos:
Crear un certificado de registro.
Determinar su tiempo de vida (TTL).
Calcular la comisión de transacción y depósitos necesarios.
Finalmente, registrar el certificado en la blockchain con una transacción.
Crear un certificado de registro.
A partir de la clave de verificación stake.vkey
cardano-cli stake-address registration-certificate \
--stake-verification-key-file stake.vkey \
--out-file stake.cert
Una vez creado el certificado, debemos incluirlo en una transacción para que quede registrado en la blockchain.
Determinar su tiempo de vida (TTL) o validez de la transacción.
El tiempo de vida TTL determina cuánto tiempo tiene de validez la transacción hasta que es procesada y confirmada. En el caso de que termine el tiempo TTL y la transacción no se haya realizado, esta se cancela. El tiempo se mide en slots
.
Necesitamos el TIP actual de la blockchain, es decir, el número del último slot producido. Buscamos el valor unSlotNo
cardano-cli query tip --mainnet
{ "blockNo": 4544573, "headerHash": "543341083bcf1bc258c082487fcfbb27a203c5a72378d94618749ee46c1bb772", "slotNo": 5575640 }
También podemos extraer el valor directamente:
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
echo $currentSlot
5575640
Entonces, en este momento, el último slot producido hasta el momento es el 5575640.
Cada slot dura 1 segundo. Queremos una ventana de tiempo suficientemente grande para que se complete la transacción, por ejemplo 1200 slots, entonces tendremos un TTL de 5575640 + 1200 = 5576840 . Con esto conseguimos que nuestra transacción pueda verificarse solo hasta el slot 5576840.
2000000
Calcular la tarifa de comisión
Para calcular la tarifa o comisión de transacción vamos a tomar como ejemplo la información del depósito, de la que obtenemos los UTXOs, mas concretamente el valor tx_in
, que debe coincidir con el de tu billetera personal.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat paymentwithstake.addr)+0 \
--invalid-hereafter $(( ${currentSlot} + 1200)) \
--fee 0 \
--out-file tx.tmp \
--certificate stake.cert
Una vez generada la transacción de ejemplo tx.tmp
fee=$(cardano-cli transaction calculate-min-fee \
--tx-body-file tx.tmp \
--tx-in-count ${txcnt} \
--tx-out-count 1 \
--mainnet \
--witness-count 1 \
--byron-witness-count 0 \
--protocol-params-file protocol.json | awk '{ print $1 }')
echo $fee
197665
Calcula el cambio, txOut
debe ser un valor positivo.
txOut=$((${total_balance}-${poolDeposit}-${fee}))
echo Change Output: ${txOut}
Change Output: 4526616946
Ahora, creamos la transacción que registrará la dirección de participación o stake address.
cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat paymentwithstake.addr)+${txOut} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee ${fee} \
--certificate-file stake.cert \
--out-file tx.raw
Se genera el archivo
tx.raw
que representa la transacción.
Firmamos la transacción con las claves secretas de pago y participación payment.skey
stake.skey
.
cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
--signing-key-file stake.skey \
--mainnet \
--out-file tx.signed
Finalmente, mandamos la transacción firmada a la red.
cardano-cli transaction submit \
--tx-file tx.signed \
--mainnet
Recuerde tener el nodo corriendo y sincronizado, necesitas utilizarlo para lanzar la transacción a la red.
Última actualización
¿Te fue útil?