test new functionalities in proposal advancements

This commit is contained in:
Hongrui Fang 2022-08-16 18:33:08 +08:00
parent e5385c3021
commit 1a62d7c4b7
5 changed files with 785 additions and 532 deletions

View file

@ -44,6 +44,7 @@ import Agora.Governor (
) )
import Agora.Proposal ( import Agora.Proposal (
ProposalDatum (..), ProposalDatum (..),
ProposalEffectGroup,
ProposalId (ProposalId), ProposalId (ProposalId),
ProposalRedeemer (AdvanceProposal), ProposalRedeemer (AdvanceProposal),
ProposalStatus (..), ProposalStatus (..),
@ -67,10 +68,11 @@ import Agora.Stake (
StakeRedeemer (WitnessStake), StakeRedeemer (WitnessStake),
) )
import Agora.Utils (validatorHashToTokenName) import Agora.Utils (validatorHashToTokenName)
import Control.Applicative (liftA2)
import Control.Monad.State (execState, modify, when) import Control.Monad.State (execState, modify, when)
import Data.Default (def) import Data.Default (def)
import Data.List (sort) import Data.List (singleton, sort)
import Data.Maybe (catMaybes, fromJust) import Data.Maybe (fromJust)
import Data.Tagged (Tagged (..), untag) import Data.Tagged (Tagged (..), untag)
import Plutarch.Context ( import Plutarch.Context (
input, input,
@ -81,6 +83,7 @@ import Plutarch.Context (
timeRange, timeRange,
withDatum, withDatum,
withRef, withRef,
withReferenceScript,
withValue, withValue,
) )
import Plutarch.Lift (PLifted, PUnsafeLiftDecl) import Plutarch.Lift (PLifted, PUnsafeLiftDecl)
@ -91,6 +94,7 @@ import PlutusLedgerApi.V2 (
POSIXTime, POSIXTime,
POSIXTimeRange, POSIXTimeRange,
PubKeyHash, PubKeyHash,
ScriptHash,
TxOutRef (TxOutRef), TxOutRef (TxOutRef),
ValidatorHash, ValidatorHash,
) )
@ -127,6 +131,7 @@ import Test.Util (
mkMinting, mkMinting,
mkSpending, mkSpending,
pubKeyHashes, pubKeyHashes,
scriptHashes,
sortValue, sortValue,
toDatum, toDatum,
updateMap, updateMap,
@ -144,7 +149,7 @@ data ParameterBundle = ParameterBundle
, governorParameters :: Maybe GovernorParameters , governorParameters :: Maybe GovernorParameters
-- ^ Parameters related to GST moving. If set to 'Nothing', the GST won't -- ^ Parameters related to GST moving. If set to 'Nothing', the GST won't
-- be moved, thus the governor validator won't be run in 'mkTestTree'. -- be moved, thus the governor validator won't be run in 'mkTestTree'.
, authorityTokenParameters :: Maybe AuthorityTokenParameters , authorityTokenParameters :: [AuthorityTokenParameters]
-- ^ Parameters related to GAT minting. If set to 'Nothing', no GAT will -- ^ Parameters related to GAT minting. If set to 'Nothing', no GAT will
-- be minted, thus the GAT minting policy won't be run in 'mkTestTree'. -- be minted, thus the GAT minting policy won't be run in 'mkTestTree'.
, transactionTimeRange :: POSIXTimeRange , transactionTimeRange :: POSIXTimeRange
@ -171,10 +176,12 @@ data AuthorityTokenParameters = forall
, PIsData pdatum , PIsData pdatum
) => ) =>
AuthorityTokenParameters AuthorityTokenParameters
{ mintGATsFor :: [ValidatorHash] { mintGATsFor :: ValidatorHash
-- ^ GATs will be minted and sent to the given group of effects. -- ^ GATs will be minted and sent to the given group of effects.
, carryDatum :: Maybe datum , carryDatum :: Maybe datum
-- ^ The datum that GAT UTxOs will be carrying. -- ^ The datum that GAT UTxOs will be carrying.
, carryRefScript :: Maybe ScriptHash
-- ^ The reference script that GAT UTxOs will be carrying.
, invalidTokenName :: Bool , invalidTokenName :: Bool
-- ^ If set to true, GATs won't be tagged by their corresponding effect -- ^ If set to true, GATs won't be tagged by their corresponding effect
-- hashes. -- hashes.
@ -193,7 +200,7 @@ data ProposalParameters = ProposalParameters
-- ^ What status is the proposal advancing from -- ^ What status is the proposal advancing from
, toStatus :: ProposalStatus , toStatus :: ProposalStatus
-- ^ What status is the proposal advancing to -- ^ What status is the proposal advancing to
, effectList :: [AssocMap.Map ValidatorHash DatumHash] , effectList :: [ProposalEffectGroup]
-- ^ The effect groups of the proposal. A neutral effect group is not -- ^ The effect groups of the proposal. A neutral effect group is not
-- required here. -- required here.
, winnerAndVotes :: Maybe (Winner, Integer) , winnerAndVotes :: Maybe (Winner, Integer)
@ -244,7 +251,7 @@ outcomeIdxToResultTag = ResultTag . fromIntegral
-- | Add a neutral effect group and allocate result tags for the effect groups. -- | Add a neutral effect group and allocate result tags for the effect groups.
mkEffects :: mkEffects ::
ProposalParameters -> ProposalParameters ->
AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) AssocMap.Map ResultTag ProposalEffectGroup
mkEffects ps = mkEffects ps =
let resultTags = map ResultTag [0 ..] let resultTags = map ResultTag [0 ..]
neutralEffect = AssocMap.empty neutralEffect = AssocMap.empty
@ -492,15 +499,11 @@ mkAuthorityTokenBuilder ::
CombinableBuilder b => CombinableBuilder b =>
AuthorityTokenParameters -> AuthorityTokenParameters ->
b b
mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = mkAuthorityTokenBuilder ps@AuthorityTokenParameters {carryDatum} =
foldMap perEffect es
where
perEffect :: ValidatorHash -> b
perEffect vh =
let tn = let tn =
if invalidTokenName if ps.invalidTokenName
then "" then ""
else validatorHashToTokenName vh else validatorHashToTokenName ps.mintGATsFor
ac = AssetClass (authorityTokenSymbol, tn) ac = AssetClass (authorityTokenSymbol, tn)
minted = Value.assetClassValue ac 1 minted = Value.assetClassValue ac 1
value = sortValue $ minAda <> minted value = sortValue $ minAda <> minted
@ -508,8 +511,9 @@ mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) =
[ mint minted [ mint minted
, output $ , output $
mconcat mconcat
[ script vh [ script ps.mintGATsFor
, maybe mempty withDatum mdt , maybe mempty withDatum carryDatum
, maybe mempty withReferenceScript ps.carryRefScript
, withValue value , withValue value
] ]
] ]
@ -532,7 +536,7 @@ advance pb =
[ mkProposalBuilder pb.proposalParameters [ mkProposalBuilder pb.proposalParameters
, mkStakeBuilder pb.stakeParameters , mkStakeBuilder pb.stakeParameters
, mkBuilderMaybe mkGovernorBuilder pb.governorParameters , mkBuilderMaybe mkGovernorBuilder pb.governorParameters
, mkBuilderMaybe mkAuthorityTokenBuilder pb.authorityTokenParameters , foldMap mkAuthorityTokenBuilder pb.authorityTokenParameters
, timeRange pb.transactionTimeRange , timeRange pb.transactionTimeRange
, maybe mempty signedWith pb.extraSignature , maybe mempty signedWith pb.extraSignature
] ]
@ -548,14 +552,13 @@ mkTestTree ::
Validity -> Validity ->
SpecificationTree SpecificationTree
mkTestTree name pb val = mkTestTree name pb val =
group name $ catMaybes [proposal, stake, governor, authority] group name $ mconcat [proposal, stake, governor, authority]
where where
spend = mkSpending advance pb spend = mkSpending advance pb
mint = mkMinting advance pb
proposal = proposal =
let proposalInputDatum = mkProposalInputDatum pb.proposalParameters let proposalInputDatum = mkProposalInputDatum pb.proposalParameters
in Just $ in singleton $
testValidator testValidator
val.forProposalValidator val.forProposalValidator
"proposal" "proposal"
@ -566,7 +569,7 @@ mkTestTree name pb val =
stake = stake =
let idx = 0 let idx = 0
in Just $ in singleton $
testValidator testValidator
val.forStakeValidator val.forStakeValidator
"stake" "stake"
@ -577,6 +580,7 @@ mkTestTree name pb val =
) )
governor = governor =
maybe [] singleton $
testValidator testValidator
(fromJust val.forGovernorValidator) (fromJust val.forGovernorValidator)
"governor" "governor"
@ -586,14 +590,17 @@ mkTestTree name pb val =
(spend governorRef) (spend governorRef)
<$ pb.governorParameters <$ pb.governorParameters
authority = authority = case pb.authorityTokenParameters of
testPolicy [] -> []
_ ->
singleton
( testPolicy
(fromJust val.forAuthorityTokenPolicy) (fromJust val.forAuthorityTokenPolicy)
"authority" "authority"
agoraScripts.compiledAuthorityTokenPolicy agoraScripts.compiledAuthorityTokenPolicy
authorityTokenRedeemer authorityTokenRedeemer
(mint authorityTokenSymbol) (mkMinting advance pb authorityTokenSymbol)
<$ (pb.authorityTokenParameters) )
{- | Create a test tree that runs a bunch of parameter bundles. These bundles {- | Create a test tree that runs a bunch of parameter bundles. These bundles
should have the same validity. should have the same validity.
@ -725,14 +732,26 @@ dummyDatumHash :: DatumHash
dummyDatumHash = datumHash $ toDatum dummyDatum dummyDatumHash = datumHash $ toDatum dummyDatum
-- | Create given number of effect groups. Each group will have 3 effects. -- | Create given number of effect groups. Each group will have 3 effects.
mkMockEffects :: Int -> [AssocMap.Map ValidatorHash DatumHash] mkMockEffects :: Bool -> Int -> [ProposalEffectGroup]
mkMockEffects = mkMockEffects useRefScript n = effects
flip where
take effectsPerGroup = 3
( AssocMap.fromList
. flip zip (repeat dummyDatumHash) mkRefScripts True = Just <$> scriptHashes
<$> groupsOfN 3 validatorHashes mkRefScripts False = repeat Nothing
) refScripts = mkRefScripts useRefScript
datums = repeat dummyDatumHash
effectMetadata = zip datums refScripts
effectScripts = validatorHashes
effects =
take n $
AssocMap.fromList
<$> groupsOfN
effectsPerGroup
(zip effectScripts effectMetadata)
numberOfVotesThatExceedsTheMinimumRequirement :: Integer numberOfVotesThatExceedsTheMinimumRequirement :: Integer
numberOfVotesThatExceedsTheMinimumRequirement = numberOfVotesThatExceedsTheMinimumRequirement =
@ -767,16 +786,18 @@ defaultWinnerIdx = 0
mkValidToNextStateBundle :: mkValidToNextStateBundle ::
-- | Number of cosigners. -- | Number of cosigners.
Word -> Word ->
-- | Number of effects -- | Number of effects.
Word -> Word ->
-- | Toggle the referenc script in GAT UTXO.
Bool ->
-- | The initial proposal state, should not be 'Finished'. -- | The initial proposal state, should not be 'Finished'.
ProposalStatus -> ProposalStatus ->
ParameterBundle ParameterBundle
mkValidToNextStateBundle _ _ Finished = mkValidToNextStateBundle _ _ _ Finished =
error "Cannot advance from Finished" error "Cannot advance from Finished"
mkValidToNextStateBundle nCosigners nEffects from = mkValidToNextStateBundle nCosigners nEffects refScript from =
let next = getNextState from let next = getNextState from
effects = mkMockEffects $ fromIntegral nEffects effects = mkMockEffects refScript $ fromIntegral nEffects
winner = defaultWinnerIdx winner = defaultWinnerIdx
template = template =
@ -800,7 +821,7 @@ mkValidToNextStateBundle nCosigners nEffects from =
, invalidStakeOutputDatum = False , invalidStakeOutputDatum = False
} }
, governorParameters = Nothing , governorParameters = Nothing
, authorityTokenParameters = Nothing , authorityTokenParameters = []
, transactionTimeRange = mkInTimeTimeRange from , transactionTimeRange = mkInTimeTimeRange from
, extraSignature = Just signer , extraSignature = Just signer
} }
@ -830,18 +851,24 @@ mkValidToNextStateBundle nCosigners nEffects from =
when (from == Locked) $ when (from == Locked) $
modify $ \b -> modify $ \b ->
let aut = let aut =
AssocMap.elems $
AssocMap.mapWithKey
( \vh (_, refScript) ->
AuthorityTokenParameters AuthorityTokenParameters
{ mintGATsFor = AssocMap.keys $ effects !! winner { mintGATsFor = vh
, carryDatum = Just dummyDatum , carryDatum = Just dummyDatum
, carryRefScript = refScript
, invalidTokenName = False , invalidTokenName = False
} }
)
(effects !! winner)
gov = gov =
GovernorParameters GovernorParameters
{ invalidGovernorOutputDatum = False { invalidGovernorOutputDatum = False
} }
in b in b
{ governorParameters = Just gov { governorParameters = Just gov
, authorityTokenParameters = Just aut , authorityTokenParameters = aut
} }
in execState modifyTemplate template in execState modifyTemplate template
@ -852,11 +879,10 @@ mkValidToNextStateBundles ::
Word -> Word ->
[ParameterBundle] [ParameterBundle]
mkValidToNextStateBundles nCosigners nEffects = mkValidToNextStateBundles nCosigners nEffects =
mkValidToNextStateBundle nCosigners nEffects liftA2
<$> [ Draft (mkValidToNextStateBundle nCosigners nEffects)
, VotingReady [True, False]
, Locked [Draft, VotingReady, Locked]
]
mkValidToFailedStateBundles :: mkValidToFailedStateBundles ::
-- | Number of cosigners -- | Number of cosigners
@ -865,15 +891,14 @@ mkValidToFailedStateBundles ::
Word -> Word ->
[ParameterBundle] [ParameterBundle]
mkValidToFailedStateBundles nCosigners nEffects = mkValidToFailedStateBundles nCosigners nEffects =
liftA2
mkBundle mkBundle
<$> [ Draft [True, False]
, VotingReady [Draft, VotingReady, Locked]
, Locked
]
where where
mkBundle from = mkBundle refScript from =
let next = Finished let next = Finished
effects = mkMockEffects $ fromIntegral nEffects effects = mkMockEffects refScript $ fromIntegral nEffects
in ParameterBundle in ParameterBundle
{ proposalParameters = { proposalParameters =
ProposalParameters ProposalParameters
@ -894,7 +919,7 @@ mkValidToFailedStateBundles nCosigners nEffects =
, invalidStakeOutputDatum = False , invalidStakeOutputDatum = False
} }
, governorParameters = Nothing , governorParameters = Nothing
, authorityTokenParameters = Nothing , authorityTokenParameters = []
, transactionTimeRange = mkTooLateTimeRange from , transactionTimeRange = mkTooLateTimeRange from
, extraSignature = Just signer , extraSignature = Just signer
} }
@ -908,14 +933,13 @@ mkFromFinishedBundles ::
Word -> Word ->
[ParameterBundle] [ParameterBundle]
mkFromFinishedBundles nCosigners nEffects = mkFromFinishedBundles nCosigners nEffects =
liftA2
mkBundle mkBundle
<$> [ Draft [True, False]
, VotingReady [Draft, VotingReady, Locked]
, Locked
]
where where
mkBundle from = mkBundle refScript from =
let template = mkValidToNextStateBundle nCosigners nEffects from let template = mkValidToNextStateBundle nCosigners nEffects refScript from
in template in template
{ proposalParameters = { proposalParameters =
template.proposalParameters template.proposalParameters
@ -926,24 +950,26 @@ mkFromFinishedBundles nCosigners nEffects =
mkToNextStateTooLateBundles :: Word -> Word -> [ParameterBundle] mkToNextStateTooLateBundles :: Word -> Word -> [ParameterBundle]
mkToNextStateTooLateBundles nCosigners nEffects = mkToNextStateTooLateBundles nCosigners nEffects =
liftA2
mkBundle mkBundle
<$> [ Draft [True, False]
, VotingReady [Draft, VotingReady, Locked]
, Locked
]
where where
mkBundle from = mkBundle refScript from =
let template = mkValidToNextStateBundle nCosigners nEffects from let template = mkValidToNextStateBundle nCosigners nEffects refScript from
in template in template
{ transactionTimeRange = mkTooLateTimeRange from { transactionTimeRange = mkTooLateTimeRange from
} }
mkInvalidOutputStakeBundles :: Word -> Word -> [ParameterBundle] mkInvalidOutputStakeBundles :: Word -> Word -> [ParameterBundle]
mkInvalidOutputStakeBundles nCosigners nEffects = mkInvalidOutputStakeBundles nCosigners nEffects =
mkBundle <$> [Draft, VotingReady, Locked] liftA2
mkBundle
[True, False]
[Draft, VotingReady, Locked]
where where
mkBundle from = mkBundle refScript from =
let template = mkValidToNextStateBundle nCosigners nEffects from let template = mkValidToNextStateBundle nCosigners nEffects refScript from
in template in template
{ stakeParameters = { stakeParameters =
template.stakeParameters template.stakeParameters
@ -965,7 +991,7 @@ mkInsufficientCosignsBundle nCosigners nEffects =
insuffcientPerStakeGTs = insuffcientPerStakeGTs =
untag (def :: ProposalThresholds).vote untag (def :: ProposalThresholds).vote
`div` fromIntegral nCosigners - 1 `div` fromIntegral nCosigners - 1
template = mkValidToNextStateBundle nCosigners nEffects Draft template = mkValidToNextStateBundle nCosigners nEffects False Draft
-- * From VotingReady -- * From VotingReady
@ -986,7 +1012,7 @@ mkInsufficientVotesBundle ::
Word -> Word ->
ParameterBundle ParameterBundle
mkInsufficientVotesBundle nCosigners nEffects = mkInsufficientVotesBundle nCosigners nEffects =
mkValidToNextStateBundle nCosigners nEffects VotingReady mkValidToNextStateBundle nCosigners nEffects False VotingReady
`setWinnerAndVotes` Nothing `setWinnerAndVotes` Nothing
mkAmbiguousWinnerBundle :: mkAmbiguousWinnerBundle ::
@ -994,14 +1020,14 @@ mkAmbiguousWinnerBundle ::
Word -> Word ->
ParameterBundle ParameterBundle
mkAmbiguousWinnerBundle nCosigners nEffects = mkAmbiguousWinnerBundle nCosigners nEffects =
mkValidToNextStateBundle nCosigners nEffects VotingReady mkValidToNextStateBundle nCosigners nEffects False VotingReady
`setWinnerAndVotes` Just ambiguousWinnerVotes `setWinnerAndVotes` Just ambiguousWinnerVotes
-- * From Locked -- * From Locked
mkValidFromLockedBundle :: Word -> Word -> ParameterBundle mkValidFromLockedBundle :: Word -> Word -> ParameterBundle
mkValidFromLockedBundle nCosigners nEffects = mkValidFromLockedBundle nCosigners nEffects =
mkValidToNextStateBundle nCosigners nEffects Locked mkValidToNextStateBundle nCosigners nEffects False Locked
mkMintGATsForWrongEffectsBundle :: mkMintGATsForWrongEffectsBundle ::
Word -> Word ->
@ -1010,17 +1036,11 @@ mkMintGATsForWrongEffectsBundle ::
mkMintGATsForWrongEffectsBundle nCosigners nEffects = mkMintGATsForWrongEffectsBundle nCosigners nEffects =
template template
{ authorityTokenParameters = { authorityTokenParameters =
( \aut -> take 4 $
aut zipWith
{ mintGATsFor = (\a i -> a {mintGATsFor = validatorHashes !! i})
[ validatorHashes !! 1 template.authorityTokenParameters
, validatorHashes !! 3 [1, 3 ..]
, validatorHashes !! 5
, validatorHashes !! 7
]
}
)
<$> template.authorityTokenParameters
} }
where where
template = mkValidFromLockedBundle nCosigners nEffects template = mkValidFromLockedBundle nCosigners nEffects
@ -1031,7 +1051,7 @@ mkNoGATMintedBundle ::
ParameterBundle ParameterBundle
mkNoGATMintedBundle nCosigners nEffects = mkNoGATMintedBundle nCosigners nEffects =
template template
{ authorityTokenParameters = Nothing { authorityTokenParameters = []
} }
where where
template = mkValidFromLockedBundle nCosigners nEffects template = mkValidFromLockedBundle nCosigners nEffects
@ -1059,16 +1079,19 @@ mkGATsWithWrongDatumBundle ::
ParameterBundle ParameterBundle
mkGATsWithWrongDatumBundle nCosigners nEffects = mkGATsWithWrongDatumBundle nCosigners nEffects =
template template
{ authorityTokenParameters = Just newAut { authorityTokenParameters = newAut
} }
where where
template = mkValidFromLockedBundle nCosigners nEffects template = mkValidFromLockedBundle nCosigners nEffects
aut = fromJust template.authorityTokenParameters
newAut = newAut =
( \aut ->
AuthorityTokenParameters AuthorityTokenParameters
aut.mintGATsFor aut.mintGATsFor
(Just (1 :: Integer)) (Just (1 :: Integer))
aut.carryRefScript
False False
)
<$> template.authorityTokenParameters
mkBadGovernorOutputDatumBundle :: mkBadGovernorOutputDatumBundle ::
Word -> Word ->

View file

@ -26,6 +26,7 @@ import Agora.Governor (
) )
import Agora.Proposal ( import Agora.Proposal (
ProposalDatum (..), ProposalDatum (..),
ProposalEffectGroup,
ProposalId (ProposalId), ProposalId (ProposalId),
ProposalStatus (..), ProposalStatus (..),
ResultTag (ResultTag), ResultTag (ResultTag),
@ -60,12 +61,10 @@ import Plutarch.Context (
) )
import PlutusLedgerApi.V1.Value qualified as Value import PlutusLedgerApi.V1.Value qualified as Value
import PlutusLedgerApi.V2 ( import PlutusLedgerApi.V2 (
DatumHash,
POSIXTime (POSIXTime), POSIXTime (POSIXTime),
POSIXTimeRange, POSIXTimeRange,
PubKeyHash, PubKeyHash,
TxOutRef (TxOutRef), TxOutRef (TxOutRef),
ValidatorHash,
always, always,
) )
import PlutusTx.AssocMap qualified as AssocMap import PlutusTx.AssocMap qualified as AssocMap
@ -136,7 +135,7 @@ defLocks :: [ProposalLock]
defLocks = [Created (ProposalId 0)] defLocks = [Created (ProposalId 0)]
-- | The effect of the newly created proposal. -- | The effect of the newly created proposal.
defEffects :: AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) defEffects :: AssocMap.Map ResultTag ProposalEffectGroup
defEffects = defEffects =
AssocMap.fromList AssocMap.fromList
[ (ResultTag 0, AssocMap.empty) [ (ResultTag 0, AssocMap.empty)

View file

@ -28,6 +28,7 @@ module Sample.Proposal.UnlockStake (
import Agora.Governor (Governor (..)) import Agora.Governor (Governor (..))
import Agora.Proposal ( import Agora.Proposal (
ProposalDatum (..), ProposalDatum (..),
ProposalEffectGroup,
ProposalId (..), ProposalId (..),
ProposalRedeemer (Unlock), ProposalRedeemer (Unlock),
ProposalStatus (..), ProposalStatus (..),
@ -51,10 +52,8 @@ import Plutarch.Context (
) )
import PlutusLedgerApi.V1.Value qualified as Value import PlutusLedgerApi.V1.Value qualified as Value
import PlutusLedgerApi.V2 ( import PlutusLedgerApi.V2 (
DatumHash,
PubKeyHash, PubKeyHash,
TxOutRef (..), TxOutRef (..),
ValidatorHash,
) )
import PlutusTx.AssocMap qualified as AssocMap import PlutusTx.AssocMap qualified as AssocMap
import Sample.Proposal.Shared (stakeTxRef) import Sample.Proposal.Shared (stakeTxRef)
@ -85,7 +84,7 @@ votesTemplate =
-- | Create empty effects for every result tag given the votes. -- | Create empty effects for every result tag given the votes.
emptyEffectFor :: emptyEffectFor ::
ProposalVotes -> ProposalVotes ->
AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) AssocMap.Map ResultTag ProposalEffectGroup
emptyEffectFor (ProposalVotes vs) = emptyEffectFor (ProposalVotes vs) =
AssocMap.fromList $ AssocMap.fromList $
map (,AssocMap.empty) (AssocMap.keys vs) map (,AssocMap.empty) (AssocMap.keys vs)

View file

@ -15,6 +15,7 @@ module Test.Util (
sortValue, sortValue,
blake2b_224, blake2b_224,
pubKeyHashes, pubKeyHashes,
scriptHashes,
userCredentials, userCredentials,
scriptCredentials, scriptCredentials,
validatorHashes, validatorHashes,
@ -43,7 +44,6 @@ import Plutarch.Context (
) )
import Plutarch.Crypto (pblake2b_256) import Plutarch.Crypto (pblake2b_256)
import PlutusLedgerApi.V1.Interval qualified as PlutusTx import PlutusLedgerApi.V1.Interval qualified as PlutusTx
import PlutusLedgerApi.V1.Scripts (Datum (Datum), DatumHash (DatumHash))
import PlutusLedgerApi.V1.Value (Value (..)) import PlutusLedgerApi.V1.Value (Value (..))
import PlutusLedgerApi.V2 ( import PlutusLedgerApi.V2 (
Credential ( Credential (
@ -51,8 +51,11 @@ import PlutusLedgerApi.V2 (
ScriptCredential ScriptCredential
), ),
CurrencySymbol, CurrencySymbol,
Datum (Datum),
DatumHash (DatumHash),
PubKeyHash (..), PubKeyHash (..),
ScriptContext, ScriptContext,
ScriptHash (ScriptHash),
TxOutRef, TxOutRef,
ValidatorHash (ValidatorHash), ValidatorHash (ValidatorHash),
) )
@ -162,6 +165,10 @@ validatorHashes = ValidatorHash . PlutusTx.toBuiltin <$> blake2b_224Hashes
scriptCredentials :: [Credential] scriptCredentials :: [Credential]
scriptCredentials = ScriptCredential <$> validatorHashes scriptCredentials = ScriptCredential <$> validatorHashes
-- | An infinite list of *valid* script hashes.
scriptHashes :: [ScriptHash]
scriptHashes = ScriptHash . PlutusTx.toBuiltin <$> blake2b_224Hashes
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- | Turn the given list in to groups which have the given length. -- | Turn the given list in to groups which have the given length.

1037
bench.csv

File diff suppressed because it is too large Load diff