Skip to content

Commit de77e8c

Browse files
authored
Merge pull request #5285 from IntersectMBO/jj/testing-plutus-scripts
Added a new test Plutus script
2 parents 3f8ad60 + da45815 commit de77e8c

File tree

2 files changed

+30
-0
lines changed
  • libs/plutus-preprocessor/src/Cardano/Ledger/Plutus/Preprocessor

2 files changed

+30
-0
lines changed

libs/plutus-preprocessor/src/Cardano/Ledger/Plutus/Preprocessor/Binary/V3.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ $datumIsWellformedQ
2929
$inputsOutputsAreNotEmptyNoDatumQ
3030
$inputsOutputsAreNotEmptyWithDatumQ
3131
$inputsOverlapsWithRefInputsQ
32+
$ensureTreasuryReserveQ
3233

3334
-- ================================================================
3435
-- Compile and serialize the real functions as Plutus scripts.
@@ -117,3 +118,9 @@ inputsOverlapsWithRefInputsBytes =
117118
( inputsOverlapsWithRefInputsQ
118119
, PlutusBinary $ PV3.serialiseCompiledCode $$(P.compile [||inputsOverlapsWithRefInputs||])
119120
)
121+
122+
ensureTreasuryReserveBytes :: (Q [Dec], PlutusBinary)
123+
ensureTreasuryReserveBytes =
124+
( ensureTreasuryReserveQ
125+
, PlutusBinary $ PV3.serialiseCompiledCode $$(P.compile [||ensureTreasuryReserve||])
126+
)

libs/plutus-preprocessor/src/Cardano/Ledger/Plutus/Preprocessor/Source/V3.hs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{-# LANGUAGE NumericUnderscores #-}
12
{-# LANGUAGE TemplateHaskell #-}
23

34
module Cardano.Ledger.Plutus.Preprocessor.Source.V3 where
@@ -223,3 +224,25 @@ inputsOverlapsWithRefInputsQ =
223224
PV3D.txInfoInputs txInfo
224225
_ -> False
225226
|]
227+
228+
-- | This ensures that a single TreasuryWithdrawal can't withdraw enough to
229+
-- make the treasury have less ADA than the specified reserve amount.
230+
ensureTreasuryReserveQ :: Q [Dec]
231+
ensureTreasuryReserveQ =
232+
[d|
233+
ensureTreasuryReserve :: P.BuiltinData -> P.BuiltinUnit
234+
ensureTreasuryReserve context =
235+
P.check $
236+
case unsafeFromBuiltinData context of
237+
PV3D.ScriptContext
238+
txInfo
239+
_
240+
(PV3D.ProposingScript _ (PV3D.ProposalProcedure _ _ (PV3D.TreasuryWithdrawals withdrawals _))) ->
241+
let
242+
totalWithdrawal = PAMD.foldr (P.+) 0 withdrawals
243+
in
244+
case PV3D.txInfoCurrentTreasuryAmount txInfo of
245+
Just treasury -> treasury P.- totalWithdrawal P.>= 100_000_000
246+
_ -> False
247+
_ -> False
248+
|]

0 commit comments

Comments
 (0)