regression tests for down voting with fake stakes

This commit is contained in:
Hongrui Fang 2022-11-01 00:25:46 +08:00
parent e5e896d978
commit 180a34b06c
No known key found for this signature in database
GPG key ID: F10AB2CCE24113DD
2 changed files with 30 additions and 2 deletions

View file

@ -12,6 +12,7 @@ module Sample.Proposal.Unlock (
SignedBy (..),
TransactionParameters (..),
ProposalParameters (..),
SSTOwner (..),
StakeParameters (..),
Validity (..),
unlock,
@ -26,6 +27,7 @@ module Sample.Proposal.Unlock (
mkRemoveCreatorLockBeforeFinished,
mkCreatorRetractVotes,
mkChangeOutputStakeValue,
mkUseFakeStakes,
) where
--------------------------------------------------------------------------------
@ -47,6 +49,7 @@ import Agora.Stake (
StakeDatum (..),
StakeRedeemer (RetractVotes),
)
import Agora.Utils (validatorHashToTokenName)
import Data.Default.Class (Default (def))
import Data.Map.Strict qualified as StrictMap
import Data.Tagged (Tagged, untag)
@ -64,6 +67,7 @@ import Plutarch.Context (
withValue,
)
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V1.Value qualified as Value
import PlutusLedgerApi.V2 (
Credential (PubKeyCredential),
PubKeyHash,
@ -76,7 +80,7 @@ import Sample.Shared (
proposalAssetClass,
proposalValidator,
proposalValidatorHash,
stakeAssetClass,
stakeSymbol,
stakeValidator,
stakeValidatorHash,
)
@ -162,12 +166,17 @@ data StakeRole
Irrelevant
deriving stock (Bounded, Enum, Show)
data SSTOwner
= StakeValidator
| Attacker
data StakeParameters = StakeParameters
{ numStakes :: Integer
, stakeRole :: StakeRole
, removeVoterLock :: Bool
, removeCreatorLock :: Bool
, alterOutputValue :: Bool
, sstOwner :: SSTOwner
}
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
@ -415,6 +428,7 @@ mkValidVoterRetractVotes i =
, removeVoterLock = True
, removeCreatorLock = False
, alterOutputValue = False
, sstOwner = StakeValidator
}
, transactionParameters =
TransactionParameters
@ -545,3 +559,13 @@ mkChangeOutputStakeValue i =
{ 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"
(Unlock.mkChangeOutputStakeValue nStakes)
(Unlock.Validity True False)
, Unlock.mkTestTree
"use fake stake"
(Unlock.mkUseFakeStakes nStakes)
(Unlock.Validity False False)
]
legalGroup = group "legal" $ map mkLegalGroup stakeCountCases