Tx stake address
Transacción de registro de dirección stake o participación.
Nos movemos al directorio donde tenemos los certificados:
1
cd
2
cd cnode/keys
Copied!

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.
From Daedalus
From Yoroi
    1.
    Obtenemos el valor de la dirección.
1
cat paymentwithstake.addr
Copied!
2. Enviamos los fondos a la dirección anterior.
Puedes comprobar el estado de la transacción directamente desde cardano explorer.
1. Obtenemos el valor de la dirección.
1
cat paymentwithstake.addr
Copied!
2. Enviamos los fondos a la dirección anterior.
Antes de continuar, tus nodos deben estar completamente sincronizados con la blockchain. De lo contrario, no verá los nuevos fondos.
Obtener los parámetros del protocolo:
1
cardano-cli query protocol-parameters \
2
--mainnet \
3
--out-file protocol.json
Copied!

Obtener la cantidad de deposito necesario

1
poolDeposit=$(cat protocol.json | jq -r '.keyDeposit')
2
echo $poolDeposit
Copied!
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:
1
cardano-cli query utxo \
2
--address $(cat paymentwithstake.addr) \
3
--mainnet > fullUtxo.out
4
5
tail -n +3 fullUtxo.out | sort -k3 -nr > balance.out
6
7
cat balance.out
8
9
tx_in=""
10
total_balance=0
11
while read -r utxo; do
12
in_addr=$(awk '{ print $1 }' <<< "${utxo}")
13
idx=$(awk '{ print $2 }' <<< "${utxo}")
14
utxo_balance=$(awk '{ print $3 }' <<< "${utxo}")
15
total_balance=$((${total_balance}+${utxo_balance}))
16
echo TxHash: ${in_addr}#${idx}
17
echo ADA: ${utxo_balance}
18
tx_in="${tx_in} --tx-in ${in_addr}#${idx}"
19
done < balance.out
20
txcnt=$(cat balance.out | wc -l)
21
echo Total ADA balance: ${total_balance}
22
echo Number of UTXOs: ${txcnt}
Copied!
El balance y los UTXOs dependen de que previamente hayas realizado la transacción de depósito desde tu billetera personal.
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:
    1.
    Crear un certificado de registro.
    2.
    Determinar su tiempo de vida (TTL).
    3.
    Calcular la comisión de transacción y depósitos necesarios.
    4.
    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
1
cardano-cli stake-address registration-certificate \
2
--stake-verification-key-file stake.vkey \
3
--out-file stake.cert
Copied!
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
1
cardano-cli query tip --mainnet
Copied!
{ "blockNo": 4544573, "headerHash": "543341083bcf1bc258c082487fcfbb27a203c5a72378d94618749ee46c1bb772", "slotNo": 5575640 }
También podemos extraer el valor directamente:
1
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
2
3
echo $currentSlot
Copied!
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

Recuerda que, el balance y los UTXOs dependen de que previamente hayas realizado al menos una transacción de depósito desde tu billetera personal a la dirección paymentwithstake.addr.
Nada mas ejecutarse el comando, el primer parámetro ${tx_in} recoge la transacción de entrada. En caso de no haber ejecutado el depósito te aparecerá un error del estilo:
Missing: --tx-in TX-IN
Build a transaction (low-level, inconvenient)
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.
1
cardano-cli transaction build-raw \
2
${tx_in} \
3
--tx-out $(cat paymentwithstake.addr)+0 \
4
--invalid-hereafter $(( ${currentSlot} + 1200)) \
5
--fee 0 \
6
--out-file tx.tmp \
7
--certificate stake.cert
Copied!
Una vez generada la transacción de ejemplo tx.tmp
1
fee=$(cardano-cli transaction calculate-min-fee \
2
--tx-body-file tx.tmp \
3
--tx-in-count ${txcnt} \
4
--tx-out-count 1 \
5
--mainnet \
6
--witness-count 1 \
7
--byron-witness-count 0 \
8
--protocol-params-file protocol.json | awk '{ print $1 }')
9
10
echo $fee
Copied!
197665
Asegúrese de que su balance sea mayor que el costo fee + poolDeposit o no funcionará.
Calcula el cambio, txOut debe ser un valor positivo.
1
txOut=$((${total_balance}-${poolDeposit}-${fee}))
2
echo Change Output: ${txOut}
Copied!
Change Output: 4526616946
Ahora, creamos la transacción que registrará la dirección de participación o stake address.
1
cardano-cli transaction build-raw \
2
${tx_in} \
3
--tx-out $(cat paymentwithstake.addr)+${txOut} \
4
--invalid-hereafter $(( ${currentSlot} + 10000)) \
5
--fee ${fee} \
6
--certificate-file stake.cert \
7
--out-file tx.raw
Copied!
Se genera el archivo tx.rawque representa la transacción.
Firmamos la transacción con las claves secretas de pago y participación payment.skey stake.skey.
1
cardano-cli transaction sign \
2
--tx-body-file tx.raw \
3
--signing-key-file payment.skey \
4
--signing-key-file stake.skey \
5
--mainnet \
6
--out-file tx.signed
Copied!
Finalmente, mandamos la transacción firmada a la red.
1
cardano-cli transaction submit \
2
--tx-file tx.signed \
3
--mainnet
Copied!
Recuerde tener el nodo corriendo y sincronizado, necesitas utilizarlo para lanzar la transacción a la red.
Última actualización 5mo ago