Direcciones de payment y stake
Generamos las direcciones para solventar los fees de nuestras transacciones, delegar nuestro pledge y recibir las recompensas. Necesitaremos 3 ADA para pagar el depósito y fees.
Este procedimiento solo se realiza para el nodo productor de bloques.
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.
La
payment.addr
es la dirección desde la cual recibiremos y enviaremos nuestros ADA, vendría a ser el equivalente a una billetera. Para crear una el primer paso es generar una Verification (.vkey) y una Signing key (.skey). La primera te sirve para generar la dirección y la segunda te permite firmar transacciones.cd ~/cardano-node
cardano-cli address key-gen \
--verification-key-file payment.vkey \
--signing-key-file payment.skey
La
stake.addr
es la dirección donde recibiremos nuestras recompensas. Como con lapayment.addr
vamos a necesitar primero generar sus Verification y Signing keys.cardano-cli stake-address key-gen \
--verification-key-file stake.vkey \
--signing-key-file stake.skey
Ahora generamos las direcciones utilizando los keys que acabamos de crear. Para la testnet es necesario reemplazar
--mainnet
por --testnet-magic xxxxxxxxxx
.Para generar la
stake.addr
podemos utilizar el siguiente comando:cardano-cli stake-address build \
--stake-verification-key-file stake.vkey \
--out-file stake.addr \
--mainnet
Y ahora generamos nuestro
payment.addr
así:cardano-cli address build \
--payment-verification-key-file payment.vkey \
--stake-verification-key-file stake.vkey \
--out-file payment.addr \
--mainnet
A partir de este momento puedes utilizar esta dirección para enviar y recibir ADA en la blockchain de Cardano. Se recomienda que transfieras a la misma un mínimo de 504 ADA para cubrir los depósitos y fees de las transacciones por registrar tu
stake.addr
y el pool.El ultimo paso en esta sección es registrar nuestro
stake.addr
en la blockchain, el procedimiento es el siguiente:Lo primero que haremos será generar un certificado de registro.
cardano-cli stake-address registration-certificate \
--stake-verification-key-file stake.vkey \
--out-file stake.cert
Luego necesitamos consultar los parámetros del protocolo y los escribiremos al archivo
out/protocol.json
con el siguiente comando, los valores de este archivo los vamos a necesitar para varias partes de nuestro proceso.cardano-cli query protocol-parameters \
--mainnet \
--out-file out/protocol.json
Para los siguientes pasos ya necesitamos tener al menos 3 ADA para cubrir el fee de las transacciones y el depósito por nuestra
stake.addr
. Ahora necesitamos consultar nuestros saldos y UTXO.cardano-cli query utxo \
--address $(cat payment.addr) \
--mainnet
Con lo cual obtenemos un resultado similar al siguiente:

Con estos datos podemos armar nuestra transacción, el primer paso para esto es generar un borrador de transacción, que nos servirá para calcular los fees de la misma. En el ejemplo presente tenemos 2 TXHash, por este motivo vamos a sumar los montos de ambos en Lovelace para los cálculos.
El formato correcto para ingresar los
--tx-in
es TxHash#TxIx
.
En el caso de los --tx-out
se puede utilizar una dirección común addr1
, pero lo mas probable es que usemos la que tenemos almacenada en nuestro payment.addr
. Se puede dejar ttl
y fee
en 0.cardano-cli transaction build-raw \
--tx-in 441c5b0650b5d33f2f05a192453a86398c6e8efeac78438d17fcc18222ee0065#0 \
--tx-in de4e0cd1e4858460b1563de5e279c59b09b073c63656790c3b6f07b6d42be9e2#0 \
--tx-out $(cat payment.addr)+0 \
--ttl 0 \
--fee 0 \
--out-file tmp/tx.draft\
--certificate-file stake.cert
Ahora calculamos los fees, atención con
--tx-in-count
y --tx-out-count
, debemos poner la cantidad de direcciones/UTXO que utilizamos:cardano-cli transaction calculate-min-fee \
--tx-body-file tmp/tx.draft \
--tx-in-count 2 \
--tx-out-count 1 \
--witness-count 1 \
--byron-witness-count 0 \
--mainnet \
--protocol-params-file out/protocol.json
El siguiente valor que nos interesa es
keyDeposit
, podemos extraerlo con de nuestro archivo con:cat out/protocol.json | jq .keyDeposit
Este valor esta expresado en Lovelaces, recordamos que 1 ADA = 1,000,000 Lovelace. Por defecto en la mainnet de Cardano es de 2000000 (2 ADA). Nuestra formula es:
Saldos_UTXO - fee - keyDeposit
. En nuestro ejemplo estamos sumando primero los dos UTXO.expr 49992783811 + 7216189 - 179552 - 2000000
Luego consultamos el tip:
cardano-cli query tip --mainnet | jq .slotNo
Armamos nuestra transacción con todos los datos obtenidos. Para el
--ttl
(Time To Live o el slot hasta el cual puede ser procesada nuestra transacción), un valor puede ser tip + 2000
, de esta manera contamos con un buen margen de tiempo para preparar nuestras transacciones. Para el --tx-out
el formato correcto es dirección+saldo
, donde "saldo" es el restante después de pagar el deposito y los fees.Utilizamos los valores obtenidos anteriormente para generar nuestra transacción
cardano-cli transaction build-raw \
--tx-in 441c5b0650b5d33f2f05a192453a86398c6e8efeac78438d17fcc18222ee0065#0 \
--tx-in de4e0cd1e4858460b1563de5e279c59b09b073c63656790c3b6f07b6d42be9e2#0 \
--tx-out $(cat payment.addr)+49997820448 \
--ttl 8520151 \
--fee 179552 \
--out-file tmp/tx.raw \
--certificate-file stake.cert
Firmamos nuestra transacción:
cardano-cli transaction sign \
--tx-body-file tmp/tx.raw \
--signing-key-file payment.skey \
--signing-key-file stake.skey \
--mainnet \
--out-file tmp/tx.signed
Y sometemos nuestro archivo firmado a la blockchain desde un nodo online.
cardano-cli transaction submit \
--tx-file tmp/tx.signed \
--mainnet
¿Como crear un pool? - Anterior
Keys y certificado del pool
Próximo - ¿Como crear un pool?
Registrar pool
Última actualización 2yr ago