Añadir Metadata a una tx
Creamos un archivo json que almacenará los metadatos que queremos registrar en la transacción:
1
echo '{"user-id": "123456", "event-id": "a124", "option": "b"}' > data-example.json
Copied!

Parámetros de transacción

Calculamos el UTXO de entrada tx_in:
1
cardano-cli shelley 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!
Obtenemos el slot actual:
1
currentSlot=$(cardano-cli shelley query tip --mainnet | jq -r '.slotNo')
2
echo $currentSlot
Copied!
Creamos el borrador de la transacción con el metadata:

Transacción de prueba

1
cardano-cli shelley transaction build-raw \
2
${tx_in} \
3
--tx-out $(cat paymentwithstake.addr)+0 \
4
--metadata-json-file data-example.json \
5
--ttl $(( ${currentSlot} + 1200)) \
6
--fee 0 \
7
--certificate pool.cert \
8
--out-file tx.tmp
Copied!

Calculamos la comisión de transacción en base a 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 2 \
7
--byron-witness-count 0 \
8
--protocol-params-file params.json | awk '{ print $1 }')
9
10
echo $fee
Copied!
1
txOut=$((${total_balance}-${fee}))
2
echo Change Output: ${txOut}
Copied!
Creamos la transacción final añadiendo un archivo data-examle.json:
1
cardano-cli shelley transaction build-raw \
2
${tx_in} \
3
--tx-out $(cat paymentwithstake.addr)+${txOut} \
4
--metadata-json-file data-example.json \
5
--ttl $(( ${currentSlot} + 1200)) \
6
--fee ${fee} \
7
--certificate pool.cert \
8
--out-file tx.raw
Copied!
Firmamos la transacción:
1
cardano-cli shelley transaction sign \
2
--tx-body-file tx.raw \
3
--signing-key-file payment.skey \
4
--signing-key-file node.skey \
5
--signing-key-file stake.skey \
6
--mainnet \
7
--out-file tx.signed
Copied!
Lanzamos la transacción a la blockchain:
1
cardano-cli shelley transaction submit \
2
--tx-file tx.signed \
3
--mainnet
Copied!
Apoyo nuestro trabajo delegando al pool Ada Booster.
Última actualización 4mo ago
Copiar enlace