add regression tests for inline GAT datum hashing

This commit is contained in:
Hongrui Fang 2023-02-13 16:00:12 +08:00
parent d2ba02307a
commit d86bde5f42
No known key found for this signature in database
GPG key ID: F2D0D08AF77AC599
2 changed files with 37 additions and 2 deletions

View file

@ -24,6 +24,7 @@ module Sample.Proposal.Advance (
mkValidToNextStateBundle,
mkValidToNextStateBundles,
mkValidToFailedStateBundles,
mkValidToFinishedInlineGATDatumBundles,
mkInsufficientVotesBundle,
mkAmbiguousWinnerBundle,
mkFromFinishedBundles,
@ -199,6 +200,8 @@ data AuthorityTokenParameters = forall
, invalidTokenName :: Bool
-- ^ If set to true, GATs won't be tagged by their corresponding effect
-- hashes.
, shouldInlineDatum :: Bool
-- ^ If set to true, the effect datum will be inlined.
}
-- | Represent the winning effect group(s).
@ -476,7 +479,7 @@ mkAuthorityTokenBuilder ::
CombinableBuilder b =>
AuthorityTokenParameters ->
b
mkAuthorityTokenBuilder ps@AuthorityTokenParameters {carryDatum} =
mkAuthorityTokenBuilder ps@AuthorityTokenParameters {carryDatum, shouldInlineDatum} =
let tn =
case (ps.invalidTokenName, ps.carryAuthScript) of
(True, Just _) -> "deadbeef"
@ -486,12 +489,13 @@ mkAuthorityTokenBuilder ps@AuthorityTokenParameters {carryDatum} =
ac = Tagged @AuthorityTokenTag $ AssetClass authorityTokenSymbol tn
minted = assetClassValue ac 1
value = sortValue $ minAda <> minted
withDatum' = if shouldInlineDatum then withInlineDatum else withDatum
in mconcat
[ mint minted
, output $
mconcat
[ script ps.mintGATsFor
, maybe mempty withDatum carryDatum
, maybe mempty withDatum' carryDatum
, withValue value
]
]
@ -833,6 +837,7 @@ mkValidToNextStateBundle nCosigners nEffects authScript from =
, carryDatum = Just dummyDatum
, carryAuthScript = authScript
, invalidTokenName = False
, shouldInlineDatum = False
}
)
(effects !! winner)
@ -859,6 +864,30 @@ mkValidToNextStateBundles nCosigners nEffects =
[True, False]
[Draft, VotingReady, Locked]
mkValidToFinishedInlineGATDatumBundles ::
Word ->
Word ->
[ParameterBundle]
mkValidToFinishedInlineGATDatumBundles nCosigners nEffects =
let templates =
liftA2
(mkValidToNextStateBundle nCosigners nEffects)
[True, False]
[Locked]
modifyTemplate template =
template
{ authorityTokenParameters =
modifyAuthorityParameters
<$> template.authorityTokenParameters
}
modifyAuthorityParameters params =
params
{ shouldInlineDatum = True
}
in modifyTemplate <$> templates
mkValidToFailedStateBundles ::
-- | Number of cosigners
Word ->
@ -1066,6 +1095,7 @@ mkGATsWithWrongDatumBundle nCosigners nEffects =
(Just (1 :: Integer))
aut.carryAuthScript
False
False
)
<$> template.authorityTokenParameters

View file

@ -254,6 +254,11 @@ specs =
mkName
(Advance.mkValidToFailedStateBundles cs es)
allValid
, Advance.mkTestTree'
"to finished state with inline datum"
mkName
(Advance.mkValidToFinishedInlineGATDatumBundles cs es)
allValid
]
, group
"illegal"