From d921927a2fdf1e4ce1af62e3f52c879ae71bbb4a Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 3 Nov 2022 01:54:22 +0800 Subject: [PATCH 1/9] bump lpe --- flake.lock | 62 ++++++++++++++++++++++++++++++++++++++++++------------ flake.nix | 2 +- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 12c0bce..933bda1 100644 --- a/flake.lock +++ b/flake.lock @@ -559,11 +559,11 @@ "nixpkgs-2205": "nixpkgs-2205" }, "locked": { - "lastModified": 1660580223, - "narHash": "sha256-r1i92rrUjSBdnQZpHLxeCAtVGMHYqKQHm05mzddIte8=", + "lastModified": 1666695559, + "narHash": "sha256-v8DcNma4hAgLCbPHpsxNYzeMURfbxh20VXfFzUED6bs=", "owner": "Liqwid-Labs", "repo": "liqwid-nix", - "rev": "fa1eeba35b37ac2551a00798dffdf053879699c3", + "rev": "7add1f24e9360e96b2bab4a1fc7929d4fa649439", "type": "github" }, "original": { @@ -631,14 +631,15 @@ }, "liqwid-nix_6": { "inputs": { - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_9", + "nixpkgs-2205": "nixpkgs-2205_5" }, "locked": { - "lastModified": 1659383708, - "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "lastModified": 1666695559, + "narHash": "sha256-v8DcNma4hAgLCbPHpsxNYzeMURfbxh20VXfFzUED6bs=", "owner": "Liqwid-Labs", "repo": "liqwid-nix", - "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", + "rev": "7add1f24e9360e96b2bab4a1fc7929d4fa649439", "type": "github" }, "original": { @@ -691,11 +692,11 @@ ] }, "locked": { - "lastModified": 1666735011, - "narHash": "sha256-ugpT7IHlga+fq8+CTYW+MZa4OT4f6Xp+UaWSbbJUTgM=", + "lastModified": 1668121695, + "narHash": "sha256-2ltW7mvn14zm9f67OmxXIPJHAXR6vxBdN/6Q6nRh7a8=", "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "a5be78478418aff2312787860f4736837f24494e", + "rev": "0cb63aa7d4fd2006cf590edc7fca0f3fcdb71a55", "type": "github" }, "original": { @@ -952,6 +953,38 @@ "type": "github" } }, + "nixpkgs-2205_5": { + "locked": { + "lastModified": 1660033036, + "narHash": "sha256-GjwzXmdN5SVTT0RIZ11uDTQxaHLTLt9/AbBeIHNfidQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "490f6174c03132bf8f078d0f3a6e5890a47f9b30", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2205_6": { + "locked": { + "lastModified": 1653936696, + "narHash": "sha256-M6bJShji9AIDZ7Kh7CPwPBPb/T7RiVev2PAcOi4fxDQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ce6aa13369b667ac2542593170993504932eb836", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "22.05", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-latest": { "locked": { "lastModified": 1666809571, @@ -1311,6 +1344,7 @@ "nixpkgs-2111": [ "nixpkgs-2111" ], + "nixpkgs-2205": "nixpkgs-2205_6", "nixpkgs-latest": [ "nixpkgs-latest" ], @@ -1319,16 +1353,16 @@ ] }, "locked": { - "lastModified": 1659450065, - "narHash": "sha256-x6B9sjrZaTite4TSLLyOWfmG3JJbOZuGUNMDZ1f4qhk=", + "lastModified": 1667344793, + "narHash": "sha256-xbnqP7DL3rkjslh7wUGghiAv9ksbEebMih31YY/5nxg=", "owner": "liqwid-labs", "repo": "plutarch-quickcheck", - "rev": "2c5b77f1a622ce68d80a09b286eb0ac85527ff26", + "rev": "4d369eccd35193ce723587d12c4eb2dfa21a824e", "type": "github" }, "original": { "owner": "liqwid-labs", - "ref": "staging", + "ref": "main", "repo": "plutarch-quickcheck", "type": "github" } diff --git a/flake.nix b/flake.nix index d76986c..a669865 100644 --- a/flake.nix +++ b/flake.nix @@ -59,7 +59,7 @@ inputs.ply.follows = "ply"; }; plutarch-quickcheck = { - url = "github:liqwid-labs/plutarch-quickcheck?ref=staging"; + url = "github:liqwid-labs/plutarch-quickcheck?ref=main"; inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs-latest.follows = "nixpkgs-latest"; inputs.nixpkgs-2111.follows = "nixpkgs-2111"; From 6da4e7286d19e4507bc53e26096ded48a4e6904b Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 3 Nov 2022 02:13:21 +0800 Subject: [PATCH 2/9] fix compilation errors --- agora-specs/Property/Governor.hs | 416 +++++++++--------- .../UnauthorizedMintingExploit.hs | 2 +- agora-specs/Sample/Effect/GovernorMutation.hs | 2 +- agora-specs/Sample/Governor/Mutate.hs | 2 +- agora-specs/Sample/Proposal/Advance.hs | 2 +- agora-specs/Sample/Proposal/Create.hs | 2 +- agora-specs/Sample/Proposal/Unlock.hs | 2 +- agora-specs/Sample/Shared.hs | 4 +- agora-specs/Sample/Stake/Create.hs | 2 +- .../Stake/UnauthorizedMintingExploit.hs | 2 +- agora/Agora/AuthorityToken.hs | 7 +- agora/Agora/Effect/GovernorMutation.hs | 13 +- agora/Agora/Effect/TreasuryWithdrawal.hs | 4 +- agora/Agora/Governor/Scripts.hs | 21 +- agora/Agora/Linker.hs | 3 +- agora/Agora/Proposal/Scripts.hs | 25 +- agora/Agora/Proposal/Time.hs | 2 +- agora/Agora/Stake.hs | 8 +- agora/Agora/Stake/Redeemers.hs | 8 +- agora/Agora/Stake/Scripts.hs | 30 +- agora/Agora/Utils.hs | 399 +---------------- 21 files changed, 279 insertions(+), 677 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 176773f..46bdc8b 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -7,232 +7,236 @@ Property model and tests for 'Governor' related functions -} module Property.Governor (props) where -import Agora.Governor (Governor (gstOutRef), GovernorDatum (..), pisGovernorDatumValid) -import Agora.Governor.Scripts (governorPolicy) -import Agora.Proposal ( - ProposalId (ProposalId), - ProposalThresholds (ProposalThresholds), - ) -import Agora.Proposal.Time ( - MaxTimeRangeWidth (MaxTimeRangeWidth), - ProposalTimingConfig (ProposalTimingConfig), - ) -import Data.Default.Class (Default (def)) -import Data.Tagged (Tagged (Tagged)) -import Data.Universe (Finite (..), Universe (..)) -import Plutarch.Api.V2 (PScriptContext) -import Plutarch.Builtin (pforgetData) -import Plutarch.Context ( - MintingBuilder, - buildMinting', - input, - mint, - output, - script, - withDatum, - withMinting, - withRef, - withValue, - ) -import Plutarch.Extra.AssetClass (assetClassValue) -import PlutusLedgerApi.V2 ( - ScriptContext (scriptContextTxInfo), - TxInInfo (txInInfoOutRef), - TxInfo (txInfoInputs, txInfoMint, txInfoOutputs), - TxOut (txOutValue), - ) -import Property.Generator (genInput, genOutput) -import Sample.Shared ( - governor, - governorAssetClass, - governorSymbol, - governorValidatorHash, - gstUTXORef, - ) +-- import Agora.Governor (Governor (gstOutRef), GovernorDatum (..), pisGovernorDatumValid) +-- import Agora.Governor.Scripts (governorPolicy) +-- import Agora.Proposal ( +-- ProposalId (ProposalId), +-- ProposalThresholds (ProposalThresholds), +-- ) +-- import Agora.Proposal.Time ( +-- MaxTimeRangeWidth (MaxTimeRangeWidth), +-- ProposalTimingConfig (ProposalTimingConfig), +-- ) +-- import Data.Default.Class (Default (def)) +-- import Data.Tagged (Tagged (Tagged)) +-- import Data.Universe (Finite (..), Universe (..)) +-- import Plutarch.Api.V2 (PScriptContext) +-- import Plutarch.Builtin (pforgetData) +-- import Plutarch.Context ( +-- MintingBuilder, +-- buildMinting', +-- input, +-- mint, +-- output, +-- script, +-- withDatum, +-- withMinting, +-- withRef, +-- withValue, +-- ) +-- import Plutarch.Extra.AssetClass (assetClassValue) +-- import PlutusLedgerApi.V2 ( +-- ScriptContext (scriptContextTxInfo), +-- TxInInfo (txInInfoOutRef), +-- TxInfo (txInfoInputs, txInfoMint, txInfoOutputs), +-- TxOut (txOutValue), +-- ) +-- import Property.Generator (genInput, genOutput) +-- import Sample.Shared ( +-- governor, +-- governorAssetClass, +-- governorSymbol, +-- governorValidatorHash, +-- gstUTXORef, +-- ) import Test.Tasty (TestTree) -import Test.Tasty.Plutarch.Property (classifiedPropertyNative) -import Test.Tasty.QuickCheck ( - Gen, - Property, - choose, - chooseInteger, - listOf1, - testProperty, - ) -data GovernorDatumCases - = ExecuteLE0 - | CreateLE0 - | ToVotingLE0 - | VoteLE0 - | CosignLE0 - | Correct - deriving stock (Eq, Show) +-- import Test.Tasty.Plutarch.Property (classifiedPropertyNative) +-- import Test.Tasty.QuickCheck ( +-- Gen, +-- Property, +-- choose, +-- chooseInteger, +-- listOf1, +-- testProperty, +-- ) -instance Universe GovernorDatumCases where - universe = - [ ExecuteLE0 - , CreateLE0 - , VoteLE0 - , CosignLE0 - , Correct - ] +-- data GovernorDatumCases +-- = ExecuteLE0 +-- | CreateLE0 +-- | ToVotingLE0 +-- | VoteLE0 +-- | CosignLE0 +-- | Correct +-- deriving stock (Eq, Show) -instance Finite GovernorDatumCases where - universeF = universe - cardinality = Tagged 6 +-- instance Universe GovernorDatumCases where +-- universe = +-- [ ExecuteLE0 +-- , CreateLE0 +-- , VoteLE0 +-- , CosignLE0 +-- , Correct +-- ] -{- | Property that checks `governorDatumValid`. - `governorDatumValid` determines if given governor datum is valid or not. This property - ensures `governorDatumValid` is checking the datum correctly and ruling out improper datum. --} -governorDatumValidProperty :: Property -governorDatumValidProperty = - classifiedPropertyNative gen (const []) expected classifier pisGovernorDatumValid - where - classifier :: GovernorDatum -> GovernorDatumCases - classifier - ( (.proposalThresholds) -> - ProposalThresholds - execute - create - toVoting - vote - cosign - ) - | execute < 0 = ExecuteLE0 - | create < 0 = CreateLE0 - | toVoting < 0 = ToVotingLE0 - | vote < 0 = VoteLE0 - | cosign < 0 = CosignLE0 - | otherwise = Correct +-- instance Finite GovernorDatumCases where +-- universeF = universe +-- cardinality = Tagged 6 - expected :: GovernorDatum -> Maybe Bool - expected c = Just $ classifier c == Correct +-- {- | Property that checks `governorDatumValid`. +-- `governorDatumValid` determines if given governor datum is valid or not. This property +-- ensures `governorDatumValid` is checking the datum correctly and ruling out improper datum. +-- -} +-- governorDatumValidProperty :: Property +-- governorDatumValidProperty = +-- classifiedPropertyNative gen (const []) expected classifier pisGovernorDatumValid +-- where +-- classifier :: GovernorDatum -> GovernorDatumCases +-- classifier +-- ( (.proposalThresholds) -> +-- ProposalThresholds +-- execute +-- create +-- toVoting +-- vote +-- cosign +-- ) +-- | execute < 0 = ExecuteLE0 +-- | create < 0 = CreateLE0 +-- | toVoting < 0 = ToVotingLE0 +-- | vote < 0 = VoteLE0 +-- | cosign < 0 = CosignLE0 +-- | otherwise = Correct - gen :: GovernorDatumCases -> Gen GovernorDatum - gen c = do - thres <- genProposalThresholds c +-- expected :: GovernorDatum -> Maybe Bool +-- expected c = Just $ classifier c == Correct - let timing = ProposalTimingConfig 0 0 0 0 - return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 - where - taggedInteger p = Tagged <$> chooseInteger p - genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds - genProposalThresholds c = do - let validGT = taggedInteger (0, 1000000000) - execute <- validGT - create <- validGT - toVoting <- validGT - vote <- validGT - cosign <- validGT - le0 <- taggedInteger (-1000, -1) +-- gen :: GovernorDatumCases -> Gen GovernorDatum +-- gen c = do +-- thres <- genProposalThresholds c - case c of - ExecuteLE0 -> - -- execute < 0 - return $ ProposalThresholds le0 create toVoting vote cosign - CreateLE0 -> - -- c < 0 - return $ ProposalThresholds execute le0 toVoting vote cosign - ToVotingLE0 -> - return $ ProposalThresholds execute create le0 vote cosign - VoteLE0 -> - -- vote < 0 - return $ ProposalThresholds execute create toVoting le0 cosign - CosignLE0 -> - return $ ProposalThresholds execute create toVoting vote le0 - Correct -> - return $ ProposalThresholds execute create toVoting vote cosign +-- let timing = ProposalTimingConfig 0 0 0 0 +-- return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 +-- where +-- taggedInteger p = Tagged <$> chooseInteger p +-- genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds +-- genProposalThresholds c = do +-- let validGT = taggedInteger (0, 1000000000) +-- execute <- validGT +-- create <- validGT +-- toVoting <- validGT +-- vote <- validGT +-- cosign <- validGT +-- le0 <- taggedInteger (-1000, -1) -data GovernorPolicyCases - = ReferenceUTXONotSpent - | IncorrectAmountOfTokenMinted - | GovernorOutputNotFound - | GovernorPolicyCorrect - deriving stock (Eq, Show) +-- case c of +-- ExecuteLE0 -> +-- -- execute < 0 +-- return $ ProposalThresholds le0 create toVoting vote cosign +-- CreateLE0 -> +-- -- c < 0 +-- return $ ProposalThresholds execute le0 toVoting vote cosign +-- ToVotingLE0 -> +-- return $ ProposalThresholds execute create le0 vote cosign +-- VoteLE0 -> +-- -- vote < 0 +-- return $ ProposalThresholds execute create toVoting le0 cosign +-- CosignLE0 -> +-- return $ ProposalThresholds execute create toVoting vote le0 +-- Correct -> +-- return $ ProposalThresholds execute create toVoting vote cosign -instance Universe GovernorPolicyCases where - universe = - [ ReferenceUTXONotSpent - , IncorrectAmountOfTokenMinted - , GovernorOutputNotFound - , GovernorPolicyCorrect - ] +-- data GovernorPolicyCases +-- = ReferenceUTXONotSpent +-- | IncorrectAmountOfTokenMinted +-- | GovernorOutputNotFound +-- | GovernorPolicyCorrect +-- deriving stock (Eq, Show) -instance Finite GovernorPolicyCases where - universeF = universe - cardinality = Tagged 4 +-- instance Universe GovernorPolicyCases where +-- universe = +-- [ ReferenceUTXONotSpent +-- , IncorrectAmountOfTokenMinted +-- , GovernorOutputNotFound +-- , GovernorPolicyCorrect +-- ] -governorMintingProperty :: Property -governorMintingProperty = - classifiedPropertyNative gen (const []) expected classifier actual - where - {- Note: - I don't think it's easily possible to randomize orefs. We can't really pass pass `Governor` type to `actual` function. - -} - gst = assetClassValue governorAssetClass 1 - mintAmount x = mint . mconcat $ replicate x gst - outputToGov = - output $ - mconcat - [ script governorValidatorHash - , withValue gst - , withDatum govDatum - ] - referencedInput = input $ withRef gstUTXORef +-- instance Finite GovernorPolicyCases where +-- universeF = universe +-- cardinality = Tagged 4 - govDatum :: GovernorDatum - govDatum = - GovernorDatum - { proposalThresholds = def - , nextProposalId = ProposalId 0 - , proposalTimings = def - , createProposalTimeRangeMaxWidth = def - , maximumProposalsPerStake = 3 - } +-- governorMintingProperty :: Property +-- governorMintingProperty = +-- classifiedPropertyNative gen (const []) expected classifier actual +-- where +-- {- Note: +-- I don't think it's easily possible to randomize orefs. We can't really pass pass `Governor` type to `actual` function. +-- -} +-- gst = assetClassValue governorAssetClass 1 +-- mintAmount x = mint . mconcat $ replicate x gst +-- outputToGov = +-- output $ +-- mconcat +-- [ script governorValidatorHash +-- , withValue gst +-- , withDatum govDatum +-- ] +-- referencedInput = input $ withRef gstUTXORef - gen :: GovernorPolicyCases -> Gen ScriptContext - gen c = do - inputs <- fmap mconcat . listOf1 $ genInput @MintingBuilder - outputs <- fmap mconcat . listOf1 $ genOutput @MintingBuilder - toks <- choose (2, 100) +-- govDatum :: GovernorDatum +-- govDatum = +-- GovernorDatum +-- { proposalThresholds = def +-- , nextProposalId = ProposalId 0 +-- , proposalTimings = def +-- , createProposalTimeRangeMaxWidth = def +-- , maximumProposalsPerStake = 3 +-- } - let comp = - case c of - ReferenceUTXONotSpent -> outputToGov <> mintAmount 1 - IncorrectAmountOfTokenMinted -> referencedInput <> outputToGov <> mintAmount toks - GovernorOutputNotFound -> referencedInput <> mintAmount 1 - GovernorPolicyCorrect -> referencedInput <> outputToGov <> mintAmount 1 +-- gen :: GovernorPolicyCases -> Gen ScriptContext +-- gen c = do +-- inputs <- fmap mconcat . listOf1 $ genInput @MintingBuilder +-- outputs <- fmap mconcat . listOf1 $ genOutput @MintingBuilder +-- toks <- choose (2, 100) - return . buildMinting' $ inputs <> outputs <> comp <> withMinting governorSymbol +-- let comp = +-- case c of +-- ReferenceUTXONotSpent -> outputToGov <> mintAmount 1 +-- IncorrectAmountOfTokenMinted -> referencedInput <> outputToGov <> mintAmount toks +-- GovernorOutputNotFound -> referencedInput <> mintAmount 1 +-- GovernorPolicyCorrect -> referencedInput <> outputToGov <> mintAmount 1 - expected :: ScriptContext -> Maybe () - expected sc = - case classifier sc of - GovernorPolicyCorrect -> Just () - _ -> Nothing +-- return . buildMinting' $ inputs <> outputs <> comp <> withMinting governorSymbol - opaqueToUnit :: Term s (POpaque :--> PUnit) - opaqueToUnit = plam $ \_ -> pconstant () +-- expected :: ScriptContext -> Maybe () +-- expected sc = +-- case classifier sc of +-- GovernorPolicyCorrect -> Just () +-- _ -> Nothing - actual :: Term s (PScriptContext :--> PUnit) - actual = plam $ \sc -> opaqueToUnit #$ governorPolicy # pconstant governor.gstOutRef # pforgetData (pconstantData ()) # sc +-- opaqueToUnit :: Term s (POpaque :--> PUnit) +-- opaqueToUnit = plam $ \_ -> pconstant () - classifier :: ScriptContext -> GovernorPolicyCases - classifier sc - | minted /= gst = IncorrectAmountOfTokenMinted - | refInputNotExists = ReferenceUTXONotSpent - | govOutputNotExists = GovernorOutputNotFound - | otherwise = GovernorPolicyCorrect - where - txinfo = scriptContextTxInfo sc - minted = txInfoMint txinfo - refInputNotExists = gstUTXORef `notElem` (txInInfoOutRef <$> txInfoInputs txinfo) - govOutputNotExists = gst `notElem` (txOutValue <$> txInfoOutputs txinfo) +-- actual :: Term s (PScriptContext :--> PUnit) +-- actual = plam $ \sc -> opaqueToUnit #$ governorPolicy # pconstant governor.gstOutRef # pforgetData (pconstantData ()) # sc + +-- classifier :: ScriptContext -> GovernorPolicyCases +-- classifier sc +-- | minted /= gst = IncorrectAmountOfTokenMinted +-- | refInputNotExists = ReferenceUTXONotSpent +-- | govOutputNotExists = GovernorOutputNotFound +-- | otherwise = GovernorPolicyCorrect +-- where +-- txinfo = scriptContextTxInfo sc +-- minted = txInfoMint txinfo +-- refInputNotExists = gstUTXORef `notElem` (txInInfoOutRef <$> txInfoInputs txinfo) +-- govOutputNotExists = gst `notElem` (txOutValue <$> txInfoOutputs txinfo) + +-- props :: [TestTree] +-- props = +-- [ testProperty "governorDatumValid" governorDatumValidProperty +-- , testProperty "governorPolicy" governorMintingProperty +-- ] props :: [TestTree] -props = - [ testProperty "governorDatumValid" governorDatumValidProperty - , testProperty "governorPolicy" governorMintingProperty - ] +props = [] diff --git a/agora-specs/Sample/AuthorityToken/UnauthorizedMintingExploit.hs b/agora-specs/Sample/AuthorityToken/UnauthorizedMintingExploit.hs index 62416e3..27791bc 100644 --- a/agora-specs/Sample/AuthorityToken/UnauthorizedMintingExploit.hs +++ b/agora-specs/Sample/AuthorityToken/UnauthorizedMintingExploit.hs @@ -4,9 +4,9 @@ module Sample.AuthorityToken.UnauthorizedMintingExploit ( mkTestCase, ) where -import Agora.Utils (validatorHashToTokenName) import Control.Exception (assert) import Plutarch.Context (input, mint, normalizeValue, output, script, withValue) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1.Value qualified as Value import Sample.Shared (authorityTokenPolicy, authorityTokenSymbol, minAda) import Test.Specification (SpecificationTree, testPolicy) diff --git a/agora-specs/Sample/Effect/GovernorMutation.hs b/agora-specs/Sample/Effect/GovernorMutation.hs index 21a88b6..7739d80 100644 --- a/agora-specs/Sample/Effect/GovernorMutation.hs +++ b/agora-specs/Sample/Effect/GovernorMutation.hs @@ -17,12 +17,12 @@ import Agora.Effect.GovernorMutation ( import Agora.Governor (GovernorDatum (..), GovernorRedeemer (MutateGovernor)) import Agora.Proposal (ProposalId (..), ProposalThresholds (..)) import Agora.SafeMoney (AuthorityTokenTag) -import Agora.Utils (validatorHashToTokenName) import Data.Default.Class (Default (def)) import Data.Map ((!)) import Data.Tagged (Tagged (..)) import Plutarch.Api.V2 (validatorHash) import Plutarch.Extra.AssetClass (AssetClass (AssetClass), assetClassValue) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1 qualified as Interval (always) import PlutusLedgerApi.V1.Address (scriptHashAddress) import PlutusLedgerApi.V1.Value qualified as Value ( diff --git a/agora-specs/Sample/Governor/Mutate.hs b/agora-specs/Sample/Governor/Mutate.hs index 029a030..a2ca582 100644 --- a/agora-specs/Sample/Governor/Mutate.hs +++ b/agora-specs/Sample/Governor/Mutate.hs @@ -18,7 +18,6 @@ module Sample.Governor.Mutate ( import Agora.Governor (GovernorDatum (..), GovernorRedeemer (MutateGovernor)) import Agora.Proposal (ProposalId (ProposalId), ProposalThresholds (..)) -import Agora.Utils (scriptHashToTokenName) import Data.Default (def) import Data.Map ((!)) import Plutarch.Api.V2 (PMintingPolicy, mintingPolicySymbol, mkMintingPolicy, validatorHash) @@ -33,6 +32,7 @@ import Plutarch.Context ( withValue, ) import Plutarch.Extra.AssetClass (assetClassValue) +import Plutarch.Extra.ScriptContext (scriptHashToTokenName) import PlutusLedgerApi.V1.Value qualified as Value import PlutusLedgerApi.V2 ( CurrencySymbol (CurrencySymbol), diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index c06fd38..1b5baab 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -68,7 +68,6 @@ import Agora.SafeMoney (AuthorityTokenTag, GTTag) import Agora.Stake ( StakeDatum (..), ) -import Agora.Utils (scriptHashToTokenName) import Control.Applicative (liftA2) import Control.Monad.State (execState, modify, when) import Data.Default (def) @@ -90,6 +89,7 @@ import Plutarch.Context ( withValue, ) import Plutarch.Extra.AssetClass (AssetClass (AssetClass), assetClassValue) +import Plutarch.Extra.ScriptContext (scriptHashToTokenName) import Plutarch.Lift (PLifted, PUnsafeLiftDecl) import PlutusLedgerApi.V2 ( Credential (PubKeyCredential), diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index f61fd2b..1ce4ab5 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -46,7 +46,6 @@ import Agora.Stake ( StakeDatum (..), StakeRedeemer (PermitVote), ) -import Agora.Utils (validatorHashToTokenName) import Data.Coerce (coerce) import Data.Default (Default (def)) import Data.Map.Strict qualified as StrictMap @@ -66,6 +65,7 @@ import Plutarch.Context ( withValue, ) import Plutarch.Extra.AssetClass (assetClassValue) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1.Value qualified as Value import PlutusLedgerApi.V2 ( Credential (PubKeyCredential), diff --git a/agora-specs/Sample/Proposal/Unlock.hs b/agora-specs/Sample/Proposal/Unlock.hs index 8b3e380..9186952 100644 --- a/agora-specs/Sample/Proposal/Unlock.hs +++ b/agora-specs/Sample/Proposal/Unlock.hs @@ -49,7 +49,6 @@ 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) @@ -67,6 +66,7 @@ import Plutarch.Context ( withValue, ) import Plutarch.Extra.AssetClass (assetClassValue) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1.Value qualified as Value import PlutusLedgerApi.V2 ( Credential (PubKeyCredential), diff --git a/agora-specs/Sample/Shared.hs b/agora-specs/Sample/Shared.hs index b2ac27f..397f9e2 100644 --- a/agora-specs/Sample/Shared.hs +++ b/agora-specs/Sample/Shared.hs @@ -72,9 +72,6 @@ import Agora.Proposal.Time ( ProposalTimingConfig (..), ) import Agora.SafeMoney (GovernorSTTag, ProposalSTTag, StakeSTTag) -import Agora.Utils ( - validatorHashToTokenName, - ) import Data.Default.Class (Default (..)) import Data.Map (Map, (!)) import Data.Tagged (Tagged (..)) @@ -86,6 +83,7 @@ import Plutarch.Api.V2 ( validatorHash, ) import Plutarch.Extra.AssetClass (AssetClass (AssetClass)) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1.Address (scriptHashAddress) import PlutusLedgerApi.V1.Value (TokenName, Value) import PlutusLedgerApi.V1.Value qualified as Value ( diff --git a/agora-specs/Sample/Stake/Create.hs b/agora-specs/Sample/Stake/Create.hs index 40266df..38f13f7 100644 --- a/agora-specs/Sample/Stake/Create.hs +++ b/agora-specs/Sample/Stake/Create.hs @@ -21,7 +21,6 @@ import Agora.Governor (Governor (gtClassRef)) import Agora.Proposal (ProposalId (ProposalId)) import Agora.SafeMoney (GTTag) import Agora.Stake (ProposalLock (Created), StakeDatum (..)) -import Agora.Utils (validatorHashToTokenName) import Data.Semigroup (stimesMonoid) import Data.Tagged (Tagged) import Plutarch.Context ( @@ -36,6 +35,7 @@ import Plutarch.Context ( withValue, ) import Plutarch.Extra.AssetClass (assetClassValue) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import Plutarch.Lift (PUnsafeLiftDecl (PLifted)) import PlutusLedgerApi.V1.Value qualified as Value import PlutusLedgerApi.V2 ( diff --git a/agora-specs/Sample/Stake/UnauthorizedMintingExploit.hs b/agora-specs/Sample/Stake/UnauthorizedMintingExploit.hs index 4523713..88dd673 100644 --- a/agora-specs/Sample/Stake/UnauthorizedMintingExploit.hs +++ b/agora-specs/Sample/Stake/UnauthorizedMintingExploit.hs @@ -4,7 +4,6 @@ module Sample.Stake.UnauthorizedMintingExploit ( mkTestCase, ) where -import Agora.Utils (validatorHashToTokenName) import Plutarch.Context ( input, mint, @@ -14,6 +13,7 @@ import Plutarch.Context ( withValue, ) import Plutarch.Extra.AssetClass (assetClassValue) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1.Value qualified as Value import Sample.Shared ( minAda, diff --git a/agora/Agora/AuthorityToken.hs b/agora/Agora/AuthorityToken.hs index aeefa4a..0ade9ab 100644 --- a/agora/Agora/AuthorityToken.hs +++ b/agora/Agora/AuthorityToken.hs @@ -11,10 +11,6 @@ module Agora.AuthorityToken ( singleAuthorityTokenBurned, ) where -import Agora.Utils ( - passert, - psymbolValueOf', - ) import Plutarch.Api.V1 ( PCredential (..), PCurrencySymbol (..), @@ -33,6 +29,7 @@ import Plutarch.Api.V2 ( PTxOut (PTxOut), ) import Plutarch.Extra.AssetClass (PAssetClassData, ptoScottEncoding) +import Plutarch.Extra.Bool (passert) import "liqwid-plutarch-extra" Plutarch.Extra.List (plookupAssoc) import Plutarch.Extra.Maybe (pfromJust) import Plutarch.Extra.ScriptContext (pisTokenSpent) @@ -44,7 +41,7 @@ import "liqwid-plutarch-extra" Plutarch.Extra.TermCont ( pmatchC, ) import Plutarch.Extra.Traversable (pfoldMap) -import Plutarch.Extra.Value (psymbolValueOf) +import Plutarch.Extra.Value (psymbolValueOf, psymbolValueOf') -------------------------------------------------------------------------------- diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index 1b10ee7..fc72cf2 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -26,7 +26,6 @@ import Agora.Governor ( PGovernorRedeemer, ) import Agora.Plutarch.Orphans () -import Agora.Utils (pfromSingleton, ptryFromRedeemer) import Plutarch.Api.V1 (PCurrencySymbol, PValidatorHash) import Plutarch.Api.V2 ( PScriptPurpose (PSpending), @@ -38,9 +37,15 @@ import Plutarch.DataRepr ( PDataFields, ) import Plutarch.Extra.Field (pletAll, pletAllC) +import "liqwid-plutarch-extra" Plutarch.Extra.List (ptryFromSingleton) import Plutarch.Extra.Maybe (passertPJust, pdnothing) import Plutarch.Extra.Record (mkRecordConstr, (.=)) -import Plutarch.Extra.ScriptContext (paddressFromValidatorHash, pfromOutputDatum, pisScriptAddress) +import Plutarch.Extra.ScriptContext ( + paddressFromValidatorHash, + pisScriptAddress, + ptryFromOutputDatum, + ptryFromRedeemer, + ) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC) import Plutarch.Extra.Value (psymbolValueOf) import Plutarch.Lift (PConstantDecl, PLifted, PUnsafeLiftDecl) @@ -216,11 +221,11 @@ mutateGovernorValidator = let governorOutput = ptrace "Only governor output is allowed" $ - pfromSingleton # pfromData txInfoF.outputs + ptryFromSingleton # pfromData txInfoF.outputs governorOutputDatum = ptrace "Resolve governor outoput datum" $ - pfromOutputDatum @PGovernorDatum + ptryFromOutputDatum @PGovernorDatum # (pfield @"datum" # governorOutput) # txInfoF.datums diff --git a/agora/Agora/Effect/TreasuryWithdrawal.hs b/agora/Agora/Effect/TreasuryWithdrawal.hs index 9501b19..879e078 100644 --- a/agora/Agora/Effect/TreasuryWithdrawal.hs +++ b/agora/Agora/Effect/TreasuryWithdrawal.hs @@ -15,7 +15,6 @@ module Agora.Effect.TreasuryWithdrawal ( import Agora.Effect (makeEffect) import Agora.Plutarch.Orphans () -import Agora.Utils (pdelete) import Plutarch.Api.V1 ( PCredential, PCurrencySymbol, @@ -35,6 +34,7 @@ import Plutarch.DataRepr ( PDataFields, ) import Plutarch.Extra.Field (pletAllC) +import "liqwid-plutarch-extra" Plutarch.Extra.List (pdeleteFirst) import Plutarch.Extra.ScriptContext (pisPubKey) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (PLifted)) @@ -178,7 +178,7 @@ treasuryWithdrawalValidator = plam $ (ptraceError "Invalid receiver") pure $ - pmatch (pdelete # credValue # receivers) $ \case + pmatch (pdeleteFirst # credValue # receivers) $ \case PJust updatedReceivers -> ptrace "Receiver output" updatedReceivers PNothing -> diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 1c09ae1..f80a86a 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -40,10 +40,6 @@ import Agora.Stake ( pnumCreatedProposals, presolveStakeInputDatum, ) -import Agora.Utils ( - plistEqualsBy, - pscriptHashToTokenName, - ) import Plutarch.Api.V1 (PCurrencySymbol) import Plutarch.Api.V1.AssocMap (plookup) import Plutarch.Api.V1.AssocMap qualified as AssocMap @@ -57,17 +53,18 @@ import Plutarch.Api.V2 ( ) import Plutarch.Extra.AssetClass (PAssetClassData, passetClass, ptoScottEncoding) import Plutarch.Extra.Field (pletAll, pletAllC) -import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust, pmapMaybe) +import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust, plistEqualsBy, pmapMaybe) import "liqwid-plutarch-extra" Plutarch.Extra.Map (pkeys, ptryLookup) import Plutarch.Extra.Maybe (passertPJust, pjust, pmaybe, pmaybeData, pnothing) import Plutarch.Extra.Ord (psort) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.ScriptContext ( pfindTxInByTxOutRef, - pfromDatumHash, - pfromOutputDatum, pisUTXOSpent, pscriptHashFromAddress, + pscriptHashToTokenName, + ptryFromDatumHash, + ptryFromOutputDatum, pvalueSpent, ) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont ( @@ -153,7 +150,7 @@ governorPolicy = governorDatum = ptrace "Resolve governor datum" $ - pfromOutputDatum @PGovernorDatum + ptryFromOutputDatum @PGovernorDatum # txOutF.datum # txInfoF.datums in pif isGovernorUTxO (pjust # governorDatum) pnothing @@ -323,7 +320,7 @@ governorValidator = datum = ptrace "Resolve governor datum" $ - pfromOutputDatum @PGovernorDatum + ptryFromOutputDatum @PGovernorDatum # outputF.datum # txInfoF.datums in pif @@ -350,7 +347,7 @@ governorValidator = proposalDatum = ptrace "Resolve proposal output datum" $ pfromData $ - pfromOutputDatum + ptryFromOutputDatum # txOutF.datum # txInfoF.datums in pif isProposalUTxO (pjust # proposalDatum) pnothing @@ -546,7 +543,7 @@ governorValidator = #== 1 let hasCorrectDatum = - effect.datumHash #== pfromDatumHash # outputF.datum + effect.datumHash #== ptryFromDatumHash # outputF.datum pguardC "Authority output valid" $ foldr1 @@ -568,7 +565,7 @@ governorValidator = -- The sorted hashes of all the GAT receivers. actualReceivers = psort - #$ pmapMaybe + #$ pmapMaybe @PList # getReceiverScriptHash # pfromData txInfoF.outputs diff --git a/agora/Agora/Linker.hs b/agora/Agora/Linker.hs index 1db1a43..956dfe1 100644 --- a/agora/Agora/Linker.hs +++ b/agora/Agora/Linker.hs @@ -3,12 +3,13 @@ module Agora.Linker (linker, AgoraScriptInfo (..)) where import Agora.Governor (Governor (gstOutRef, gtClassRef, maximumCosigners)) -import Agora.Utils (validatorHashToAddress, validatorHashToTokenName) +import Agora.Utils (validatorHashToAddress) import Data.Aeson qualified as Aeson import Data.Map (fromList) import Data.Tagged (untag) import Plutarch.Api.V2 (mintingPolicySymbol, validatorHash) import Plutarch.Extra.AssetClass (AssetClass (AssetClass)) +import Plutarch.Extra.ScriptContext (validatorHashToTokenName) import PlutusLedgerApi.V1 (Address, CurrencySymbol, TxOutRef, ValidatorHash) import Ply ( ScriptRole (MintingPolicyRole, ValidatorRole), diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 944112d..3cc3f0a 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -35,13 +35,6 @@ import Agora.Stake ( pisVoter, presolveStakeInputDatum, ) -import Agora.Utils ( - pfromSingleton, - pinsertUniqueBy, - plistEqualsBy, - pmapMaybe, - ptryFromRedeemer, - ) import Plutarch.Api.V1 (PCredential, PCurrencySymbol) import Plutarch.Api.V1.AssocMap (plookup) import Plutarch.Api.V2 ( @@ -56,7 +49,12 @@ import Plutarch.Extra.AssetClass ( ) import Plutarch.Extra.Category (PCategory (pidentity)) import Plutarch.Extra.Field (pletAll, pletAllC) -import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust) +import "liqwid-plutarch-extra" Plutarch.Extra.List ( + pfindJust, + plistEqualsBy, + pmapMaybe, + ptryFromSingleton, + ) import "plutarch-extra" Plutarch.Extra.Map (pupdate) import Plutarch.Extra.Maybe ( passertPJust, @@ -66,11 +64,12 @@ import Plutarch.Extra.Maybe ( pmaybe, pnothing, ) -import Plutarch.Extra.Ord (pfromOrdBy, psort) +import Plutarch.Extra.Ord (pfromOrdBy, pinsertUniqueBy, psort) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.ScriptContext ( pfindTxInByTxOutRef, - pfromOutputDatum, + ptryFromOutputDatum, + ptryFromRedeemer, ) import Plutarch.Extra.Sum (PSum (PSum)) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont ( @@ -309,7 +308,7 @@ proposalValidator = -- Using inline datum to avoid O(n^2) lookup. pfromData $ ptrace "Resolve proposal datum" $ - pfromOutputDatum @(PAsData PProposalDatum) + ptryFromOutputDatum @(PAsData PProposalDatum) # outputF.datum # txInfoF.datums in pif @@ -348,7 +347,7 @@ proposalValidator = pletC $ plam $ let stakeInputs = - pmapMaybe + pmapMaybe @PList # resolveStakeInputDatum # pfromData txInfoF.inputs @@ -439,7 +438,7 @@ proposalValidator = stakeF <- pletFieldsC @'["owner", "stakedAmount"] $ ptrace "Exactly one stake input" $ - pfromSingleton # sctxF.inputStakes + ptryFromSingleton # sctxF.inputStakes let newCosigner = stakeF.owner diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index 2b14fb1..892b10f 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -30,7 +30,6 @@ module Agora.Proposal.Time ( pisWithin, ) where -import Agora.Utils (pcurrentTimeDuration) import Control.Composition ((.*)) import Data.Functor ((<&>)) import Plutarch.Api.V1 ( @@ -52,6 +51,7 @@ import Plutarch.Extra.Maybe (pjust, pmaybe, pnothing) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont (pletC, pmatchC) import Plutarch.Extra.Time ( PCurrentTime (PCurrentTime), + pcurrentTimeDuration, pisWithinCurrentTime, ) import Plutarch.Lift ( diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 671f1f9..f35e4d5 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -50,7 +50,6 @@ import Agora.Proposal ( ResultTag, ) import Agora.SafeMoney (GTTag) -import Agora.Utils (pmapMaybe, ppureIf) import Data.Tagged (Tagged) import Generics.SOP qualified as SOP import Plutarch.Api.V1 (PCredential) @@ -67,15 +66,16 @@ import Plutarch.DataRepr ( DerivePConstantViaData (DerivePConstantViaData), PDataFields, ) +import Plutarch.Extra.Applicative (ppureIf) import Plutarch.Extra.AssetClass (PAssetClass) import Plutarch.Extra.Field (pletAll) import Plutarch.Extra.IsData ( DerivePConstantViaDataList (DerivePConstantViaDataList), ProductIsData (ProductIsData), ) -import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust) +import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust, pmapMaybe) import Plutarch.Extra.Maybe (passertPJust, pjust, pnothing) -import Plutarch.Extra.ScriptContext (pfromOutputDatum) +import Plutarch.Extra.ScriptContext (ptryFromOutputDatum) import Plutarch.Extra.Sum (PSum (PSum)) import Plutarch.Extra.Tagged (PTagged) import Plutarch.Extra.Traversable (pfoldMap) @@ -734,7 +734,7 @@ presolveStakeInputDatum = phoistAcyclic $ datum = ptrace "Resolve stake datum" $ pfromData $ - pfromOutputDatum @(PAsData PStakeDatum) + ptryFromOutputDatum @(PAsData PStakeDatum) # txOutF.datum # datums in pif diff --git a/agora/Agora/Stake/Redeemers.hs b/agora/Agora/Stake/Redeemers.hs index e829221..40f9b11 100644 --- a/agora/Agora/Stake/Redeemers.hs +++ b/agora/Agora/Stake/Redeemers.hs @@ -48,10 +48,10 @@ import Agora.Stake ( ), pstakeLocked, ) -import Agora.Utils (pfromSingleton, pisSingleton, pmustDeleteBy) import Plutarch.Api.V1.Address (PCredential) import Plutarch.Api.V2 (PMaybeData) import Plutarch.Extra.Field (pletAll, pletAllC) +import "liqwid-plutarch-extra" Plutarch.Extra.List (pisSingleton, ptryDeleteFirstBy, ptryFromSingleton) import Plutarch.Extra.Maybe (pdjust, pdnothing, pmaybeData) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont (pguardC, pletC, pmatchC) @@ -87,7 +87,7 @@ pbatchUpdateInputs = phoistAcyclic $ plam $ \f -> flip pmatch $ \ctxF -> pnull #$ pfoldr - # (pmustDeleteBy # f) + # plam (\x -> ptryDeleteFirstBy # (f # x)) # ctxF.stakeOutputDatums # ctxF.stakeInputDatums @@ -387,12 +387,12 @@ pdepositWithdraw = phoistAcyclic $ stakeInputDatum <- pletC $ ptrace "Single stake input" $ - pfromSingleton # ctxF.stakeInputDatums + ptryFromSingleton # ctxF.stakeInputDatums stakeInputDatumF <- pletAllC stakeInputDatum let stakeOutputDatum = ptrace "Single stake output" $ - pfromSingleton # ctxF.stakeOutputDatums + ptryFromSingleton # ctxF.stakeOutputDatums ---------------------------------------------------------------------------- diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index c3ab8bf..bb25b29 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -52,13 +52,7 @@ import Agora.Stake.Redeemers ( ppermitVote, pretractVote, ) -import Agora.Utils ( - passert, - pisDNothing, - pmapMaybe, - psymbolValueOf', - pvalidatorHashToTokenName, - ) +import Agora.Utils (pisDNothing) import Plutarch.Api.V1 ( PCredential (PPubKeyCredential, PScriptCredential), PCurrencySymbol, @@ -79,9 +73,10 @@ import Plutarch.Extra.AssetClass ( passetClass, ptoScottEncoding, ) +import Plutarch.Extra.Bool (passert) import Plutarch.Extra.Field (pletAll, pletAllC) import Plutarch.Extra.Functor (PFunctor (pfmap)) -import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust) +import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust, pmapMaybe) import Plutarch.Extra.Maybe ( passertPJust, pfromJust, @@ -93,7 +88,8 @@ import Plutarch.Extra.Maybe ( import Plutarch.Extra.Ord (POrdering (PEQ, PGT, PLT), pcompareBy, pfromOrd) import Plutarch.Extra.ScriptContext ( pfindTxInByTxOutRef, - pfromOutputDatum, + ptryFromOutputDatum, + pvalidatorHashToTokenName, pvalueSpent, ) import "liqwid-plutarch-extra" Plutarch.Extra.TermCont ( @@ -106,6 +102,7 @@ import "liqwid-plutarch-extra" Plutarch.Extra.TermCont ( import Plutarch.Extra.Value ( passetClassValueOf, psymbolValueOf, + psymbolValueOf', ) import Plutarch.Num (PNum (pnegate)) import Plutarch.Unsafe (punsafeCoerce) @@ -197,7 +194,7 @@ stakePolicy = datumF <- pletAllC $ pfromData $ - pfromOutputDatum @(PAsData PStakeDatum) + ptryFromOutputDatum @(PAsData PStakeDatum) # outputF.datum # txInfoF.datums @@ -277,10 +274,11 @@ mkStakeValidator impl sstSymbol pstClass gstClass = #$ pfield @"address" # validatedInput - let sstName = pvalidatorHashToTokenName #$ pmatch stakeValidatorCredential $ - \case - PScriptCredential r -> pfield @"_0" # r - _ -> perror + let sstName = pvalidatorHashToTokenName $ + pmatch stakeValidatorCredential $ + \case + PScriptCredential r -> pfield @"_0" # r + _ -> perror sstClass <- pletC $ passetClass # sstSymbol # sstName @@ -310,7 +308,7 @@ mkStakeValidator impl sstSymbol pstClass gstClass = datum = ptrace "Resolve stake datum" $ pfromData $ - pfromOutputDatum @(PAsData PStakeDatum) + ptryFromOutputDatum @(PAsData PStakeDatum) # txOutF.datum # txInfoF.datums in passert @@ -439,7 +437,7 @@ mkStakeValidator impl sstSymbol pstClass gstClass = #== 1 proposalDatum = pfromData $ - pfromOutputDatum @(PAsData PProposalDatum) + ptryFromOutputDatum @(PAsData PProposalDatum) # txOutF.datum # txInfoF.datums in pif isProposalUTxO (pjust # proposalDatum) pnothing diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 8288ea1..c7504e4 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -8,101 +8,22 @@ Description: Plutarch utility functions that should be upstreamed or don't belon Plutarch utility functions that should be upstreamed or don't belong anywhere else. -} module Agora.Utils ( - validatorHashToTokenName, validatorHashToAddress, - pltAsData, - withBuiltinPairAsData, - pvalidatorHashToTokenName, - pscriptHashToTokenName, - scriptHashToTokenName, - plistEqualsBy, pstringIntercalate, punwords, - pcurrentTimeDuration, - pdelete, - pdeleteBy, - pmustDeleteBy, - pisSingleton, - pfromSingleton, - pmapMaybe, - PAlternative (..), - ppureIf, - pltBy, - pinsertUniqueBy, - ptryFromRedeemer, - passert, pisNothing, pisDNothing, - psymbolValueOf', ) where -import Plutarch.Api.V1 ( - KeyGuarantees (Unsorted), - PPOSIXTime, - PRedeemer, - PValidatorHash, - ) -import Plutarch.Api.V1.AssocMap (PMap, plookup) import Plutarch.Api.V2 ( - AmountGuarantees, - PCurrencySymbol, PMaybeData (PDNothing), - PScriptHash, - PScriptPurpose, - PTokenName, - PValue, ) -import Plutarch.Extra.Applicative (PApplicative (ppure)) -import Plutarch.Extra.Category (PCategory (pidentity)) -import Plutarch.Extra.Functor (PFunctor (PSubcategory, pfmap)) -import Plutarch.Extra.Maybe (pjust, pnothing) -import Plutarch.Extra.Ord (PComparator, POrdering (PLT), pcompareBy, pequateBy) -import Plutarch.Extra.Time (PCurrentTime (PCurrentTime)) -import Plutarch.Unsafe (punsafeCoerce) import PlutusLedgerApi.V2 ( Address (Address), Credential (ScriptCredential), - ScriptHash (ScriptHash), - TokenName (TokenName), - ValidatorHash (ValidatorHash), + ValidatorHash, ) -{- Functions which should (probably) not be upstreamed - All of these functions are quite inefficient. --} - -{- | Safely convert a 'ValidatorHash' into a 'TokenName'. This can be useful for tagging - tokens for extra safety. - - @since 0.1.0 --} -validatorHashToTokenName :: ValidatorHash -> TokenName -validatorHashToTokenName (ValidatorHash hash) = TokenName hash - -{- | Safely convert a 'PValidatorHash' into a 'PTokenName'. This can be useful for tagging - tokens for extra safety. - - @since 1.0.0 --} -pvalidatorHashToTokenName :: forall (s :: S). Term s (PValidatorHash :--> PTokenName) -pvalidatorHashToTokenName = phoistAcyclic $ plam punsafeCoerce - -{- | Safely convert a 'PScriptHash' into a 'PTokenName'. This can be useful for tagging - tokens for extra safety. - - @since 1.0.0 --} -scriptHashToTokenName :: ScriptHash -> TokenName -scriptHashToTokenName (ScriptHash hash) = TokenName hash - -{- | Safely convert a 'PScriptHash' into a 'PTokenName'. This can be useful for tagging - tokens for extra safety. - - @since 1.0.0 --} -pscriptHashToTokenName :: forall (s :: S). Term s PScriptHash -> Term s PTokenName -pscriptHashToTokenName = punsafeCoerce - {- | Create an 'Address' from a given 'ValidatorHash' with no 'PlutusLedgerApi.V1.Credential.StakingCredential'. @since 0.1.0 @@ -110,62 +31,6 @@ pscriptHashToTokenName = punsafeCoerce validatorHashToAddress :: ValidatorHash -> Address validatorHashToAddress vh = Address (ScriptCredential vh) Nothing -{- | Compare two 'PAsData' value, return true if the first one is less than the second one. - - @since 0.2.0 --} -pltAsData :: - forall (a :: PType) (s :: S). - (POrd a, PIsData a) => - Term s (PAsData a :--> PAsData a :--> PBool) -pltAsData = phoistAcyclic $ - plam $ - \(pfromData -> l) (pfromData -> r) -> l #< r - -{- | Extract data stored in a 'PBuiltinPair' and call a function to process it. - - @since 0.2.0 --} -withBuiltinPairAsData :: - forall (a :: PType) (b :: PType) (c :: PType) (s :: S). - (PIsData a, PIsData b) => - (Term s a -> Term s b -> Term s c) -> - Term - s - (PBuiltinPair (PAsData a) (PAsData b)) -> - Term s c -withBuiltinPairAsData f p = - let a = pfromData $ pfstBuiltin # p - b = pfromData $ psndBuiltin # p - in f a b - --- | @since 1.0.0 -plistEqualsBy :: - forall - (list1 :: PType -> PType) - (list2 :: PType -> PType) - (a :: PType) - (b :: PType) - (s :: S). - (PIsListLike list1 a, PIsListLike list2 b) => - Term s ((a :--> b :--> PBool) :--> list1 a :--> list2 b :--> PBool) -plistEqualsBy = phoistAcyclic $ - plam $ \eq -> pfix #$ plam $ \self l1 l2 -> - pelimList - ( \x xs -> - pelimList - ( \y ys -> - -- Avoid comparison if two lists have different length. - self # xs # ys #&& eq # x # y - ) - -- l2 is empty, but l1 is not. - (pconstant False) - l2 - ) - -- l1 is empty, so l2 should be empty as well. - (pnull # l2) - l1 - -- | @since 1.0.0 pstringIntercalate :: forall (s :: S). @@ -183,225 +48,6 @@ punwords :: Term s PString punwords = pstringIntercalate " " --- | @since 1.0.0 -pcurrentTimeDuration :: - forall (s :: S). - Term - s - ( PCurrentTime - :--> PPOSIXTime - ) -pcurrentTimeDuration = phoistAcyclic $ - plam $ - flip pmatch $ - \(PCurrentTime lb ub) -> ub - lb - -{- | / O(n) /. Remove the first occurance of a value from the given list. - - @since 1.0.0 --} -pdelete :: - forall (a :: PType) (list :: PType -> PType) (s :: S). - (PEq a, PIsListLike list a) => - Term s (a :--> list a :--> PMaybe (list a)) -pdelete = phoistAcyclic $ pdeleteBy # plam (#==) - --- | @since 1.0.0 -pdeleteBy :: - forall (a :: PType) (list :: PType -> PType) (s :: S). - (PIsListLike list a) => - Term s ((a :--> a :--> PBool) :--> a :--> list a :--> PMaybe (list a)) -pdeleteBy = phoistAcyclic $ - plam $ \f' x -> plet (f' # x) $ \f -> - precList - ( \self h t -> - pif - (f # h) - (pjust # t) - (pfmap # (pcons # h) # (self # t)) - ) - (const pnothing) - --- | @since 1.0.0 -pmustDeleteBy :: - forall (a :: PType) (list :: PType -> PType) (s :: S). - (PIsListLike list a) => - Term s ((a :--> a :--> PBool) :--> a :--> list a :--> list a) -pmustDeleteBy = phoistAcyclic $ - plam $ \f' x -> plet (f' # x) $ \f -> - precList - ( \self h t -> - pif - (f # h) - t - (pcons # h #$ self # t) - ) - (const $ ptraceError "Cannot delete element") - -{- | / O(1) /.Return true if the given list has only one element. - - @since 1.0.0 --} -pisSingleton :: - forall (a :: PType) (list :: PType -> PType) (s :: S). - (PIsListLike list a) => - Term s (list a :--> PBool) -pisSingleton = - phoistAcyclic $ - precList - (\_ _ t -> pnull # t) - (const $ pconstant False) - -{- Throws an error if the given list contains zero or more than one elements. - Otherwise returns the only element. - - @since 1.0.0 --} -pfromSingleton :: - forall (a :: PType) (list :: PType -> PType) (s :: S). - (PIsListLike list a) => - Term s (list a :--> a) -pfromSingleton = - phoistAcyclic $ - precList - ( \_ h t -> - pif - (pnull # t) - h - (ptraceError "More than one element") - ) - (const $ ptraceError "Empty list") - -{- | A version of 'pmap' which can throw out elements and change the list type - along the way. - - @since 1.0.0 --} -pmapMaybe :: - forall - (listO :: PType -> PType) - (b :: PType) - (listI :: PType -> PType) - (a :: PType) - (s :: S). - (PIsListLike listI a, PIsListLike listO b) => - Term s ((a :--> PMaybe b) :--> listI a :--> listO b) -pmapMaybe = phoistAcyclic $ - plam $ \f -> - precList - ( \self h t -> - pmatch - (f # h) - ( \case - PJust x -> pcons # x - PNothing -> pidentity - ) - # (self # t) - ) - (const pnil) - -infixl 3 #<|> - --- | @since 1.0.0 -class (PApplicative f) => PAlternative (f :: PType -> PType) where - (#<|>) :: - forall (a :: PType) (s :: S). - (PSubcategory f a) => - Term s (f a :--> f a :--> f a) - pempty :: - forall (a :: PType) (s :: S). - (PSubcategory f a) => - Term s (f a) - --- | @since 1.0.0 -instance PAlternative PMaybe where - (#<|>) = phoistAcyclic $ - plam $ \a b -> pmatch a $ \case - PNothing -> b - PJust _ -> a - pempty = pnothing - --- | @since 1.0.0 -ppureIf :: - forall - (f :: PType -> PType) - (a :: PType) - (s :: S). - (PAlternative f, PSubcategory f a) => - Term s (PBool :--> a :--> f a) -ppureIf = phoistAcyclic $ - plam $ \cond x -> - pif - cond - (ppure # x) - pempty - -{- | Less then check using a `PComparator`. - - @ since 1.0.0 --} -pltBy :: - forall (a :: PType) (s :: S). - Term - s - ( PComparator a - :--> a - :--> a - :--> PBool - ) -pltBy = phoistAcyclic $ - plam $ \c x y -> - pcompareBy # c # x # y #== pcon PLT - --- | @since 1.0.0 -pinsertUniqueBy :: - forall (list :: PType -> PType) (a :: PType) (s :: S). - (PIsListLike list a) => - Term s (PComparator a :--> a :--> list a :--> list a) -pinsertUniqueBy = phoistAcyclic $ - plam $ \c x -> - let lt = pltBy # c - eq = pequateBy # c - in precList - ( \self h t -> - let ensureUniqueness = - pif - (eq # x # h) - (ptraceError "inserted value already exists") - next = - pif - (lt # x # h) - (pcons # x #$ pcons # h # t) - (pcons # h #$ self # t) - in ensureUniqueness next - ) - (const $ psingleton # x) - --- | @since 1.0.0 -ptryFromRedeemer :: - forall (r :: PType) (s :: S). - (PTryFrom PData r) => - Term - s - ( PScriptPurpose - :--> PMap 'Unsorted PScriptPurpose PRedeemer - :--> PMaybe r - ) -ptryFromRedeemer = phoistAcyclic $ - plam $ \p m -> - pfmap - # plam (flip ptryFrom fst . pto) - # (plookup # p # m) - --- | @since 1.0.0 -passert :: - forall (a :: PType) (s :: S). - Term s PString -> - Term s PBool -> - Term s a -> - Term s a -passert msg cond x = pif cond x $ ptraceError msg - -- | @since 1.0.0 pisNothing :: forall (a :: PType) (s :: S). @@ -421,46 +67,3 @@ pisDNothing = phoistAcyclic $ flip pmatch $ \case PDNothing _ -> pconstant True _ -> pconstant False - -{- | Get the negative and positive amount of a particular 'CurrencySymbol', and - return nothing if it doesn't exist in the value. - - @since 1.0.0 --} -psymbolValueOf' :: - forall - (keys :: KeyGuarantees) - (amounts :: AmountGuarantees) - (s :: S). - Term - s - ( PCurrencySymbol - :--> PValue keys amounts - :--> PMaybe - ( PPair - -- Positive amount - PInteger - -- Negative amount - PInteger - ) - ) -psymbolValueOf' = phoistAcyclic $ - plam $ \sym value -> - let tnMap = plookup # sym # pto value - f = - plam $ - ( pfoldr - # plam - ( \x r -> - let q = pfromData $ psndBuiltin # x - in pmatch r $ \(PPair p n) -> - pif - (0 #< q) - (pcon $ PPair (p + q) n) - (pcon $ PPair p (n + q)) - ) - # pcon (PPair 0 0) - # - ) - . pto - in pfmap # f # tnMap From 5791e51739c09663693956a49ccf3ebae9d4ccb7 Mon Sep 17 00:00:00 2001 From: adamczykm Date: Thu, 10 Nov 2022 15:27:22 +0100 Subject: [PATCH 3/9] Implement isGovernorDatumValid tests. --- agora-specs/Property/Governor.hs | 234 +++++++++++++------------------ agora.cabal | 5 +- agora/Agora/Governor.hs | 7 + agora/Agora/Proposal.hs | 2 + agora/Agora/Proposal/Time.hs | 4 + 5 files changed, 116 insertions(+), 136 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 46bdc8b..3e29a22 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -7,144 +7,108 @@ Property model and tests for 'Governor' related functions -} module Property.Governor (props) where --- import Agora.Governor (Governor (gstOutRef), GovernorDatum (..), pisGovernorDatumValid) --- import Agora.Governor.Scripts (governorPolicy) --- import Agora.Proposal ( --- ProposalId (ProposalId), --- ProposalThresholds (ProposalThresholds), --- ) --- import Agora.Proposal.Time ( --- MaxTimeRangeWidth (MaxTimeRangeWidth), --- ProposalTimingConfig (ProposalTimingConfig), --- ) --- import Data.Default.Class (Default (def)) --- import Data.Tagged (Tagged (Tagged)) --- import Data.Universe (Finite (..), Universe (..)) --- import Plutarch.Api.V2 (PScriptContext) --- import Plutarch.Builtin (pforgetData) --- import Plutarch.Context ( --- MintingBuilder, --- buildMinting', --- input, --- mint, --- output, --- script, --- withDatum, --- withMinting, --- withRef, --- withValue, --- ) --- import Plutarch.Extra.AssetClass (assetClassValue) --- import PlutusLedgerApi.V2 ( --- ScriptContext (scriptContextTxInfo), --- TxInInfo (txInInfoOutRef), --- TxInfo (txInfoInputs, txInfoMint, txInfoOutputs), --- TxOut (txOutValue), --- ) --- import Property.Generator (genInput, genOutput) --- import Sample.Shared ( --- governor, --- governorAssetClass, --- governorSymbol, --- governorValidatorHash, --- gstUTXORef, --- ) import Test.Tasty (TestTree) +import Test.QuickCheck (Property, Gen, Arbitrary (arbitrary), arbitraryBoundedEnum, chooseInteger) +import Test.Tasty.QuickCheck (testProperty) +import Data.Universe (Universe) +import Data.Universe.Class (Finite) +import Plutarch.Test.QuickCheck (Equality (OnPEq), Partiality (ByComplete), haskEquiv, TestableTerm (TestableTerm), pconstantT) +import Agora.Governor (pisGovernorDatumValid, GovernorDatum(GovernorDatum), PGovernorDatum) +import Agora.Proposal (ProposalThresholds(ProposalThresholds), ProposalId (ProposalId)) +import Agora.Proposal.Time (ProposalTimingConfig(ProposalTimingConfig), MaxTimeRangeWidth (MaxTimeRangeWidth)) +import Data.Tagged (Tagged(Tagged)) +import Generics.SOP.NP (NP(Nil, (:*))) +import Optics (view) --- import Test.Tasty.Plutarch.Property (classifiedPropertyNative) --- import Test.Tasty.QuickCheck ( --- Gen, --- Property, --- choose, --- chooseInteger, --- listOf1, --- testProperty, --- ) --- data GovernorDatumCases --- = ExecuteLE0 --- | CreateLE0 --- | ToVotingLE0 --- | VoteLE0 --- | CosignLE0 --- | Correct --- deriving stock (Eq, Show) +data GovernorDatumCases + = ExecuteLE0 + | CreateLE0 + | ToVotingLE0 + | VoteLE0 + | CosignLE0 + | Correct + deriving stock (Eq, Show, Enum, Bounded) + deriving anyclass (Universe, Finite) --- instance Universe GovernorDatumCases where --- universe = --- [ ExecuteLE0 --- , CreateLE0 --- , VoteLE0 --- , CosignLE0 --- , Correct --- ] +instance Arbitrary GovernorDatumCases where + arbitrary = arbitraryBoundedEnum --- instance Finite GovernorDatumCases where --- universeF = universe --- cardinality = Tagged 6 +{- | Property that checks `pisGovernorDatumValid` behaves as intended by comparing it + to a simple haskell implementation. +-} +governorDatumValidProperty :: Property +governorDatumValidProperty = + haskEquiv @'OnPEq @'ByComplete + isValidModelImpl + (TestableTerm pisGovernorDatumValid) + (genDatum :* Nil) + where --- {- | Property that checks `governorDatumValid`. --- `governorDatumValid` determines if given governor datum is valid or not. This property --- ensures `governorDatumValid` is checking the datum correctly and ruling out improper datum. --- -} --- governorDatumValidProperty :: Property --- governorDatumValidProperty = --- classifiedPropertyNative gen (const []) expected classifier pisGovernorDatumValid --- where --- classifier :: GovernorDatum -> GovernorDatumCases --- classifier --- ( (.proposalThresholds) -> --- ProposalThresholds --- execute --- create --- toVoting --- vote --- cosign --- ) --- | execute < 0 = ExecuteLE0 --- | create < 0 = CreateLE0 --- | toVoting < 0 = ToVotingLE0 --- | vote < 0 = VoteLE0 --- | cosign < 0 = CosignLE0 --- | otherwise = Correct + genDatum :: Gen (TestableTerm PGovernorDatum) + genDatum = pconstantT <$> (arbitrary >>= genDatumForCase) + where + genDatumForCase :: GovernorDatumCases -> Gen GovernorDatum + genDatumForCase c = do + thres <- genProposalThresholds c --- expected :: GovernorDatum -> Maybe Bool --- expected c = Just $ classifier c == Correct + let timing = ProposalTimingConfig 0 0 0 0 + return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 + where + taggedInteger p = Tagged <$> chooseInteger p + genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds + genProposalThresholds c = do + let validGT = taggedInteger (0, 1000000000) + execute <- validGT + create <- validGT + toVoting <- validGT + vote <- validGT + cosign <- validGT + le0 <- taggedInteger (-1000, -1) --- gen :: GovernorDatumCases -> Gen GovernorDatum --- gen c = do --- thres <- genProposalThresholds c + case c of + ExecuteLE0 -> + -- execute < 0 + return $ ProposalThresholds le0 create toVoting vote cosign + CreateLE0 -> + -- c < 0 + return $ ProposalThresholds execute le0 toVoting vote cosign + ToVotingLE0 -> + return $ ProposalThresholds execute create le0 vote cosign + VoteLE0 -> + -- vote < 0 + return $ ProposalThresholds execute create toVoting le0 cosign + CosignLE0 -> + return $ ProposalThresholds execute create toVoting vote le0 + Correct -> + return $ ProposalThresholds execute create toVoting vote cosign --- let timing = ProposalTimingConfig 0 0 0 0 --- return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 --- where --- taggedInteger p = Tagged <$> chooseInteger p --- genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds --- genProposalThresholds c = do --- let validGT = taggedInteger (0, 1000000000) --- execute <- validGT --- create <- validGT --- toVoting <- validGT --- vote <- validGT --- cosign <- validGT --- le0 <- taggedInteger (-1000, -1) + -- | This is a model Haskell implementation of `pisGovernorDatumValid`. + isValidModelImpl :: GovernorDatum -> Bool + isValidModelImpl = correctCase . classifier + where + correctCase = \case + Correct -> True + _ -> False --- case c of --- ExecuteLE0 -> --- -- execute < 0 --- return $ ProposalThresholds le0 create toVoting vote cosign --- CreateLE0 -> --- -- c < 0 --- return $ ProposalThresholds execute le0 toVoting vote cosign --- ToVotingLE0 -> --- return $ ProposalThresholds execute create le0 vote cosign --- VoteLE0 -> --- -- vote < 0 --- return $ ProposalThresholds execute create toVoting le0 cosign --- CosignLE0 -> --- return $ ProposalThresholds execute create toVoting vote le0 --- Correct -> --- return $ ProposalThresholds execute create toVoting vote cosign + classifier :: GovernorDatum -> GovernorDatumCases + classifier + ( view #proposalThresholds -> + ProposalThresholds + execute + create + toVoting + vote + cosign + ) + | execute < 0 = ExecuteLE0 + | create < 0 = CreateLE0 + | toVoting < 0 = ToVotingLE0 + | vote < 0 = VoteLE0 + | cosign < 0 = CosignLE0 + | otherwise = Correct + +--- -- data GovernorPolicyCases -- = ReferenceUTXONotSpent @@ -232,11 +196,11 @@ import Test.Tasty (TestTree) -- refInputNotExists = gstUTXORef `notElem` (txInInfoOutRef <$> txInfoInputs txinfo) -- govOutputNotExists = gst `notElem` (txOutValue <$> txInfoOutputs txinfo) --- props :: [TestTree] --- props = --- [ testProperty "governorDatumValid" governorDatumValidProperty --- , testProperty "governorPolicy" governorMintingProperty --- ] - props :: [TestTree] -props = [] +props = + [ testProperty "governorDatumValid" governorDatumValidProperty + -- , testProperty "governorPolicy" governorMintingProperty + ] + +-- props :: [TestTree] +-- props = [] diff --git a/agora.cabal b/agora.cabal index 767160d..93107a0 100644 --- a/agora.cabal +++ b/agora.cabal @@ -143,6 +143,9 @@ common test-deps common exe-opts ghc-options: -threaded -rtsopts -with-rtsopts=-N -O0 +common test-opts + ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2 + library import: lang, deps, plutarch-prelude exposed-modules: @@ -224,7 +227,7 @@ library agora-specs build-depends: agora-testlib test-suite agora-test - import: lang, deps, plutarch-prelude, test-deps + import: lang, deps, plutarch-prelude, test-deps, test-opts type: exitcode-stdio-1.0 main-is: Spec.hs hs-source-dirs: agora-test diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index b977d1d..de5c181 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -56,6 +56,7 @@ import "liqwid-plutarch-extra" Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (PLifted)) import PlutusLedgerApi.V1 (TxOutRef) import PlutusTx qualified +import Optics.TH (makeFieldLabelsNoPrefix) -------------------------------------------------------------------------------- @@ -84,6 +85,10 @@ data GovernorDatum = GovernorDatum Generic ) +-- | @since 0.2.1 +makeFieldLabelsNoPrefix ''GovernorDatum + + -- | @since 0.1.0 PlutusTx.makeIsDataIndexed ''GovernorDatum [('GovernorDatum, 0)] @@ -181,6 +186,8 @@ newtype PGovernorDatum (s :: S) = PGovernorDatum PDataFields , -- | @since 0.1.0 PEq + , -- | @since 0.2.1 + PShow ) -- | @since 0.2.0 diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index ab289ca..19a86e8 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -579,6 +579,8 @@ newtype PProposalThresholds (s :: S) = PProposalThresholds PIsData , -- | @since 0.1.0 PDataFields + , -- | @since 0.2.1 + PShow ) -- | @since 0.2.0 diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index 892b10f..1eec301 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -224,6 +224,8 @@ newtype PProposalTimingConfig (s :: S) = PProposalTimingConfig PIsData , -- | @since 0.1.0 PDataFields + , -- | @since 0.2.1 + PShow ) instance DerivePlutusType PProposalTimingConfig where @@ -260,6 +262,8 @@ newtype PMaxTimeRangeWidth (s :: S) PPartialOrd , -- | @since 0.1.0 POrd + , -- | @since 0.2.1 + PShow ) instance DerivePlutusType PMaxTimeRangeWidth where From dd33f60ed02057372542565066e7806bd070348f Mon Sep 17 00:00:00 2001 From: adamczykm Date: Thu, 10 Nov 2022 19:09:01 +0100 Subject: [PATCH 4/9] Implement governor mintint policy property tests. --- agora-specs/Property/Governor.hs | 293 ++++++++++++++-------- agora-specs/Sample/Governor/Initialize.hs | 4 +- agora-specs/Sample/Shared.hs | 8 +- agora/Agora/Governor.hs | 5 +- 4 files changed, 204 insertions(+), 106 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 3e29a22..9029b01 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -7,19 +7,85 @@ Property model and tests for 'Governor' related functions -} module Property.Governor (props) where -import Test.Tasty (TestTree) -import Test.QuickCheck (Property, Gen, Arbitrary (arbitrary), arbitraryBoundedEnum, chooseInteger) -import Test.Tasty.QuickCheck (testProperty) +import Agora.Governor ( + GovernorDatum ( + GovernorDatum, + createProposalTimeRangeMaxWidth, + maximumProposalsPerStake, + nextProposalId, + proposalThresholds, + proposalTimings + ), + PGovernorDatum, + pisGovernorDatumValid, + ) +import Agora.Governor.Scripts (governorPolicy) +import Agora.Proposal ( + ProposalId (ProposalId), + ProposalThresholds ( + ProposalThresholds + ), + ) +import Agora.Proposal.Time ( + MaxTimeRangeWidth (MaxTimeRangeWidth), + ProposalTimingConfig (ProposalTimingConfig), + ) +import Data.Default (def) +import Data.Tagged (Tagged (Tagged)) import Data.Universe (Universe) import Data.Universe.Class (Finite) -import Plutarch.Test.QuickCheck (Equality (OnPEq), Partiality (ByComplete), haskEquiv, TestableTerm (TestableTerm), pconstantT) -import Agora.Governor (pisGovernorDatumValid, GovernorDatum(GovernorDatum), PGovernorDatum) -import Agora.Proposal (ProposalThresholds(ProposalThresholds), ProposalId (ProposalId)) -import Agora.Proposal.Time (ProposalTimingConfig(ProposalTimingConfig), MaxTimeRangeWidth (MaxTimeRangeWidth)) -import Data.Tagged (Tagged(Tagged)) -import Generics.SOP.NP (NP(Nil, (:*))) +import Generics.SOP.NP (NP (Nil, (:*))) import Optics (view) - +import Plutarch.Api.V2 (PScriptContext) +import Plutarch.Builtin (pforgetData) +import Plutarch.Context ( + MintingBuilder, + buildMinting', + input, + mint, + output, + script, + withDatum, + withMinting, + withRef, + withValue, + ) +import Plutarch.Evaluate (evalTerm) +import Plutarch.Extra.AssetClass (assetClassValue) +import Plutarch.Extra.Compile (mustCompile) +import Plutarch.Test.QuickCheck ( + Equality (OnPEq), + Partiality (ByComplete), + TestableTerm (TestableTerm), + haskEquiv, + pconstantT, + shouldCrash, + shouldRun, + ) +import PlutusLedgerApi.V2 (Script, ScriptContext) +import Property.Generator (genInput, genOutput) +import Sample.Shared ( + deterministicTracingConfig, + governor, + governorAssetClass, + governorSymbol, + governorValidatorHash, + gstUTXORef, + ) +import Test.QuickCheck ( + Arbitrary (arbitrary), + Gen, + Property, + arbitraryBoundedEnum, + checkCoverage, + choose, + chooseInteger, + cover, + forAll, + listOf1, + ) +import Test.Tasty (TestTree, testGroup) +import Test.Tasty.QuickCheck (testProperty) data GovernorDatumCases = ExecuteLE0 @@ -34,17 +100,16 @@ data GovernorDatumCases instance Arbitrary GovernorDatumCases where arbitrary = arbitraryBoundedEnum -{- | Property that checks `pisGovernorDatumValid` behaves as intended by comparing it - to a simple haskell implementation. +{- | Property that checks `pisGovernorDatumValid` behaves as intended by + comparing it to a simple haskell implementation. -} governorDatumValidProperty :: Property governorDatumValidProperty = - haskEquiv @'OnPEq @'ByComplete + haskEquiv @( 'OnPEq) @( 'ByComplete) isValidModelImpl (TestableTerm pisGovernorDatumValid) (genDatum :* Nil) where - genDatum :: Gen (TestableTerm PGovernorDatum) genDatum = pconstantT <$> (arbitrary >>= genDatumForCase) where @@ -53,7 +118,8 @@ governorDatumValidProperty = thres <- genProposalThresholds c let timing = ProposalTimingConfig 0 0 0 0 - return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 + pure $ + GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 where taggedInteger p = Tagged <$> chooseInteger p genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds @@ -83,7 +149,7 @@ governorDatumValidProperty = Correct -> return $ ProposalThresholds execute create toVoting vote cosign - -- | This is a model Haskell implementation of `pisGovernorDatumValid`. + -- \| This is a model Haskell implementation of `pisGovernorDatumValid`. isValidModelImpl :: GovernorDatum -> Bool isValidModelImpl = correctCase . classifier where @@ -108,99 +174,130 @@ governorDatumValidProperty = | cosign < 0 = CosignLE0 | otherwise = Correct ---- +-------------------------------------------------------------------------------- --- data GovernorPolicyCases --- = ReferenceUTXONotSpent --- | IncorrectAmountOfTokenMinted --- | GovernorOutputNotFound --- | GovernorPolicyCorrect --- deriving stock (Eq, Show) +data GovernorPolicyCases + = ReferenceUTXONotSpent + | IncorrectAmountOfTokenMinted + | GovernorOutputNotFound + deriving stock (Eq, Show) --- instance Universe GovernorPolicyCases where --- universe = --- [ ReferenceUTXONotSpent --- , IncorrectAmountOfTokenMinted --- , GovernorOutputNotFound --- , GovernorPolicyCorrect --- ] +governorMintingPolicyTests :: [TestTree] +governorMintingPolicyTests = + [ mkGovMintingCasePropertyTest + "Reference input spend test" + ReferenceUTXONotSpent + "Spent" + "Not spent" + , mkGovMintingCasePropertyTest + "Amount of token minted test" + IncorrectAmountOfTokenMinted + "Correct" + "Incorrect" + , mkGovMintingCasePropertyTest + "Governor output presense" + GovernorOutputNotFound + "Present" + "Absent" + ] --- instance Finite GovernorPolicyCases where --- universeF = universe --- cardinality = Tagged 4 +{- | Creates a property by compiling governorPolicy script with given arguments + and checking if it runs as expected by a test. +-} +governorPolicyValid :: ScriptContext -> Bool -> Property +governorPolicyValid ctx shouldSuceed = + let mp = mkPolicyScript ctx in if shouldSuceed then shouldRun mp else shouldCrash mp --- governorMintingProperty :: Property --- governorMintingProperty = --- classifiedPropertyNative gen (const []) expected classifier actual --- where --- {- Note: --- I don't think it's easily possible to randomize orefs. We can't really pass pass `Governor` type to `actual` function. --- -} --- gst = assetClassValue governorAssetClass 1 --- mintAmount x = mint . mconcat $ replicate x gst --- outputToGov = --- output $ --- mconcat --- [ script governorValidatorHash --- , withValue gst --- , withDatum govDatum --- ] --- referencedInput = input $ withRef gstUTXORef +{-# INLINEABLE mkPolicyScript #-} +mkPolicyScript :: ScriptContext -> Script +mkPolicyScript ctx = mustCompile (go # pconstant ctx) + where + go :: forall (s :: S). Term s (PScriptContext :--> POpaque) + go = loudEval $ + plam $ \sc -> + governorPolicy + # pconstant (view #gstOutRef governor) + # pforgetData (pconstantData ()) + # sc --- govDatum :: GovernorDatum --- govDatum = --- GovernorDatum --- { proposalThresholds = def --- , nextProposalId = ProposalId 0 --- , proposalTimings = def --- , createProposalTimeRangeMaxWidth = def --- , maximumProposalsPerStake = 3 --- } +{- | Prepares a minting policy test for given policy error case. + NOTE +-} +mkGovMintingCasePropertyTest :: + String -> + GovernorPolicyCases -> + String -> + String -> + TestTree +mkGovMintingCasePropertyTest name case' positiveCaseName negativeCaseName = + testProperty name $ + forAll (gen case') $ + \(ctx, valid) -> + checkCoverage $ + cover 48 valid positiveCaseName $ + cover 48 (not valid) negativeCaseName $ + governorPolicyValid ctx valid + where + gen :: GovernorPolicyCases -> Gen (ScriptContext, Bool) + gen c = do + inputs <- fmap mconcat . listOf1 $ genInput @MintingBuilder + outputs <- fmap mconcat . listOf1 $ genOutput @MintingBuilder + toks <- choose (2, 100) --- gen :: GovernorPolicyCases -> Gen ScriptContext --- gen c = do --- inputs <- fmap mconcat . listOf1 $ genInput @MintingBuilder --- outputs <- fmap mconcat . listOf1 $ genOutput @MintingBuilder --- toks <- choose (2, 100) + valid <- arbitrary + let comp = + if valid + then referencedInput <> outputToGov <> mintAmount 1 + else case c of + ReferenceUTXONotSpent -> outputToGov <> mintAmount 1 + IncorrectAmountOfTokenMinted -> + referencedInput + <> outputToGov + <> mintAmount toks + GovernorOutputNotFound -> referencedInput <> mintAmount 1 --- let comp = --- case c of --- ReferenceUTXONotSpent -> outputToGov <> mintAmount 1 --- IncorrectAmountOfTokenMinted -> referencedInput <> outputToGov <> mintAmount toks --- GovernorOutputNotFound -> referencedInput <> mintAmount 1 --- GovernorPolicyCorrect -> referencedInput <> outputToGov <> mintAmount 1 + let ctx = + buildMinting' $ + inputs + <> outputs + <> comp + <> withMinting + governorSymbol + pure (ctx, valid) + where + govDatum :: GovernorDatum + govDatum = + GovernorDatum + { proposalThresholds = def + , nextProposalId = ProposalId 0 + , proposalTimings = def + , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 + } --- return . buildMinting' $ inputs <> outputs <> comp <> withMinting governorSymbol - --- expected :: ScriptContext -> Maybe () --- expected sc = --- case classifier sc of --- GovernorPolicyCorrect -> Just () --- _ -> Nothing - --- opaqueToUnit :: Term s (POpaque :--> PUnit) --- opaqueToUnit = plam $ \_ -> pconstant () - --- actual :: Term s (PScriptContext :--> PUnit) --- actual = plam $ \sc -> opaqueToUnit #$ governorPolicy # pconstant governor.gstOutRef # pforgetData (pconstantData ()) # sc - --- classifier :: ScriptContext -> GovernorPolicyCases --- classifier sc --- | minted /= gst = IncorrectAmountOfTokenMinted --- | refInputNotExists = ReferenceUTXONotSpent --- | govOutputNotExists = GovernorOutputNotFound --- | otherwise = GovernorPolicyCorrect --- where --- txinfo = scriptContextTxInfo sc --- minted = txInfoMint txinfo --- refInputNotExists = gstUTXORef `notElem` (txInInfoOutRef <$> txInfoInputs txinfo) --- govOutputNotExists = gst `notElem` (txOutValue <$> txInfoOutputs txinfo) + gst = assetClassValue governorAssetClass 1 + mintAmount x = mint . mconcat $ replicate x gst + referencedInput = input $ withRef gstUTXORef + outputToGov = + output $ + mconcat + [ script governorValidatorHash + , withValue gst + , withDatum govDatum + ] props :: [TestTree] props = [ testProperty "governorDatumValid" governorDatumValidProperty - -- , testProperty "governorPolicy" governorMintingProperty + , testGroup "governorPolicy" governorMintingPolicyTests ] --- props :: [TestTree] --- props = [] +loudEval :: + forall (p :: S -> Type). + ClosedTerm p -> + ClosedTerm p +loudEval x = + case evalTerm deterministicTracingConfig x of + Right (Right t, _, _) -> t + Right (Left err, _, trace) -> error $ show err <> show trace + Left err -> error $ show err diff --git a/agora-specs/Sample/Governor/Initialize.hs b/agora-specs/Sample/Governor/Initialize.hs index 1a2a6d7..e07117d 100644 --- a/agora-specs/Sample/Governor/Initialize.hs +++ b/agora-specs/Sample/Governor/Initialize.hs @@ -58,7 +58,7 @@ import PlutusLedgerApi.V2 ( ValidatorHash, ) import Sample.Shared ( - deterministicTracingConfing, + deterministicTracingConfig, minAda, ) import Sample.Shared qualified as Shared @@ -124,7 +124,7 @@ scripts = (view #scripts) ( runLinker linker - (agoraScripts deterministicTracingConfing) + (agoraScripts deterministicTracingConfig) governor ) diff --git a/agora-specs/Sample/Shared.hs b/agora-specs/Sample/Shared.hs index 397f9e2..dbacb22 100644 --- a/agora-specs/Sample/Shared.hs +++ b/agora-specs/Sample/Shared.hs @@ -12,7 +12,7 @@ module Sample.Shared ( signer, signer2, minAda, - deterministicTracingConfing, + deterministicTracingConfig, mkRedeemer, -- * Agora Scripts @@ -121,8 +121,8 @@ import ScriptExport.ScriptInfo (runLinker) -- Plutarch compiler configauration. -- TODO: add the ability to change this value. Maybe wrap everything in a -- Reader monad? -deterministicTracingConfing :: Config -deterministicTracingConfing = Config DetTracing +deterministicTracingConfig :: Config +deterministicTracingConfig = Config DetTracing governor :: Governor governor = Governor oref gt mc @@ -142,7 +142,7 @@ agoraScripts = (view #scripts) ( runLinker linker - (Bootstrap.agoraScripts deterministicTracingConfing) + (Bootstrap.agoraScripts deterministicTracingConfig) governor ) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index de5c181..aa6352c 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -42,6 +42,7 @@ import Agora.Proposal.Time ( import Agora.SafeMoney (GTTag) import Data.Aeson qualified as Aeson import Data.Tagged (Tagged) +import Optics.TH (makeFieldLabelsNoPrefix) import Plutarch.DataRepr ( DerivePConstantViaData (DerivePConstantViaData), PDataFields, @@ -56,7 +57,6 @@ import "liqwid-plutarch-extra" Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (PLifted)) import PlutusLedgerApi.V1 (TxOutRef) import PlutusTx qualified -import Optics.TH (makeFieldLabelsNoPrefix) -------------------------------------------------------------------------------- @@ -88,7 +88,6 @@ data GovernorDatum = GovernorDatum -- | @since 0.2.1 makeFieldLabelsNoPrefix ''GovernorDatum - -- | @since 0.1.0 PlutusTx.makeIsDataIndexed ''GovernorDatum [('GovernorDatum, 0)] @@ -154,6 +153,8 @@ data Governor = Governor Aeson.FromJSON ) +makeFieldLabelsNoPrefix ''Governor + -------------------------------------------------------------------------------- {- | Plutarch-level datum for the Governor script. From 60432ab5ae991ebc623c457f6c421ac2fa54e175 Mon Sep 17 00:00:00 2001 From: adamczykm Date: Fri, 11 Nov 2022 15:47:33 +0100 Subject: [PATCH 5/9] Bump benchmarks --- bench.csv | 730 +++++++++++++++++++++++++++--------------------------- 1 file changed, 365 insertions(+), 365 deletions(-) diff --git a/bench.csv b/bench.csv index 1c82fae..d5a67cb 100644 --- a/bench.csv +++ b/bench.csv @@ -1,478 +1,478 @@ name,cpu,mem,size -Agora/Effects/Treasury Withdrawal Effect/effect/Simple,216491233,584406,3880 -Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,307752363,787074,4312 -Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,300492604,786706,4250 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,124187615,349163,11655 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple,216997233,586606,3883 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,308856363,791874,4315 +Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,301297604,790206,4253 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,124118615,348863,11344 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,145816056,387807,4684 Agora/Stake/policy/create/valid/stake owner: pub key,77468330,198844,3556 Agora/Stake/policy/create/valid/stake owner: script,90607586,237423,3591 -Agora/Stake/validator/destroy/legal/One stake/stake validator,100147548,269527,7240 +Agora/Stake/validator/destroy/legal/One stake/stake validator,100078548,269227,7234 Agora/Stake/validator/destroy/legal/One stake/stake policy,29665872,85956,3543 -Agora/Stake/validator/destroy/legal/Multiple stake/stake validator,653259180,1567111,10493 +Agora/Stake/validator/destroy/legal/Multiple stake/stake validator,653190180,1566811,10487 Agora/Stake/validator/destroy/legal/Multiple stake/stake policy,292337523,820464,6795 Agora/Stake/validator/destroy/illegal/Destroy locked stakes/stake policy,292337523,820464,6856 Agora/Stake/validator/destroy/illegal/not authorized by owner/stake policy,292337523,820464,6764 Agora/Stake/validator/destroy/illegal/not authorized by owner/stake policy,292337523,820464,6795 -Agora/Stake/validator/stakeDepositWithdraw deposit,142600267,368376,7355 -Agora/Stake/validator/stakeDepositWithdraw withdraw,142600267,368376,7347 -Agora/Stake/validator/set delegate/override existing delegate,174762504,439707,7486 -Agora/Stake/validator/set delegate/remove existing delegate,164862019,415117,7416 -Agora/Stake/validator/set delegate/set delegate to something,172333516,432607,7416 +Agora/Stake/validator/stakeDepositWithdraw deposit,142600267,368376,7349 +Agora/Stake/validator/stakeDepositWithdraw withdraw,142600267,368376,7341 +Agora/Stake/validator/set delegate/override existing delegate,174128015,438205,7480 +Agora/Stake/validator/set delegate/remove existing delegate,164793019,414817,7410 +Agora/Stake/validator/set delegate/set delegate to something,171699027,431105,7410 Agora/Proposal/policy (proposal creation)/legal/proposal,30050955,75784,2649 -Agora/Proposal/policy (proposal creation)/legal/governor,276274614,721848,12153 -Agora/Proposal/policy (proposal creation)/legal/stake,299062773,743108,8183 +Agora/Proposal/policy (proposal creation)/legal/governor,276205614,721548,11842 +Agora/Proposal/policy (proposal creation)/legal/stake,298855773,742208,8177 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,30050955,75784,2649 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,299062773,743108,8183 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,298855773,742208,8177 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,30050955,75784,2617 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,276274614,721848,12122 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,276205614,721548,11811 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,30050955,75784,2649 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,30050955,75784,2657 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/governor,276274614,721848,12161 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/governor,276205614,721548,11850 Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,30050955,75784,2669 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,311761209,779324,8213 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,311554209,778424,8207 Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,30050955,75784,2649 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,299062773,743108,8183 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,298855773,742208,8177 Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,30050955,75784,2645 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,299062773,743108,8179 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,298855773,742208,8173 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,30050955,75784,2649 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,299062773,743108,8183 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,298855773,742208,8177 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,30050955,75784,2649 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,299062773,743108,8183 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,298855773,742208,8177 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,30050955,75784,2649 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,299062773,743108,8183 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,298855773,742208,8177 Agora/Proposal/policy (proposal creation)/illegal/fake SST/proposal,30050955,75784,2557 -Agora/Proposal/policy (proposal creation)/illegal/wrong governor redeemer/stake,299062773,743108,8183 -Agora/Proposal/validator/cosignature/legal/proposal,201848764,555553,11866 -Agora/Proposal/validator/cosignature/legal/stake,256214245,661528,7982 -Agora/Proposal/validator/cosignature/illegal/insufficient staked amount/stake,256214245,661528,7982 -Agora/Proposal/validator/cosignature/illegal/proposal locks not updated/proposal,201848764,555553,11860 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,262563463,679636,7999 -Agora/Proposal/validator/cosignature/illegal/cosigners not updated/stake,256214245,661528,7948 -Agora/Proposal/validator/cosignature/illegal/cosign after draft/(negative test)/stake,256214245,661528,7982 -Agora/Proposal/validator/cosignature/illegal/cosign after draft/(negative test)/stake,256214245,661528,7982 -Agora/Proposal/validator/cosignature/illegal/cosign after draft/(negative test)/stake,256214245,661528,7982 -Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by owner/proposal,217201178,603628,11703 -Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by owner/stake,270982879,701289,7827 -Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by delegatee/proposal,217201178,603628,11703 -Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by delegatee/stake,277809774,718445,7827 -Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by owner/proposal,323914032,882782,12895 -Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by owner/stake,561081905,1375723,9019 -Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by delegatee/proposal,323914032,882782,12895 -Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by delegatee/stake,567908800,1392879,9019 -Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by owner/proposal,430626886,1161936,14085 -Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by owner/stake,851180931,2050157,10209 -Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by delegatee/proposal,430626886,1161936,14085 -Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by delegatee/stake,858007826,2067313,10209 -Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by owner/proposal,537339740,1441090,15276 -Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by owner/stake,1141279957,2724591,11400 -Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by delegatee/proposal,537339740,1441090,15276 -Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by delegatee/stake,1148106852,2741747,11400 -Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by owner/proposal,644052594,1720244,16467 -Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by owner/stake,1431378983,3399025,12591 -Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by delegatee/proposal,644052594,1720244,16467 -Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by delegatee/stake,1438205878,3416181,12591 -Agora/Proposal/validator/voting/legal/transparent non-GT tokens/proposal,217201178,603628,11703 -Agora/Proposal/validator/voting/legal/transparent non-GT tokens/stake,270982879,701289,7827 -Agora/Proposal/validator/voting/illegal/vote for nonexistent outcome/stake,270982879,701289,7835 -Agora/Proposal/validator/voting/illegal/unauthorized tx/proposal,217201178,603628,11703 -Agora/Proposal/validator/voting/illegal/more than one proposals/stake,270982879,701289,7835 -Agora/Proposal/validator/voting/illegal/locks not added/proposal,430626886,1161936,14055 -Agora/Proposal/validator/voting/illegal/attempt to burn stakes/proposal,407560031,1110316,13057 -Agora/Proposal/validator/voting/illegal/insufficient staked amount/stake,270982879,701289,7822 -Agora/Proposal/validator/voting/illegal/insufficient staked amount/stake,851180931,2050157,10187 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,241769498,672925,12336 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,221156600,615910,12098 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,234564233,643058,13369 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,403373267,1065069,13125 +Agora/Proposal/policy (proposal creation)/illegal/wrong governor redeemer/stake,298855773,742208,8177 +Agora/Proposal/validator/cosignature/legal/proposal,201639831,555552,11850 +Agora/Proposal/validator/cosignature/legal/stake,256076245,660928,7976 +Agora/Proposal/validator/cosignature/illegal/insufficient staked amount/stake,256076245,660928,7976 +Agora/Proposal/validator/cosignature/illegal/proposal locks not updated/proposal,201639831,555552,11844 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,262425463,679036,7993 +Agora/Proposal/validator/cosignature/illegal/cosigners not updated/stake,256076245,660928,7942 +Agora/Proposal/validator/cosignature/illegal/cosign after draft/(negative test)/stake,256076245,660928,7976 +Agora/Proposal/validator/cosignature/illegal/cosign after draft/(negative test)/stake,256076245,660928,7976 +Agora/Proposal/validator/cosignature/illegal/cosign after draft/(negative test)/stake,256076245,660928,7976 +Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by owner/proposal,216994178,602728,11687 +Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by owner/stake,270844879,700689,7821 +Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by delegatee/proposal,216994178,602728,11687 +Agora/Proposal/validator/voting/legal/different number of stakes/1 stakes/by delegatee/stake,277671774,717845,7821 +Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by owner/proposal,323569032,881282,12879 +Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by owner/stake,561081905,1375723,9013 +Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by delegatee/proposal,323569032,881282,12879 +Agora/Proposal/validator/voting/legal/different number of stakes/3 stakes/by delegatee/stake,567908800,1392879,9013 +Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by owner/proposal,430143886,1159836,14069 +Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by owner/stake,851318931,2050757,10203 +Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by delegatee/proposal,430143886,1159836,14069 +Agora/Proposal/validator/voting/legal/different number of stakes/5 stakes/by delegatee/stake,858145826,2067913,10203 +Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by owner/proposal,536718740,1438390,15260 +Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by owner/stake,1141555957,2725791,11394 +Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by delegatee/proposal,536718740,1438390,15260 +Agora/Proposal/validator/voting/legal/different number of stakes/7 stakes/by delegatee/stake,1148382852,2742947,11394 +Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by owner/proposal,643293594,1716944,16451 +Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by owner/stake,1431792983,3400825,12585 +Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by delegatee/proposal,643293594,1716944,16451 +Agora/Proposal/validator/voting/legal/different number of stakes/9 stakes/by delegatee/stake,1438619878,3417981,12585 +Agora/Proposal/validator/voting/legal/transparent non-GT tokens/proposal,216994178,602728,11687 +Agora/Proposal/validator/voting/legal/transparent non-GT tokens/stake,270844879,700689,7821 +Agora/Proposal/validator/voting/illegal/vote for nonexistent outcome/stake,270844879,700689,7829 +Agora/Proposal/validator/voting/illegal/unauthorized tx/proposal,216994178,602728,11687 +Agora/Proposal/validator/voting/illegal/more than one proposals/stake,270844879,700689,7829 +Agora/Proposal/validator/voting/illegal/locks not added/proposal,430143886,1159836,14039 +Agora/Proposal/validator/voting/illegal/attempt to burn stakes/proposal,407077031,1108216,13041 +Agora/Proposal/validator/voting/illegal/insufficient staked amount/stake,270844879,700689,7816 +Agora/Proposal/validator/voting/illegal/insufficient staked amount/stake,851318931,2050757,10181 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,241700498,672625,12320 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,221087600,615610,12082 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,234495233,642758,13353 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,400581660,1062545,12814 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,3654 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,237958208,660697,12057 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,217345310,603682,11819 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,230752943,630830,12911 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,401005973,1057563,12760 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,237889208,660397,12041 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,217276310,603382,11803 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,230683943,630530,12895 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,398214366,1055039,12449 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,3289 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,212215847,594571,12091 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,210487464,584281,12092 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,222674368,615093,12092 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,208404557,582343,11812 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,206676174,572053,11813 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,218863078,602865,11813 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,212146847,594271,12075 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,210418464,583981,12076 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,222605368,614793,12076 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,208335557,582043,11796 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,206607174,571753,11797 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,218794078,602565,11797 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,3654 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,3289 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,403373267,1065069,13125 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,400581660,1062545,12814 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,87514895,216737,3654 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,401005973,1057563,12760 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,398214366,1055039,12449 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,82449293,203081,3289 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,230752943,630830,12265 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,230752943,630830,12911 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,230683943,630530,12249 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,230683943,630530,12895 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,3289 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,230752943,630830,12943 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,230683943,630530,12927 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/authority,82449293,203081,3321 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,230752943,630830,12905 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,230683943,630530,12889 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,82449293,203081,3283 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,230752943,630830,12911 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,230683943,630530,12895 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,82449293,203081,3289 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,315994218,877227,13252 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,299076206,830200,13014 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,308788953,847360,14285 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,445108495,1182301,13736 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,315925218,876927,13236 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,299007206,829900,12998 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,308719953,847060,14269 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,442316888,1179777,13425 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,4265 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,308371638,852771,12691 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,291453626,805744,12453 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,301166373,822904,13546 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,440986588,1168681,13184 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,308302638,852471,12675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,291384626,805444,12437 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,301097373,822604,13530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,438194981,1166157,12873 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,3713 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,286440567,798873,13007 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,284712184,788583,13008 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,296899088,819395,13008 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,278817987,774417,12446 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,277089604,764127,12447 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,289276508,794939,12447 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,286371567,798573,12991 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,284643184,788283,12992 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,296830088,819095,12992 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,278748987,774117,12430 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,277020604,763827,12431 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,289207508,794639,12431 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,4265 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,3713 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,445108495,1182301,13736 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,442316888,1179777,13425 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,87514895,216737,4265 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,440986588,1168681,13184 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,438194981,1166157,12873 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,82449293,203081,3713 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,301166373,822904,12900 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,301166373,822904,13546 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,301097373,822604,12884 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,301097373,822604,13530 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,3713 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,301166373,822904,13578 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,301097373,822604,13562 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/authority,82449293,203081,3745 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,301166373,822904,13540 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,301097373,822604,13524 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,82449293,203081,3707 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,301166373,822904,13546 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,301097373,822604,13530 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,82449293,203081,3713 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,538668378,1490133,15999 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,532835024,1473070,15761 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,531463113,1460266,17032 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,570314179,1533997,15567 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,538599378,1489833,15983 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,532766024,1472770,15745 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,531394113,1459966,17016 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,567522572,1531473,15256 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,6096 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,519611928,1428993,14598 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,513778574,1411930,14360 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,512406663,1399126,15453 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560928433,1502035,14455 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,519542928,1428693,14582 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,513709574,1411630,14344 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,512337663,1398826,15437 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,558136826,1499511,14144 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,4984 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,509114727,1411779,15754 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,507386344,1401489,15755 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,519573248,1432301,15755 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,490058277,1350639,14353 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,488329894,1340349,14354 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,500516798,1371161,14354 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,509045727,1411479,15738 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,507317344,1401189,15739 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,519504248,1432001,15739 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,489989277,1350339,14337 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,488260894,1340049,14338 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,500447798,1370861,14338 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,6096 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,4984 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,570314179,1533997,15567 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,567522572,1531473,15256 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,87514895,216737,6096 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560928433,1502035,14455 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,558136826,1499511,14144 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,82449293,203081,4984 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,512406663,1399126,14807 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,512406663,1399126,15453 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,512337663,1398826,14791 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,512337663,1398826,15437 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,4984 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,512406663,1399126,15485 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,512337663,1398826,15469 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/authority,82449293,203081,5016 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,512406663,1399126,15447 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,512337663,1398826,15431 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,82449293,203081,4978 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,512406663,1399126,15453 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,512337663,1398826,15437 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,82449293,203081,4984 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,421896692,1152021,13837 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,251507320,699638,12509 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,264914953,726786,13779 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,418246563,1106933,13399 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,421827692,1151721,13821 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,251438320,699338,12493 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,264845953,726486,13763 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,415454956,1104409,13088 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,3927 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,418085402,1139793,13556 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,247696030,687410,12228 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,261103663,714558,13320 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,415879269,1099427,13033 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,418016402,1139493,13540 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,247627030,687110,12212 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,261034663,714258,13304 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,413087662,1096903,12722 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,3562 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,242566567,678299,12502 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,240838184,668009,12503 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,253025088,698821,12503 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,238755277,666071,12221 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,237026894,655781,12222 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,249213798,686593,12222 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,242497567,677999,12486 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,240769184,667709,12487 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,252956088,698521,12487 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,238686277,665771,12205 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,236957894,655481,12206 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,249144798,686293,12206 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,3927 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,3562 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,418246563,1106933,13399 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,415454956,1104409,13088 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,87514895,216737,3927 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,415879269,1099427,13033 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,413087662,1096903,12722 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,82449293,203081,3562 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,261103663,714558,12675 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,261103663,714558,13320 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,261034663,714258,12659 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,261034663,714258,13304 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,3562 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,261103663,714558,13352 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,261034663,714258,13336 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/authority,82449293,203081,3594 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,261103663,714558,13314 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,261034663,714258,13298 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,82449293,203081,3556 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,261103663,714558,13320 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,261034663,714258,13304 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,82449293,203081,3562 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,496121412,1356323,14752 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,329426926,913928,13424 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,339139673,931088,14695 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,459981791,1224165,14009 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,496052412,1356023,14736 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,329357926,913628,13408 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,339070673,930788,14679 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,457190184,1221641,13698 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,4538 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,488498832,1331867,14192 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,321804346,889472,12863 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,331517093,906632,13956 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,455859884,1210545,13457 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,488429832,1331567,14176 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,321735346,889172,12847 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,331448093,906332,13940 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,453068277,1208021,13146 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,3986 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,316791287,882601,13417 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,315062904,872311,13418 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,327249808,903123,13418 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,309168707,858145,12856 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,307440324,847855,12857 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,319627228,878667,12857 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,316722287,882301,13401 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,314993904,872011,13402 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,327180808,902823,13402 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,309099707,857845,12840 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,307371324,847555,12841 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,319558228,878367,12841 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,4538 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,3986 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,459981791,1224165,14009 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,457190184,1221641,13698 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,87514895,216737,4538 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,455859884,1210545,13457 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,453068277,1208021,13146 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,82449293,203081,3986 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,331517093,906632,13310 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,331517093,906632,13956 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,331448093,906332,13294 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,331448093,906332,13940 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,3986 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,331517093,906632,13988 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,331448093,906332,13972 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/authority,82449293,203081,4018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,331517093,906632,13950 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,331448093,906332,13934 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,82449293,203081,3980 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,331517093,906632,13956 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,331448093,906332,13940 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,82449293,203081,3986 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,718795572,1969229,17498 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,563185744,1556798,16170 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,561813833,1543994,17441 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,585187475,1575861,15840 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,718726572,1968929,17482 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,563116744,1556498,16154 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,561744833,1543694,17425 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,582395868,1573337,15529 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,6369 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,699739122,1908089,16098 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,544129294,1495658,14769 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,542757383,1482854,15862 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,575801729,1543899,14728 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,699670122,1907789,16082 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,544060294,1495358,14753 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,542688383,1482554,15846 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,573010122,1541375,14417 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,5257 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,539465447,1495507,16163 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,537737064,1485217,16164 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,549923968,1516029,16164 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,520408997,1434367,14762 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,518680614,1424077,14763 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,530867518,1454889,14763 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,539396447,1495207,16147 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,537668064,1484917,16148 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,549854968,1515729,16148 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,520339997,1434067,14746 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,518611614,1423777,14747 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,530798518,1454589,14747 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,6369 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,5257 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,585187475,1575861,15840 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,582395868,1573337,15529 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,87514895,216737,6369 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,575801729,1543899,14728 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,573010122,1541375,14417 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,82449293,203081,5257 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,542757383,1482854,15216 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,542757383,1482854,15862 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,542688383,1482554,15200 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,542688383,1482554,15846 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,5257 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,542757383,1482854,15894 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,542688383,1482554,15878 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/authority,82449293,203081,5289 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,542757383,1482854,15856 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,542688383,1482554,15840 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,82449293,203081,5251 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,542757383,1482854,15862 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,542688383,1482554,15846 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,82449293,203081,5257 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,662219128,1796582,15713 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,289445720,804298,13020 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,302853353,831446,14291 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,436838183,1159263,13740 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,662150128,1796282,15697 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,289376720,803998,13004 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,302784353,831146,14275 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,434046576,1156739,13429 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,4269 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,658407838,1784354,15434 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,285634430,792070,12740 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,299042063,819218,13832 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,434470889,1151757,13374 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,658338838,1784054,15418 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,285565430,791770,12724 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,298973063,818918,13816 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,431679282,1149233,13063 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,3903 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,280504967,782959,13013 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,278776584,772669,13014 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,290963488,803481,13014 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,276693677,770731,12733 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,274965294,760441,12734 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,287152198,791253,12734 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,280435967,782659,12997 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,278707584,772369,12998 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,290894488,803181,12998 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,276624677,770431,12717 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,274896294,760141,12718 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,287083198,790953,12718 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,4269 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,3903 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,436838183,1159263,13740 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,434046576,1156739,13429 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,87514895,216737,4269 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,434470889,1151757,13374 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,431679282,1149233,13063 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,82449293,203081,3903 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,299042063,819218,13187 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,299042063,819218,13832 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,298973063,818918,13171 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,298973063,818918,13816 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,3903 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,299042063,819218,13865 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,298973063,818918,13849 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/authority,82449293,203081,3935 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,299042063,819218,13826 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,298973063,818918,13810 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,82449293,203081,3897 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,299042063,819218,13832 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,298973063,818918,13816 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,82449293,203081,3903 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,736443848,2000884,16629 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,367365326,1018588,13935 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,377078073,1035748,15206 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,478573411,1276495,14350 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,736374848,2000584,16613 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,367296326,1018288,13919 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,377009073,1035448,15190 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,475781804,1273971,14039 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,4879 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,728821268,1976428,16069 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,359742746,994132,13376 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,369455493,1011292,14468 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,474451504,1262875,13798 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,728752268,1976128,16053 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,359673746,993832,13360 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,369386493,1010992,14452 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,471659897,1260351,13487 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,4327 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,354729687,987261,13928 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,353001304,976971,13929 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,365188208,1007783,13929 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,347107107,962805,13369 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,345378724,952515,13370 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,357565628,983327,13370 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,354660687,986961,13912 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,352932304,976671,13913 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,365119208,1007483,13913 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,347038107,962505,13353 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,345309724,952215,13354 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,357496628,983027,13354 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,4879 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,4327 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,478573411,1276495,14350 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,475781804,1273971,14039 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,87514895,216737,4879 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,474451504,1262875,13798 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,471659897,1260351,13487 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,82449293,203081,4327 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,369455493,1011292,13823 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,369455493,1011292,14468 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,369386493,1010992,13807 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,369386493,1010992,14452 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,4327 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,369455493,1011292,14500 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,369386493,1010992,14484 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/authority,82449293,203081,4359 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,369455493,1011292,14462 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,369386493,1010992,14446 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,82449293,203081,4321 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,369455493,1011292,14468 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,369386493,1010992,14452 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,82449293,203081,4327 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,959118008,2613790,19376 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,601124144,1661458,16682 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,599752233,1648654,17953 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,603779095,1628191,16181 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,959049008,2613490,19360 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,601055144,1661158,16666 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,599683233,1648354,17937 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,600987488,1625667,15870 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,87514895,216737,6710 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,940061558,2552650,17975 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,582067694,1600318,15282 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,580695783,1587514,16374 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,594393349,1596229,15069 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,939992558,2552350,17959 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,581998694,1600018,15266 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,580626783,1587214,16358 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,591601742,1593705,14758 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,82449293,203081,5598 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,577403847,1600167,16675 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,575675464,1589877,16676 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,587862368,1620689,16676 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,558347397,1539027,15275 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,556619014,1528737,15276 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,568805918,1559549,15276 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,577334847,1599867,16659 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,575606464,1589577,16660 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,587793368,1620389,16660 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,558278397,1538727,15259 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,556550014,1528437,15260 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,568736918,1559249,15260 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,87514895,216737,6710 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,82449293,203081,5598 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,603779095,1628191,16181 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,600987488,1625667,15870 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,87514895,216737,6710 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,594393349,1596229,15069 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,591601742,1593705,14758 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,82449293,203081,5598 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,580695783,1587514,15728 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580695783,1587514,16374 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,580626783,1587214,15712 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580626783,1587214,16358 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,82449293,203081,5598 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,580695783,1587514,16406 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,580626783,1587214,16390 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/authority,82449293,203081,5630 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,580695783,1587514,16368 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,580626783,1587214,16352 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,82449293,203081,5592 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,580695783,1587514,16374 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,580626783,1587214,16358 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,82449293,203081,5598 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting/stake,279058825,705875,8067 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting/proposal,216327247,595640,11945 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting by delegatee/stake,285885720,723031,8067 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting by delegatee/proposal,216327247,595640,11945 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter/creator: retract votes while voting/stake,289565080,736477,8083 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter/creator: retract votes while voting/proposal,222662651,614054,11956 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/creator: remove creator lock after voting/stake,280060082,709082,8070 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/creator: remove creator lock after voting/proposal,184227955,507972,11949 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/Voter: remove lock after voting/stake,280189803,708279,8072 -Agora/Proposal/validator/unlocking/legal/with 1 stakes/Voter: remove lock after voting/proposal,185266232,510770,11950 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting/stake,577605005,1368019,9412 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting/proposal,327560147,886154,13290 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting by delegatee/stake,584431900,1385175,9412 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting by delegatee/proposal,327560147,886154,13290 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter/creator: retract votes while voting/stake,609123770,1459825,9450 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter/creator: retract votes while voting/proposal,346566359,941396,13323 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/creator: remove creator lock after voting/stake,578346820,1372832,9413 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/creator: remove creator lock after voting/proposal,251935769,673222,13292 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/Voter: remove lock after voting/stake,578735983,1370423,9417 -Agora/Proposal/validator/unlocking/legal/with 3 stakes/Voter: remove lock after voting/proposal,255050600,681616,13295 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting/stake,895797841,2061603,10758 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting/proposal,438793047,1176668,14636 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting by delegatee/stake,902624736,2078759,10758 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting by delegatee/proposal,438793047,1176668,14636 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter/creator: retract votes while voting/stake,948329116,2214613,10818 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter/creator: retract votes while voting/proposal,470470067,1268738,14691 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/creator: remove creator lock after voting/stake,896280214,2068022,10757 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/creator: remove creator lock after voting/proposal,319643583,838472,14636 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/Voter: remove lock after voting/stake,896928819,2064007,10763 -Agora/Proposal/validator/unlocking/legal/with 5 stakes/Voter: remove lock after voting/proposal,324834968,852462,14641 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting/stake,1233637333,2786627,12103 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting/proposal,550025947,1467182,15981 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting by delegatee/stake,1240464228,2803783,12103 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting by delegatee/proposal,550025947,1467182,15981 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter/creator: retract votes while voting/stake,1307181118,3000841,12185 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter/creator: retract votes while voting/proposal,594373775,1596080,16058 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/creator: remove creator lock after voting/stake,1233860264,2794652,12100 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/creator: remove creator lock after voting/proposal,387351397,1003722,15979 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/Voter: remove lock after voting/stake,1234768311,2789031,12108 -Agora/Proposal/validator/unlocking/legal/with 7 stakes/Voter: remove lock after voting/proposal,394619336,1023308,15986 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting/stake,1591123481,3543091,13448 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting/proposal,661258847,1757696,17326 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting by delegatee/stake,1597950376,3560247,13448 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting by delegatee/proposal,661258847,1757696,17326 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter/creator: retract votes while voting/stake,1685679776,3818509,13552 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter/creator: retract votes while voting/proposal,718277483,1923422,17425 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/creator: remove creator lock after voting/stake,1591086970,3552722,13443 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/creator: remove creator lock after voting/proposal,455059211,1168972,17322 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/Voter: remove lock after voting/stake,1592254459,3545495,13453 -Agora/Proposal/validator/unlocking/legal/with 9 stakes/Voter: remove lock after voting/proposal,464403704,1194154,17331 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting/stake,1968256285,4330995,14794 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting/proposal,772491747,2048210,18672 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting by delegatee/stake,1975083180,4348151,14794 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting by delegatee/proposal,772491747,2048210,18672 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter/creator: retract votes while voting/stake,2083825090,4667617,14921 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter/creator: retract votes while voting/proposal,842181191,2250764,18794 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/creator: remove creator lock after voting/stake,1967960332,4342232,14787 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/creator: remove creator lock after voting/proposal,522767025,1334222,18666 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/Voter: remove lock after voting/stake,1969387263,4333399,14799 -Agora/Proposal/validator/unlocking/legal/with 11 stakes/Voter: remove lock after voting/proposal,534188072,1365000,18677 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/retract votes while not voting/(negative test)/stake,278493336,704673,8067 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/retract votes while not voting/(negative test)/stake,279624314,707077,8067 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/retract votes while not voting/(negative test)/stake,280189803,708279,8067 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/remove creator too early/(negative test)/proposal,182531488,504366,11949 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/remove creator too early/(negative test)/proposal,190464307,523106,11949 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/remove creator too early/(negative test)/proposal,183662466,506770,11949 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/unlock an irrelevant stake/stake,288706362,739001,8089 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/creator: retract votes/stake,277406179,708304,8071 -Agora/Proposal/validator/unlocking/illegal/with 1 stakes/change output stake value/proposal,216327247,595640,11942 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/retract votes while not voting/(negative test)/stake,577039516,1366817,9412 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/retract votes while not voting/(negative test)/stake,578170494,1369221,9412 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/retract votes while not voting/(negative test)/stake,578735983,1370423,9412 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/remove creator too early/(negative test)/proposal,250239302,669616,13292 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/remove creator too early/(negative test)/proposal,258172121,688356,13292 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/remove creator too early/(negative test)/proposal,251370280,672020,13292 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/unlock an irrelevant stake/stake,591812624,1443817,9468 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/creator: retract votes/stake,557912075,1351726,9426 -Agora/Proposal/validator/unlocking/illegal/with 3 stakes/change output stake value/proposal,327560147,886154,13281 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/retract votes while not voting/(negative test)/stake,895232352,2060401,10758 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/retract votes while not voting/(negative test)/stake,896363330,2062805,10758 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/retract votes while not voting/(negative test)/stake,896928819,2064007,10758 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/remove creator too early/(negative test)/proposal,317947116,834866,14636 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/remove creator too early/(negative test)/proposal,325879935,853606,14636 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/remove creator too early/(negative test)/proposal,319078094,837270,14636 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/unlock an irrelevant stake/stake,894918886,2148633,10848 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/creator: retract votes/stake,838417971,1995148,10782 -Agora/Proposal/validator/unlocking/illegal/with 5 stakes/change output stake value/proposal,438793047,1176668,14621 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/retract votes while not voting/(negative test)/stake,1233071844,2785425,12103 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/retract votes while not voting/(negative test)/stake,1234202822,2787829,12103 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/retract votes while not voting/(negative test)/stake,1234768311,2789031,12103 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/remove creator too early/(negative test)/proposal,385654930,1000116,15979 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/remove creator too early/(negative test)/proposal,393587749,1018856,15979 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/remove creator too early/(negative test)/proposal,386785908,1002520,15979 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/unlock an irrelevant stake/stake,1198025148,2853449,12227 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/creator: retract votes/stake,1118923867,2638570,12137 -Agora/Proposal/validator/unlocking/illegal/with 7 stakes/change output stake value/proposal,550025947,1467182,15960 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/retract votes while not voting/(negative test)/stake,1590557992,3541889,13448 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/retract votes while not voting/(negative test)/stake,1591688970,3544293,13448 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/retract votes while not voting/(negative test)/stake,1592254459,3545495,13448 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/remove creator too early/(negative test)/proposal,453362744,1165366,17322 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/remove creator too early/(negative test)/proposal,461295563,1184106,17322 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/remove creator too early/(negative test)/proposal,454493722,1167770,17322 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/unlock an irrelevant stake/stake,1501131410,3558265,13607 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/creator: retract votes/stake,1399429763,3281992,13492 -Agora/Proposal/validator/unlocking/illegal/with 9 stakes/change output stake value/proposal,661258847,1757696,17299 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/retract votes while not voting/(negative test)/stake,1967690796,4329793,14794 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/retract votes while not voting/(negative test)/stake,1968821774,4332197,14794 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/retract votes while not voting/(negative test)/stake,1969387263,4333399,14794 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/remove creator too early/(negative test)/proposal,521070558,1330616,18666 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/remove creator too early/(negative test)/proposal,529003377,1349356,18666 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/remove creator too early/(negative test)/proposal,522201536,1333020,18666 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/unlock an irrelevant stake/stake,1804237672,4263081,14987 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/creator: retract votes/stake,1679935659,3925414,14849 -Agora/Proposal/validator/unlocking/illegal/with 11 stakes/change output stake value/proposal,772491747,2048210,18639 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting/stake,279486314,706477,8061 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting/proposal,216327247,595640,11929 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting by delegatee/stake,286313209,723633,8061 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter: retract votes while voting by delegatee/proposal,216327247,595640,11929 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter/creator: retract votes while voting/stake,289992569,737079,8077 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/voter/creator: retract votes while voting/proposal,222731651,614354,11940 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/creator: remove creator lock after voting/stake,280487571,709684,8064 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/creator: remove creator lock after voting/proposal,184158955,507672,11933 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/Voter: remove lock after voting/stake,280617292,708881,8066 +Agora/Proposal/validator/unlocking/legal/with 1 stakes/Voter: remove lock after voting/proposal,185197232,510470,11934 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting/stake,578170494,1369221,9406 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting/proposal,327836147,887354,13274 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting by delegatee/stake,584997389,1386377,9406 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter: retract votes while voting by delegatee/proposal,327836147,887354,13274 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter/creator: retract votes while voting/stake,609689259,1461027,9444 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/voter/creator: retract votes while voting/proposal,347049359,943496,13307 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/creator: remove creator lock after voting/stake,578912309,1374034,9407 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/creator: remove creator lock after voting/proposal,252004769,673522,13276 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/Voter: remove lock after voting/stake,579301472,1371625,9411 +Agora/Proposal/validator/unlocking/legal/with 3 stakes/Voter: remove lock after voting/proposal,255119600,681916,13279 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting/stake,896501330,2063405,10752 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting/proposal,439345047,1179068,14620 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting by delegatee/stake,903328225,2080561,10752 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter: retract votes while voting by delegatee/proposal,439345047,1179068,14620 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter/creator: retract votes while voting/stake,949032605,2216415,10812 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/voter/creator: retract votes while voting/proposal,471367067,1272638,14675 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/creator: remove creator lock after voting/stake,896983703,2069824,10751 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/creator: remove creator lock after voting/proposal,319850583,839372,14620 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/Voter: remove lock after voting/stake,897632308,2065809,10757 +Agora/Proposal/validator/unlocking/legal/with 5 stakes/Voter: remove lock after voting/proposal,325041968,853362,14625 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting/stake,1234478822,2789029,12097 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting/proposal,550853947,1470782,15965 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting by delegatee/stake,1241305717,2806185,12097 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter: retract votes while voting by delegatee/proposal,550853947,1470782,15965 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter/creator: retract votes while voting/stake,1308022607,3003243,12179 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/voter/creator: retract votes while voting/proposal,595684775,1601780,16042 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/creator: remove creator lock after voting/stake,1234701753,2797054,12094 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/creator: remove creator lock after voting/proposal,387696397,1005222,15963 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/Voter: remove lock after voting/stake,1235609800,2791433,12102 +Agora/Proposal/validator/unlocking/legal/with 7 stakes/Voter: remove lock after voting/proposal,394964336,1024808,15970 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting/stake,1592102970,3546093,13442 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting/proposal,662362847,1762496,17310 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting by delegatee/stake,1598929865,3563249,13442 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter: retract votes while voting by delegatee/proposal,662362847,1762496,17310 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter/creator: retract votes while voting/stake,1686659265,3821511,13546 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/voter/creator: retract votes while voting/proposal,720002483,1930922,17409 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/creator: remove creator lock after voting/stake,1592066459,3555724,13437 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/creator: remove creator lock after voting/proposal,455542211,1171072,17306 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/Voter: remove lock after voting/stake,1593233948,3548497,13447 +Agora/Proposal/validator/unlocking/legal/with 9 stakes/Voter: remove lock after voting/proposal,464886704,1196254,17315 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting/stake,1969373774,4334597,14788 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting/proposal,773871747,2054210,18656 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting by delegatee/stake,1976200669,4351753,14788 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter: retract votes while voting by delegatee/proposal,773871747,2054210,18656 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter/creator: retract votes while voting/stake,2084942579,4671219,14915 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/voter/creator: retract votes while voting/proposal,844320191,2260064,18778 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/creator: remove creator lock after voting/stake,1969077821,4345834,14781 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/creator: remove creator lock after voting/proposal,523388025,1336922,18650 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/Voter: remove lock after voting/stake,1970504752,4337001,14793 +Agora/Proposal/validator/unlocking/legal/with 11 stakes/Voter: remove lock after voting/proposal,534809072,1367700,18661 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/retract votes while not voting/(negative test)/stake,278920825,705275,8061 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/retract votes while not voting/(negative test)/stake,280051803,707679,8061 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/retract votes while not voting/(negative test)/stake,280617292,708881,8061 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/remove creator too early/(negative test)/proposal,182462488,504066,11933 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/remove creator too early/(negative test)/proposal,190395307,522806,11933 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/remove creator too early/(negative test)/proposal,183593466,506470,11933 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/unlock an irrelevant stake/stake,289133851,739603,8083 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/creator: retract votes/stake,277833668,708906,8065 +Agora/Proposal/validator/unlocking/illegal/with 1 stakes/change output stake value/proposal,216327247,595640,11926 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/retract votes while not voting/(negative test)/stake,577605005,1368019,9406 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/retract votes while not voting/(negative test)/stake,578735983,1370423,9406 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/retract votes while not voting/(negative test)/stake,579301472,1371625,9406 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/remove creator too early/(negative test)/proposal,250308302,669916,13276 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/remove creator too early/(negative test)/proposal,258241121,688656,13276 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/remove creator too early/(negative test)/proposal,251439280,672320,13276 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/unlock an irrelevant stake/stake,592378113,1445019,9462 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/creator: retract votes/stake,558477564,1352928,9420 +Agora/Proposal/validator/unlocking/illegal/with 3 stakes/change output stake value/proposal,327836147,887354,13265 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/retract votes while not voting/(negative test)/stake,895935841,2062203,10752 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/retract votes while not voting/(negative test)/stake,897066819,2064607,10752 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/retract votes while not voting/(negative test)/stake,897632308,2065809,10752 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/remove creator too early/(negative test)/proposal,318154116,835766,14620 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/remove creator too early/(negative test)/proposal,326086935,854506,14620 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/remove creator too early/(negative test)/proposal,319285094,838170,14620 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/unlock an irrelevant stake/stake,895622375,2150435,10842 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/creator: retract votes/stake,839121460,1996950,10776 +Agora/Proposal/validator/unlocking/illegal/with 5 stakes/change output stake value/proposal,439345047,1179068,14605 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/retract votes while not voting/(negative test)/stake,1233913333,2787827,12097 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/retract votes while not voting/(negative test)/stake,1235044311,2790231,12097 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/retract votes while not voting/(negative test)/stake,1235609800,2791433,12097 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/remove creator too early/(negative test)/proposal,385999930,1001616,15963 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/remove creator too early/(negative test)/proposal,393932749,1020356,15963 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/remove creator too early/(negative test)/proposal,387130908,1004020,15963 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/unlock an irrelevant stake/stake,1198866637,2855851,12221 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/creator: retract votes/stake,1119765356,2640972,12131 +Agora/Proposal/validator/unlocking/illegal/with 7 stakes/change output stake value/proposal,550853947,1470782,15944 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/retract votes while not voting/(negative test)/stake,1591537481,3544891,13442 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/retract votes while not voting/(negative test)/stake,1592668459,3547295,13442 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/retract votes while not voting/(negative test)/stake,1593233948,3548497,13442 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/remove creator too early/(negative test)/proposal,453845744,1167466,17306 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/remove creator too early/(negative test)/proposal,461778563,1186206,17306 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/remove creator too early/(negative test)/proposal,454976722,1169870,17306 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/unlock an irrelevant stake/stake,1502110899,3561267,13601 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/creator: retract votes/stake,1400409252,3284994,13486 +Agora/Proposal/validator/unlocking/illegal/with 9 stakes/change output stake value/proposal,662362847,1762496,17283 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/retract votes while not voting/(negative test)/stake,1968808285,4333395,14788 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/retract votes while not voting/(negative test)/stake,1969939263,4335799,14788 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/retract votes while not voting/(negative test)/stake,1970504752,4337001,14788 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/remove creator too early/(negative test)/proposal,521691558,1333316,18650 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/remove creator too early/(negative test)/proposal,529624377,1352056,18650 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/remove creator too early/(negative test)/proposal,522822536,1335720,18650 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/unlock an irrelevant stake/stake,1805355161,4266683,14981 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/creator: retract votes/stake,1681053148,3929016,14843 +Agora/Proposal/validator/unlocking/illegal/with 11 stakes/change output stake value/proposal,773871747,2054210,18623 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,26456223,75851,755 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,51581175,146321,855 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct even though scripts don't match,26456223,75851,754 @@ -482,4 +482,4 @@ Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,26456223,75851,75 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,51581175,146321,855 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct even though scripts don't match,26456223,75851,754 Agora/Governor/policy/totally legal,63319800,170930,2766 -Agora/Governor/validator/mutate/legal,129085947,358459,11468 +Agora/Governor/validator/mutate/legal,129016947,358159,11157 From e294db2847b627bb3afab729d87a9a7c9fa4d6de Mon Sep 17 00:00:00 2001 From: adamczykm Date: Fri, 11 Nov 2022 16:09:42 +0100 Subject: [PATCH 6/9] Add after review fixes. --- agora-specs/Property/Governor.hs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 9029b01..5493772 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -84,8 +84,8 @@ import Test.QuickCheck ( forAll, listOf1, ) -import Test.Tasty (TestTree, testGroup) -import Test.Tasty.QuickCheck (testProperty) +import Test.Tasty (TestTree, adjustOption, testGroup) +import Test.Tasty.QuickCheck (QuickCheckTests, testProperty) data GovernorDatumCases = ExecuteLE0 @@ -205,8 +205,8 @@ governorMintingPolicyTests = and checking if it runs as expected by a test. -} governorPolicyValid :: ScriptContext -> Bool -> Property -governorPolicyValid ctx shouldSuceed = - let mp = mkPolicyScript ctx in if shouldSuceed then shouldRun mp else shouldCrash mp +governorPolicyValid ctx shouldSucceed = + let mp = mkPolicyScript ctx in if shouldSucceed then shouldRun mp else shouldCrash mp {-# INLINEABLE mkPolicyScript #-} mkPolicyScript :: ScriptContext -> Script @@ -220,9 +220,7 @@ mkPolicyScript ctx = mustCompile (go # pconstant ctx) # pforgetData (pconstantData ()) # sc -{- | Prepares a minting policy test for given policy error case. - NOTE --} +-- | Prepares a minting policy test for given policy error case. mkGovMintingCasePropertyTest :: String -> GovernorPolicyCases -> @@ -288,9 +286,12 @@ mkGovMintingCasePropertyTest name case' positiveCaseName negativeCaseName = props :: [TestTree] props = - [ testProperty "governorDatumValid" governorDatumValidProperty + [ adjustOption go . testProperty "governorDatumValid" $ governorDatumValidProperty , testGroup "governorPolicy" governorMintingPolicyTests ] + where + go :: QuickCheckTests -> QuickCheckTests + go = min 2000 loudEval :: forall (p :: S -> Type). From af17e4699d0fa5c19c6bb88c9ea86c1d924071a1 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 11 Nov 2022 23:39:23 +0800 Subject: [PATCH 7/9] run linter --- agora-specs/Property/Governor.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 5493772..aba21b4 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -105,7 +105,7 @@ instance Arbitrary GovernorDatumCases where -} governorDatumValidProperty :: Property governorDatumValidProperty = - haskEquiv @( 'OnPEq) @( 'ByComplete) + haskEquiv @'OnPEq @'ByComplete isValidModelImpl (TestableTerm pisGovernorDatumValid) (genDatum :* Nil) From b0a4c678220a2a4fc8231af52ed18bb1e39299b6 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 12 Nov 2022 00:03:02 +0800 Subject: [PATCH 8/9] make QC run more tests --- agora-specs/Property/Governor.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index aba21b4..ed6dc40 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -291,7 +291,7 @@ props = ] where go :: QuickCheckTests -> QuickCheckTests - go = min 2000 + go = max 20_000 loudEval :: forall (p :: S -> Type). From 1680d0d21aff1405d6fa257a312203371e0e9e3a Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 12 Nov 2022 00:30:35 +0800 Subject: [PATCH 9/9] make fourmula happy --- agora-specs/Property/Governor.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index ed6dc40..5e5547c 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -1,3 +1,7 @@ +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} + +{-# HLINT ignore "Redundant bracket" #-} + {- | Module : Property.Governor Maintainer : seungheon.ooh@gmail.com @@ -105,7 +109,7 @@ instance Arbitrary GovernorDatumCases where -} governorDatumValidProperty :: Property governorDatumValidProperty = - haskEquiv @'OnPEq @'ByComplete + haskEquiv @( 'OnPEq) @( 'ByComplete) isValidModelImpl (TestableTerm pisGovernorDatumValid) (genDatum :* Nil)