import Hydra.Contract.Commit (SerializedTxOut (..))
import qualified Hydra.Contract.Commit as Commit
import Hydra.Contract.Encoding (encodeTxOut)
-
import Hydra.Data.Party (Party)
import Ledger.Typed.Scripts (TypedValidator, ValidatorTypes (..))
import qualified Ledger.Typed.Scripts as Scripts
import Plutus.Codec.CBOR.Encoding (encodingToBuiltinByteString)
checkCommit commitValidator committedRef [email protected]{scriptContextTxInfo = txInfo} =
-
checkCommittedValue && checkCommittedDatum
+
checkCommittedValue && checkSerializedTxOut
traceIfFalse "commitLockedValue does not match" $
traceIfFalse ("comittedValue: " `appendString` debugValue committedValue) $
commitLockedValue == initialValue + committedValue
-
case scriptOutputsAt commitValidator txInfo of
-
case getDatum <$> findDatum dh txInfo of
-
Nothing -> traceError "Invalid datum hash with no datum"
-
case fromBuiltinData @(Party, ValidatorHash, Maybe SerializedTxOut) da of
-
Just (_party, _headScriptHash, Nothing) ->
-
traceIfFalse "committed UTXO is not in output datum" $ isNothing committedRef
-
Just (_party, _headScriptHash, Just serialisedTxOut) ->
-
case txInInfoResolved <$> committedTxOut of
-
Nothing -> traceError "unexpected UTXO in output datum"
-
traceIfFalse "mismatch committed TxOut in datum" $
-
SerializedTxOut (encodingToBuiltinByteString (encodeTxOut txOut)) == serialisedTxOut
-
_ -> traceError "expected single commit output"
+
case (committedTxOut, commitLockedSerializedTxOut) of
+
traceError "nothing committed, but TxOut in output datum"
+
traceError "committed TxOut, but nothing in output datum"
+
(Just txOut, Just serializedTxOut) ->
+
traceIfFalse "mismatch committed TxOut in datum" $
+
SerializedTxOut (encodingToBuiltinByteString (encodeTxOut txOut)) == serializedTxOut
maybe mempty (txOutValue . txInInfoResolved) $ findOwnInput context
-
maybe mempty (txOutValue . txInInfoResolved) committedTxOut
+
maybe mempty txOutValue committedTxOut
-
findTxInByTxOutRef ref txInfo
+
txInInfoResolved <$> findTxInByTxOutRef ref txInfo
commitLockedValue = valueLockedBy txInfo commitValidator
+
commitLockedSerializedTxOut =
+
case scriptOutputsAt commitValidator txInfo of
+
case getDatum <$> findDatum dh txInfo of
+
Nothing -> traceError "expected optional commit datum"
+
case fromBuiltinData @(DatumType Commit.Commit) da of
+
Nothing -> traceError "expected commit datum type, got something else"
+
Just (_party, _headScriptHash, mSerializedTxOut) ->
+
_ -> traceError "expected single commit output"
debugValue = debugInteger . getLovelace . fromValue
-- | Show an 'Integer' as decimal number. This is very inefficient and only