:DE: ValueNotConservedUTxO: Fehler obwohl Input / Output gleich sind

Liebe Community

Zurzeit kämpfe ich damit, eine einfache Transaktion durchzuführen oder Pool-Rewards zu claimen.
Ich benutze die Anleitung von CoinCash, was bis anhin ohne Probleme geklappt hat.

Was sich noch gegenüber früher geändert hat, das noch ein NFT in meinem Wallet drin ist.
Wenn ich nach Anleitung die Transaktion durchführe, erhalte ich folgenden Fehler:

Command failed: transaction submit Error: Error while submitting tx: ShelleyTxValidationError ShelleyBasedEraBabbage (ApplyTxError [UtxowFailure (UtxoFailure (FromAlonzoUtxoFail (ValueNotConservedUTxO (Value 3778502693 (fromList [(PolicyID {policyID = ScriptHash “b8e9005a83627a130ec020b4a0ed5f73984a01f2fb5ad7bf16c74359”},fromList [(6b72616568656d70,1)])])) (Value 3778502693 (fromList )))))])

Der Fehler “ValueNotConservedUTxO” sagt gemäss Cardano aus, das Input != Output sein soll.
Dies ist aber hier nicht der Fall. Die Berechnung scheint zu stimmen, da diese Beträge im Stacktrace gleich sind (grün markiert).

Was aber glaube ich den Fehler verursacht, ist der rote markierte Teil. Ich kann aber nicht genau sagen, was genau den Fehler verursacht. Dieser Rote markierte Teil ist ein Teil von einer Policy-ID des NFT.

afc9e8d5b5081d79591ecef2c4e4e9585c0f547707c3ec0533ff16098a5208fe 0 3416163484 lovelace + TxOutDatumNone
afc9e8d5b5081d79591ecef2c4e4e9585c0f547707c3ec0533ff16098a5208fe 1 1400000 lovelace + 1 b8e9005a83627a130ec020b4a0ed5f73984a01f2fb5ad7bf16c74359.6b72616568656d70 + TxOutDatumNone

Ist das Script von CoinCash falsch oder wie muss ich eine manuelle Transaktion anpassen, damit dieser Fehler nicht mehr auftaucht?

UTXO-details:
https://cexplorer.io/address/addr1q83ggfaw3mvcg8jgm8087kpfec63tyg373m3ne3wq74drgf3mvkku4877zq4sl8zs8hm32crx2edzxjqnfffe903ekrsk4r7nx/utxo#data

Beste Grüsse

Hast Du richtig erkannt. “Value” sind nicht nur die ADA, sondern auch die Native Token. Wenn im Input welche sind (oder gemintet werden), müssen sie auch im Output sein (oder verbrannt werden).

Naja, falsch nicht wirklich. Sie gehen halt davon aus, dass ein SPO keine komischen Native Token auf seinen Stake-Pool-Verwatltungs-Adressen rumfliegen hat.

Und statt zu erklären, was Du machen musst, nämlich alles (inklusive Native Token) aus den Inputs aufaddieren und dann auf Outputs und Fee verteilen, geben sie Dir diesen while read -r utxo; do-Code-Schnipsel zum Kopieren, den kaum jemand versteht und der halt nur mit reinen ADA klar kommt.

Füge einfach das NFT einem der Outputs hinzu, damit es auch irgendwohin gesendet wird.

1 Like

Okay, „einfach“ ist vielleicht ein bisschen übertrieben, also lieber nochmal im Detail:

Eine --tx-out-Option wird zusammengesetzt aus:

--tx-out <Adresse>+<Lovelace>+<Anzahl> <Policy-ID>.<Name in Hex>+<Anzahl> <Policy-ID>.<Name in Hex>+…

Das ist, was die Coincashew-Anleitung mit

--tx-out $(cat payment.addr)+${txOut} \

macht. Da sie sich nicht um Native Token kümmert, ist es halt ein bisschen einfacher und sie müssen nur die Anzahl Lovelace aus der Variable ${txOut} hinzufügen.

Das kannst Du, da es nur ein Token ist, relativ leicht ersetzen durch:

--tx-out "$(cat payment.addr)+${txOut}+1 b8e9005a83627a130ec020b4a0ed5f73984a01f2fb5ad7bf16c74359.6b72616568656d70" \

Da müssen jetzt Anführungszeichen drumrum, weil zwischen der Anzahl (1) und der Policy-ID (b8e9…4359) ein Leerzeichen ist und Deine Shell das sonst als zwei getrennte Argumente an cardano-cli geben würde, womit das dann nichts anfangen kann.

Das sollte die Transaktion in diesem Fall schon reparieren. Achte darauf, dass Du das sowohl beim ersten build-raw vor der Berechnung der Fee als auch beim zweiten, der dann die endgültige Transaktion baut, machen musst. Das verändert die Größe der Transaktion und damit die Fee wohl doch schon wesentlich.

1 Like

Alternative: Du lässt das NFT mit seinen 1,4 ADA einfach da, wo es gerade ist.

Coincashew’s Anleitung sammelt einfach stupide alle UTxOs ein und benutzt sie alle. Das muss man nicht machen.

Man kann sich auch die UTxOs selbst angucken und nur genug für das, was man machen möchte, auswählen.

In Deinem Fall sollte der andere UTxO locker reichen.

Wenn Du also Coincashew’s

${tx_in} \

durch

--tx-in afc9e8d5b5081d79591ecef2c4e4e9585c0f547707c3ec0533ff16098a5208fe#0 \

ersetzt und statt

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}

von Hand

total_balance=3416163484
txcnt=1

setzt, wird nur Dein erster UTxO verwendet und der weitere Verlauf der Coincashew-Anleitung sollte trotzdem genau so funktionieren.

1 Like

Super :slight_smile: Hat wunderbar so geklappt.
Vielen Dank für die Unterstützung.

1 Like

Hoffe, die Erklärungen sind ausreichend, dass es auch nächstes Mal wieder klappt. Sonst einfach nachfragen!

1 Like

Dies hat wunderbar geholfen für das bessere Verständnis.
Ich hatte aus Testzwecken ein NFT erzeugt, was mir nun zum Verhängnis wurde :smiley:

2 Likes