From 180a34b06c50b0050e361f1ebef057a7a7c9f27b Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 1 Nov 2022 00:25:46 +0800 Subject: [PATCH] regression tests for down voting with fake stakes --- agora-specs/Sample/Proposal/Unlock.hs | 28 +++++++++++++++++++++++++-- agora-specs/Spec/Proposal.hs | 4 ++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/agora-specs/Sample/Proposal/Unlock.hs b/agora-specs/Sample/Proposal/Unlock.hs index 071d644..8b3e380 100644 --- a/agora-specs/Sample/Proposal/Unlock.hs +++ b/agora-specs/Sample/Proposal/Unlock.hs @@ -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 + } + } diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index 2d12fc6..e288370 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -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