22
33module Hydra.Tx.Close where
44
5- import Hydra.Cardano.Api
5+ import Hydra.Cardano.Api hiding ( utxo )
66import Hydra.Prelude
77
88import Hydra.Contract.Head qualified as Head
@@ -29,6 +29,7 @@ import Hydra.Tx.Accumulator qualified as Accumulator
2929import Hydra.Tx.Crypto (toPlutusSignatures )
3030import Hydra.Tx.Utils (IncrementalAction (.. ), findStateToken , mkHydraHeadV1TxName )
3131import PlutusLedgerApi.V3 (toBuiltin )
32+ import PlutusTx.Builtins (bls12_381_G2_uncompress , toBuiltin )
3233
3334-- * Construction
3435
@@ -92,7 +93,8 @@ closeTx scriptRegistry vk headId openVersion confirmedSnapshot startSlotNo (endS
9293
9394 closeRedeemer =
9495 case confirmedSnapshot of
95- InitialSnapshot {} -> Head. CloseInitial
96+ InitialSnapshot {} ->
97+ Head. CloseInitial
9698 ConfirmedSnapshot {signatures, snapshot = Snapshot {version}} ->
9799 case incrementalAction of
98100 ToCommit utxo' ->
@@ -109,17 +111,38 @@ closeTx scriptRegistry vk headId openVersion confirmedSnapshot startSlotNo (endS
109111 }
110112 ToDecommit utxo' ->
111113 if version == openVersion
112- then Head. CloseUnusedDec {signature = toPlutusSignatures signatures}
114+ then
115+ Head. CloseUnusedDec
116+ { signature = toPlutusSignatures signatures
117+ }
113118 else
114119 Head. CloseUsedDec
115120 { signature = toPlutusSignatures signatures
116121 , alreadyDecommittedUTxOHash = toBuiltin $ hashUTxO utxo'
117122 }
118- NoThing -> Head. CloseAny {signature = toPlutusSignatures signatures}
123+ NoThing ->
124+ Head. CloseAny
125+ { signature = toPlutusSignatures signatures
126+ }
119127
120128 headOutputAfter =
121129 modifyTxOutDatum (const headDatumAfter) headOutputBefore
122130
131+ snapshot = getSnapshot confirmedSnapshot
132+
133+ proof =
134+ let snapshotUTxO =
135+ utxo snapshot
136+ <> case closeRedeemer of
137+ Head. CloseUsedInc {} ->
138+ fromMaybe mempty (utxoToCommit snapshot)
139+ Head. CloseUnusedDec {} ->
140+ fromMaybe mempty (utxoToDecommit snapshot)
141+ _ -> mempty
142+ in bls12_381_G2_uncompress $
143+ toBuiltin $
144+ Accumulator. createMembershipProofFromUTxO @ Tx snapshotUTxO (accumulator snapshot) Accumulator. defaultCRS
145+
123146 headDatumAfter =
124147 mkTxOutDatumInline $
125148 Head. Closed
@@ -145,10 +168,10 @@ closeTx scriptRegistry vk headId openVersion confirmedSnapshot startSlotNo (endS
145168 , contesters = []
146169 , version = fromIntegral openVersion
147170 , accumulatorHash = toBuiltin closedAccumulatorHash
171+ , proof
148172 }
149173 where
150- snapshot = getSnapshot confirmedSnapshot
151- closedAccumulatorHash = Accumulator. getAccumulatorHash $ accumulator snapshot
174+ closedAccumulatorHash = Accumulator. getAccumulatorHash $ accumulator $ getSnapshot confirmedSnapshot
152175
153176 contestationDeadline =
154177 addContestationPeriod (posixFromUTCTime utcTime) openContestationPeriod
0 commit comments