regression tests for down voting with fake stakes

This commit is contained in:
Hongrui Fang 2022-11-01 00:25:46 +08:00
parent a200f4ee20
commit e9e1502138
2 changed files with 30 additions and 2 deletions

View file

@ -12,6 +12,7 @@ module Sample.Proposal.Unlock (
SignedBy (..), SignedBy (..),
TransactionParameters (..), TransactionParameters (..),
ProposalParameters (..), ProposalParameters (..),
SSTOwner (..),
StakeParameters (..), StakeParameters (..),
Validity (..), Validity (..),
unlock, unlock,
@ -26,6 +27,7 @@ module Sample.Proposal.Unlock (
mkRemoveCreatorLockBeforeFinished, mkRemoveCreatorLockBeforeFinished,
mkCreatorRetractVotes, mkCreatorRetractVotes,
mkChangeOutputStakeValue, mkChangeOutputStakeValue,
mkUseFakeStakes,
) where ) where
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -47,6 +49,7 @@ import Agora.Stake (
StakeDatum (..), StakeDatum (..),
StakeRedeemer (RetractVotes), StakeRedeemer (RetractVotes),
) )
import Agora.Utils (validatorHashToTokenName)
import Data.Default.Class (Default (def)) import Data.Default.Class (Default (def))
import Data.Map.Strict qualified as StrictMap import Data.Map.Strict qualified as StrictMap
import Data.Tagged (Tagged, untag) import Data.Tagged (Tagged, untag)
@ -64,6 +67,7 @@ import Plutarch.Context (
withValue, withValue,
) )
import Plutarch.Extra.AssetClass (assetClassValue) import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V1.Value qualified as Value
import PlutusLedgerApi.V2 ( import PlutusLedgerApi.V2 (
Credential (PubKeyCredential), Credential (PubKeyCredential),
PubKeyHash, PubKeyHash,
@ -76,7 +80,7 @@ import Sample.Shared (
proposalAssetClass, proposalAssetClass,
proposalValidator, proposalValidator,
proposalValidatorHash, proposalValidatorHash,
stakeAssetClass, stakeSymbol,
stakeValidator, stakeValidator,
stakeValidatorHash, stakeValidatorHash,
) )
@ -162,12 +166,17 @@ data StakeRole
Irrelevant Irrelevant
deriving stock (Bounded, Enum, Show) deriving stock (Bounded, Enum, Show)
data SSTOwner
= StakeValidator
| Attacker
data StakeParameters = StakeParameters data StakeParameters = StakeParameters
{ numStakes :: Integer { numStakes :: Integer
, stakeRole :: StakeRole , stakeRole :: StakeRole
, removeVoterLock :: Bool , removeVoterLock :: Bool
, removeCreatorLock :: Bool , removeCreatorLock :: Bool
, alterOutputValue :: Bool , alterOutputValue :: Bool
, sstOwner :: SSTOwner
} }
data Validity = Validity data Validity = Validity
@ -275,7 +284,11 @@ unlock ps = builder
--- ---
sst = assetClassValue stakeAssetClass 1 sstName = case ps.stakeParameters.sstOwner of
StakeValidator -> validatorHashToTokenName stakeValidatorHash
_ -> ""
sst = Value.singleton stakeSymbol sstName 1
stakeInputDatum = mkStakeInputDatum ps.stakeParameters stakeInputDatum = mkStakeInputDatum ps.stakeParameters
@ -415,6 +428,7 @@ mkValidVoterRetractVotes i =
, removeVoterLock = True , removeVoterLock = True
, removeCreatorLock = False , removeCreatorLock = False
, alterOutputValue = False , alterOutputValue = False
, sstOwner = StakeValidator
} }
, transactionParameters = , transactionParameters =
TransactionParameters TransactionParameters
@ -545,3 +559,13 @@ mkChangeOutputStakeValue i =
{ alterOutputValue = True { alterOutputValue = True
} }
} }
mkUseFakeStakes :: Integer -> ParameterBundle
mkUseFakeStakes i =
let template = mkValidVoterCreatorRetractVotes i
in template
{ stakeParameters =
template.stakeParameters
{ sstOwner = Attacker
}
}

View file

@ -402,6 +402,10 @@ specs =
"change output stake value" "change output stake value"
(Unlock.mkChangeOutputStakeValue nStakes) (Unlock.mkChangeOutputStakeValue nStakes)
(Unlock.Validity True False) (Unlock.Validity True False)
, Unlock.mkTestTree
"use fake stake"
(Unlock.mkUseFakeStakes nStakes)
(Unlock.Validity False False)
] ]
legalGroup = group "legal" $ map mkLegalGroup stakeCountCases legalGroup = group "legal" $ map mkLegalGroup stakeCountCases