From 1e7d0b0382bd8ff676f83ec677867881aa196985 Mon Sep 17 00:00:00 2001 From: Daniel Firth Date: Wed, 6 Mar 2024 15:39:03 +0000 Subject: [PATCH] Add snapshotNumber field to Open head state --- hydra-node/src/Hydra/Chain/Direct/Tx.hs | 4 +++- hydra-node/test/Hydra/Chain/Direct/Contract/Close.hs | 2 ++ .../test/Hydra/Chain/Direct/Contract/CollectCom.hs | 8 ++++---- hydra-node/test/Hydra/Chain/Direct/Contract/Decrement.hs | 1 + hydra-node/test/Hydra/Chain/Direct/Contract/Mutation.hs | 9 ++++++--- hydra-node/test/Hydra/Chain/Direct/TxTraceSpec.hs | 1 + hydra-plutus/src/Hydra/Contract/HeadState.hs | 1 + 7 files changed, 18 insertions(+), 8 deletions(-) diff --git a/hydra-node/src/Hydra/Chain/Direct/Tx.hs b/hydra-node/src/Hydra/Chain/Direct/Tx.hs index 04cef386762..3fee2a3a90e 100644 --- a/hydra-node/src/Hydra/Chain/Direct/Tx.hs +++ b/hydra-node/src/Hydra/Chain/Direct/Tx.hs @@ -326,6 +326,7 @@ collectComTx networkId scriptRegistry vk headId headParameters (headInput, initi Head.Open { Head.parties = partyToChain <$> parties , utxoHash + , snapshotNumber = 0 , contestationPeriod = toChain contestationPeriod , headId = headIdToCurrencySymbol headId } @@ -394,10 +395,11 @@ decrementTx scriptRegistry vk headId headParameters (headInput, headOutput) snap Head.Open { Head.parties = partyToChain <$> parties , utxoHash + , snapshotNumber = toInteger number , contestationPeriod = toChain contestationPeriod , headId = headIdToCurrencySymbol headId } - Snapshot{utxo, utxoToDecommit} = snapshot + Snapshot{utxo, utxoToDecommit, number} = snapshot -- | Low-level data type of a snapshot to close the head with. This is different -- to the 'ConfirmedSnasphot', which is provided to `CloseTx` as it also diff --git a/hydra-node/test/Hydra/Chain/Direct/Contract/Close.hs b/hydra-node/test/Hydra/Chain/Direct/Contract/Close.hs index 27f05baea7b..dadb02de8be 100644 --- a/hydra-node/test/Hydra/Chain/Direct/Contract/Close.hs +++ b/hydra-node/test/Hydra/Chain/Direct/Contract/Close.hs @@ -164,6 +164,7 @@ healthyOpenHeadDatum = Head.Open { parties = healthyOnChainParties , utxoHash = toBuiltin $ hashUTxO @Tx healthyUTxO + , snapshotNumber = toInteger healthyCloseSnapshotNumber , contestationPeriod = healthyContestationPeriod , headId = toPlutusCurrencySymbol Fixture.testPolicyId } @@ -310,6 +311,7 @@ genCloseMutation (tx, _utxo) = Head.Open { parties = mutatedParties , utxoHash = "" + , snapshotNumber = toInteger healthyCloseSnapshotNumber , contestationPeriod = healthyContestationPeriod , headId = toPlutusCurrencySymbol Fixture.testPolicyId } diff --git a/hydra-node/test/Hydra/Chain/Direct/Contract/CollectCom.hs b/hydra-node/test/Hydra/Chain/Direct/Contract/CollectCom.hs index 4dd0f143024..6b520e74da4 100644 --- a/hydra-node/test/Hydra/Chain/Direct/Contract/CollectCom.hs +++ b/hydra-node/test/Hydra/Chain/Direct/Contract/CollectCom.hs @@ -275,8 +275,8 @@ genCollectComMutation (tx, _utxo) = mutatedPartiesHeadTxOut parties = modifyInlineDatum $ \case - Head.Open{utxoHash, contestationPeriod, headId} -> - Head.Open{Head.parties = parties, contestationPeriod, utxoHash, headId} + Head.Open{utxoHash, snapshotNumber, contestationPeriod, headId} -> + Head.Open{Head.parties = parties, snapshotNumber, contestationPeriod, utxoHash, headId} st -> error $ "Unexpected state " <> show st mutateUTxOHash = do @@ -284,6 +284,6 @@ genCollectComMutation (tx, _utxo) = pure $ modifyInlineDatum (mutateState mutatedUTxOHash) headTxOut mutateState mutatedUTxOHash = \case - Head.Open{parties, contestationPeriod, headId} -> - Head.Open{parties, contestationPeriod, Head.utxoHash = toBuiltin mutatedUTxOHash, headId} + Head.Open{parties, contestationPeriod, snapshotNumber, headId} -> + Head.Open{parties, snapshotNumber, contestationPeriod, Head.utxoHash = toBuiltin mutatedUTxOHash, headId} st -> st diff --git a/hydra-node/test/Hydra/Chain/Direct/Contract/Decrement.hs b/hydra-node/test/Hydra/Chain/Direct/Contract/Decrement.hs index 0bb4319bf89..28700a8d92b 100644 --- a/hydra-node/test/Hydra/Chain/Direct/Contract/Decrement.hs +++ b/hydra-node/test/Hydra/Chain/Direct/Contract/Decrement.hs @@ -132,6 +132,7 @@ healthyDatum = { utxoHash = toBuiltin $ hashUTxO @Tx healthyUTxO , parties = healthyOnChainParties , contestationPeriod = toChain healthyContestationPeriod + , snapshotNumber = toInteger healthySnapshotNumber , headId = toPlutusCurrencySymbol testPolicyId } diff --git a/hydra-node/test/Hydra/Chain/Direct/Contract/Mutation.hs b/hydra-node/test/Hydra/Chain/Direct/Contract/Mutation.hs index 5440fb5c1c2..902f1766436 100644 --- a/hydra-node/test/Hydra/Chain/Direct/Contract/Mutation.hs +++ b/hydra-node/test/Hydra/Chain/Direct/Contract/Mutation.hs @@ -783,10 +783,11 @@ replaceParties parties = \case , Head.headId = headId , Head.seed = seed } - Head.Open{contestationPeriod, utxoHash, headId} -> + Head.Open{contestationPeriod, snapshotNumber, utxoHash, headId} -> Head.Open { Head.contestationPeriod = contestationPeriod , Head.parties = parties + , Head.snapshotNumber = snapshotNumber , Head.utxoHash = utxoHash , Head.headId = headId } @@ -805,10 +806,11 @@ replaceParties parties = \case replaceUtxoHash :: Head.Hash -> Head.State -> Head.State replaceUtxoHash utxoHash = \case - Head.Open{contestationPeriod, parties, headId} -> + Head.Open{contestationPeriod, snapshotNumber, parties, headId} -> Head.Open { Head.contestationPeriod = contestationPeriod , Head.parties = parties + , Head.snapshotNumber = snapshotNumber , Head.utxoHash = utxoHash , Head.headId = headId } @@ -864,10 +866,11 @@ replaceHeadId headId = \case , Head.headId = headId , Head.seed = seed } - Head.Open{contestationPeriod, utxoHash, parties} -> + Head.Open{contestationPeriod, utxoHash, snapshotNumber, parties} -> Head.Open { Head.contestationPeriod = contestationPeriod , Head.parties = parties + , Head.snapshotNumber = snapshotNumber , Head.utxoHash = utxoHash , Head.headId = headId } diff --git a/hydra-node/test/Hydra/Chain/Direct/TxTraceSpec.hs b/hydra-node/test/Hydra/Chain/Direct/TxTraceSpec.hs index 6321bb7f9aa..14500ccc83a 100644 --- a/hydra-node/test/Hydra/Chain/Direct/TxTraceSpec.hs +++ b/hydra-node/test/Hydra/Chain/Direct/TxTraceSpec.hs @@ -288,6 +288,7 @@ openHeadUTxO = , utxoHash = toBuiltin $ hashUTxO @Tx $ snapshotUTxO 0 , contestationPeriod = CP.toChain Fixture.cperiod , headId = headIdToCurrencySymbol $ mkHeadId Fixture.testPolicyId + , snapshotNumber = 0 } -- | Creates a transaction that closes 'openHeadUTxO' with given the snapshot. diff --git a/hydra-plutus/src/Hydra/Contract/HeadState.hs b/hydra-plutus/src/Hydra/Contract/HeadState.hs index 3b0b8b52867..ba780f8c062 100644 --- a/hydra-plutus/src/Hydra/Contract/HeadState.hs +++ b/hydra-plutus/src/Hydra/Contract/HeadState.hs @@ -31,6 +31,7 @@ data State , parties :: [Party] , utxoHash :: Hash , headId :: CurrencySymbol + , snapshotNumber :: SnapshotNumber } | Closed { parties :: [Party]