Eine einfache Cardano Transaktion durchführen

Es ist wichtig, alle Kommandos auszuführen und genau in der gegebenen Reihenfolge auszuführen!

1. Den tip auf der Blockchain herausfinden:

# block producer node
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
echo Current Slot: $currentSlot

Das haben wir getan, um den Zeitpunkt angeben zu können, wann die Transaktion nicht mehr valide sein wird.

2. Die Anzahl der zu sendenden Coins in Lovelace angeben, hier 10Millionen Lovelace -> 10 Ada:

# block producer node
amountToSend=10000000
echo amountToSend: $amountToSend

Cardano Transaktionen werden im in Lovelaces angeben 1 Ada = 1000000 Lovelace.

3. Die Zieladresse angeben:

# block producer
destinationAddress=$(cat destination.addr)
echo destinationAddress: $destinationAddress

destination.addr ist eine Datei, in der die Zieladdresse und nur die Zieladdresse in einer Zeile enthalten ist bsp:

addr1qxhazv2dp8yvqwyxxlt7n7ufwhw582uqtcn9llqak736ptfyf8d2zwjceymcq6l5gxht0nx9zwazvtvnn22sl84tgkyq7guw7q

4. die Account Balance und Anzahl der Transaktionen UTXOs herausfinden:

# block producer node
cardano-cli query utxo \
    --address $(cat payment.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}

5. Das build-raw transaction command bauen, dieses Kommando erzeugt eine raw Transaktion, in der noch einiges fehlt:

# block producer node
cardano-cli transaction build-raw \
    ${tx_in} \
    --tx-out $(cat payment.addr)+0 \
    --tx-out ${destinationAddress}+0 \
    --invalid-hereafter $(( ${currentSlot} + 10000)) \
    --fee 0 \
    --out-file tx.tmp

In der Datei tx.tmp befinden sich jetzt die Informationen, von wo zu wo die Transaktion gehen soll und ab wann sie ungültig wird, wenn sie nicht vorher ausgeführt wird.

6. Netzwerk Parameter abrufen:

cardano-cli query protocol-parameter --mainnet --out-file params.json

7. Jetzt können wir aus dieser tx.tmp heraus die fee berechnen, die wir, für die Transaktion, zu zahlen haben:

# block producer node
fee=$(cardano-cli transaction calculate-min-fee \
--tx-body-file tx.tmp \
--tx-in-count ${txcnt} \
--tx-out-count 2 \
--mainnet \
--witness-count 1 \
--byron-witness-count 0 \
--protocol-params-file params.json | awk '{ print $1 }')
echo fee: $fee

8. Mit der fee kennen wir jetzt unsere Total Balance, was wir senden möchten und die fee, somit kennen wir den Kontostand nach der Transaktion:

# block producer node
txOut=$((${total_balance}-${fee}-${amountToSend}))
echo Change Output: ${txOut}

9. Mit all diesen Informationen können wir die Transaktion in endgültiger Form fertigmachen:

cardano-cli transaction build-raw \
${tx_in} \
--tx-out $(cat payment.addr)+${txOut} \
--tx-out ${destinationAddress}+${amountToSend} \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--fee ${fee} \
--out-file tx.raw

Die tx.raw Datei kopieren wir jetzt zur Offline-Maschine!

Signieren der Transaktion

10. Wir signieren die Transaktion mit dem Payment Sign Key:

# Offline Maschine
cardano-cli transaction sign \
--tx-body-file tx.raw \
--signing-key-file payment.skey \
--mainnet \
--out-file tx.signed

Die signierte Transaktion geht wieder zurück zum Block Producer!

Senden der Transaktion

11. Wir schicken die Transaktion ab:

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

Das war es auch “schon”, die Transaktion ist gesendet!

Ergebnis überprüfen

Optional können wir nachsehen, ob alles angekommen ist:

cardano-cli query utxo \
--address ${destinationAddress} \
--mainnet

Die Ausgabe sollte unsere Transaktion anzeigen.

Scroll to Top