Añadir Metadata a una tx

Creamos un archivo json que almacenará los metadatos que queremos registrar en la transacción:

echo '{"user-id": "123456", "event-id": "a124", "option": "b"}' > data-example.json 

Parámetros de transacción

Calculamos el UTXO de entrada tx_in:

cardano-cli shelley 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}

Obtenemos el slot actual:

currentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')
echo $currentSlot

Creamos el borrador de la transacción con el metadata:

Transacción de prueba

cardano-cli shelley transaction build-raw \
   ${tx_in}  \
   --tx-out $(cat paymentwithstake.addr)+0 \
   --metadata-json-file data-example.json \
   --ttl $(( ${currentSlot} + 1200)) \
   --fee 0 \
   --certificate pool.cert \
   --out-file tx.tmp

Calculamos la comisión de transacción en base a 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 2 \
    --byron-witness-count 0 \
    --protocol-params-file params.json | awk '{ print $1 }')

echo $fee
txOut=$((${total_balance}-${fee}))
echo Change Output: ${txOut}

Creamos la transacción final añadiendo un archivo data-examle.json:

cardano-cli shelley transaction build-raw \
${tx_in} \
--tx-out $(cat paymentwithstake.addr)+${txOut} \
--metadata-json-file data-example.json \
--ttl $(( ${currentSlot} + 1200)) \
--fee ${fee} \
--certificate pool.cert \
--out-file tx.raw

Firmamos la transacción:

cardano-cli shelley transaction sign \
    --tx-body-file tx.raw \
    --signing-key-file payment.skey \
    --signing-key-file node.skey \
    --signing-key-file stake.skey \
    --mainnet \
    --out-file tx.signed

Lanzamos la transacción a la blockchain:

cardano-cli shelley transaction submit \
    --tx-file tx.signed \
    --mainnet

Última actualización

¿Te fue útil?