Skip to content

Commit 481af2f

Browse files
committed
Update UTxOState and send events in UTXO rather than UTXOS in conway
1 parent ec4c12a commit 481af2f

File tree

3 files changed

+74
-50
lines changed

3 files changed

+74
-50
lines changed

eras/conway/impl/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## 1.21.0.0
44

5+
* Change `STS` instance of `ConwayUTOXS`: use `PParams` as `Environment`
6+
* Remove `TotalDeposits` and `TxUTxODiff` data constructors from `ConwayUtxosEvent`
57
* Add `Generic` instance for `ApplyTxError`
68
* Change `ScriptsNotPaidUTxO` to use `NonEmptyMap TxIn (TxOut era)` instead of `UTxO era`
79
* Add `conwayLedgerTransitionTRC`

eras/conway/impl/src/Cardano/Ledger/Conway/Rules/Utxo.hs

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,20 @@ module Cardano.Ledger.Conway.Rules.Utxo (
2626
import Cardano.Ledger.Allegra.Rules (AllegraUtxoPredFailure, shelleyToAllegraUtxoPredFailure)
2727
import qualified Cardano.Ledger.Allegra.Rules as Allegra (AllegraUtxoPredFailure (..))
2828
import Cardano.Ledger.Alonzo.Rules (
29-
AlonzoUtxoEvent,
29+
AlonzoUtxoEvent (..),
3030
AlonzoUtxoPredFailure,
3131
AlonzoUtxosPredFailure,
3232
)
3333
import qualified Cardano.Ledger.Alonzo.Rules as Alonzo (
34-
AlonzoUtxoEvent (UtxosEvent),
3534
AlonzoUtxoPredFailure (..),
3635
)
37-
import Cardano.Ledger.Babbage.Rules (BabbageUtxoPredFailure)
36+
import Cardano.Ledger.Babbage.Rules (
37+
BabbageUtxoPredFailure,
38+
babbageUtxoValidation,
39+
updateUTxOStateByTxValidity,
40+
)
3841
import qualified Cardano.Ledger.Babbage.Rules as Babbage (
3942
BabbageUtxoPredFailure (..),
40-
utxoTransition,
4143
)
4244
import Cardano.Ledger.BaseTypes (
4345
Mismatch (..),
@@ -65,13 +67,16 @@ import Cardano.Ledger.Conway.Rules.Utxos (
6567
ConwayUtxosPredFailure (..),
6668
)
6769
import Cardano.Ledger.Plutus (ExUnits)
68-
import qualified Cardano.Ledger.Shelley.LedgerState as Shelley (UTxOState)
69-
import Cardano.Ledger.Shelley.Rules (ShelleyUtxoPredFailure, UtxoEnv (..))
70-
import qualified Cardano.Ledger.Shelley.Rules as Shelley (UtxoEnv, validSizeComputationCheck)
71-
import Cardano.Ledger.State (EraCertState (..), EraUTxO)
70+
import Cardano.Ledger.Shelley.LedgerState (UTxOState (..))
71+
import Cardano.Ledger.Shelley.Rules (
72+
ShelleyUtxoPredFailure,
73+
UtxoEnv (..),
74+
validSizeComputationCheck,
75+
)
76+
import Cardano.Ledger.State (EraCertState (..), EraStake, EraUTxO)
7277
import Cardano.Ledger.TxIn (TxIn)
7378
import Control.DeepSeq (NFData)
74-
import Control.State.Transition.Extended (Embed (..), STS (..))
79+
import Control.State.Transition.Extended
7580
import Data.List.NonEmpty (NonEmpty)
7681
import Data.Map.NonEmpty (NonEmptyMap)
7782
import Data.Set.NonEmpty (NonEmptySet)
@@ -174,7 +179,7 @@ instance InjectRuleFailure "UTXO" ShelleyUtxoPredFailure ConwayEra where
174179
allegraToConwayUtxoPredFailure
175180
. shelleyToAllegraUtxoPredFailure
176181

177-
instance InjectRuleFailure "UTXO" Allegra.AllegraUtxoPredFailure ConwayEra where
182+
instance InjectRuleFailure "UTXO" AllegraUtxoPredFailure ConwayEra where
178183
injectFailure = allegraToConwayUtxoPredFailure
179184

180185
instance InjectRuleFailure "UTXO" AlonzoUtxosPredFailure ConwayEra where
@@ -216,6 +221,36 @@ instance
216221
) =>
217222
NFData (ConwayUtxoPredFailure era)
218223

224+
conwayUtxoTransition ::
225+
forall era.
226+
( EraUTxO era
227+
, EraCertState era
228+
, BabbageEraTxBody era
229+
, AlonzoEraTx era
230+
, EraStake era
231+
, InjectRuleFailure "UTXO" ShelleyUtxoPredFailure era
232+
, InjectRuleFailure "UTXO" AllegraUtxoPredFailure era
233+
, InjectRuleFailure "UTXO" AlonzoUtxoPredFailure era
234+
, InjectRuleFailure "UTXO" BabbageUtxoPredFailure era
235+
, Environment (EraRule "UTXO" era) ~ UtxoEnv era
236+
, State (EraRule "UTXO" era) ~ UTxOState era
237+
, Signal (EraRule "UTXO" era) ~ Tx TopTx era
238+
, BaseM (EraRule "UTXO" era) ~ ShelleyBase
239+
, STS (EraRule "UTXO" era)
240+
, Event (EraRule "UTXO" era) ~ AlonzoUtxoEvent era
241+
, -- In this function we we call the UTXOS rule, so we need some assumptions
242+
Environment (EraRule "UTXOS" era) ~ PParams era
243+
, State (EraRule "UTXOS" era) ~ UTxOState era
244+
, Signal (EraRule "UTXOS" era) ~ Tx TopTx era
245+
, Embed (EraRule "UTXOS" era) (EraRule "UTXO" era)
246+
) =>
247+
TransitionRule (EraRule "UTXO" era)
248+
conwayUtxoTransition = do
249+
TRC (UtxoEnv _ pp certState, utxos, tx) <- judgmentContext
250+
babbageUtxoValidation
251+
updatedUtxos <- trans @(EraRule "UTXOS" era) $ TRC (pp, utxos, tx)
252+
updateUTxOStateByTxValidity pp certState (utxosGovState utxos) tx updatedUtxos
253+
219254
--------------------------------------------------------------------------------
220255
-- ConwayUTXO STS
221256
--------------------------------------------------------------------------------
@@ -225,35 +260,36 @@ instance
225260
( EraTx era
226261
, EraUTxO era
227262
, ConwayEraTxBody era
228-
, AlonzoEraTxWits era
263+
, AlonzoEraTx era
264+
, EraStake era
229265
, EraRule "UTXO" era ~ ConwayUTXO era
230266
, InjectRuleFailure "UTXO" ShelleyUtxoPredFailure era
231267
, InjectRuleFailure "UTXO" AllegraUtxoPredFailure era
232268
, InjectRuleFailure "UTXO" AlonzoUtxoPredFailure era
233269
, InjectRuleFailure "UTXO" BabbageUtxoPredFailure era
234270
, InjectRuleFailure "UTXO" ConwayUtxoPredFailure era
235271
, Embed (EraRule "UTXOS" era) (ConwayUTXO era)
236-
, Environment (EraRule "UTXOS" era) ~ Shelley.UtxoEnv era
237-
, State (EraRule "UTXOS" era) ~ Shelley.UTxOState era
272+
, Environment (EraRule "UTXOS" era) ~ PParams era
273+
, State (EraRule "UTXOS" era) ~ UTxOState era
238274
, Signal (EraRule "UTXOS" era) ~ Tx TopTx era
239275
, PredicateFailure (EraRule "UTXO" era) ~ ConwayUtxoPredFailure era
240276
, EraCertState era
241277
, SafeToHash (TxWits era)
242278
) =>
243279
STS (ConwayUTXO era)
244280
where
245-
type State (ConwayUTXO era) = Shelley.UTxOState era
281+
type State (ConwayUTXO era) = UTxOState era
246282
type Signal (ConwayUTXO era) = Tx TopTx era
247-
type Environment (ConwayUTXO era) = Shelley.UtxoEnv era
283+
type Environment (ConwayUTXO era) = UtxoEnv era
248284
type BaseM (ConwayUTXO era) = ShelleyBase
249285
type PredicateFailure (ConwayUTXO era) = ConwayUtxoPredFailure era
250286
type Event (ConwayUTXO era) = AlonzoUtxoEvent era
251287

252288
initialRules = []
253289

254-
transitionRules = [Babbage.utxoTransition @era]
290+
transitionRules = [conwayUtxoTransition]
255291

256-
assertions = [Shelley.validSizeComputationCheck]
292+
assertions = [validSizeComputationCheck]
257293

258294
instance
259295
( Era era
@@ -264,7 +300,7 @@ instance
264300
Embed (ConwayUTXOS era) (ConwayUTXO era)
265301
where
266302
wrapFailed = UtxosFailure
267-
wrapEvent = Alonzo.UtxosEvent
303+
wrapEvent = UtxosEvent
268304

269305
--------------------------------------------------------------------------------
270306
-- Serialisation
@@ -381,7 +417,7 @@ alonzoToConwayUtxoPredFailure = \case
381417
allegraToConwayUtxoPredFailure ::
382418
forall era.
383419
EraRuleFailure "PPUP" era ~ VoidEraRule "PPUP" era =>
384-
Allegra.AllegraUtxoPredFailure era ->
420+
AllegraUtxoPredFailure era ->
385421
ConwayUtxoPredFailure era
386422
allegraToConwayUtxoPredFailure = \case
387423
Allegra.BadInputsUTxO x -> BadInputsUTxO x

eras/conway/impl/src/Cardano/Ledger/Conway/Rules/Utxos.hs

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import Cardano.Ledger.Babbage.Rules (
4949
expectScriptsToPass,
5050
)
5151
import Cardano.Ledger.Babbage.Tx
52-
import Cardano.Ledger.BaseTypes (ShelleyBase)
52+
import Cardano.Ledger.BaseTypes
5353
import Cardano.Ledger.Binary (
5454
DecCBOR (..),
5555
EncCBOR (..),
@@ -64,6 +64,7 @@ import Cardano.Ledger.Plutus (PlutusWithContext)
6464
import Cardano.Ledger.Shelley.LedgerState (UTxOState (..), utxosDonationL)
6565
import Cardano.Ledger.Shelley.Rules (UtxoEnv (..), updateUTxOState)
6666
import Control.DeepSeq (NFData)
67+
import Control.Monad.Trans.Reader (asks)
6768
import Control.State.Transition.Extended
6869
import Data.List.NonEmpty (NonEmpty)
6970
import qualified Debug.Trace as Debug
@@ -86,20 +87,13 @@ data ConwayUtxosPredFailure era
8687
(Generic)
8788

8889
data ConwayUtxosEvent era
89-
= TotalDeposits (SafeHash EraIndependentTxBody) Coin
90-
| SuccessfulPlutusScriptsEvent (NonEmpty PlutusWithContext)
90+
= SuccessfulPlutusScriptsEvent (NonEmpty PlutusWithContext)
9191
| FailedPlutusScriptsEvent (NonEmpty PlutusWithContext)
92-
| -- | The UTxOs consumed and created by a signal tx
93-
TxUTxODiff
94-
-- | UTxO consumed
95-
(UTxO era)
96-
-- | UTxO created
97-
(UTxO era)
9892
deriving (Generic)
9993

100-
deriving instance (Era era, Eq (TxOut era)) => Eq (ConwayUtxosEvent era)
94+
deriving instance Eq (ConwayUtxosEvent era)
10195

102-
instance (Era era, NFData (TxOut era)) => NFData (ConwayUtxosEvent era)
96+
instance NFData (ConwayUtxosEvent era)
10397

10498
type instance EraRuleFailure "UTXOS" ConwayEra = ConwayUtxosPredFailure ConwayEra
10599

@@ -132,10 +126,8 @@ alonzoToConwayUtxosEvent ::
132126
ConwayUtxosEvent era
133127
alonzoToConwayUtxosEvent = \case
134128
Alonzo.AlonzoPpupToUtxosEvent x -> absurdEraRule @"PPUP" @era x
135-
Alonzo.TotalDeposits h c -> TotalDeposits h c
136129
Alonzo.SuccessfulPlutusScriptsEvent l -> SuccessfulPlutusScriptsEvent l
137130
Alonzo.FailedPlutusScriptsEvent l -> FailedPlutusScriptsEvent l
138-
Alonzo.TxUTxODiff x y -> TxUTxODiff x y
139131

140132
instance
141133
( EraTxCert era
@@ -214,7 +206,7 @@ instance
214206
STS (ConwayUTXOS era)
215207
where
216208
type BaseM (ConwayUTXOS era) = Cardano.Ledger.BaseTypes.ShelleyBase
217-
type Environment (ConwayUTXOS era) = UtxoEnv era
209+
type Environment (ConwayUTXOS era) = PParams era
218210
type State (ConwayUTXOS era) = UTxOState era
219211
type Signal (ConwayUTXOS era) = Tx TopTx era
220212
type PredicateFailure (ConwayUTXOS era) = ConwayUtxosPredFailure era
@@ -256,7 +248,7 @@ utxosTransition ::
256248
, ScriptsNeeded era ~ AlonzoScriptsNeeded era
257249
, Signal (EraRule "UTXOS" era) ~ Tx TopTx era
258250
, STS (EraRule "UTXOS" era)
259-
, Environment (EraRule "UTXOS" era) ~ UtxoEnv era
251+
, Environment (EraRule "UTXOS" era) ~ PParams era
260252
, State (EraRule "UTXOS" era) ~ UTxOState era
261253
, InjectRuleFailure "UTXOS" AlonzoUtxosPredFailure era
262254
, BaseM (EraRule "UTXOS" era) ~ ShelleyBase
@@ -265,10 +257,14 @@ utxosTransition ::
265257
) =>
266258
TransitionRule (EraRule "UTXOS" era)
267259
utxosTransition =
268-
judgmentContext >>= \(TRC (_, _, tx)) -> do
260+
judgmentContext >>= \(TRC (pp, utxos, tx)) -> do
269261
case tx ^. isValidTxL of
270262
IsValid True -> conwayEvalScriptsTxValid
271-
IsValid False -> babbageEvalScriptsTxInvalid
263+
IsValid False -> do
264+
sysSt <- liftSTS $ asks systemStart
265+
ei <- liftSTS $ asks epochInfo
266+
babbageEvalScriptsTxInvalid @era ei sysSt pp tx (utxosUtxo utxos)
267+
pure utxos
272268

273269
conwayEvalScriptsTxValid ::
274270
forall era.
@@ -282,29 +278,19 @@ conwayEvalScriptsTxValid ::
282278
, Signal (EraRule "UTXOS" era) ~ Tx TopTx era
283279
, STS (EraRule "UTXOS" era)
284280
, State (EraRule "UTXOS" era) ~ UTxOState era
285-
, Environment (EraRule "UTXOS" era) ~ UtxoEnv era
281+
, Environment (EraRule "UTXOS" era) ~ PParams era
286282
, InjectRuleFailure "UTXOS" AlonzoUtxosPredFailure era
287283
, BaseM (EraRule "UTXOS" era) ~ ShelleyBase
288284
, InjectRuleEvent "UTXOS" AlonzoUtxosEvent era
289285
, InjectRuleEvent "UTXOS" ConwayUtxosEvent era
290286
) =>
291287
TransitionRule (EraRule "UTXOS" era)
292288
conwayEvalScriptsTxValid = do
293-
TRC (UtxoEnv _ pp certState, utxos@(UTxOState utxo _ _ govState _ _), tx) <-
294-
judgmentContext
289+
TRC (pp, utxos, tx) <- judgmentContext
295290
let txBody = tx ^. bodyTxL
296291

297292
() <- pure $! Debug.traceEvent validBegin ()
298-
expectScriptsToPass pp tx utxo
293+
expectScriptsToPass pp tx (utxosUtxo utxos)
299294
() <- pure $! Debug.traceEvent validEnd ()
300295

301-
utxos' <-
302-
updateUTxOState
303-
pp
304-
utxos
305-
txBody
306-
certState
307-
govState
308-
(tellEvent . injectEvent . TotalDeposits (hashAnnotated txBody))
309-
(\a b -> tellEvent . injectEvent $ TxUTxODiff a b)
310-
pure $! utxos' & utxosDonationL <>~ txBody ^. treasuryDonationTxBodyL
296+
pure $! utxos & utxosDonationL <>~ txBody ^. treasuryDonationTxBodyL

0 commit comments

Comments
 (0)